diff --git a/make/lib.sh b/make/lib.sh index dd56ef73..2e92d6e7 100644 --- a/make/lib.sh +++ b/make/lib.sh @@ -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 } diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 255f48a9..1b626b3d 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -322,14 +322,26 @@ 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) == 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 + 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 hodnoceni.save() adresati = reseni.resitele.filter(upozornovat_na_opravy_reseni=True).values_list('osoba__email', flat=True) diff --git a/requirements.txt b/requirements.txt index 96aa4d7d..63a4b8be 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 # Automatické doplňování (problémů, účastníků, …) ve formulářích +django-autocomplete-light>=3.9.0,<3.12.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