diff --git a/seminar/templatetags/deadliny.py b/seminar/templatetags/deadliny.py index 18bfbf08..b7a0142d 100644 --- a/seminar/templatetags/deadliny.py +++ b/seminar/templatetags/deadliny.py @@ -1,14 +1,15 @@ from django import template +from django.utils.safestring import mark_safe from seminar.utils import TypDeadline, deadline register = template.Library() @register.filter(name='deadline') def deadline_text(datum): - typ, cislo, deadline = deadline(datum) + typ, cislo, dl = deadline(datum) strings = { - TypDeadline.PredDeadline: f"1. deadline čísla {cislo} ({deadline})", - TypDeadline.SousDeadline: f"Soustřeďkový deadline čísla {cislo} ({deadline})", - TypDeadline.FinalDeadline: f"Finální deadline čísla {cislo} ({deadline})", + TypDeadline.PredDeadline: f"1. deadline čísla {cislo} ({dl})", + TypDeadline.SousDeadline: f"Soustřeďkový deadline čísla {cislo} ({dl})", + TypDeadline.FinalDeadline: f"Finální deadline čísla {cislo} ({dl})", } return strings[typ] @@ -21,4 +22,4 @@ def deadline_html(datum): TypDeadline.SousDeadline: 'sous_deadline', TypDeadline.FinalDeadline: 'final_deadline', } - return f'{text}' + return mark_safe(f'{text}') diff --git a/seminar/utils.py b/seminar/utils.py index a41b4111..68bce110 100644 --- a/seminar/utils.py +++ b/seminar/utils.py @@ -309,7 +309,7 @@ def deadline_v_rocniku(datum, rocnik): deadliny.append((TypDeadline.FinalDeadline, c, c.datum_deadline)) deadliny = sorted(deadliny, key=lambda x: x[2]) # podle data for dl in deadliny: - if datum <= dl: + if datum <= dl[2]: # První takový deadline je ten nejtěsnější return dl @@ -319,20 +319,22 @@ def deadline(datum): Vrací trojici (TypDeadline, Cislo, datumDeadline: date). """ + if isinstance(datum, datetime.datetime): + datum = datum.date() rok = datum.year # Dva ročníky podezřelé z obsahování dat - pozdejsi_rocnik = m.Rocnik.filter(prvni_rok=rok) - drivejsi_rocnik = m.Rocnik.filter(druhy_rok=rok) - if any( + pozdejsi_rocnik = m.Rocnik.objects.filter(prvni_rok=rok) + drivejsi_rocnik = m.Rocnik.objects.filter(prvni_rok=rok-1) + if any([ pozdejsi_rocnik.count() > 1, drivejsi_rocnik.count() > 1, - ): + ]): raise ValueError(f"Více ročníků začíná/končí stejným rokem: {rok}") pozdejsi_rocnik = pozdejsi_rocnik.first() if pozdejsi_rocnik.count() > 0 else None drivejsi_rocnik = drivejsi_rocnik.first() if drivejsi_rocnik.count() > 0 else None # Předpokládáme, že neexistuje číslo, které má deadline ale nemá finální deadline. - posledni_deadline_drivejsiho_rocniku = m.Cislo.objects.get(rocnik=drivejsi_rocnik, datum_deadline__isnull=False).datum_deadline + posledni_deadline_drivejsiho_rocniku = m.Cislo.objects.filter(rocnik=drivejsi_rocnik, datum_deadline__isnull=False).last().datum_deadline if datum <= posledni_deadline_drivejsiho_rocniku: return deadline_v_rocniku(datum, drivejsi_rocnik)