import nested_admin from django import forms from django.http import HttpRequest from durationwidget.widgets import TimeDurationWidget from ..models.hourbuildings import HourBuilding, HourBuildingLeg from ..models.weekpref import WeekPreference from datetime import date 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 # If user is a student deny edit permission for week past the current one def has_change_permission(self, request: HttpRequest, obj: HourBuilding | None = None): if hasattr(request.user, 'student') and obj: current_week = date.today().isocalendar().week if not obj.DoesNotExist and current_week > obj.weekpref.week: return False return True def has_delete_permission(self, request: HttpRequest, obj: HourBuilding | None = None): return self.has_change_permission(request=request, obj=obj) class HourBuildingInLine(nested_admin.NestedTabularInline): model = HourBuilding extra = 0 inlines = [HourBuildingLegInline] fk_name = 'weekpref' verbose_name_plural = "Hour Building" max_num = 7 # 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): 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): return self.has_change_permission(request=request, obj=obj)