File size: 1,694 Bytes
f6213fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import { buildPreview } from './preview.mjs';
export function clonePlan(plan) {
return JSON.parse(JSON.stringify(plan));
}
export function refreshPlan(plan) {
const normalized = normalizePlan(clonePlan(plan));
normalized.viewState = normalized.viewState || {};
normalized.viewState.preview = buildPreview(normalized);
return normalized;
}
export function refreshServerPlan(plan) {
const normalized = normalizePlan(clonePlan(plan));
normalized.viewState = normalized.viewState || {};
if (!normalized.viewState.preview) {
normalized.viewState.preview = buildPreview(normalized);
}
return normalized;
}
export function normalizePlan(plan) {
const normalized = clonePlan(plan);
normalized.deliveries = normalized.deliveries || [];
normalized.vehicles = normalized.vehicles || [];
normalized.viewState = normalized.viewState || {};
const oldToNew = new Map();
normalized.deliveries = normalized.deliveries.map((delivery, index) => {
oldToNew.set(delivery.id, index);
return {
kind: 'other',
demand: 1,
minStartTime: 0,
maxEndTime: 24 * 3600,
serviceDuration: 0,
...delivery,
id: index,
};
});
normalized.vehicles = normalized.vehicles.map((vehicle, index) => ({
...vehicle,
name: vehicle.name || `Vehicle ${index + 1}`,
capacity: Number(vehicle.capacity || 0),
homeLat: Number(vehicle.homeLat || 0),
homeLng: Number(vehicle.homeLng || 0),
departureTime: Number(vehicle.departureTime || 0),
deliveryOrder: (vehicle.deliveryOrder || [])
.map((oldId) => oldToNew.get(oldId))
.filter((value) => value !== undefined),
id: index,
}));
return normalized;
}
|