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} ) )