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
|
||||
flightslot_staff = FlightSlotUserSite(name="staff_site")
|
||||
flightslot_staff.register(Availability, AvailabilityAdmin)
|
||||
flightslot_staff.register(MissionProfile, MissionProfileAdmin)
|
||||
flightslot_staff.register(Availability, AvailabilityAdmin)
|
||||
flightslot_staff.register(Instructor, InstructorAdmin)
|
||||
|
||||
# Get version for debug purposes
|
||||
@@ -75,5 +75,5 @@ admin.site.register(Course, CourseAdmin)
|
||||
admin.site.register(MissionProfile, MissionProfileAdmin)
|
||||
admin.site.register(Student, StudentAdmin)
|
||||
admin.site.register(WeekPreference, WeekPreferenceAdmin)
|
||||
admin.site.register(Instructor, InstructorAdmin)
|
||||
admin.site.register(Availability, AvailabilityAdmin)
|
||||
#admin.site.register(Instructor, InstructorAdmin)
|
||||
#admin.site.register(Availability, AvailabilityAdmin)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -15,7 +15,7 @@ from .training_adm import TrainingInLIne
|
||||
from .hourbuilding_adm import HourBuildingInLine
|
||||
|
||||
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 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
|
||||
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
|
||||
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
|
||||
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
|
||||
if hasattr(request.user, "student") and not obj.student_id:
|
||||
obj.student = request.user.student
|
||||
|
||||
@@ -5,13 +5,17 @@ from ..models.weekpref import WeekPreference
|
||||
|
||||
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
|
||||
def has_edit_permission(request: HttpRequest, obj: WeekPreference | None = None) -> bool:
|
||||
if hasattr(request.user, 'student'):
|
||||
student: Student = request.user.student
|
||||
if not student.active:
|
||||
return False
|
||||
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 True
|
||||
|
||||
Reference in New Issue
Block a user