From c2a38ece60b41752aa7d9c79fb4b65e40b2dcd66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Havelka?= Date: Sun, 9 Oct 2022 12:42:11 +0200 Subject: [PATCH] =?UTF-8?q?Odstran=C4=9Bn=C3=AD=20deadlin=C5=AF=20zadr?= =?UTF-8?q?=C3=A1tovan=C3=BDch=20v=20=C4=8D=C3=ADsle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0105_odstraneni_deadlinu_cisla.py | 50 +++++++++++++++++++ seminar/models/tvorba.py | 22 -------- seminar/testutils.py | 2 +- 3 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 seminar/migrations/0105_odstraneni_deadlinu_cisla.py diff --git a/seminar/migrations/0105_odstraneni_deadlinu_cisla.py b/seminar/migrations/0105_odstraneni_deadlinu_cisla.py new file mode 100644 index 00000000..c3ab3541 --- /dev/null +++ b/seminar/migrations/0105_odstraneni_deadlinu_cisla.py @@ -0,0 +1,50 @@ +# Generated by Django 3.2.15 on 2022-10-09 10:14 + +from django.db import migrations +from seminar.models import Deadline + + +def vrat_deadliny(apps, schema_editor): + Cislo = apps.get_model('seminar', 'Cislo') + + for cislo in Cislo.objects.all(): + prvni_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_PRVNI).last() + sous_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_SOUS).last() + prvni_a_sous_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_PRVNI_A_SOUS).last() + posledni_deadline = cislo.deadline_v_cisle.filter(typ=Deadline.TYP_CISLA).last() + + if prvni_a_sous_deadline is not None: + cislo.datum_deadline_soustredeni = prvni_a_sous_deadline.deadline.date() + cislo.datum_preddeadline = prvni_a_sous_deadline.deadline.date() + else: + if sous_deadline is not None: + cislo.datum_deadline_soustredeni = sous_deadline.deadline.date() + if prvni_deadline is not None: + cislo.datum_preddeadline = prvni_deadline.deadline.date() + + if posledni_deadline: + cislo.datum_deadline = posledni_deadline.deadline.date() + + cislo.save() + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0104_hodnoceni_deadline_body'), + ] + + operations = [ + migrations.RunPython(migrations.RunPython.noop, vrat_deadliny), + migrations.RemoveField( + model_name='cislo', + name='datum_deadline', + ), + migrations.RemoveField( + model_name='cislo', + name='datum_deadline_soustredeni', + ), + migrations.RemoveField( + model_name='cislo', + name='datum_preddeadline', + ), + ] diff --git a/seminar/models/tvorba.py b/seminar/models/tvorba.py index 7575a649..1136fec5 100644 --- a/seminar/models/tvorba.py +++ b/seminar/models/tvorba.py @@ -157,17 +157,6 @@ class Cislo(SeminarModelBase): datum_vydani = models.DateField('datum vydání', blank=True, null=True, help_text='Datum vydání finální verze') - - datum_deadline_soustredeni = models.DateField( - 'datum deadline soustředění', - blank=True, null=True, - help_text='Datum pro příjem řešení pro účast na soustředění') - - datum_preddeadline = models.DateField('datum předdeadline', blank=True, null=True, - help_text='Datum pro příjem řešení, která se otisknou v dalším čísle') - - datum_deadline = models.DateField('datum deadline', blank=True, null=True, - help_text='Datum pro příjem řešení úloh zadaných v tomto čísle') verejne_db = models.BooleanField('číslo zveřejněno', db_column='verejne', default=False) @@ -317,17 +306,6 @@ class Cislo(SeminarModelBase): from seminar.models.treenode import CisloNode CisloNode.objects.create(cislo=self) - def clean(self): - # Finální deadline má být až poslední a je povinný, pokud nějaký deadline existuje. - # Existence: - if self.datum_deadline is None and (self.datum_preddeadline is not None or self.datum_deadline_soustredeni is not None): - raise ValidationError({'datum_deadline': "Číslo musí mít finální deadline, pokud má nějaké deadliny"}) - if self.datum_deadline is not None: - if self.datum_preddeadline is not None and self.datum_preddeadline > self.datum_deadline: - raise ValidationError({'datum_preddeadline': "Předdeadline musí předcházet finálnímu deadlinu"}) - if self.datum_deadline_soustredeni is not None and self.datum_deadline_soustredeni > self.datum_deadline: - raise ValidationError({'datum_deadline_soustredeni': "Soustřeďkový deadline musí předcházet finálnímu deadlinu"}) - def zlomovy_deadline_pro_papirove_cislo(self): prvni_deadline = Deadline.objects.filter(Q(typ=Deadline.TYP_PRVNI) | Q(typ=Deadline.TYP_PRVNI_A_SOUS), cislo=self).first() if prvni_deadline is None: diff --git a/seminar/testutils.py b/seminar/testutils.py index efeea49f..fe73875f 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -297,7 +297,7 @@ def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_c res_vyber.remove(resitele[0]) # Vytvoření řešení. - if uloha.cislo_zadani.datum_deadline is not None: + if uloha.cislo_zadani.zlomovy_deadline_pro_papirove_cislo() is not None: # combine, abychom dostali plný čas a ne jen datum cas_doruceni = datetime.datetime.combine(uloha.cislo_zadani.datum_deadline, datetime.datetime.min.time()) - datetime.timedelta(days=random.randint(0, 40)) - datetime.timedelta(minutes=random.randint(0, 60*24)) # astimezone, protože jinak vyhazuje warning o nenastavené TZ