from django.db import models from django.utils import timezone from personalni.models import Resitel class Sifrovacka(models.Model): class Meta: verbose_name = 'Šifrovačka' verbose_name_plural = 'Šifrovačky' ordering = ['aktivni', 'jmeno'] jmeno = models.CharField("Jméno seznamu", max_length=255, blank=False, null=False) aktivni = models.BooleanField("Lze odevzdávat šifry z tohoto seznamu?", default=True, blank=False, null=False) oznameni_spatne = models.TextField("Oznámení při špatné odpovědi", default="

Bohužel vám hvězdy nebyly nakloněny. Rozumějte máte to blbě.

", blank=False, null=False) def __str__(self): return f"{'☢' if self.aktivni else '🗑'} {self.jmeno}" class Sifra(models.Model): """ Reprezentuje jednu šifru, která: - má :py:class:`Tajenku/y ` - má :py:class:`Nápovědu/y ` - může být v :py:class:`SeznamechŠifer ` - a lze ji řešit: :py:class:`OdpověďÚčastníka ` :py:class:`NapovezenoUcastnikovi ` """ class Meta: verbose_name = 'Šifra' verbose_name_plural = 'Šifry' ordering = ['sifrovacka', 'cislo', 'nazev'] sifrovacka = models.ForeignKey(Sifrovacka, related_name="sifry", on_delete=models.CASCADE, blank=False, null=False) cislo = models.IntegerField("Číslo šifry", blank=True, null=True) nazev = models.CharField("Název šifry", max_length=255, blank=True, null=True) preskocitelna = models.BooleanField(default=False, blank=False, null=False) skryty_text = models.TextField("Text zobrazený při přeskočení (pokud prázdný, pak se zobrazují skryté texty všech tajenek k této šifře)", blank=True, null=True) def __str__(self): return f"{self.cislo}. {self.nazev}" def clean(self): if self.cislo is None and self.nazev is None: raise models.exceptions.ValidationError() class Tajenka(models.Model): class Meta: verbose_name = 'Tajenka' verbose_name_plural = 'Tajenky' ordering = ['sifra'] sifra = models.ForeignKey(Sifra, related_name="tajenky", on_delete=models.CASCADE, blank=False, null=False) tajenka = models.TextField("Tajenka bez diakritiky", blank=False, null=False) skryty_text = models.TextField("Text zobrazený po zadání tajenky", blank=False, null=False) def __str__(self): return f"{self.sifra}: {self.tajenka}" class Napoveda(models.Model): class Meta: verbose_name = 'Nápověda' verbose_name_plural = 'Nápovědy' ordering = ["sifra", "uroven"] sifra = models.ForeignKey(Sifra, related_name="napovedy", on_delete=models.CASCADE, blank=False, null=False) text = models.TextField("Text nápovědy (zobrazený, když si účastník vezme nápovědu)", blank=False, null=False) uroven = models.IntegerField("Úroveň jak moc (nebo který krok) nápověda napoví, nejvýše jedna nápověda dané úrovně k dané šifře!", default=1, blank=False, null=False) def __str__(self): return f"{self.sifra} ({self.uroven}): {self.text}" class OdpovedUcastnika(models.Model): class Meta: verbose_name = 'Odpověď účastníka' verbose_name_plural = 'Odpovědi účastníků' ordering = ["-timestamp"] sifra = models.ForeignKey(Sifra, related_name="odpovedi", on_delete=models.CASCADE, blank=False, null=False) timestamp = models.DateTimeField("Timestamp", default=timezone.now, blank=False, null=False) odpoved = models.TextField("Tajenka bez diakritiky", blank=False, null=False,) uspech = models.BooleanField("Zda byla odpověď správná", default=False, blank=False, null=False) resitel = models.ForeignKey(Resitel, blank=False, null=False, on_delete=models.CASCADE) def __str__(self): return f"{self.timestamp}: {'✓' if self.uspech else '❌'} {self.resitel} praví {self.odpoved} na {self.sifra}" class NapovezenoUcastnikovi(models.Model): class Meta: verbose_name = 'Napovězeno účastníkovi' verbose_name_plural = 'Napovězeno účastníkům' ordering = ["-timestamp"] napoveda = models.ForeignKey(Napoveda, related_name="napovezeno", on_delete=models.CASCADE, blank=False, null=False) resitel = models.ForeignKey(Resitel, blank=False, null=False, on_delete=models.CASCADE) timestamp = models.DateTimeField("Timestamp", blank=False, null=False, default=timezone.now) def __str__(self): return f"{self.timestamp}: {self.resitel} bere {self.napoveda}"