diff --git a/mamweb/static/css/mamweb.css b/mamweb/static/css/mamweb.css index fa5de880..de02a2bd 100644 --- a/mamweb/static/css/mamweb.css +++ b/mamweb/static/css/mamweb.css @@ -417,7 +417,7 @@ input[type="file"] { display: block; } -input { +input, textarea { margin: 5px; } diff --git a/odevzdavatko/forms.py b/odevzdavatko/forms.py index 6eb2a973..856de419 100644 --- a/odevzdavatko/forms.py +++ b/odevzdavatko/forms.py @@ -88,11 +88,12 @@ ReseniSPrilohamiFormSet = inlineformset_factory(m.Reseni,m.PrilohaReseni, class JednoHodnoceniForm(forms.ModelForm): class Meta: model = m.Hodnoceni - fields = ('problem', 'body', 'deadline_body') + fields = ('problem', 'body', 'deadline_body', 'feedback',) widgets = { 'problem': autocomplete.ModelSelect2( url='autocomplete_problem_odevzdatelny', # FIXME: Dovolit i starší? - ) + ), + 'feedback': forms.Textarea(attrs={'rows': 1, 'cols': 30}), } OhodnoceniReseniFormSet = formset_factory(JednoHodnoceniForm, diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html index 10f86a14..9f6d31ac 100644 --- a/odevzdavatko/templates/odevzdavatko/detail.html +++ b/odevzdavatko/templates/odevzdavatko/detail.html @@ -91,7 +91,7 @@ $(document).ready(function(){ <form method=post onsubmit="return zkontroluj_hodnoceni();"> {# Poznámka #} -<h3>Poznámka:</h3> +<h3>Neveřejná poznámka:</h3> <p>{{ poznamka_form.poznamka }}</p> {# Hodnocení: #} @@ -101,13 +101,14 @@ $(document).ready(function(){ {{ form.management_form }} </table> <table id="form_set"> -<tr><th>Problém</th><th>Body</th><th>Deadline pro body</th></tr> +<tr><th>Problém</th><th>Body</th><th>Deadline pro body</th><th>Zpětná vazba pro řešitele</th></tr> {% for subform in form %} <tbody> <tr class="hodnoceni"> <td>{{ subform.problem }}</td> <td>{{ subform.body }}</td> <td>{{ subform.deadline_body }}</td> + <td>{{ subform.feedback }}</td> <td><a href="#" class="smazat_hodnoceni" id="id_{{subform.prefix}}-jsremove"><img src="{% static "odevzdavatko/cross.png" %}" alt="Smazat"></a></td> </tr> </tbody> @@ -123,6 +124,7 @@ $(document).ready(function(){ <td>{{ form.empty_form.problem }}</td> <td>{{ form.empty_form.body }}</td> <td>{{ form.empty_form.deadline_body }}</td> + <td>{{ form.empty_form.feedback }}</td> <td><a href="#" class="smazat_hodnoceni" id="id_{{form.empty_form.prefix}}-jsremove"><img src="{% static "odevzdavatko/cross.png" %}" alt="Smazat"></a></td> </tr> </table> diff --git a/odevzdavatko/templates/odevzdavatko/detail_resitele.html b/odevzdavatko/templates/odevzdavatko/detail_resitele.html index 1c7622a7..fb0cb5fb 100644 --- a/odevzdavatko/templates/odevzdavatko/detail_resitele.html +++ b/odevzdavatko/templates/odevzdavatko/detail_resitele.html @@ -37,11 +37,12 @@ {# Hodnocení: #} <h3>Hodnocení:</h3> <table id="form_set" class="dosla_reseni"> -<tr><th>Problém</th><th>Body</th>{# <th>Deadline pro body</th> #}</tr> +<tr><th>Problém</th><th>Body</th><th>Zpětná vazba od opravovatele</th>{# <th>Deadline pro body</th> #}</tr> {% for h in hodnoceni %} <tr class="hodnoceni"> <td>{{ h.problem }}</td> <td>{{ h.body }}</td> + <td>{{ h.feedback }}</td> {# <td>{{ h.deadline_body }}</td>#} </tr> {% endfor %} diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 6e0f7c47..ae466b0d 100644 --- a/odevzdavatko/views.py +++ b/odevzdavatko/views.py @@ -218,10 +218,11 @@ 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, + result.append({ + "problem": hodn.problem, "body": hodn.body, "deadline_body": hodn.deadline_body, + "feedback": hodn.feedback, }) return result @@ -261,10 +262,12 @@ def hodnoceniReseniView(request, pk, *args, **kwargs): problem = form.cleaned_data['problem'] body = form.cleaned_data['body'] deadline_body = form.cleaned_data['deadline_body'] + feedback = form.cleaned_data['feedback'] hodnoceni = m.Hodnoceni( problem=problem, body=body, deadline_body=deadline_body, + feedback=feedback, reseni=reseni, ) logger.info(f"Creating Hodnoceni: {hodnoceni}") @@ -285,6 +288,7 @@ class ResitelReseniView(DetailView): { "problem": hodn.problem, "body": hodn.body, + "feedback": hodn.feedback, # "deadline_body": hodn.deadline_body, } ) diff --git a/seminar/migrations/0108_hodnoceni_feedback.py b/seminar/migrations/0108_hodnoceni_feedback.py new file mode 100644 index 00000000..282849d8 --- /dev/null +++ b/seminar/migrations/0108_hodnoceni_feedback.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2022-11-14 19:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0107_zmrazenavysledkovka'), + ] + + operations = [ + migrations.AddField( + model_name='hodnoceni', + name='feedback', + field=models.TextField(blank=True, default='', help_text='Zpětná vazba řešiteli (plain text)', verbose_name='zpětná vazba'), + ), + ] diff --git a/seminar/models/odevzdavatko.py b/seminar/models/odevzdavatko.py index 77ed5018..9ae161c5 100644 --- a/seminar/models/odevzdavatko.py +++ b/seminar/models/odevzdavatko.py @@ -113,6 +113,8 @@ class Hodnoceni(bm.SeminarModelBase): problem = models.ForeignKey(am.Problem, verbose_name='problém', related_name='hodnoceni', on_delete=models.PROTECT) + feedback = models.TextField('zpětná vazba', blank=True, default='', help_text='Zpětná vazba řešiteli (plain text)') + def __str__(self): return "{}, {}, {}".format(self.problem, self.reseni, self.body)