111 lines
3.6 KiB
Python
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)
|