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)