You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.4 KiB

# Generated by Django 3.2.15 on 2022-10-01 09:28
from django.db import migrations, models
import django.db.models.deletion
from logging import getLogger
log = getLogger(__name__)
def prirad_deadliny(apps, schema_editor):
Hodnoceni = apps.get_model('seminar', 'Hodnoceni')
Deadline = apps.get_model('seminar', 'Deadline')
for h in Hodnoceni.objects.all():
p = h.problem
try:
u = p.uloha
if u.cislo_zadani is not None:
d = Deadline.objects.filter(cislo=u.cislo_zadani, deadline__gte=h.reseni.cas_doruceni).first()
h.deadline_body = d
h.save()
continue
except Exception:
pass
try:
c = p.clanek
if c.cislo is not None:
d = Deadline.objects.filter(cislo=c.cislo, deadline__gte=h.reseni.cas_doruceni).first()
h.deadline_body = d
h.save()
continue
except Exception:
pass
try:
t = p.tema
d = Deadline.objects.filter(cislo__rocnik=t.rocnik, deadline__gte=h.reseni.cas_doruceni).first()
if d is None:
d = Deadline.objects.filter(cislo__rocnik=t.rocnik).last()
h.deadline_body = d
h.save()
except Exception:
pass
log.warning(f"Deadline hodnocení {h.id} se nepodařil určit exaktnějším způsobem. Zkouším další.")
d = Deadline.objects.filter(deadline__gte=h.reseni.cas_doruceni).first()
h.deadline_body = d
h.save()
if h.cislo_body and (int(h.deadline_body.cislo.poradi[0]) + 2 < int(h.cislo_body.poradi[0]) or int(h.deadline_body.cislo.poradi[0]) > int(h.cislo_body.poradi[0])):
log.error(f"Hodnocení {h.id} se špatně změnilo číslo z {h.cislo_body} na {h.deadline_body.cislo}")
class Migration(migrations.Migration):
dependencies = [
('seminar', '0103_deadline'),
]
operations = [
migrations.AddField(
model_name='hodnoceni',
name='deadline_body',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='hodnoceni', to='seminar.deadline', verbose_name='deadline pro body'),
),
migrations.RunPython(prirad_deadliny, migrations.RunPython.noop),
]