Show only mission correct for student phase, add only one preference per week

This commit is contained in:
2025-12-04 14:51:52 +01:00
parent b8f4331d3b
commit cdf7e7c677
4 changed files with 42 additions and 16 deletions

View File

@@ -1,16 +1,18 @@
import nested_admin
from django import forms
from django.db import models
from django.db.models import CharField, TextField
from django.db.models.query_utils import Q
from django.db.models.fields.related import ForeignKey
from django.forms import TextInput, Textarea
from django.http import HttpRequest
from ..models.missions import Training
from ..models.courses import Course, CourseTypes
from ..models.students import Student
from ..models.missions import Training, MissionTypes, MissionProfile
from ..models.weekpref import WeekPreference
from ..custom.student_permissions import has_edit_permission
from datetime import date
class TrainingForm(forms.ModelForm):
model=Training
@@ -23,10 +25,30 @@ class TrainingInLIne(nested_admin.NestedTabularInline):
max_num = 7
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':35})},
CharField: {'widget': TextInput(attrs={'size':'20'})},
TextField: {'widget': Textarea(attrs={'rows':4, 'cols':35})},
}
def formfield_for_foreignkey(self, db_field: ForeignKey, request: HttpRequest, **kwargs):
# modify entries for "mission" field, show only types compatible with student course
if not hasattr(request.user, "student") or not hasattr(request.user.student, "course"):
return super().formfield_for_foreignkey(db_field, request, **kwargs)
course: Course = request.user.student.course
if db_field.name == "mission":
match course.ctype:
case CourseTypes.PPL:
kwargs["queryset"] = MissionProfile.objects.filter(mtype=MissionTypes.PPL)
case CourseTypes.ATPL:
q: Q = Q(mtype=MissionTypes.IR) | \
Q(mtype=MissionTypes.MEP) | \
Q(mtype=MissionTypes.MEP_IR) | \
Q(mtype=MissionTypes.CPL) | \
Q(mtype=MissionTypes.CHK)
kwargs["queryset"] = MissionProfile.objects.filter(q).order_by("id")
case _:
pass
return super().formfield_for_foreignkey(db_field, request, **kwargs)
# If user is a student deny edit permission for week past the current one
def has_change_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
return has_edit_permission(request=request, obj=obj)