From cc86eae6b97dfd0fcdcbaf09aaf5423c2c281579 Mon Sep 17 00:00:00 2001 From: John Mullins Date: Fri, 22 Dec 2023 18:58:12 +1100 Subject: [PATCH] Added database exporter in settings panel. Downloads a .json file --- busManager/coord/backup/backup_helpers.py | 79 +++++++++++++++++++ .../coord/templates/admin/settings_index.html | 1 + busManager/coord/urls_settings.py | 1 + busManager/coord/views_settings.py | 15 ++++ 4 files changed, 96 insertions(+) create mode 100644 busManager/coord/backup/backup_helpers.py diff --git a/busManager/coord/backup/backup_helpers.py b/busManager/coord/backup/backup_helpers.py new file mode 100644 index 0000000..77d3eb4 --- /dev/null +++ b/busManager/coord/backup/backup_helpers.py @@ -0,0 +1,79 @@ +from django.forms import model_to_dict + +from coord.models import * + + +def get_export_dict(): + suburbs = [] + schools = [] + companies = [] + travellers = [] + + for suburb in Suburb.objects.all(): + suburbs.append(model_to_dict(suburb)) + + for school in School.objects.all(): + school_dict = model_to_dict(school) + school_dict['suburb'] = school.suburb.name + schools.append(school_dict) + + for company in Company.objects.all(): + company_dict = model_to_dict(company) + company_dict['suburb'] = company.suburb.name + buses = [] + for bus in Bus.objects.filter(company=company): + bus_dict = model_to_dict(bus) + bus_dict.pop('company') + drivers = [] + shuttles = [] + bus_stops = [] + + for driver in Driver.objects.filter(bus=bus): + driver_dict = model_to_dict(driver) + driver_dict.pop('bus') + drivers.append(driver_dict) + + for shuttle in Shuttle.objects.filter(bus=bus): + shuttle_dict = model_to_dict(shuttle) + shuttle_dict.pop('bus') + shuttles.append(shuttle_dict) + + for busStop in BusStop.objects.filter(bus=bus): + bus_stop_dict = model_to_dict(busStop) + bus_stop_dict.pop('bus') + bus_stop_dict['am_time'] = busStop.am_time.strftime("%H:%M:%S") + bus_stop_dict['pm_time'] = busStop.pm_time.strftime("%H:%M:%S") + bus_stops.append(bus_stop_dict) + + bus_dict['drivers'] = drivers + bus_dict['shuttles'] = shuttles + bus_dict['bus_stops'] = bus_stops + buses.append(bus_dict) + company_dict['buses'] = buses + companies.append(company_dict) + + for traveller in Traveller.objects.all(): + traveller_dict = model_to_dict(traveller) + traveller_dict['school'] = traveller.school.name + if traveller.residential_suburb is not None: + traveller_dict['residential_suburb'] = traveller.residential_suburb.name + if traveller.postal_suburb is not None: + traveller_dict['postal_suburb'] = traveller.postal_suburb.name + if traveller.dob is not None: + traveller_dict['dob'] = traveller.dob.strftime("%Y-%m-%d") + traveller_dict.pop('travel_start_date') + traveller_dict.pop('travel_end_date') + routes = [] + for route in TravellerRoute.objects.filter(traveller=traveller): + route_dict = model_to_dict(route) + route_dict.pop('traveller') + route_dict['name'] = route.busStop.__str__() + if route.travel_start_date is not None: + route_dict['travel_start_date'] = route.travel_start_date.strftime("%Y-%m-%d") + if route.travel_end_date is not None: + route_dict['travel_end_date'] = route.travel_end_date.strftime("%Y-%m-%d") + routes.append(route_dict) + traveller_dict['bus_stops'] = routes + travellers.append(traveller_dict) + + return {'suburbs': suburbs, 'schools': schools, 'companies': companies, 'travellers': travellers} diff --git a/busManager/coord/templates/admin/settings_index.html b/busManager/coord/templates/admin/settings_index.html index b766ec3..ccdff9d 100644 --- a/busManager/coord/templates/admin/settings_index.html +++ b/busManager/coord/templates/admin/settings_index.html @@ -2,6 +2,7 @@ {% block content %}
Run nightly task
+
Export