feat: add types for model fields
This commit is contained in:
@@ -1,12 +1,17 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from app.base.forms.fields import CurrencyField
|
from app.base.forms.fields import CurrencyField
|
||||||
from app.base.models.person import Person
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from decimal import Decimal
|
||||||
|
from app.base.models.person import Person
|
||||||
|
|
||||||
|
|
||||||
class Account(models.Model):
|
class Account(models.Model):
|
||||||
user = models.OneToOneField(Person, on_delete=models.CASCADE)
|
user: 'models.OneToOneField[Person]' = models.OneToOneField(
|
||||||
balance = CurrencyField('Guthaben')
|
'Person', on_delete=models.CASCADE)
|
||||||
|
balance: 'models.DecimalField[Decimal]' = CurrencyField('Guthaben')
|
||||||
locked = models.BooleanField('Gesperrt', default=False)
|
locked = models.BooleanField('Gesperrt', default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -6,13 +6,11 @@ from django.urls import reverse
|
|||||||
from app.base.forms.fields import DateTimeField, TextField
|
from app.base.forms.fields import DateTimeField, TextField
|
||||||
from app.base.forms.utils import datetime_now
|
from app.base.forms.utils import datetime_now
|
||||||
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from django.db.models import OuterRef
|
from django.db.models import OuterRef
|
||||||
from app.base.models.person import Person
|
from app.base.models import Person, BookingType
|
||||||
from app.base.models.booking_type import BookingType
|
from datetime import datetime, timedelta # noqa F401
|
||||||
from datetime import timedelta # noqa F401
|
|
||||||
|
|
||||||
|
|
||||||
class Booking(models.Model):
|
class Booking(models.Model):
|
||||||
@@ -20,9 +18,12 @@ class Booking(models.Model):
|
|||||||
'BookingType', on_delete=models.PROTECT, verbose_name='Art')
|
'BookingType', on_delete=models.PROTECT, verbose_name='Art')
|
||||||
user: 'models.ForeignKey[Person]' = models.ForeignKey(
|
user: 'models.ForeignKey[Person]' = models.ForeignKey(
|
||||||
'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in')
|
'Person', on_delete=models.CASCADE, verbose_name='Nutzer:in')
|
||||||
begin_time = DateTimeField('Beginn', default=datetime_now)
|
begin_time: 'models.DateTimeField[datetime]' = DateTimeField(
|
||||||
end_time = DateTimeField('Ende', blank=True, null=True)
|
'Beginn', default=datetime_now)
|
||||||
comment = TextField('Kommentar', blank=True)
|
end_time: 'models.DateTimeField[datetime|None]' = DateTimeField(
|
||||||
|
'Ende', blank=True, null=True)
|
||||||
|
comment: 'models.TextField[str]' = TextField(
|
||||||
|
'Kommentar', blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Buchung'
|
verbose_name = 'Buchung'
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from typing import Iterable
|
|||||||
class BookingType(models.Model):
|
class BookingType(models.Model):
|
||||||
key = models.CharField('UUID', primary_key=True, max_length=20)
|
key = models.CharField('UUID', primary_key=True, max_length=20)
|
||||||
label = models.CharField('Bezeichnung', max_length=200)
|
label = models.CharField('Bezeichnung', max_length=200)
|
||||||
price = CurrencyField('Preis (€)')
|
price: 'models.DecimalField[Decimal]' = CurrencyField('Preis (€)')
|
||||||
interval = models.IntegerField('Intervall (Min)', default=60)
|
interval = models.IntegerField('Intervall (Min)', default=60)
|
||||||
is_checkin = models.BooleanField('Ist Eincheck-Option', default=False)
|
is_checkin = models.BooleanField('Ist Eincheck-Option', default=False)
|
||||||
|
|
||||||
|
|||||||
@@ -2,14 +2,20 @@ from django.db import models
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
from app.base.forms.fields import TextField
|
from app.base.forms.fields import TextField
|
||||||
from app.base.models.course_visit import CourseVisit
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from app.base.models import CourseVisit
|
||||||
|
|
||||||
|
|
||||||
class Course(models.Model):
|
class Course(models.Model):
|
||||||
instructed: models.QuerySet[CourseVisit]
|
|
||||||
title = models.CharField('Titel', max_length=280)
|
title = models.CharField('Titel', max_length=280)
|
||||||
mandatory = models.BooleanField('Braucht jeder?', default=False)
|
mandatory = models.BooleanField('Braucht jeder?', default=False)
|
||||||
description = TextField('Beschreibung', blank=True)
|
description: 'models.TextField[str]' = TextField(
|
||||||
|
'Beschreibung', blank=True)
|
||||||
|
|
||||||
|
# related_name
|
||||||
|
instructed: 'models.QuerySet[CourseVisit]'
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Einweisung'
|
verbose_name = 'Einweisung'
|
||||||
|
|||||||
@@ -6,22 +6,22 @@ from app.base.forms.fields import DateField
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from app.base.models.course import Course
|
from app.base.models import Course, Person
|
||||||
from app.base.models.person import Person
|
|
||||||
|
|
||||||
|
|
||||||
class CourseVisit(models.Model):
|
class CourseVisit(models.Model):
|
||||||
course: 'models.ForeignKey[Course]' = models.ForeignKey(
|
course: 'models.ForeignKey[Course]' = models.ForeignKey(
|
||||||
'Course', on_delete=models.CASCADE,
|
'Course', on_delete=models.CASCADE, related_name='visits',
|
||||||
related_name='visits', verbose_name='Einweisung')
|
verbose_name='Einweisung')
|
||||||
participant: 'models.ForeignKey[Person]' = models.ForeignKey(
|
participant: 'models.ForeignKey[Person]' = models.ForeignKey(
|
||||||
'Person', on_delete=models.CASCADE,
|
'Person', on_delete=models.CASCADE, related_name='courses',
|
||||||
related_name='courses', verbose_name='Wer wurde eingewiesen?')
|
verbose_name='Wer wurde eingewiesen?')
|
||||||
teacher: 'models.ForeignKey[Person]|models.ForeignKey[None]' =\
|
teacher: 'models.ForeignKey[Person]|models.ForeignKey[None]' =\
|
||||||
models.ForeignKey(
|
models.ForeignKey(
|
||||||
'Person', on_delete=models.SET_NULL, blank=True, null=True,
|
'Person', on_delete=models.SET_NULL, blank=True, null=True,
|
||||||
related_name='instructed', verbose_name='Durchgeführt von')
|
related_name='instructed', verbose_name='Durchgeführt von')
|
||||||
date = DateField('Datum', default=date.today)
|
date: 'models.DateField[date]' = DateField(
|
||||||
|
'Datum', default=date.today)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Teilnahme'
|
verbose_name = 'Teilnahme'
|
||||||
|
|||||||
@@ -2,10 +2,15 @@ from django.db import models
|
|||||||
|
|
||||||
from app.base.forms.fields import TextField
|
from app.base.forms.fields import TextField
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from app.base.models import Person
|
||||||
|
|
||||||
|
|
||||||
class Note(models.Model):
|
class Note(models.Model):
|
||||||
user = models.OneToOneField('Person', on_delete=models.CASCADE)
|
user: 'models.OneToOneField[Person]' = models.OneToOneField(
|
||||||
text = TextField('Notiz', blank=True)
|
'Person', on_delete=models.CASCADE)
|
||||||
|
text: 'models.TextField[str]' = TextField('Notiz', blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Notiz'
|
verbose_name = 'Notiz'
|
||||||
|
|||||||
@@ -17,15 +17,16 @@ class Person(models.Model):
|
|||||||
|
|
||||||
first_name = models.CharField('Vorname', max_length=200)
|
first_name = models.CharField('Vorname', max_length=200)
|
||||||
last_name = models.CharField('Nachname', max_length=200)
|
last_name = models.CharField('Nachname', max_length=200)
|
||||||
email = models.EmailField('Email', blank=True, null=True)
|
birth_date: 'models.DateField[date]' = DateField('Geburtsdatum')
|
||||||
phone = models.CharField('Telefon', max_length=200, blank=True, null=True)
|
|
||||||
birth_date = DateField('Geburtsdatum')
|
|
||||||
zip_code = models.CharField('PLZ', max_length=10)
|
|
||||||
city = models.CharField('Stadt', max_length=200)
|
|
||||||
street = models.CharField('Straße', max_length=200)
|
street = models.CharField('Straße', max_length=200)
|
||||||
house_nr = models.CharField('Hausnummer', max_length=10)
|
house_nr = models.CharField('Hausnummer', max_length=10)
|
||||||
|
zip_code = models.CharField('PLZ', max_length=10)
|
||||||
|
city = models.CharField('Stadt', max_length=200)
|
||||||
|
email = models.EmailField('Email', blank=True, null=True)
|
||||||
|
phone = models.CharField('Telefon', max_length=200, blank=True, null=True)
|
||||||
|
|
||||||
identified = models.BooleanField('Ausweis vorgezeigt', default=False)
|
identified = models.BooleanField(
|
||||||
|
'Ausweis vorgezeigt', default=False)
|
||||||
agreed_to_terms_of_service = models.BooleanField(
|
agreed_to_terms_of_service = models.BooleanField(
|
||||||
'Nutzungsbedingungen zugestimmt', default=False)
|
'Nutzungsbedingungen zugestimmt', default=False)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ from app.base.forms.fields import TextField
|
|||||||
class Trait(models.Model):
|
class Trait(models.Model):
|
||||||
key = models.CharField('UUID', primary_key=True, max_length=20)
|
key = models.CharField('UUID', primary_key=True, max_length=20)
|
||||||
label = models.CharField('Label', max_length=200)
|
label = models.CharField('Label', max_length=200)
|
||||||
description = TextField('Beschreibung', blank=True)
|
description: 'models.TextField[str]' = TextField(
|
||||||
|
'Beschreibung', blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Attribut'
|
verbose_name = 'Attribut'
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ from app.base.forms.fields import DateField
|
|||||||
from datetime import date
|
from datetime import date
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from app.base.models.person import Person
|
from app.base.models import Person, Trait
|
||||||
from app.base.models.trait import Trait
|
|
||||||
|
|
||||||
|
|
||||||
class TraitMapping(models.Model):
|
class TraitMapping(models.Model):
|
||||||
@@ -16,8 +15,10 @@ class TraitMapping(models.Model):
|
|||||||
verbose_name='Werkstattnutzer:in')
|
verbose_name='Werkstattnutzer:in')
|
||||||
trait: 'models.ForeignKey[Trait]' = models.ForeignKey(
|
trait: 'models.ForeignKey[Trait]' = models.ForeignKey(
|
||||||
'Trait', on_delete=models.CASCADE, verbose_name='Attribut')
|
'Trait', on_delete=models.CASCADE, verbose_name='Attribut')
|
||||||
valid_from = DateField('Gültig von', default=date.today)
|
valid_from: 'models.DateField[date]' = DateField(
|
||||||
valid_until = DateField('Gültig bis', blank=True, null=True)
|
'Gültig von', default=date.today)
|
||||||
|
valid_until: 'models.DateField[date|None]' = DateField(
|
||||||
|
'Gültig bis', blank=True, null=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Attributzuweisung'
|
verbose_name = 'Attributzuweisung'
|
||||||
|
|||||||
@@ -3,18 +3,27 @@ from django.urls import reverse
|
|||||||
|
|
||||||
from app.base.forms.fields import CurrencyField, DateTimeField
|
from app.base.forms.fields import CurrencyField, DateTimeField
|
||||||
from app.base.forms.utils import datetime_now
|
from app.base.forms.utils import datetime_now
|
||||||
from app.base.models.account import Account
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from datetime import datetime
|
||||||
|
from decimal import Decimal
|
||||||
|
from app.base.models import Account, Booking
|
||||||
|
|
||||||
|
|
||||||
class Transaction(models.Model):
|
class Transaction(models.Model):
|
||||||
account = models.ForeignKey(Account, on_delete=models.CASCADE,
|
account: 'models.ForeignKey[Account]' = models.ForeignKey(
|
||||||
verbose_name='Konto')
|
'Account', on_delete=models.CASCADE, verbose_name='Konto')
|
||||||
amount = CurrencyField('Betrag')
|
amount: 'models.DecimalField[Decimal]' = CurrencyField(
|
||||||
booking = models.OneToOneField('Booking', on_delete=models.CASCADE,
|
'Betrag')
|
||||||
verbose_name='Zugehörige Zeitbuchung',
|
booking: 'models.OneToOneField[Booking]|models.OneToOneField[None]' = \
|
||||||
null=True, blank=True, default=None)
|
models.OneToOneField('Booking', on_delete=models.CASCADE,
|
||||||
description = models.CharField('Beschreibung', max_length=500)
|
verbose_name='Zugehörige Zeitbuchung',
|
||||||
time_stamp = DateTimeField('Datum / Uhrzeit', editable=False)
|
blank=True, null=True, default=None)
|
||||||
|
description = models.CharField(
|
||||||
|
'Beschreibung', max_length=500)
|
||||||
|
time_stamp: 'models.DateTimeField[datetime]' = DateTimeField(
|
||||||
|
'Datum / Uhrzeit', editable=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'Transaktion'
|
verbose_name = 'Transaktion'
|
||||||
|
|||||||
Reference in New Issue
Block a user