Files
catops/techdb/flightslot/admin.py
2025-11-14 12:01:14 +01:00

111 lines
3.6 KiB
Python

from django import forms
from django.contrib import admin
from durationwidget.widgets import TimeDurationWidget
from datetime import date
import nested_admin
from .models.courses import Course
from .models.hourbuildings import HourBuilding, HourBuildingLeg
from .models.missions import Training, MissionProfile
from .models.students import Student
from .models.weekpref import WeekPreference
class TrainingForm(forms.ModelForm):
model=Training
class HourBuildingLegForm(forms.ModelForm):
class Meta:
model = HourBuildingLeg
fields = '__all__'
widgets = {
'time': TimeDurationWidget(show_days=False,
show_seconds=False
)
}
# Register your models here.
class HourBuildingLegInline(nested_admin.NestedTabularInline):
model = HourBuildingLeg
form = HourBuildingLegForm
extra = 0
fk_name = 'hb'
max_num = 5
class HourBuildingInLine(nested_admin.NestedTabularInline):
model = HourBuilding
extra = 0
inlines = [HourBuildingLegInline]
fk_name = 'weekpref'
verbose_name_plural = "Hour Building"
max_num = 7
class TrainingInLIne(nested_admin.NestedTabularInline):
model = Training
form = TrainingForm
extra = 0
fk_name = 'weekpref'
verbose_name_plural = "Training Missions"
max_num = 7
class WeekPreferenceAdmin(nested_admin.NestedModelAdmin):
inlines = [TrainingInLIne, HourBuildingInLine]
list_filter = ["week", "student__course", "student"]
def has_module_permission(self, request):
if hasattr(request.user, 'student'):
return False
return True
def get_queryset(self, request):
qs = super().get_queryset(request)
# If a user is registered as student show only their preferences
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)
# If student is current user making request
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
# If form contains the week field
if 'week' in form.base_fields:
# Set default value as current week
current_week = date.today().isocalendar().week
form.base_fields['week'].initial = current_week
form.base_fields['week'].disabled = True
return form
def save_model(self, request, obj, form, change):
# Imposta automaticamente lo studente se non è già valorizzato
if hasattr(request.user, 'student') and not obj.student_id:
obj.student = request.user.student
super().save_model(request, obj, form, change)
class StudentAdmin(admin.ModelAdmin):
list_display = ("surname", "name", "course", "email","active")
list_filter = ["course", "active"]
class CourseAdminForm(forms.ModelForm):
class Meta:
model = Course
class CourseAdmin(admin.ModelAdmin):
list_display = ["ctype", "cnumber", "year", "color"]
list_filter = ["ctype", "year"]
form=CourseAdminForm
class MissionProfileAdmin(admin.ModelAdmin):
list_display = ("mtype", "mnum")
admin.site.register(Course, CourseAdmin)
admin.site.register(MissionProfile)
admin.site.register(Student, StudentAdmin)
admin.site.register(WeekPreference, WeekPreferenceAdmin)