Pull seminar app from older iteration
This commit is contained in:
parent
492919e3a1
commit
1d45e97c1a
5 changed files with 261 additions and 0 deletions
0
seminar/__init__.py
Normal file
0
seminar/__init__.py
Normal file
27
seminar/admin.py
Normal file
27
seminar/admin.py
Normal file
|
@ -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)
|
228
seminar/models.py
Normal file
228
seminar/models.py
Normal file
|
@ -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)
|
||||
#
|
||||
#
|
||||
#
|
3
seminar/tests.py
Normal file
3
seminar/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
seminar/views.py
Normal file
3
seminar/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
Loading…
Reference in a new issue