Added rollover function.
Hidden some admin views
This commit is contained in:
@@ -131,5 +131,4 @@ GitHub.sublime-settings
|
||||
|
||||
/media
|
||||
/static
|
||||
/busManager/busManager/settings.py
|
||||
/busManager/coord/migrations
|
||||
@@ -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),
|
||||
]
|
||||
|
||||
@@ -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"]
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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})
|
||||
Reference in New Issue
Block a user