83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
import datetime
|
|
|
|
from django.utils import timezone
|
|
from django.db import models
|
|
from django.template.loader import render_to_string
|
|
|
|
from mamweb.models.base import SeminarModelBase
|
|
from .cislo import Cislo
|
|
|
|
|
|
class Deadline(SeminarModelBase):
|
|
class Meta:
|
|
db_table = 'seminar_deadliny'
|
|
verbose_name = 'Deadline'
|
|
verbose_name_plural = 'Deadliny'
|
|
ordering = ['deadline']
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.__original_verejna_vysledkovka = self.verejna_vysledkovka
|
|
|
|
id = models.AutoField(primary_key=True)
|
|
|
|
# V ročníku < 26 nastaveno na datetime.datetime.combine(datetime.date(1994 + cislo.rocnik.rocnik, 6, int(cislo.poradi[0])), datetime.time.min)
|
|
deadline = models.DateTimeField(
|
|
blank=False,
|
|
default=timezone.make_aware(
|
|
datetime.datetime.combine(timezone.now(), datetime.time.max),
|
|
),
|
|
)
|
|
|
|
cislo = models.ForeignKey(
|
|
Cislo, verbose_name='deadline v čísle',
|
|
related_name='deadline_v_cisle', blank=False,
|
|
on_delete=models.CASCADE,
|
|
)
|
|
|
|
TYP_CISLA = 'cisla'
|
|
TYP_PRVNI_A_SOUS = 'prvniasous'
|
|
TYP_PRVNI = 'prvni'
|
|
TYP_SOUS = 'sous'
|
|
TYP_CHOICES = [
|
|
(TYP_CISLA, 'Deadline celého čísla'),
|
|
(TYP_PRVNI, 'První deadline'),
|
|
(TYP_PRVNI_A_SOUS, 'Sousový a první deadline'),
|
|
(TYP_SOUS, 'Sousový deadline'),
|
|
]
|
|
CHOICES_MAP = dict(TYP_CHOICES)
|
|
typ = models.CharField(
|
|
'typ deadlinu', max_length=32,
|
|
choices=TYP_CHOICES, blank=False,
|
|
)
|
|
|
|
verejna_vysledkovka = models.BooleanField(
|
|
'veřejná výsledkovka', db_column='verejna_vysledkovka', default=False,
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.CHOICES_MAP[self.typ] + " " + str(self.cislo)
|
|
|
|
def save(self, *args, **kwargs):
|
|
super().save(*args, **kwargs)
|
|
if self.verejna_vysledkovka and not self.__original_verejna_vysledkovka:
|
|
self.vygeneruj_vysledkovku()
|
|
if not self.verejna_vysledkovka and hasattr(self, "vysledkovka_v_deadlinu"):
|
|
self.vysledkovka_v_deadlinu.delete()
|
|
|
|
def vygeneruj_vysledkovku(self):
|
|
from vysledkovky.utils import VysledkovkaCisla
|
|
if hasattr(self, "vysledkovka_v_deadlinu"):
|
|
self.vysledkovka_v_deadlinu.delete()
|
|
vysledkovka = VysledkovkaCisla(
|
|
self.cislo, jen_verejne=True, do_deadlinu=self,
|
|
)
|
|
if len(vysledkovka.radky_vysledkovky) != 0:
|
|
from vysledkovky.models.zmrazena_vysledkovka import ZmrazenaVysledkovka
|
|
ZmrazenaVysledkovka.objects.create(
|
|
deadline=self,
|
|
html=render_to_string(
|
|
"vysledkovky/vysledkovka_cisla.html",
|
|
context={"vysledkovka": vysledkovka, "oznaceni_vysledkovky": self.id}
|
|
)
|
|
)
|