Compare commits
1 commit
master
...
zpristupne
Author | SHA1 | Date | |
---|---|---|---|
291d4e2d56 |
13 changed files with 41 additions and 91 deletions
|
@ -95,7 +95,7 @@ function safe_checkout_branch {
|
|||
echo >&2 "Změna v $SCRIPT, prosím pullni manuálně"
|
||||
exit 1
|
||||
fi
|
||||
git checkout "$BRANCH" --
|
||||
git checkout "$BRANCH"
|
||||
git pull
|
||||
git clean -f
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Tento soubor slouží pouze pro shell a podobné. Nikde neimportovat v kódu!
|
||||
|
||||
print("Naimportoval jsi `mamweb.vsechno`. Pevně věřím, že to nebylo nikde v kódu. Díky.")
|
||||
print("Naimportoval jsi `seminar.models`. Pevně věřím, že to nebylo nikde v kódu. Díky.")
|
||||
|
||||
from galerie.models import *
|
||||
from header_fotky.models import *
|
||||
|
|
|
@ -322,26 +322,14 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
|
|||
**form.cleaned_data,
|
||||
)
|
||||
logger.info(f"Creating Hodnoceni: {hodnoceni}")
|
||||
# FIXME následující kód má velmi vysokou šanci se rozbít, vymyslet, jak to udělat jinak
|
||||
zmeny_bodu = [it for it in form.changed_data if it.startswith("body")]
|
||||
if len(zmeny_bodu) != 0:
|
||||
body_nastaveny: None | tuple[str, object] = None
|
||||
def nastav_body(jake, na_kolik):
|
||||
nonlocal body_nastaveny
|
||||
if body_nastaveny is not None:
|
||||
logger.warning(f"Hodnocení {hodnoceni} s id {hodnoceni.id} k řešení {reseni.id} mělo mít nastavené kromě {body_nastaveny[0]} na {body_nastaveny[1]} ještě další body: {jake} na {na_kolik}. Nastavuji -0.1.")
|
||||
hodnoceni.body = -0.1
|
||||
else:
|
||||
body_nastaveny = (jake, na_kolik)
|
||||
hodnoceni.__setattr__(jake, na_kolik)
|
||||
|
||||
for key, value in data_for_body.items():
|
||||
if key.startswith("body") and value is not None:
|
||||
nastav_body(key, value)
|
||||
|
||||
# Něco se změnilo, ale nic není nastavené = něco bylo smazáno
|
||||
if body_nastaveny is None:
|
||||
hodnoceni.body = None
|
||||
if len(zmeny_bodu) == 1:
|
||||
hodnoceni.__setattr__(zmeny_bodu[0], data_for_body[zmeny_bodu[0]])
|
||||
# > jedna změna je špatně, ale 4 "změny" znamenají že nebylo nic zadáno
|
||||
if len(zmeny_bodu) > 1 and len(zmeny_bodu) != 4 and len(zmeny_bodu) != 2:
|
||||
# 4 znamená vše už vyplněno a nic nezměněno, 2 znamená předvyplnili se součty a nic se nezměnilo
|
||||
logger.warning(f"Hodnocení {hodnoceni} mělo mít nastavené víc různých bodů: {zmeny_bodu}. Nastavuji -0.1.")
|
||||
hodnoceni.body = -0.1
|
||||
hodnoceni.save()
|
||||
|
||||
adresati = reseni.resitele.filter(upozornovat_na_opravy_reseni=True).values_list('osoba__email', flat=True)
|
||||
|
|
|
@ -26,9 +26,10 @@
|
|||
|
||||
.tres {
|
||||
flex: 1;
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
.grey {
|
||||
.half-opacity {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
{% for osoba in object_list %}
|
||||
<div class="osoba">
|
||||
<div class="uno">{{ osoba.jmeno }} {{ osoba.prijmeni }}</div>
|
||||
<div class="dos {% if not osoba.jak_se_dozvedeli %}grey{% endif %}">{% if osoba.jak_se_dozvedeli %} {{osoba.jak_se_dozvedeli}} {% else %} NEZADÁNO {% endif %}</div>
|
||||
<div class="dos {% if not osoba.jak_se_dozvedeli %}half-opacity{% endif %}">{% if osoba.jak_se_dozvedeli %} {{osoba.jak_se_dozvedeli}} {% else %} NEZADÁNO {% endif %}</div>
|
||||
<div class="tres">{{ osoba.datum_registrace }}</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
|
|
@ -30,8 +30,6 @@ Jak moc by ses chtěl(a) zúčastnit následujících přednášek?
|
|||
<INPUT TYPE="radio" NAME="q{{p.pk}}" VALUE="1" {% if h == 1 %} CHECKED="checked" {% endif %}> rozhodně chci
|
||||
</td></tr>
|
||||
<tr><td> </td></tr>
|
||||
{% empty %}
|
||||
Nejsou žádné přednášky o kterých by šlo hlasovat.
|
||||
{% endfor %}
|
||||
<tr><td><input name="odeslat" type="submit" value="Odeslat"></td><tr>
|
||||
</table>
|
||||
|
|
11
prednasky/templates/prednasky/hotovo.html
Normal file
11
prednasky/templates/prednasky/hotovo.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% extends 'base.html' %}
|
||||
|
||||
{% load humanize %}
|
||||
{% load static %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1> Děkujeme. </h1>
|
||||
|
||||
{% endblock %}
|
|
@ -1,5 +1,3 @@
|
|||
import http
|
||||
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
from django.views import generic
|
||||
from django.shortcuts import HttpResponseRedirect
|
||||
|
@ -7,22 +5,14 @@ from django.core.exceptions import ObjectDoesNotExist
|
|||
from django.db.models import Sum
|
||||
from django.forms import Form
|
||||
|
||||
from various.views.pomocne import formularOKView
|
||||
|
||||
from various.models import Nastaveni
|
||||
from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH
|
||||
from soustredeni.models import Soustredeni
|
||||
from personalni.models import Osoba
|
||||
|
||||
def newPrednaska(request):
|
||||
# hlasovani se vztahuje k nejnovejsimu soustredeni
|
||||
sous = Nastaveni.get_solo().aktualni_sous
|
||||
sous = Soustredeni.objects.first()
|
||||
seznam = Seznam.objects.filter(soustredeni = sous, stav = STAV_NAVRH).first()
|
||||
if sous is None or seznam is None:
|
||||
return render(request, 'universal.html', {
|
||||
'title': "Nelze hlasovat",
|
||||
'text': "Není žádný seznam přednášek, o kterém by se dalo hlasovat.",
|
||||
}, status=http.HTTPStatus.NOT_FOUND)
|
||||
osoba = Osoba.objects.filter(user=request.user).first()
|
||||
ucastnik = osoba.plne_jmeno() + ' ' + str(osoba.id)
|
||||
# obsluha formulare
|
||||
|
@ -64,7 +54,7 @@ def newPrednaska(request):
|
|||
|
||||
|
||||
def Prednaska_hotovo(request):
|
||||
return formularOKView(request, "Děkujeme za vyplnění hlasování o přednáškách a těšíme se na soustředění.")
|
||||
return render(request, 'prednasky/hotovo.html')
|
||||
|
||||
class MetaSeznamListView(generic.ListView):
|
||||
model = Seznam
|
||||
|
|
|
@ -17,7 +17,7 @@ django-solo # Singleton model (speciálně Nastavení)
|
|||
django-ckeditor-5 # Editor htmlka (hlavně v adminu u flatpages)
|
||||
django-cleanup # Uklízí media/ od smazaných „databázových“ souborů
|
||||
django-taggit # Taggy v djangu (speciálně zaměření problémů)
|
||||
django-autocomplete-light>=3.9.0,<3.12.0 # Automatické doplňování (problémů, účastníků, …) ve formulářích
|
||||
django-autocomplete-light>=3.9.0 # Automatické doplňování (problémů, účastníků, …) ve formulářích
|
||||
django-imagekit # Všechny možné obrázky v Djangu
|
||||
django-polymorphic # Polymorfismus na django modelech (hlavně Problém nebo treenode)
|
||||
django-sitetree # Struktura stránek, hlavně pro meníčko
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2025-01-21 20:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('personalni', '0019_rename_upozorneni_resitel_upozornovat_na_opravy_reseni'),
|
||||
('tvorba', '0007_alter_deadline_typ'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.SeparateDatabaseAndState(
|
||||
database_operations=[],
|
||||
state_operations=[
|
||||
migrations.AlterField(
|
||||
model_name='problem',
|
||||
name='opravovatele',
|
||||
field=models.ManyToManyField(blank=True, db_table='seminar_problemy_opravovatele', related_name='opravovatele_%(class)s', to='personalni.organizator', verbose_name='opravovatelé'),
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='Problemy_Opravovatele',
|
||||
),
|
||||
]
|
||||
),
|
||||
]
|
|
@ -393,6 +393,20 @@ class ZmrazenaVysledkovka(SeminarModelBase):
|
|||
|
||||
html = models.TextField(null=False, blank=False)
|
||||
|
||||
class Problemy_Opravovatele(SeminarModelBase):
|
||||
"""Jen vazebná tabulka pro opravovatele.
|
||||
|
||||
Ona stejně existovala, při přesunu mezi aplikacemi jen potřebujeme zajistit nepřejmenování DB tabulky.
|
||||
Proto taky nepotřebuje žádná specifika, ze :py:class:SeminarModelBase: dědí ze zvyku než že by to k něčemu kdy měo být.
|
||||
"""
|
||||
class Meta:
|
||||
db_table = 'seminar_problemy_opravovatele'
|
||||
|
||||
id = models.AutoField(primary_key = True)
|
||||
|
||||
problem = models.ForeignKey('Problem', on_delete=models.CASCADE)
|
||||
organizator = models.ForeignKey(Organizator, on_delete=models.CASCADE)
|
||||
|
||||
@reversion.register(ignore_duplicates=True)
|
||||
# Pozor na následující řádek. *Nekrmit, asi kouše!*
|
||||
class Problem(SeminarModelBase,PolymorphicModel):
|
||||
|
@ -448,7 +462,7 @@ class Problem(SeminarModelBase,PolymorphicModel):
|
|||
on_delete=models.SET_NULL)
|
||||
|
||||
opravovatele = models.ManyToManyField(Organizator, verbose_name='opravovatelé',
|
||||
blank=True, related_name='opravovatele_%(class)s', db_table='seminar_problemy_opravovatele')
|
||||
blank=True, related_name='opravovatele_%(class)s', through=Problemy_Opravovatele)
|
||||
|
||||
kod = models.CharField('lokální kód', max_length=32, blank=True, default='',
|
||||
help_text='Číslo/kód úlohy v čísle nebo kód tématu/článku/seriálu v ročníku')
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 4.2.16 on 2025-01-21 20:34
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('soustredeni', '0013_alter_soustredeni_kontaktnicek_pdf_and_more'),
|
||||
('various', '0006_tvorba_post'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='nastaveni',
|
||||
name='aktualni_sous',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='soustredeni.soustredeni', verbose_name='Aktuálně připravovaný sous'),
|
||||
),
|
||||
]
|
|
@ -26,11 +26,6 @@ class Nastaveni(SingletonModel):
|
|||
verbose_name="Účastnický poplatek za soustředění",
|
||||
default=1000)
|
||||
|
||||
aktualni_sous = models.ForeignKey(
|
||||
"soustredeni.Soustredeni", verbose_name='Aktuálně připravovaný sous',
|
||||
null=True, blank=True, on_delete=models.PROTECT,
|
||||
)
|
||||
|
||||
@property
|
||||
def aktualni_rocnik(self):
|
||||
return self.aktualni_cislo.rocnik
|
||||
|
|
Loading…
Reference in a new issue