Show only mission correct for student phase, add only one preference per week
This commit is contained in:
@@ -59,8 +59,8 @@ class FlightSlotStaffSite(AdminSite):
|
|||||||
|
|
||||||
# Register only user visible models
|
# Register only user visible models
|
||||||
flightslot_staff = FlightSlotUserSite(name="staff_site")
|
flightslot_staff = FlightSlotUserSite(name="staff_site")
|
||||||
flightslot_staff.register(Availability, AvailabilityAdmin)
|
|
||||||
flightslot_staff.register(MissionProfile, MissionProfileAdmin)
|
flightslot_staff.register(MissionProfile, MissionProfileAdmin)
|
||||||
|
flightslot_staff.register(Availability, AvailabilityAdmin)
|
||||||
flightslot_staff.register(Instructor, InstructorAdmin)
|
flightslot_staff.register(Instructor, InstructorAdmin)
|
||||||
|
|
||||||
# Get version for debug purposes
|
# Get version for debug purposes
|
||||||
@@ -75,5 +75,5 @@ admin.site.register(Course, CourseAdmin)
|
|||||||
admin.site.register(MissionProfile, MissionProfileAdmin)
|
admin.site.register(MissionProfile, MissionProfileAdmin)
|
||||||
admin.site.register(Student, StudentAdmin)
|
admin.site.register(Student, StudentAdmin)
|
||||||
admin.site.register(WeekPreference, WeekPreferenceAdmin)
|
admin.site.register(WeekPreference, WeekPreferenceAdmin)
|
||||||
admin.site.register(Instructor, InstructorAdmin)
|
#admin.site.register(Instructor, InstructorAdmin)
|
||||||
admin.site.register(Availability, AvailabilityAdmin)
|
#admin.site.register(Availability, AvailabilityAdmin)
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
import nested_admin
|
import nested_admin
|
||||||
from django import forms
|
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.forms import TextInput, Textarea
|
||||||
from django.http import HttpRequest
|
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 ..models.weekpref import WeekPreference
|
||||||
|
|
||||||
from ..custom.student_permissions import has_edit_permission
|
from ..custom.student_permissions import has_edit_permission
|
||||||
|
|
||||||
from datetime import date
|
|
||||||
|
|
||||||
class TrainingForm(forms.ModelForm):
|
class TrainingForm(forms.ModelForm):
|
||||||
model=Training
|
model=Training
|
||||||
|
|
||||||
@@ -23,10 +25,30 @@ class TrainingInLIne(nested_admin.NestedTabularInline):
|
|||||||
max_num = 7
|
max_num = 7
|
||||||
|
|
||||||
formfield_overrides = {
|
formfield_overrides = {
|
||||||
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
|
CharField: {'widget': TextInput(attrs={'size':'20'})},
|
||||||
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':35})},
|
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
|
# 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:
|
def has_change_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
||||||
return has_edit_permission(request=request, obj=obj)
|
return has_edit_permission(request=request, obj=obj)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from .training_adm import TrainingInLIne
|
|||||||
from .hourbuilding_adm import HourBuildingInLine
|
from .hourbuilding_adm import HourBuildingInLine
|
||||||
|
|
||||||
from ..custom.colortag import course_color
|
from ..custom.colortag import course_color
|
||||||
from ..custom.student_permissions import has_edit_permission
|
from ..custom.student_permissions import has_edit_permission, has_week_add_permission
|
||||||
from ..actions.exportweek import export_selected
|
from ..actions.exportweek import export_selected
|
||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
@@ -93,7 +93,7 @@ class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin):
|
|||||||
|
|
||||||
# If user is a student deny edit permission for week past the current one
|
# If user is a student deny edit permission for week past the current one
|
||||||
def has_add_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
def has_add_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
||||||
return not obj and self.has_change_permission(request, obj)
|
return has_week_add_permission(request=request) and has_edit_permission(request=request, obj=obj)
|
||||||
|
|
||||||
# If user is a student deny edit permission for week past the current one
|
# If user is a student deny edit permission for week past the current one
|
||||||
def has_delete_permission(self, request: HttpRequest, obj: WeekPreference | None = None)-> bool:
|
def has_delete_permission(self, request: HttpRequest, obj: WeekPreference | None = None)-> bool:
|
||||||
@@ -110,7 +110,7 @@ class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin):
|
|||||||
extra_context["show_delete"] = False
|
extra_context["show_delete"] = False
|
||||||
return super().changeform_view(request, object_id, form_url, extra_context)
|
return super().changeform_view(request, object_id, form_url, extra_context)
|
||||||
|
|
||||||
def save_model(self, request: HttpRequest, obj, form: Form, change: bool):
|
def save_model(self, request: HttpRequest, obj: WeekPreference, form: Form, change: bool):
|
||||||
# Imposta automaticamente lo studente se non è già valorizzato
|
# Imposta automaticamente lo studente se non è già valorizzato
|
||||||
if hasattr(request.user, "student") and not obj.student_id:
|
if hasattr(request.user, "student") and not obj.student_id:
|
||||||
obj.student = request.user.student
|
obj.student = request.user.student
|
||||||
|
|||||||
@@ -5,13 +5,17 @@ from ..models.weekpref import WeekPreference
|
|||||||
|
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
|
def has_week_add_permission(request: HttpRequest):
|
||||||
|
if hasattr(request.user, 'student'):
|
||||||
|
student: Student = request.user.student
|
||||||
|
current_week: int = date.today().isocalendar().week
|
||||||
|
return student.active and not WeekPreference.objects.filter(student_id=student.id, week=current_week).count()
|
||||||
|
return True
|
||||||
|
|
||||||
# allow add, modify, delete depending on a set of requirements
|
# allow add, modify, delete depending on a set of requirements
|
||||||
def has_edit_permission(request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
def has_edit_permission(request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
||||||
if hasattr(request.user, 'student'):
|
if hasattr(request.user, 'student'):
|
||||||
student: Student = request.user.student
|
|
||||||
if not student.active:
|
|
||||||
return False
|
|
||||||
current_week: int = date.today().isocalendar().week
|
current_week: int = date.today().isocalendar().week
|
||||||
if obj and (current_week > obj.week or not student.active):
|
if obj and current_week > obj.week:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|||||||
Reference in New Issue
Block a user