from django.db import models from django.contrib import admin from django.db.models.functions import Now, ExtractWeek from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ # Create your models here. class StudentAdmin(admin.ModelAdmin): list_display = ("name", "surname", "email") list_filter = [] class Student(models.Model): id = models.AutoField( primary_key=True ) email = models.EmailField( null=False, db_index=True ) name = models.CharField( null=False, max_length=32 ) surname = models.CharField( null=False, max_length=32 ) class WeekPreference(models.Model): id = models.BigAutoField( primary_key=True ) week = models.PositiveSmallIntegerField( null=False, db_index=True, default=ExtractWeek(Now()) + 1, auto_created=True ) student = models.ForeignKey( Student, null=False, db_index=True, on_delete=models.DO_NOTHING ) class MissionType(models.TextChoices): OTHER = "OTHER", _("OTHER") PPL = "PPL", _("PPL") IR = "IR", _("IR") CPL = "CPL", _("CPL") FI = "FI", _("FI") PC = "PC", _("PC") CHK = "CHK", _("CHK_6M") class MissionProfile(models.Model): id = models.AutoField( primary_key=True ) mtype = models.CharField( null=False, default=MissionType.PPL, choices=MissionType ) mnum = models.PositiveSmallIntegerField( null=True, default=0 ) duration = models.DurationField( null=False, default=1 ) notes = models.TextField( max_length=140, null=True ) def __str__(self): return f"{self.mtype} {self.mnum}" class MissionProfileAdmin(admin.ModelAdmin): list_display = ("mtype", "mnum") class AircraftTypes(models.TextChoices): C152 = "C152", _("Cessna 152") P208 = "P208", _("Tecnam P2008") PA28 = "PA28", _("Piper PA28R") C182 = "C182", _("Cessna 182Q") P210 = "P210", _("Tecnam P2010") class HourBuilding(models.Model): id = models.BigAutoField( primary_key=True ) weekpref = models.ForeignKey( WeekPreference, null=False, on_delete=models.CASCADE ) aircraft = models.CharField( null=False, choices=AircraftTypes ) monday = models.BooleanField( default=True, null=False ) tuesday = models.BooleanField( default=True, null=False ) wednesday = models.BooleanField( default=True, null=False ) thursday = models.BooleanField( default=True, null=False ) saturday = models.BooleanField( default=True, null=False ) sunday = models.BooleanField( default=True, null=False ) notes = models.TextField( max_length=140, null=True ) class HourBuildingLeg(models.Model): id = models.BigAutoField( primary_key=True ) hb = models.ForeignKey( HourBuilding, on_delete=models.CASCADE ) departure = models.CharField( null=False, blank=False, default="LILV", max_length=4 ) destination = models.CharField( null=False, blank=False, default="LILV", max_length=4 ) time = models.DurationField( null=False, default=1 ) stop = models.BooleanField( default=False ) class Training(models.Model): id = models.BigAutoField( primary_key=True ) weekpref = models.ForeignKey( WeekPreference, null=False, on_delete=models.CASCADE ) mission = models.ForeignKey( MissionProfile, null=True, on_delete=models.CASCADE ) monday = models.BooleanField( default=True, null=False ) tuesday = models.BooleanField( default=True, null=False ) wednesday = models.BooleanField( default=True, null=False ) thursday = models.BooleanField( default=True, null=False ) saturday = models.BooleanField( default=True, null=False ) sunday = models.BooleanField( default=True, null=False ) notes = models.TextField( max_length=140, null=True )