Browse Source

odevzdavatko: odesílání upozornění na změnu zpětné vazby

Dojde-li ke změně zpětné vazby u některého z hodnocení řešitelova
řešení, odešle se mu email s jejím obsahem. Toto chování si řešitel může
nastavit v nastavení osobních údajů. V Reply-To headeru emailu je
uvedena emailová adresa uživatele, jenž zpětnou vazbu změnil.
notifikace_zpetne_vazby
Karel Balej 1 year ago
parent
commit
1dfeeaa9d1
  1. 19
      odevzdavatko/views.py
  2. 1
      personalni/forms.py
  3. 9
      personalni/templates/personalni/udaje/edit.html
  4. 1
      personalni/views.py
  5. 18
      seminar/migrations/0110_resitel_upozorneni.py
  6. 2
      seminar/models/personalni.py

19
odevzdavatko/views.py

@ -1,7 +1,7 @@
from django.core.exceptions import PermissionDenied
from django.views.generic import ListView, DetailView, FormView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.mail import send_mail
from django.core.mail import send_mail, EmailMessage
from django.utils import timezone
from django.views.generic import ListView, DetailView, FormView, CreateView
from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin
@ -243,6 +243,23 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
if poznamka_form.has_changed(): poznamka_form.save()
if hodnoceni_formset.has_changed(): hodnoceni_formset.save()
zmeny = []
for hodnoceni_form in hodnoceni_formset:
if 'feedback' in hodnoceni_form.changed_data:
zmeny.append(hodnoceni_form.instance)
if zmeny:
adresati = reseni.resitele.filter(upozorneni=True).values_list('osoba__email', flat=True)
if adresati:
email = EmailMessage(
subject='Změna zpětné vazby k Tvému řešení',
body='\n\n'.join([f'{hodnoceni.problem}\n{hodnoceni.feedback}' for hodnoceni in zmeny]) + f'\n\nNechceš-li toto upozornění dostávat, můžeš jej vypnout v nastavení svého účtu.\n\nTvoji organizátoři M&M',
from_email='odevzdavatko@mam.mff.cuni.cz',
to=adresati,
reply_to=[request.user.email] or None,
)
email.send()
return redirect(success_url)

1
personalni/forms.py

@ -177,6 +177,7 @@ class ProfileEditForm(forms.Form):
zasilat_cislo_emailem = forms.BooleanField(label='Chci dostávat email s upozorněním na vydání nového čísla', required=False)
spam = forms.BooleanField(label='Souhlasím se zasíláním materiálů od MFF UK', required=False)
upozorneni = forms.BooleanField(label='Chci dostat email, když opravovatel přidá zpětnou vazbu k mému řešení', required=False)
# def clean_username(self):
# err_logger = logging.getLogger('seminar.prihlaska.problem')
# username = self.cleaned_data.get('username')

9
personalni/templates/personalni/udaje/edit.html

@ -97,6 +97,15 @@
{% include "personalni/udaje/prihlaska_field.html" with field=form.spam %}
</table>
<hr>
<h4>
Zasílání upozornění na zpětnou vazbu k řešení
</h4>
<table class="form">
{% include "personalni/udaje/prihlaska_field.html" with field=form.upozorneni %}
</table>
<hr>
<input type="submit" value="Změnit">

1
personalni/views.py

@ -164,6 +164,7 @@ def resitelEditView(request):
resitel_edit.rok_maturity = fcd['rok_maturity']
resitel_edit.zasilat = fcd['zasilat']
resitel_edit.zasilat_cislo_emailem = fcd['zasilat_cislo_emailem']
resitel_edit.upozorneni = fcd['upozorneni']
if fcd.get('skola'):
resitel_edit.skola = fcd['skola']
else:

18
seminar/migrations/0110_resitel_upozorneni.py

@ -0,0 +1,18 @@
# Generated by Django 3.2.16 on 2022-12-19 22:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('seminar', '0109_hodnoceni_feedback'),
]
operations = [
migrations.AddField(
model_name='resitel',
name='upozorneni',
field=models.BooleanField(default=True),
),
]

2
seminar/models/personalni.py

@ -237,6 +237,8 @@ class Resitel(SeminarModelBase):
poznamka = models.TextField('neveřejná poznámka', blank=True,
help_text='Neveřejná poznámka k řešiteli (plain text)')
upozorneni = models.BooleanField(default=True)
def export_row(self):
"Slovnik pro pouziti v AESOP exportu"

Loading…
Cancel
Save