diff --git a/seminar/__init__.py b/seminar/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/seminar/admin.py b/seminar/admin.py new file mode 100644 index 00000000..7c27c481 --- /dev/null +++ b/seminar/admin.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from django.contrib import admin +from seminar.models import Skola, Resitel + + +class SkolaAdmin(admin.ModelAdmin): + fieldsets = [ + (None, {'fields': ['nazev', 'kratky_nazev']}), + (u'Interní ID', {'fields': ['aesop_id', 'izo'], 'classes': ['collapse']}), + (u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}), + ] + list_display = ['nazev', 'aesop_id', 'mesto'] + +admin.site.register(Skola, SkolaAdmin) + + +class ResitelAdmin(admin.ModelAdmin): + fieldsets = [ + (None, {'fields': ['jmeno', 'prijmeni', 'user']}), + (u'Škola', {'fields': ['skola', 'rok_maturity']}), + (u'Seminář', {'fields': ['datum_souhlasu_udaje', 'datum_souhlasu_zasilani', 'datum_prihlaseni', 'zasilat']}), + (u'Osobní údaje', {'fields': ['pohlavi_muz', 'datum_narozeni', 'email', 'telefon']}), + (u'Adresa', {'fields': ['ulice', 'mesto', 'psc', 'stat']}), + ] + list_display = ['jmeno', 'prijmeni', 'pohlavi_muz', 'skola', 'rok_maturity'] + +admin.site.register(Resitel, ResitelAdmin) diff --git a/seminar/models.py b/seminar/models.py new file mode 100644 index 00000000..7016fee2 --- /dev/null +++ b/seminar/models.py @@ -0,0 +1,228 @@ +# -*- coding: utf-8 -*- +from django.db import models +from django.contrib import auth +from django.utils import timezone +from django.conf import settings + +# +# Mělo by být částečně vytaženo z Aesopa +# viz https://ovvp.mff.cuni.cz/wiki/aesop/export-skol. +# + +class Skola(models.Model): + + class Meta: + db_table = 'seminar_skoly' + verbose_name = u'Škola' + verbose_name_plural = u'Školy' + + # Interní ID + id = models.AutoField(primary_key = True) + + # Aesopi ID "izo:..." nebo "aesop:..." + # NULL znamená v exportu do aesopa "ufo" + aesop_id = models.CharField(u'Aesop ID', max_length=32, blank=True, default='', + help_text=u'Aesopi ID typu "izo:..." nebo "aesop:..."') + + # IZO školy (jen české školy) + izo = models.CharField(u'IZO', max_length=32, blank=True, + help_text=u'IZO školy (jen české školy)') + + # Celý název školy + nazev = models.CharField(u'název', max_length=256, + help_text=u'Celý název školy') + + # Zkraceny nazev pro zobrazení ve výsledkovce, volitelné. + # Není v Aesopovi, musíme vytvářet sami. + kratky_nazev = models.CharField(u'zkrácený název', max_length=256, blank=True, + help_text="Zkrácený název pro zobrazení ve výsledkovce") + + # Ulice může být jen číslo + ulice = models.CharField(u'ulice', max_length=256) + + mesto = models.CharField(u'město', max_length=256) + + psc = models.CharField(u'PSČ', max_length=32) + + # ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK) + stat = models.CharField(u'kód státu', max_length=2, default='CZ', + help_text=u'ISO 3166-1 kód zeme velkými písmeny (CZ, SK, ...)') + + def __unicode__(self): + return u'%s, %s' % (self.nazev, self.mesto) + + +class Resitel(models.Model): + + class Meta: + db_table = 'seminar_resitele' + verbose_name = u'Řešitel' + verbose_name_plural = u'Řešitelé' + ordering = ['prijmeni', 'jmeno'] + + # Interní ID + id = models.AutoField(primary_key = True) + + jmeno = models.CharField(u'jméno', max_length=256) + + prijmeni = models.CharField(u'příjmení', max_length=256) + + # User, pokud má na webu účet + user = models.OneToOneField(settings.AUTH_USER_MODEL, blank=True, null=True, verbose_name=u'uživatel') + + # Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování) + pohlavi_muz = models.BooleanField(u'pohlaví (muž)', default=False) + + skola = models.OneToOneField(Skola, blank=True, null=True, verbose_name=u'škola') + + # Očekávaný rok maturity a vyřazení z aktivních řešitelů + rok_maturity = models.IntegerField(u'rok maturity') + + email = models.EmailField(u'e-mail', max_length=256, blank=True, default='') + + telefon = models.CharField(u'telefon', max_length=256, blank=True, default='') + + datum_narozeni = models.DateField(u'datum narození', blank=True, null=True) + + # NULL dokud nedali souhlas + datum_souhlasu_udaje = models.DateField(u'datum souhlasu (údaje)', blank=True, null=True, + help_text=u'Datum souhlasu se zpracováním osobních údajů') + + # NULL dokud nedali souhlas + datum_souhlasu_zasilani = models.DateField(u'datum souhlasu (spam)', blank=True, null=True, + help_text=u'Datum souhlasu se zasíláním MFF materiálů') + + # Alespoň odhad (rok či i měsíc) + datum_prihlaseni = models.DateField(u'datum přihlášení', default=timezone.now) + + ZASILAT_DOMU = 'domu' + ZASILAT_DO_SKOLY = 'do_skoly' + ZASILAT_NIKAM = 'nikam' + ZASILAT_CHOICES = [ + (ZASILAT_DOMU, u'Domů'), + (ZASILAT_DO_SKOLY, u'Do školy'), + (ZASILAT_NIKAM, u'Nikam'), + ] + zasilat = models.CharField(u'kam zasílat', max_length=32, choices=ZASILAT_CHOICES, blank=False, default=ZASILAT_DOMU) + + # Ulice může být i jen číslo + ulice = models.CharField(u'ulice', max_length=256, blank=True, default='') + + mesto = models.CharField(u'město', max_length=256, blank=True, default='') + + psc = models.CharField(u'PSČ', max_length=32, blank=True, default='') + + # ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK) + stat = models.CharField(u'kód státu', max_length=2, + help_text=u'ISO 3166-1 kód zeme velkými písmeny (CZ, SK, ...)', default='CZ') + + def __unicode__(self): + return u'%s %s' % (self.jmeno, self.prijmeni) + + +class Rocnik(models.Model): + + class Meta: + db_table = 'seminar_rocniky' + verbose_name = u'Ročník' + verbose_name_plural = u'Ročníky' + ordering = ['rocnik'] + + # Interní ID + id = models.AutoField(primary_key = True) + + rocnik = models.IntegerField(u'číslo ročníku') + + +class Cislo(models.Model): + + class Meta: + db_table = 'seminar_cisla' + verbose_name = u'Číslo' + verbose_name_plural = u'Čísla' + ordering = ['rocnik__rocnik', 'cislo'] + + # Interní ID + id = models.AutoField(primary_key = True) + + rocnik = models.ForeignKey(Rocnik, verbose_name=u'ročník') + + cislo = models.CharField(u'název čísla', max_length=32, + help_text=u'Většinou jen "1", vyjímečně "7-8"') + + datum_vydani = models.DateField(u'datum vydání', blank=True, null=True, + help_text=u'Datum vydání finální verze') + + datum_deadline = models.DateField(u'datum deadline', blank=True, null=True, + help_text=u'Datum pro příjem řešení úloh zadaných v tomto čísle') + + def kod(self): + return u'%s.%s' % (self.rocnik.rocnik, self.cislo) + + +class Problem(models.Model): + + class Meta: + db_table = 'seminar_problemy' + verbose_name = u'Problém' + verbose_name_plural = u'Problémy' + + # Interní ID + id = models.AutoField(primary_key = True) + + nazev = models.CharField(u'název', max_length=256) + + TYP_ULOHA = 'uloha' + TYP_TEMA = 'tema' + TYP_SERIAL = 'serial' + TYP_ORG_CLANEK = 'org-clanek' + TYP_RES_CLANEK = 'res-clanek' + TYP_CHOICES = [ + (TYP_ULOHA, u'Úloha'), + (TYP_TEMA, u'Téma'), + (TYP_SERIAL, u'Seriál'), + (TYP_ORG_CLANEK, u'Organizátorský článek'), + (TYP_RES_CLANEK, u'Řesitelský článek'), + ] + typ = models.CharField(u'typ problému', max_length=32, choices=TYP_CHOICES, blank=False, default=TYP_ULOHA) + + STAV_NAVRH = 'navrh' + STAV_ZADANY = 'zadany' + STAV_SMAZANY = 'smazany' + STAV_CHOICES = [ + (STAV_NAVRH, u'Návrh'), + (STAV_ZADANY, u'Zadaný'), + (STAV_SMAZANY, u'Smazaný'), + ] + stav = models.CharField(u'stav problému', max_length=32, choices=STAV_CHOICES, blank=False, default=STAV_NAVRH) + + text_org = None + + text_verejny = None + + zadavatel + + opravovatel + + kod = models.CharField(u'lokální kód', max_length=32, blank=True, default='', + help_text=u'Číslo/kód úlohy v čísle nebo kód tématu/článku/seriálu v ročníku') + + cislo_zadani = models.ForeignKey(Cislo, verbose_name=u'číslo zadání', blank=True, null=True) + + cislo_reseni = models.ForeignKey(Cislo, verbose_name=u'číslo řešení', blank=True, null=True, + help_text=u'Číslo s řešením úlohy. Jen pri ') +# +# +# class Reseni(models.Model): +# +# class Meta: +# db_table = 'seminar_reseni' +# verbose_name = u'Řešení' +# verbose_name_plural = u'Řešení' +# ordering = ['rocnik__rocnik', 'cislo'] +# +# # Interní ID +# id = models.AutoField(primary_key = True) +# +# +# diff --git a/seminar/tests.py b/seminar/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/seminar/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/seminar/views.py b/seminar/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/seminar/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.