Odstranění deadlinů zadrátovaných v čísle
This commit is contained in:
parent
9e05e0dc0f
commit
c2a38ece60
3 changed files with 51 additions and 23 deletions
50
seminar/migrations/0105_odstraneni_deadlinu_cisla.py
Normal file
50
seminar/migrations/0105_odstraneni_deadlinu_cisla.py
Normal file
|
@ -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',
|
||||||
|
),
|
||||||
|
]
|
|
@ -157,17 +157,6 @@ class Cislo(SeminarModelBase):
|
||||||
|
|
||||||
datum_vydani = models.DateField('datum vydání', blank=True, null=True,
|
datum_vydani = models.DateField('datum vydání', blank=True, null=True,
|
||||||
help_text='Datum vydání finální verze')
|
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',
|
verejne_db = models.BooleanField('číslo zveřejněno',
|
||||||
db_column='verejne', default=False)
|
db_column='verejne', default=False)
|
||||||
|
@ -317,17 +306,6 @@ class Cislo(SeminarModelBase):
|
||||||
from seminar.models.treenode import CisloNode
|
from seminar.models.treenode import CisloNode
|
||||||
CisloNode.objects.create(cislo=self)
|
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):
|
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()
|
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:
|
if prvni_deadline is None:
|
||||||
|
|
|
@ -297,7 +297,7 @@ def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_c
|
||||||
res_vyber.remove(resitele[0])
|
res_vyber.remove(resitele[0])
|
||||||
|
|
||||||
# Vytvoření řešení.
|
# 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
|
# 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))
|
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
|
# astimezone, protože jinak vyhazuje warning o nenastavené TZ
|
||||||
|
|
Loading…
Reference in a new issue