Web M&M
https://mam.matfyz.cz
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.
85 lines
2.9 KiB
85 lines
2.9 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():
|
|
if h.cislo_body is not None and h.cislo_body.rocnik.rocnik < -1:
|
|
# Deadline připravený v minulé migraci
|
|
h.deadline_body = h.cislo_body.deadline_v_cisle.get()
|
|
h.save()
|
|
continue
|
|
|
|
p = h.problem
|
|
|
|
if p.polymorphic_ctype.model == 'tema':
|
|
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()
|
|
|
|
if d is not None:
|
|
h.deadline_body = d
|
|
h.save()
|
|
continue
|
|
|
|
cislo = None
|
|
|
|
if p.polymorphic_ctype.model == 'uloha':
|
|
u = p.uloha
|
|
cislo = u.cislo_zadani
|
|
|
|
if p.polymorphic_ctype.model == 'clanek':
|
|
c = p.clanek
|
|
if c.cislo is not None:
|
|
cislo = c.cislo
|
|
|
|
if cislo is None:
|
|
cislo = h.cislo_body
|
|
|
|
if cislo is not None:
|
|
d = Deadline.objects.filter(cislo=cislo, deadline__gte=h.reseni.cas_doruceni).first()
|
|
if d is None:
|
|
d = Deadline.objects.filter(cislo=cislo).last()
|
|
if d is not None:
|
|
h.deadline_body = d
|
|
h.save()
|
|
continue
|
|
|
|
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()
|
|
|
|
# Zběžná kontrola. Předpokládá, že M&M má méně než 10 čísel v ročníku
|
|
# a že první znak pořadí je int určující dané pořadí (schroustání 7-8).
|
|
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),
|
|
]
|
|
|