126 lines
3.6 KiB
Python
126 lines
3.6 KiB
Python
import reversion
|
|
from imagekit.models import ImageSpecField, ProcessedImageField
|
|
from imagekit.processors import ResizeToFit, Transpose
|
|
|
|
from django.db import models
|
|
from django.utils import timezone
|
|
from django.conf import settings
|
|
from django_countries.fields import CountryField
|
|
|
|
from mamweb.models.base import SeminarModelBase
|
|
|
|
|
|
@reversion.register(ignore_duplicates=True)
|
|
class Osoba(SeminarModelBase):
|
|
|
|
class Meta:
|
|
db_table = 'seminar_osoby'
|
|
verbose_name = 'Osoba'
|
|
verbose_name_plural = 'Osoby'
|
|
ordering = ['prijmeni', 'jmeno']
|
|
|
|
id = models.AutoField(primary_key=True)
|
|
|
|
jmeno = models.CharField('jméno', max_length=256)
|
|
|
|
prijmeni = models.CharField('příjmení', max_length=256)
|
|
|
|
prezdivka = models.CharField(
|
|
'přezdívka', blank=True, null=True, max_length=256
|
|
)
|
|
|
|
# User, pokud má na webu účet
|
|
user = models.OneToOneField(
|
|
settings.AUTH_USER_MODEL, blank=True, null=True,
|
|
verbose_name='uživatel', on_delete=models.DO_NOTHING,
|
|
)
|
|
|
|
# Pohlaví. Že ho neznáme se snad nestane (a ušetří to práci při programování)
|
|
pohlavi_muz = models.BooleanField('pohlaví (muž)', default=False)
|
|
|
|
email = models.EmailField('e-mail', max_length=256, blank=True, default='')
|
|
|
|
telefon = models.CharField('telefon', max_length=256, blank=True, default='')
|
|
|
|
datum_narozeni = models.DateField('datum narození', blank=True, null=True)
|
|
|
|
# NULL dokud nedali souhlas
|
|
datum_souhlasu_udaje = models.DateField(
|
|
'datum souhlasu (údaje)', blank=True, null=True,
|
|
help_text='Datum souhlasu se zpracováním osobních údajů',
|
|
)
|
|
|
|
# NULL dokud nedali souhlas
|
|
datum_souhlasu_zasilani = models.DateField(
|
|
'datum souhlasu (spam)', blank=True, null=True,
|
|
help_text='Datum souhlasu se zasíláním MFF materiálů',
|
|
)
|
|
|
|
# Alespoň odhad (rok či i měsíc)
|
|
datum_registrace = models.DateField(
|
|
'datum registrace do semináře', default=timezone.now,
|
|
)
|
|
|
|
# Ulice může být i jen číslo
|
|
ulice = models.CharField('ulice', max_length=256, blank=True, default='')
|
|
|
|
mesto = models.CharField('město', max_length=256, blank=True, default='')
|
|
|
|
psc = models.CharField('PSČ', max_length=32, blank=True, default='')
|
|
|
|
# ISO 3166-1 dvojznakovy kod zeme velkym pismem (CZ, SK)
|
|
# Ekvivalentní s CharField(max_length=2, default='CZ', ...)
|
|
stat = CountryField(
|
|
'stát', default='CZ',
|
|
help_text='ISO 3166-1 kód země velkými písmeny (CZ, SK, ...)',
|
|
)
|
|
|
|
jak_se_dozvedeli = models.TextField('Jak se dozvěděli', blank=True)
|
|
|
|
poznamka = models.TextField(
|
|
'neveřejná poznámka', blank=True,
|
|
help_text='Neveřejná poznámka k osobě (plain text)',
|
|
)
|
|
|
|
foto = ProcessedImageField(
|
|
verbose_name='Fotografie osoby',
|
|
upload_to='image_osoby/velke/%Y/', null=True, blank=True,
|
|
help_text='Vlož fotografii osoby o libovolné velikosti',
|
|
processors=[
|
|
Transpose(Transpose.AUTO),
|
|
ResizeToFit(500, 500, upscale=False),
|
|
],
|
|
options={'quality': 95}
|
|
)
|
|
|
|
foto_male = ImageSpecField(
|
|
source='foto',
|
|
processors=[ResizeToFit(200, 200, upscale=False)],
|
|
options={'quality': 95},
|
|
)
|
|
|
|
# má OneToOneField nejvýše s:
|
|
# Resitel
|
|
# Prijemce
|
|
# Organizator
|
|
|
|
def plne_jmeno(self):
|
|
return '{} {}'.format(self.jmeno, self.prijmeni)
|
|
|
|
def inicial_krestni(self):
|
|
jmena = self.jmeno.split()
|
|
return " ".join(['{}.'.format(jmeno[0]) for jmeno in jmena])
|
|
|
|
def __str__(self):
|
|
return self.plne_jmeno()
|
|
|
|
# Overridujeme save Osoby, aby když si změní e-mail, aby se projevil i v
|
|
# Userovi (a tak se dal poslat mail s resetem hesla)
|
|
def save(self, *args, **kwargs):
|
|
if self.user is not None:
|
|
u = self.user
|
|
# U svatého tučňáka, prosím ať tohle funguje.
|
|
# (Takhle se kódit asi nemá...)
|
|
u.email = self.email
|
|
u.save()
|
|
super().save()
|