Added rollover function.
Hidden some admin views
This commit is contained in:
@@ -131,5 +131,4 @@ GitHub.sublime-settings
|
|||||||
|
|
||||||
/media
|
/media
|
||||||
/static
|
/static
|
||||||
/busManager/busManager/settings.py
|
|
||||||
/busManager/coord/migrations
|
/busManager/coord/migrations
|
||||||
@@ -18,11 +18,14 @@ from azure_auth.views import azure_auth_logout
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
|
||||||
|
from coord.utils.rollover import rollover
|
||||||
|
|
||||||
admin.site.site_header = "Bus Portal Admin"
|
admin.site.site_header = "Bus Portal Admin"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('report/', include("coord.urls")),
|
path('report/', include("coord.urls")),
|
||||||
path('logout/', azure_auth_logout),
|
path('logout/', azure_auth_logout),
|
||||||
path('auth/', include("azure_auth.urls"),),
|
path('auth/', include("azure_auth.urls"),),
|
||||||
|
path('rollover', rollover, name="rollover"),
|
||||||
path('', admin.site.urls),
|
path('', admin.site.urls),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class ArchiveFilter(BooleanFieldListFilter):
|
|||||||
field_choices = dict(self.field.flatchoices)
|
field_choices = dict(self.field.flatchoices)
|
||||||
for lookup, title in (
|
for lookup, title in (
|
||||||
(None, gettext_lazy("All")),
|
(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"))),
|
("1", field_choices.get(False, gettext_lazy("Archived"))),
|
||||||
):
|
):
|
||||||
yield {
|
yield {
|
||||||
@@ -172,14 +172,14 @@ class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin):
|
|||||||
return format_html('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
|
return format_html('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
|
||||||
|
|
||||||
|
|
||||||
@admin.register(BusStop)
|
# @admin.register(BusStop)
|
||||||
class BusStopAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
class BusStopAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||||
list_filter = ["bus__company", "bus__route_name"]
|
list_filter = ["bus__company", "bus__route_name"]
|
||||||
list_display = ["__str__", "am_time", "pm_time", "address"]
|
list_display = ["__str__", "am_time", "pm_time", "address"]
|
||||||
search_fields = ["bus__route_name", "address"]
|
search_fields = ["bus__route_name", "address"]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Suburb)
|
# @admin.register(Suburb)
|
||||||
class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||||
list_filter = ["state"]
|
list_filter = ["state"]
|
||||||
|
|
||||||
@@ -193,14 +193,13 @@ class TravellerRouteInline(admin.TabularInline):
|
|||||||
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin, TemplateMixin):
|
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_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "shuttle", "travel_start_date", "travel_end_date"]
|
||||||
list_filter = [
|
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(
|
("travel_start_date", DateRangeFilterBuilder(
|
||||||
title="Start date"
|
title="Start date"
|
||||||
)),
|
)),
|
||||||
("travel_end_date", DateRangeFilterBuilder(
|
("travel_end_date", DateRangeFilterBuilder(
|
||||||
title="End date"
|
title="End date"
|
||||||
)),
|
))
|
||||||
("is_archived", ArchiveFilter)
|
|
||||||
]
|
]
|
||||||
search_fields = ["first_name", "last_name", "residential_address"]
|
search_fields = ["first_name", "last_name", "residential_address"]
|
||||||
cloneable_fields = ["last_name", "residential_address", "residential_suburb",
|
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)
|
super().save_model(request, obj, form, change)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(TravellerRoute)
|
# @admin.register(TravellerRoute)
|
||||||
class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||||
list_display = ["traveller", "busStop"]
|
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())
|
return format_html('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Driver)
|
# @admin.register(Driver)
|
||||||
class DriverAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
class DriverAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||||
list_display = ["__str__", "route", "phone_number"]
|
list_display = ["__str__", "route", "phone_number"]
|
||||||
|
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class Shuttle(models.Model):
|
|||||||
|
|
||||||
def traveller_count(self):
|
def traveller_count(self):
|
||||||
count = 0
|
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():
|
if traveller.is_active():
|
||||||
count += 1
|
count += 1
|
||||||
return count
|
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