diff --git a/cntmanage/flightslot/admins/hourbuilding_adm.py b/cntmanage/flightslot/admins/hourbuilding_adm.py index 08de6f6..921fbfd 100644 --- a/cntmanage/flightslot/admins/hourbuilding_adm.py +++ b/cntmanage/flightslot/admins/hourbuilding_adm.py @@ -11,6 +11,8 @@ from ..models.hourbuildings import HourBuilding, HourBuildingLegBase, HourBuildi from ..models.weekpref import WeekPreference from ..models.students import Student +from ..custom.student_permissions import has_edit_permission + from datetime import date class HourBuildingLegFlightForm(forms.ModelForm): @@ -75,12 +77,7 @@ class HourBuildingInLine(nested_admin.NestedTabularInline): # 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: - if hasattr(request.user, 'student') and obj: - student: Student = request.user.student - current_week: int = date.today().isocalendar().week - if current_week > obj.week or not student.active: - return False - return True + 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) diff --git a/cntmanage/flightslot/admins/training_adm.py b/cntmanage/flightslot/admins/training_adm.py index 9f7ed07..1170f07 100644 --- a/cntmanage/flightslot/admins/training_adm.py +++ b/cntmanage/flightslot/admins/training_adm.py @@ -8,6 +8,8 @@ from ..models.students import Student from ..models.missions import Training from ..models.weekpref import WeekPreference +from ..custom.student_permissions import has_edit_permission + from datetime import date class TrainingForm(forms.ModelForm): @@ -28,12 +30,7 @@ class TrainingInLIne(nested_admin.NestedTabularInline): # 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: - if hasattr(request.user, 'student') and obj: - student: Student = request.user.student - current_week: int = date.today().isocalendar().week - if current_week > obj.week or not student.active: - return False - return True + 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) diff --git a/cntmanage/flightslot/admins/weekpref_adm.py b/cntmanage/flightslot/admins/weekpref_adm.py index fa74b0b..123670a 100644 --- a/cntmanage/flightslot/admins/weekpref_adm.py +++ b/cntmanage/flightslot/admins/weekpref_adm.py @@ -15,6 +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 ..actions.exportweek import export_selected from datetime import date @@ -88,12 +89,7 @@ class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin): # 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: - if hasattr(request.user, "student") and obj: - student: Student = request.user.student - current_week = date.today().isocalendar().week - if current_week > obj.week or not student.active: - return False - return True + return has_edit_permission(request=request, obj=obj) # 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: @@ -106,10 +102,8 @@ class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin): def changeform_view(self, request: HttpRequest, object_id: int | None = None, form_url: str = "", extra_context=None): extra_context = extra_context or {} if hasattr(request.user, "student") and object_id: - student: Student = request.user.student - current_week = date.today().isocalendar().week weekpref = WeekPreference.objects.get(id=object_id) - if current_week > weekpref.week or not student.active: + if not has_edit_permission(request=request, obj=weekpref): extra_context["show_save"] = False extra_context["show_save_and_continue"] = False extra_context["show_save_and_add_another"] = False diff --git a/cntmanage/flightslot/custom/student_permissions.py b/cntmanage/flightslot/custom/student_permissions.py new file mode 100644 index 0000000..d995526 --- /dev/null +++ b/cntmanage/flightslot/custom/student_permissions.py @@ -0,0 +1,17 @@ + +from django.http import HttpRequest +from ..models.students import Student +from ..models.weekpref import WeekPreference + +from datetime import date + +# 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: + return False + return True