From ca5e6728dd83525f80aa1af515d39ce133f050d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Tue, 28 Jan 2025 18:48:57 +0100 Subject: [PATCH] =?UTF-8?q?hotfix:=20Tohle=20by=20m=C4=9Blo=20opravit=20pr?= =?UTF-8?q?obl=C3=A9m=20s=20ukl=C3=A1d=C3=A1n=C3=ADm=20bod=C5=AF.=20Nejsem?= =?UTF-8?q?=20si=20t=C3=ADm=20ale=20moc=20jist=C3=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odevzdavatko/views.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) 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)