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.
This commit is contained in:
Karel Balej 2022-12-20 11:43:31 +01:00
parent c8b2d07605
commit 1dfeeaa9d1
6 changed files with 49 additions and 1 deletions

View file

@ -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)

View file

@ -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')

View file

@ -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">

View file

@ -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:

View file

@ -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),
),
]

View file

@ -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"