from django.db import models from django.contrib import admin from django.db.models.functions import Now, ExtractWeek, ExtractYear from django.utils.translation import gettext_lazy as _ # Create your models here. class CourseTypes(models.TextChoices): PPL = "PPL", _("PPL") ATPL = "ATPL", _("ATPL") class Course(models.Model): id = models.AutoField( primary_key=True ) ctype = models.CharField( null=False, choices=CourseTypes ) cnumber = models.PositiveSmallIntegerField( null=False, default=ExtractYear(Now()) ) year = models.PositiveSmallIntegerField( editable=False, db_default=ExtractYear(Now()) ) def __str__(self): return f"{self.ctype}-{self.cnumber}" 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 ) course = models.ForeignKey( Course, on_delete=models.DO_NOTHING, null=True ) active = models.BooleanField( null=False, default=True ) def __str__(self): return f"{self.surname} {self.name[0]}. => {self.course}" 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, verbose_name="Week Number" ) student = models.ForeignKey( Student, null=False, db_index=True, on_delete=models.DO_NOTHING, verbose_name="Student Selection" ) def __str__(self): return f"Week {self.week} - {self.student.surname} {self.student.name[0]}." 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, verbose_name="Mission Type" ) mnum = models.PositiveSmallIntegerField( null=True, default=0, verbose_name="Mission Number" ) duration = models.DurationField( null=False, default=1 ) notes = models.TextField( max_length=140, null=True, blank=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 ) friday = 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, blank=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 ) def __str__(self): if self.stop: return "Refuelling Stop" else: return f"Flight Leg: {self.departure} -> {self.destination}" 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 ) friday = 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, blank=True ) def __str__(self): return f"{self.mission}"