Added rollover function.

Hidden some admin views
This commit is contained in:
John Mullins
2023-12-11 10:25:30 +11:00
parent 776042703e
commit d858bf84fd
5 changed files with 71 additions and 10 deletions
-1
View File
@@ -131,5 +131,4 @@ GitHub.sublime-settings
/media
/static
/busManager/busManager/settings.py
/busManager/coord/migrations
+3
View File
@@ -18,11 +18,14 @@ from azure_auth.views import azure_auth_logout
from django.contrib import admin
from django.urls import path, include
from coord.utils.rollover import rollover
admin.site.site_header = "Bus Portal Admin"
urlpatterns = [
path('report/', include("coord.urls")),
path('logout/', azure_auth_logout),
path('auth/', include("azure_auth.urls"),),
path('rollover', rollover, name="rollover"),
path('', admin.site.urls),
]
+7 -8
View File
@@ -100,7 +100,7 @@ class ArchiveFilter(BooleanFieldListFilter):
field_choices = dict(self.field.flatchoices)
for lookup, title in (
(None, gettext_lazy("All")),
("0", field_choices.get(True, gettext_lazy("Current"))),
("0", field_choices.get(True, gettext_lazy("Current Year"))),
("1", field_choices.get(False, gettext_lazy("Archived"))),
):
yield {
@@ -172,14 +172,14 @@ class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin):
return format_html('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
@admin.register(BusStop)
# @admin.register(BusStop)
class BusStopAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_filter = ["bus__company", "bus__route_name"]
list_display = ["__str__", "am_time", "pm_time", "address"]
search_fields = ["bus__route_name", "address"]
@admin.register(Suburb)
# @admin.register(Suburb)
class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_filter = ["state"]
@@ -193,14 +193,13 @@ class TravellerRouteInline(admin.TabularInline):
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin, TemplateMixin):
list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"]
list_filter = [
"school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb",
("is_archived", ArchiveFilter), "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle", "residential_suburb",
("travel_start_date", DateRangeFilterBuilder(
title="Start date"
)),
("travel_end_date", DateRangeFilterBuilder(
title="End date"
)),
("is_archived", ArchiveFilter)
))
]
search_fields = ["first_name", "last_name", "residential_address"]
cloneable_fields = ["last_name", "residential_address", "residential_suburb",
@@ -295,7 +294,7 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin
super().save_model(request, obj, form, change)
@admin.register(TravellerRoute)
# @admin.register(TravellerRoute)
class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_display = ["traveller", "busStop"]
@@ -328,7 +327,7 @@ class ShuttleAdmin(MyImportExportModelAdmin, admin.ModelAdmin, ShuttleRollMixin)
return format_html('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
@admin.register(Driver)
# @admin.register(Driver)
class DriverAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_display = ["__str__", "route", "phone_number"]
+1 -1
View File
@@ -110,7 +110,7 @@ class Shuttle(models.Model):
def traveller_count(self):
count = 0
for traveller in Traveller.objects.filter(shuttle=self):
for traveller in Traveller.objects.filter(shuttle=self, is_archived=False):
if traveller.is_active():
count += 1
return count
+60
View File
@@ -0,0 +1,60 @@
import datetime
from django import forms
from django.contrib.admin.views.decorators import staff_member_required
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render
from coord.models import Traveller
# Any active year 12 without exit date set exit date before today
# Any user active user with exit date before today > Archive
# Any active user (not adult learner) increase year by 1
def previous_rollover_date():
today = datetime.date.today()
return datetime.date(year=today.year - 1, month=12, day=31)
class RolloverForm(forms.Form):
exit_date = forms.DateField(initial=previous_rollover_date)
agreement = forms.BooleanField(label='I have run an export/backup for travellers')
def _rollover(exit_date):
print(f"Setting exit date {exit_date}")
result = Traveller.objects.filter(year_level='12', travel_end_date=None).update(travel_end_date=exit_date)
print(f"{result} Year 12s exited")
today = datetime.date.today().strftime('%Y-%m-%d')
result = Traveller.objects.filter(travel_end_date__lt=today, is_archived=False).update(is_archived=True)
print(f"{result} travellers archived")
result = Traveller.objects.filter(is_archived=False, year_level='11').update(year_level='12')
result += Traveller.objects.filter(is_archived=False, year_level='10').update(year_level='11')
result += Traveller.objects.filter(is_archived=False, year_level='09').update(year_level='10')
result += Traveller.objects.filter(is_archived=False, year_level='08').update(year_level='09')
result += Traveller.objects.filter(is_archived=False, year_level='07').update(year_level='08')
result += Traveller.objects.filter(is_archived=False, year_level='06').update(year_level='07')
result += Traveller.objects.filter(is_archived=False, year_level='05').update(year_level='06')
result += Traveller.objects.filter(is_archived=False, year_level='04').update(year_level='05')
result += Traveller.objects.filter(is_archived=False, year_level='03').update(year_level='04')
result += Traveller.objects.filter(is_archived=False, year_level='02').update(year_level='03')
result += Traveller.objects.filter(is_archived=False, year_level='01').update(year_level='02')
result += Traveller.objects.filter(is_archived=False, year_level='00').update(year_level='01')
result += Traveller.objects.filter(is_archived=False, year_level='PS').update(year_level='00')
print(f"{result} travellers modified")
@staff_member_required
def rollover(request):
# if 'confirm' in request.POST:
if request.method == 'POST':
form = RolloverForm(request.POST)
if form.is_valid():
_rollover(form.cleaned_data['exit_date'])
# rollover_mixin.message_user(request, "Users have been rolled over")
return HttpResponseRedirect('/')
form = RolloverForm()
return render(request, 'admin/rollover_form.html', context={'form': form})