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:
parent
c8b2d07605
commit
1dfeeaa9d1
6 changed files with 49 additions and 1 deletions
|
@ -1,7 +1,7 @@
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.views.generic import ListView, DetailView, FormView
|
from django.views.generic import ListView, DetailView, FormView
|
||||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
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.utils import timezone
|
||||||
from django.views.generic import ListView, DetailView, FormView, CreateView
|
from django.views.generic import ListView, DetailView, FormView, CreateView
|
||||||
from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin
|
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 poznamka_form.has_changed(): poznamka_form.save()
|
||||||
if hodnoceni_formset.has_changed(): hodnoceni_formset.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)
|
return redirect(success_url)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
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)
|
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):
|
# def clean_username(self):
|
||||||
# err_logger = logging.getLogger('seminar.prihlaska.problem')
|
# err_logger = logging.getLogger('seminar.prihlaska.problem')
|
||||||
# username = self.cleaned_data.get('username')
|
# username = self.cleaned_data.get('username')
|
||||||
|
|
|
@ -97,6 +97,15 @@
|
||||||
{% include "personalni/udaje/prihlaska_field.html" with field=form.spam %}
|
{% include "personalni/udaje/prihlaska_field.html" with field=form.spam %}
|
||||||
</table>
|
</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>
|
<hr>
|
||||||
|
|
||||||
<input type="submit" value="Změnit">
|
<input type="submit" value="Změnit">
|
||||||
|
|
|
@ -164,6 +164,7 @@ def resitelEditView(request):
|
||||||
resitel_edit.rok_maturity = fcd['rok_maturity']
|
resitel_edit.rok_maturity = fcd['rok_maturity']
|
||||||
resitel_edit.zasilat = fcd['zasilat']
|
resitel_edit.zasilat = fcd['zasilat']
|
||||||
resitel_edit.zasilat_cislo_emailem = fcd['zasilat_cislo_emailem']
|
resitel_edit.zasilat_cislo_emailem = fcd['zasilat_cislo_emailem']
|
||||||
|
resitel_edit.upozorneni = fcd['upozorneni']
|
||||||
if fcd.get('skola'):
|
if fcd.get('skola'):
|
||||||
resitel_edit.skola = fcd['skola']
|
resitel_edit.skola = fcd['skola']
|
||||||
else:
|
else:
|
||||||
|
|
18
seminar/migrations/0110_resitel_upozorneni.py
Normal file
18
seminar/migrations/0110_resitel_upozorneni.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
|
@ -237,6 +237,8 @@ class Resitel(SeminarModelBase):
|
||||||
poznamka = models.TextField('neveřejná poznámka', blank=True,
|
poznamka = models.TextField('neveřejná poznámka', blank=True,
|
||||||
help_text='Neveřejná poznámka k řešiteli (plain text)')
|
help_text='Neveřejná poznámka k řešiteli (plain text)')
|
||||||
|
|
||||||
|
upozorneni = models.BooleanField(default=True)
|
||||||
|
|
||||||
|
|
||||||
def export_row(self):
|
def export_row(self):
|
||||||
"Slovnik pro pouziti v AESOP exportu"
|
"Slovnik pro pouziti v AESOP exportu"
|
||||||
|
|
Loading…
Reference in a new issue