From 39da362586d99aeb08a86b280b0c215f0f654212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Mon, 2 Jan 2023 23:44:04 +0100 Subject: [PATCH] =?UTF-8?q?add:=20frontend=20k=20bod=C5=AFm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/static/css/mamweb.css | 5 +++ odevzdavatko/forms.py | 16 +++++++++ .../templates/odevzdavatko/detail.html | 35 ++++++++++++++++--- odevzdavatko/views.py | 23 ++++++++---- 4 files changed, 68 insertions(+), 11 deletions(-) diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index 63c5f527..3833ff92 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -1255,3 +1255,8 @@ div.gdpr { label[for=id_skola] { font-weight: bold; } + +/* detail řešení */ +.bodovani>input { + width: 4em; +} diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index a31122dd..8b71cff4 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -103,6 +103,22 @@ class JednoHodnoceniForm(forms.ModelForm): 'feedback': forms.Textarea(attrs={'rows': 1, 'cols': 30, 'class': 'feedback'}), } + body_celkem = forms.DecimalField(required=False, decimal_places=1) + body_neprepocitane = forms.DecimalField(required=False, decimal_places=1) + body_neprepocitane_celkem = forms.DecimalField(required=False, decimal_places=1) + + def __init__(self, *args, initial=None, **kwargs): + if initial is not None: + body_max = initial["body_max"] + body_neprepocitane_max = initial["body_neprepocitane_max"] + del(initial["body_max"]) + del(initial["body_neprepocitane_max"]) + super().__init__(*args, initial=initial, **kwargs) + if initial is not None: + self.fields['body_celkem'].widget.attrs['placeholder'] = body_max + self.fields['body_neprepocitane_celkem'].widget.attrs['placeholder'] = body_neprepocitane_max + + OhodnoceniReseniFormSet = formset_factory(JednoHodnoceniForm, extra = 0, ) diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html index 06f69609..c605b701 100644 --- a/odevzdavatko/templates/odevzdavatko/detail.html +++ b/odevzdavatko/templates/odevzdavatko/detail.html @@ -54,12 +54,15 @@ {{ form.management_form }} - + {% for subform in form %} - + + + + @@ -72,10 +75,15 @@ Přidat hodnocení
+{# FIXME Zablokovat ostatni při změně #} +
ProblémBodyDeadline pro bodyZpětná vazba pro řešitele
Problém{# 📖 #}🧍{# 🔵 #}🧍∑{# 💪 #}🧑‍🤝‍🧑{# ❤ #}🧑‍🤝‍🧑∑Deadline pro bodyZpětná vazba pro řešitele
{{ subform.problem }}{{ subform.body }}{{ subform.body }}{{ subform.body_celkem }}{{ subform.body_neprepocitane }}{{ subform.body_neprepocitane_celkem }} {{ subform.deadline_body }} {{ subform.feedback }} Smazat
- + + + + @@ -85,16 +93,33 @@ {% else %}

Hodnocení:

- + {% for h in hodnoceni %} - + + + + {% endfor %}
ProblémBodyZpětná vazba od opravovatele
Problém{# 📖 #}🧍{# 🔵 #}🧍∑{# 💪 #}🧑‍🤝‍🧑{# ❤ #}🧑‍🤝‍🧑∑Zpětná vazba od opravovatele
{{ h.problem }}{{ h.body }}{{ h.body }}{{ h.body_celkem }}{{ h.body_neprepocitane }}{{ h.body_neprepocitane_celkem }} {{ h.feedback }}
{% endif %} +
+
{# 📖 #}🧍
+
Body, které dostává jeden řešitel za toto řešení.
+ +
{# 🔵 #}🧍∑
+
Body, které dostává jeden řešitel za tento problém (součet za všechna řešení).
+ +
{# 💪 #}🧑‍🤝‍🧑
+
Body, které by dostal tým, kdyby to řešil jako jeden řešitel, za toto řešení.
+ +
{# ❤ #}🧑‍🤝‍🧑∑
+
Body, které by dostal tým, kdyby to řešil jako jeden řešitel, za tento problém (součet za všechna řešení).
+
+ {% endblock %} diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 0100ef24..d24e495a 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -224,12 +224,18 @@ class DetailReseniView(DetailView): self.reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk']) result = [] # Slovníky s klíči problem, body, deadline_body -- initial data pro f.OhodnoceniReseniFormSet for hodn in m.Hodnoceni.objects.filter(reseni=self.reseni): - result.append({ - "problem": hodn.problem, - "body": hodn.body, - "deadline_body": hodn.deadline_body, - "feedback": hodn.feedback, - }) + seznam_atributu = [ + "problem", + "body", + "body_celkem", + "body_neprepocitane", + "body_neprepocitane_celkem", + "body_max", + "body_neprepocitane_max", + "deadline_body", + "feedback", + ] + result.append({attr: getattr(hodn, attr) for attr in seznam_atributu}) return result def get_context_data(self, **kw): @@ -292,6 +298,11 @@ def hodnoceniReseniView(request, pk, *args, **kwargs): # Vyrobíme nová podle formsetu for form in formset: + data_for_hodnoceni = form.cleaned_data + data_for_body = data_for_hodnoceni.copy() + del(data_for_hodnoceni["body_celkem"]) + del(data_for_hodnoceni["body_neprepocitane"]) + del(data_for_hodnoceni["body_neprepocitane_celkem"]) hodnoceni = m.Hodnoceni( reseni=reseni, **form.cleaned_data,