Adde Aircraft class and associate students with aircrafts

This commit is contained in:
2025-11-28 10:16:01 +01:00
parent 33c610dcbc
commit de39913275
11 changed files with 190 additions and 67 deletions

View File

@@ -1,7 +1,8 @@
import nested_admin
from django import forms
from django.forms import Form
from django.db.models.query import QuerySet
from django.contrib.auth.models import User
from django.http import HttpRequest, HttpResponse
from django.contrib import admin, messages
from django.utils.translation import ngettext
@@ -17,6 +18,7 @@ from ..custom.colortag import course_color
from ..actions.exportweek import export_selected
from datetime import date
from typing import Dict, List, Any
class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin):
inlines = (TrainingInLIne, HourBuildingInLine, )
@@ -45,83 +47,75 @@ class WeekPreferenceAdmin(nested_admin.NestedPolymorphicModelAdmin):
return course_color(obj.student.course.color)
# If a user is registered as student hide filters
def get_list_filter(self, request):
def get_list_filter(self, request: HttpRequest) -> List[str]:
list_filter = super().get_list_filter(request)
if hasattr(request.user, 'student'):
if hasattr(request.user, "student"):
return []
return list_filter
# If a user is registered as student do not show actions
def get_actions(self, request):
def get_actions(self, request: HttpRequest) -> Dict[str, Any]:
actions = super().get_actions(request)
if hasattr(request.user, 'student'):
return []
if hasattr(request.user, "student"):
return {}
return actions
# If a user is registered as student show only their preferences
def get_queryset(self, request):
def get_queryset(self, request: HttpRequest) -> QuerySet[WeekPreference]:
qs = super().get_queryset(request)
if hasattr(request.user, 'student'):
if hasattr(request.user, "student"):
return qs.filter(student=request.user.student)
# If admin show everything
return qs
def get_form(self, request, obj=None, **kwargs):
form: forms.Form = super().get_form(request, obj, **kwargs)
def get_form(self, request: HttpRequest, obj: WeekPreference | None = None, **kwargs: Dict[str, Any]) -> Form:
form: Form = super().get_form(request, obj, **kwargs)
current_week = date.today().isocalendar().week
# If form contains the week field
if 'week' in form.base_fields:
if "week" in form.base_fields:
# Set default value as current week
form.base_fields['week'].initial = current_week
form.base_fields["week"].initial = current_week
# If student is current user making request
if hasattr(request.user, 'student'):
if hasattr(request.user, "student"):
student = request.user.student
if 'student' in form.base_fields:
form.base_fields['student'].initial = student
form.base_fields['student'].disabled = True
form.base_fields['week'].disabled = True # student cannot change week
if "student" in form.base_fields:
form.base_fields["student"].initial = student
form.base_fields["student"].disabled = True
form.base_fields["week"].disabled = True # student cannot change week
return form
# If user is a student deny edit permission for week past the current one
def has_change_permission(self, request, obj: WeekPreference | None = None):
if hasattr(request.user, 'student') and obj:
def has_change_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
if hasattr(request.user, "student") and obj:
current_week = date.today().isocalendar().week
if current_week > obj.week:
return False
return True
# If user is a student deny edit permission for week past the current one
def has_add_permission(self, request, obj: WeekPreference | None = None):
if hasattr(request.user, 'student') and obj:
current_week = date.today().isocalendar().week
if current_week > obj.week:
return False
return True
def has_add_permission(self, request: HttpRequest, obj: WeekPreference | None = None) -> bool:
return self.has_change_permission(request, obj)
# If user is a student deny edit permission for week past the current one
def has_delete_permission(self, request, obj: WeekPreference | None = None):
if hasattr(request.user, 'student') and obj:
current_week = date.today().isocalendar().week
if current_week > obj.week:
return False
return True
def has_delete_permission(self, request: HttpRequest, obj: WeekPreference | None = None)-> bool:
return self.has_change_permission(request, obj)
def changeform_view(self, request: HttpRequest, object_id: int | None = None, form_url: str = '', extra_context=None):
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:
if hasattr(request.user, "student") and object_id:
current_week = date.today().isocalendar().week
weekpref = WeekPreference.objects.get(id=object_id)
if current_week > weekpref.week:
extra_context['show_save'] = False
extra_context['show_save_and_continue'] = False
extra_context['show_save_and_add_another'] = False
extra_context['show_delete'] = False
extra_context["show_save"] = False
extra_context["show_save_and_continue"] = False
extra_context["show_save_and_add_another"] = False
extra_context["show_delete"] = False
return super().changeform_view(request, object_id, form_url, extra_context)
def save_model(self, request, obj, form, change):
def save_model(self, request: HttpRequest, obj, form: Form, change: bool):
# 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
super().save_model(request, obj, form, change)