63 lines
2.8 KiB
Python
63 lines
2.8 KiB
Python
import nested_admin
|
|
from django import forms
|
|
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.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
|
|
|
|
class TrainingForm(forms.ModelForm):
|
|
model=Training
|
|
|
|
class TrainingInLIne(nested_admin.NestedTabularInline):
|
|
model = Training
|
|
form = TrainingForm
|
|
extra = 0
|
|
fk_name = 'weekpref'
|
|
verbose_name_plural = "Training Missions"
|
|
max_num = 7
|
|
|
|
formfield_overrides = {
|
|
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 CourseTypes.FI:
|
|
kwargs["queryset"] = MissionProfile.objects.filter(mtype=MissionTypes.FI).order_by("mnum")
|
|
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)
|
|
|
|
def has_delete_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
|
return self.has_change_permission(request=request, obj=obj)
|
|
|
|
def has_add_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
|
return self.has_change_permission(request=request, obj=obj)
|