diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py index 995b5840..5ab7c14d 100644 --- a/odevzdavatko/views.py +++ b/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) diff --git a/personalni/forms.py b/personalni/forms.py index ea200267..27329ee5 100644 --- a/personalni/forms.py +++ b/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') diff --git a/personalni/templates/personalni/udaje/edit.html b/personalni/templates/personalni/udaje/edit.html index 5ec690d9..7a10675b 100644 --- a/personalni/templates/personalni/udaje/edit.html +++ b/personalni/templates/personalni/udaje/edit.html @@ -97,6 +97,15 @@ {% include "personalni/udaje/prihlaska_field.html" with field=form.spam %} +
+ +

+ Zasílání upozornění na zpětnou vazbu k řešení +

+ + {% include "personalni/udaje/prihlaska_field.html" with field=form.upozorneni %} +
+
diff --git a/personalni/views.py b/personalni/views.py index 94b90dea..233ccdbc 100644 --- a/personalni/views.py +++ b/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: diff --git a/seminar/migrations/0110_resitel_upozorneni.py b/seminar/migrations/0110_resitel_upozorneni.py new file mode 100644 index 00000000..6803760e --- /dev/null +++ b/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), + ), + ] diff --git a/seminar/models/personalni.py b/seminar/models/personalni.py index 28deec4d..949c35f5 100644 --- a/seminar/models/personalni.py +++ b/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"