diff --git a/korektury/admin.py b/korektury/admin.py index a11ad1ad..61c06f1b 100644 --- a/korektury/admin.py +++ b/korektury/admin.py @@ -62,4 +62,10 @@ Korekturovátko ).send() admin.site.register(KorekturovanePDF, KorekturovanePDFAdmin) -admin.site.register(Oprava) + + +class OpravaAdmin(admin.ModelAdmin): + model = Oprava + filter_horizontal = ("informovani_orgove", ) + +admin.site.register(Oprava, OpravaAdmin) diff --git a/korektury/migrations/0026_oprava_informovani_orgove.py b/korektury/migrations/0026_oprava_informovani_orgove.py new file mode 100644 index 00000000..23da722f --- /dev/null +++ b/korektury/migrations/0026_oprava_informovani_orgove.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.16 on 2025-02-11 14:28 + +from django.db import migrations, models + +def pridani_orgu(apps, _schema_editor): + Komentar = apps.get_model('korektury','Komentar') + for komentar in Komentar.objects.all(): + org = komentar.autor + if org is not None: + # Tohle jde asi udělat lépe než .all(…). Ale nejhorší na tom je, že .add(…) funguje jinak tady v migracích. + if org not in komentar.oprava.informovani_orgove.all(): + komentar.oprava.informovani_orgove.add(org) + + +class Migration(migrations.Migration): + + dependencies = [ + ('personalni', '0019_rename_upozorneni_resitel_upozornovat_na_opravy_reseni'), + ('korektury', '0025_remove_oprava_autor_remove_oprava_text'), + ] + + operations = [ + migrations.AddField( + model_name='oprava', + name='informovani_orgove', + field=models.ManyToManyField(blank=True, default=None, help_text='Orgové informovaní při přidání komentáře ke korektuře', related_name='informovan_o_opravach', to='personalni.organizator', verbose_name='Informovaní organizátoři'), + ), + migrations.RunPython(pridani_orgu, migrations.RunPython.noop), + ] diff --git a/korektury/models.py b/korektury/models.py index 2f2480c1..c5de1a7b 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -157,6 +157,13 @@ class Oprava(models.Model): status = models.CharField(u'stav opravy',max_length=16, choices=STATUS.choices, blank=False, default = STATUS.K_OPRAVE) + informovani_orgove = models.ManyToManyField( + Organizator, blank=True, default=None, + verbose_name='Informovaní organizátoři', + help_text="Orgové informovaní při přidání komentáře ke korektuře", + related_name='informovan_o_opravach', + ) + @reversion.register(ignore_duplicates=True) class Komentar(models.Model): @@ -181,5 +188,7 @@ class Komentar(models.Model): def __str__(self): return '{} od {}: {}'.format(self.cas,self.autor,self.text) - - + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + if self.autor is not None: + self.oprava.informovani_orgove.add(self.autor) diff --git a/korektury/utils.py b/korektury/utils.py index e25947af..1306797b 100644 --- a/korektury/utils.py +++ b/korektury/utils.py @@ -29,8 +29,8 @@ def send_email_notification_komentar(oprava: Oprava, autor: Organizator, request emails = set() # nalezeni e-mailu na autory komentaru - for komentar in oprava.komentar_set.all(): - email_komentujiciho = komentar.autor.osoba.email + for org in oprava.informovani_orgove.all(): + email_komentujiciho = org.osoba.email if email_komentujiciho: emails.add(email_komentujiciho)