diff --git a/busManager/coord/context_helpers.py b/busManager/coord/context_helpers.py index 52314fd..3ae992d 100644 --- a/busManager/coord/context_helpers.py +++ b/busManager/coord/context_helpers.py @@ -3,9 +3,7 @@ from django.db.models import Q from coord.models import Bus, BusStop, TravellerRoute, Driver, Traveller, Shuttle -def bus_roll_context(queryset=None): - table_header_size = 4 - page_max_size = 45 +def bus_roll_context(queryset=None, include_bus_stops=True): bus_routes = [] if queryset is None: buses = Bus.objects.all() @@ -14,48 +12,12 @@ def bus_roll_context(queryset=None): for bus in buses: route_stops = [] - page_size = 3 # Account for traveller numbers at the top of the first page - for bus_stop in BusStop.objects.filter(bus=bus): - traveller_routes = TravellerRoute.objects.filter(busStop=bus_stop) - traveller_list = [] - for trav_route in traveller_routes: - traveller = trav_route.traveller - if not traveller.is_active(): - continue - is_fared = "---" - if traveller.eligibility_status == "2": - is_fared = "Y" - traveller_list.append({ - 'display': f"{traveller} ({traveller.get_year_level_display()}, {traveller.school.shortName})", - 'isFared': is_fared - }) - - stop_size = len(traveller_list) - page_break = False - page_size += table_header_size + stop_size - if page_size > page_max_size: - if len(route_stops) > 0: # Don't break the page if it's the first stop - page_break = True - page_size = table_header_size + stop_size - - route_stops.append({ - 'stop_num': bus_stop.get_stop_number(), - 'name': bus_stop.address, - 'am': bus_stop.am_time, - 'pm': bus_stop.pm_time, - 'travellers': traveller_list, - 'page_break': page_break - }) + if include_bus_stops: + route_stops = route_paged_context(bus) shuttle_routes = [] for shuttle in Shuttle.objects.filter(bus=bus): - shuttle_travellers = [] - for traveller in Traveller.objects.filter(shuttle=shuttle): - if traveller.is_active(): - shuttle_travellers.append({ - 'display': f"{traveller} ({traveller.get_year_level_display()}, {traveller.school})", - }) - shuttle_routes.append({'shuttle': shuttle, 'shuttle_travellers': shuttle_travellers}) + shuttle_routes.append(shuttle_route_context(shuttle)) bus_routes.append({'bus': bus, 'route_stops': route_stops, 'shuttle_routes': shuttle_routes}) return {'routes': bus_routes} @@ -110,6 +72,54 @@ def traveller_roll_context(queryset): return travellers +def route_paged_context(bus): + table_header_size = 4 + page_max_size = 45 + page_size = 3 # Account for traveller numbers at the top of the first page + route_stops = [] + for bus_stop in BusStop.objects.filter(bus=bus): + traveller_routes = TravellerRoute.objects.filter(busStop=bus_stop) + traveller_list = [] + for trav_route in traveller_routes: + traveller = trav_route.traveller + if not traveller.is_active(): + continue + is_fared = "---" + if traveller.eligibility_status == "2": + is_fared = "Y" + traveller_list.append({ + 'display': f"{traveller} ({traveller.get_year_level_display()}, {traveller.school.shortName})", + 'isFared': is_fared + }) + + stop_size = len(traveller_list) + page_break = False + page_size += table_header_size + stop_size + if page_size > page_max_size: + if len(route_stops) > 0: # Don't break the page if it's the first stop + page_break = True + page_size = table_header_size + stop_size + + route_stops.append({ + 'stop_num': bus_stop.get_stop_number(), + 'name': bus_stop.address, + 'am': bus_stop.am_time, + 'pm': bus_stop.pm_time, + 'travellers': traveller_list, + 'page_break': page_break + }) + return route_stops + + +def shuttle_route_context(shuttle): + shuttle_travellers = [] + for traveller in Traveller.objects.filter(shuttle=shuttle): + if traveller.is_active(): + shuttle_travellers.append({ + 'display': f"{traveller} ({traveller.get_year_level_display()}, {traveller.school})", + }) + return {'shuttle': shuttle, 'shuttle_travellers': shuttle_travellers} + def school_travellerRoute_context(school): travellers = [] for travellerRoute in TravellerRoute.objects.filter(traveller__school=school):