import json
import polyline
from django.conf import settings
from pxy_dashboard.apps.models import OptScenario
def get_dispatch_data_for(subdivision):
"""
Load the last OptScenario, decode its VROOM JSON for this subdivision,
and return a list of routes, each with 'route_id', 'coords', and 'steps'.
"""
scenario = OptScenario.objects.last()
if not scenario or not scenario.dispatch_json:
return None
# load & slice
with open(scenario.dispatch_json.path, encoding='utf-8') as f:
raw = json.load(f)
raw_subdiv = raw.get(subdivision)
if not raw_subdiv:
return None
dispatch_data = []
for route in raw_subdiv.get('routes', []):
vehicle = route.get('vehicle')
# decode polyline geometry → [ [lon, lat], … ]
coords = []
if route.get('geometry'):
pts = polyline.decode(route['geometry'])
coords = [[lng, lat] for lat, lng in pts]
# build steps
steps = []
for step in route.get('steps', []):
lon, lat = step['location']
popup = (
f"{step.get('type','job').title()}
"
f"ID: {step.get('id','–')}
"
f"Load: {step.get('load',[0])[0]} kg"
)
steps.append({
'position': [lon, lat],
'popup': popup,
'step_type': step.get('type','job'),
})
dispatch_data.append({
'route_id': str(vehicle),
'coords': coords,
'steps': steps,
})
return dispatch_data