@fleetbase/fleetops-engine 0.6.38 → 0.6.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addon/components/activity/form.hbs +2 -12
- package/addon/components/activity/logic-builder.hbs +1 -1
- package/addon/components/custom-entity/form.hbs +4 -20
- package/addon/components/device/form.hbs +3 -15
- package/addon/components/device/panel-header.hbs +13 -2
- package/addon/components/driver/details.hbs +33 -2
- package/addon/components/driver/form.hbs +42 -0
- package/addon/components/driver/panel-header.hbs +8 -1
- package/addon/components/driver/schedule.hbs +115 -76
- package/addon/components/driver/schedule.js +349 -157
- package/addon/components/driver-onboard-settings.hbs +2 -8
- package/addon/components/entity-field-editing-settings.hbs +2 -5
- package/addon/components/equipment/card.hbs +49 -0
- package/addon/components/equipment/card.js +6 -0
- package/addon/components/equipment/details.hbs +83 -44
- package/addon/components/equipment/form.hbs +111 -41
- package/addon/components/equipment/form.js +78 -10
- package/addon/components/equipment/panel-header.hbs +36 -0
- package/addon/components/equipment/panel-header.js +2 -0
- package/addon/components/fleet/driver-listing.hbs +3 -1
- package/addon/components/fleet/vehicle-listing.hbs +4 -7
- package/addon/components/fleet-panel/vehicle-listing.hbs +1 -6
- package/addon/components/fuel-report/form.hbs +1 -5
- package/addon/components/layout/fleet-ops-sidebar.hbs +43 -38
- package/addon/components/layout/fleet-ops-sidebar.js +103 -24
- package/addon/components/maintenance/cost-panel.hbs +176 -0
- package/addon/components/maintenance/cost-panel.js +241 -0
- package/addon/components/maintenance/details.hbs +123 -60
- package/addon/components/maintenance/form.hbs +138 -78
- package/addon/components/maintenance/form.js +131 -6
- package/addon/components/maintenance/panel-header.hbs +31 -0
- package/addon/components/maintenance/panel-header.js +2 -0
- package/addon/components/maintenance-schedule/details.hbs +260 -0
- package/addon/components/maintenance-schedule/details.js +158 -0
- package/addon/components/maintenance-schedule/form.hbs +287 -0
- package/addon/components/maintenance-schedule/form.js +199 -0
- package/addon/components/map/container.hbs +1 -1
- package/addon/components/map/drawer/device-event-listing.hbs +1 -1
- package/addon/components/map/drawer/driver-listing.hbs +1 -6
- package/addon/components/map/drawer/place-listing.hbs +1 -6
- package/addon/components/map/drawer/vehicle-listing.hbs +1 -6
- package/addon/components/map/drawer.hbs +8 -1
- package/addon/components/map/leaflet-live-map.hbs +2 -1
- package/addon/components/map/toolbar/visibility-control-panel.hbs +1 -1
- package/addon/components/map/toolbar.hbs +4 -29
- package/addon/components/modals/add-driver-shift.hbs +155 -0
- package/addon/components/modals/add-driver-shift.js +210 -0
- package/addon/components/modals/bulk-assign-orders.hbs +67 -0
- package/addon/components/modals/driver-shift.hbs +43 -0
- package/addon/components/modals/driver-shift.js +56 -0
- package/addon/components/modals/entity-form.hbs +5 -28
- package/addon/components/modals/orchestrator-import.hbs +351 -0
- package/addon/components/modals/orchestrator-import.js +807 -0
- package/addon/components/modals/order-config-new-status.hbs +1 -5
- package/addon/components/modals/scheduling-conflict.hbs +47 -0
- package/addon/components/modals/scheduling-conflict.js +53 -0
- package/addon/components/modals/send-work-order.hbs +91 -0
- package/addon/components/modals/send-work-order.js +3 -0
- package/addon/components/modals/service-area-form.hbs +1 -6
- package/addon/components/modals/set-driver-availability.hbs +50 -0
- package/addon/components/modals/set-driver-availability.js +57 -0
- package/addon/components/modals/update-order-activity.hbs +13 -9
- package/addon/components/modals/user-form.hbs +1 -5
- package/addon/components/modals/vehicle-form.hbs +17 -102
- package/addon/components/modals/vendor-form.hbs +15 -82
- package/addon/components/orchestrator/card-fields-settings.hbs +76 -0
- package/addon/components/orchestrator/card-fields-settings.js +134 -0
- package/addon/components/orchestrator/order-pool.hbs +264 -0
- package/addon/components/orchestrator/order-pool.js +394 -0
- package/addon/components/orchestrator/phase-builder.hbs +162 -0
- package/addon/components/orchestrator/phase-builder.js +162 -0
- package/addon/components/orchestrator/plan-viewer.hbs +278 -0
- package/addon/components/orchestrator/plan-viewer.js +342 -0
- package/addon/components/orchestrator/resource-panel.hbs +301 -0
- package/addon/components/orchestrator/resource-panel.js +106 -0
- package/addon/components/orchestrator-workbench.hbs +318 -0
- package/addon/components/orchestrator-workbench.js +1088 -0
- package/addon/components/order/details/custom-fields.hbs +10 -1
- package/addon/components/order/details/detail.hbs +37 -2
- package/addon/components/order/details/detail.js +0 -1
- package/addon/components/order/details/integrated-vendor-details.hbs +4 -4
- package/addon/components/order/details/notes.hbs +1 -7
- package/addon/components/order/details/route.hbs +1 -5
- package/addon/components/order/form/details.hbs +44 -10
- package/addon/components/order/form/details.js +57 -0
- package/addon/components/order/form/notes.hbs +1 -7
- package/addon/components/order/form/payload.hbs +1 -7
- package/addon/components/order/form/route.hbs +3 -15
- package/addon/components/order/header.hbs +1 -7
- package/addon/components/order/route-editor.hbs +4 -25
- package/addon/components/order/schedule-card.hbs +102 -95
- package/addon/components/order/schedule-card.js +8 -3
- package/addon/components/order-config-manager/details.hbs +2 -10
- package/addon/components/order-config-manager/entities.hbs +1 -7
- package/addon/components/order-config-manager.hbs +1 -6
- package/addon/components/part/card.hbs +49 -0
- package/addon/components/part/card.js +6 -0
- package/addon/components/part/details.hbs +102 -56
- package/addon/components/part/form.hbs +131 -56
- package/addon/components/part/form.js +78 -11
- package/addon/components/part/panel-header.hbs +36 -0
- package/addon/components/part/panel-header.js +2 -0
- package/addon/components/place/form.hbs +1 -7
- package/addon/components/sensor/details.hbs +1 -1
- package/addon/components/sensor/form.hbs +5 -3
- package/addon/components/sensor/panel-header.hbs +8 -1
- package/addon/components/service-area/form.hbs +1 -6
- package/addon/components/service-rate/form.hbs +12 -60
- package/addon/components/telematic/form.hbs +6 -2
- package/addon/components/vehicle/details/maintenance-history.hbs +42 -0
- package/addon/components/vehicle/details/maintenance-history.js +32 -0
- package/addon/components/vehicle/details/schedules.hbs +40 -0
- package/addon/components/vehicle/details/schedules.js +32 -0
- package/addon/components/vehicle/details/work-orders.hbs +42 -0
- package/addon/components/vehicle/details/work-orders.js +32 -0
- package/addon/components/vehicle/details.hbs +52 -0
- package/addon/components/vehicle/form.hbs +51 -0
- package/addon/components/vehicle/panel-header.hbs +19 -49
- package/addon/components/warranty/details.hbs +3 -2
- package/addon/components/warranty/form.hbs +3 -17
- package/addon/components/work-order/details.hbs +135 -40
- package/addon/components/work-order/form.hbs +178 -45
- package/addon/components/work-order/form.js +197 -4
- package/addon/components/work-order/panel-header.hbs +31 -0
- package/addon/components/work-order/panel-header.js +2 -0
- package/addon/controllers/connectivity/devices/index/details.js +1 -1
- package/addon/controllers/maintenance/equipment/index/details/index.js +0 -1
- package/addon/controllers/maintenance/equipment/index/details.js +36 -1
- package/addon/controllers/maintenance/equipment/index/edit.js +56 -1
- package/addon/controllers/maintenance/equipment/index/new.js +32 -1
- package/addon/controllers/maintenance/equipment/index.js +127 -113
- package/addon/controllers/maintenance/maintenances/index/details/index.js +3 -0
- package/addon/controllers/maintenance/maintenances/index/details.js +54 -0
- package/addon/controllers/maintenance/maintenances/index/edit.js +68 -0
- package/addon/controllers/maintenance/maintenances/index/new.js +34 -0
- package/addon/controllers/maintenance/maintenances/index.js +191 -0
- package/addon/controllers/maintenance/parts/index/details/index.js +0 -1
- package/addon/controllers/maintenance/parts/index/details.js +36 -1
- package/addon/controllers/maintenance/parts/index/edit.js +56 -1
- package/addon/controllers/maintenance/parts/index/new.js +32 -1
- package/addon/controllers/maintenance/parts/index.js +135 -113
- package/addon/controllers/maintenance/schedules/index/details.js +115 -0
- package/addon/controllers/maintenance/schedules/index/edit.js +41 -0
- package/addon/controllers/maintenance/schedules/index/new.js +33 -0
- package/addon/controllers/maintenance/schedules/index.js +280 -0
- package/addon/controllers/maintenance/work-orders/index/details.js +41 -1
- package/addon/controllers/maintenance/work-orders/index/edit.js +67 -1
- package/addon/controllers/maintenance/work-orders/index/new.js +43 -1
- package/addon/controllers/maintenance/work-orders/index.js +105 -113
- package/addon/controllers/management/drivers/index/details.js +6 -1
- package/addon/controllers/management/vehicles/index/details.js +65 -0
- package/addon/controllers/management/vehicles/index.js +18 -0
- package/addon/controllers/operations/orchestrator.js +10 -0
- package/addon/controllers/operations/orders/index.js +6 -0
- package/addon/controllers/operations/scheduler/fleet-schedule.js +341 -0
- package/addon/controllers/operations/scheduler/index.js +799 -275
- package/addon/controllers/operations/scheduler.js +21 -0
- package/addon/controllers/settings/orchestrator.js +70 -0
- package/addon/controllers/settings/scheduling.js +155 -0
- package/addon/extension.js +19 -0
- package/addon/instance-initializers/register-vroom-allocation.js +27 -0
- package/addon/models/maintenance-schedule.js +61 -0
- package/addon/routes/maintenance/equipment/index/details.js +27 -1
- package/addon/routes/maintenance/equipment/index/edit.js +27 -1
- package/addon/routes/maintenance/maintenances/index/details/index.js +3 -0
- package/addon/routes/maintenance/maintenances/index/details.js +29 -0
- package/addon/routes/maintenance/maintenances/index/edit.js +29 -0
- package/addon/routes/maintenance/maintenances/index/new.js +3 -0
- package/addon/routes/maintenance/maintenances/index.js +23 -0
- package/addon/routes/maintenance/maintenances.js +3 -0
- package/addon/routes/maintenance/parts/index/details.js +27 -1
- package/addon/routes/maintenance/parts/index/edit.js +27 -1
- package/addon/routes/maintenance/schedules/index/details/index.js +2 -0
- package/addon/routes/maintenance/schedules/index/details/work-orders.js +11 -0
- package/addon/routes/maintenance/schedules/index/details.js +25 -0
- package/addon/routes/maintenance/schedules/index/edit.js +25 -0
- package/addon/routes/maintenance/schedules/index/new.js +2 -0
- package/addon/routes/maintenance/schedules/index.js +21 -0
- package/addon/routes/maintenance/schedules.js +2 -0
- package/addon/routes/maintenance/work-orders/index/details.js +27 -1
- package/addon/routes/maintenance/work-orders/index/edit.js +27 -1
- package/addon/routes/management/vehicles/index/details/maintenance-history.js +3 -0
- package/addon/routes/management/vehicles/index/details/schedules.js +3 -0
- package/addon/routes/management/vehicles/index/details/work-orders.js +3 -0
- package/addon/routes/operations/orchestrator.js +23 -0
- package/addon/routes/operations/scheduler/fleet-schedule.js +28 -0
- package/addon/routes/operations/scheduler/index.js +48 -26
- package/addon/routes/operations/scheduler.js +14 -1
- package/addon/routes/settings/orchestrator.js +27 -0
- package/addon/routes/settings/scheduling.js +3 -0
- package/addon/routes.js +31 -1
- package/addon/services/driver-actions.js +40 -7
- package/addon/services/driver-scheduling.js +4 -1
- package/addon/services/equipment-actions.js +15 -5
- package/addon/services/leaflet-map-manager.js +14 -6
- package/addon/services/maintenance-actions.js +17 -14
- package/addon/services/maintenance-schedule-actions.js +118 -0
- package/addon/services/orchestration-engine-interface.js +49 -0
- package/addon/services/orchestration-engine.js +74 -0
- package/addon/services/order-actions.js +15 -0
- package/addon/services/order-allocation.js +116 -0
- package/addon/services/part-actions.js +12 -2
- package/addon/services/scheduling.js +316 -0
- package/addon/services/vehicle-actions.js +70 -7
- package/addon/services/vroom-allocation-engine.js +45 -0
- package/addon/services/work-order-actions.js +79 -0
- package/addon/styles/fleetops-engine.css +1658 -0
- package/addon/templates/analytics/reports/index/edit.hbs +1 -1
- package/addon/templates/analytics/reports/index/new.hbs +1 -1
- package/addon/templates/application.hbs +6 -1
- package/addon/templates/connectivity/devices/index/details/events.hbs +0 -1
- package/addon/templates/connectivity/devices.hbs +0 -1
- package/addon/templates/connectivity/events/index/details.hbs +0 -1
- package/addon/templates/connectivity/events.hbs +0 -1
- package/addon/templates/connectivity/sensors.hbs +0 -1
- package/addon/templates/connectivity/telematics/index/details/devices.hbs +0 -1
- package/addon/templates/connectivity/telematics/index/details/events.hbs +0 -1
- package/addon/templates/connectivity/telematics/index/details/sensors.hbs +0 -1
- package/addon/templates/connectivity/telematics.hbs +0 -1
- package/addon/templates/connectivity/tracking.hbs +0 -1
- package/addon/templates/connectivity.hbs +0 -1
- package/addon/templates/maintenance/equipment/index/details/index.hbs +1 -2
- package/addon/templates/maintenance/equipment/index/details.hbs +15 -2
- package/addon/templates/maintenance/equipment/index/edit.hbs +12 -2
- package/addon/templates/maintenance/equipment/index/new.hbs +1 -2
- package/addon/templates/maintenance/equipment/index.hbs +48 -13
- package/addon/templates/maintenance/equipment.hbs +0 -1
- package/addon/templates/maintenance/maintenances/index/details/index.hbs +1 -0
- package/addon/templates/maintenance/maintenances/index/details.hbs +15 -0
- package/addon/templates/maintenance/maintenances/index/edit.hbs +12 -0
- package/addon/templates/maintenance/maintenances/index/new.hbs +11 -0
- package/addon/templates/maintenance/maintenances/index.hbs +14 -0
- package/addon/templates/maintenance/maintenances.hbs +1 -0
- package/addon/templates/maintenance/parts/index/details/index.hbs +1 -2
- package/addon/templates/maintenance/parts/index/details.hbs +15 -2
- package/addon/templates/maintenance/parts/index/edit.hbs +12 -2
- package/addon/templates/maintenance/parts/index/new.hbs +1 -2
- package/addon/templates/maintenance/parts/index.hbs +48 -13
- package/addon/templates/maintenance/parts.hbs +0 -1
- package/addon/templates/maintenance/schedules/index/details/index.hbs +1 -0
- package/addon/templates/maintenance/schedules/index/details/work-orders.hbs +39 -0
- package/addon/templates/maintenance/schedules/index/details.hbs +14 -0
- package/addon/templates/maintenance/schedules/index/edit.hbs +12 -0
- package/addon/templates/maintenance/schedules/index/new.hbs +11 -0
- package/addon/templates/maintenance/schedules/index.hbs +40 -0
- package/addon/templates/maintenance/schedules.hbs +1 -0
- package/addon/templates/maintenance/work-orders/index/details.hbs +2 -1
- package/addon/templates/maintenance/work-orders/index/edit.hbs +2 -4
- package/addon/templates/maintenance/work-orders/index/new.hbs +1 -2
- package/addon/templates/maintenance/work-orders.hbs +0 -1
- package/addon/templates/management/contacts/customers/edit.hbs +1 -2
- package/addon/templates/management/contacts/customers/new.hbs +1 -2
- package/addon/templates/management/contacts/customers.hbs +1 -1
- package/addon/templates/management/contacts/index/edit.hbs +1 -2
- package/addon/templates/management/contacts/index/new.hbs +1 -2
- package/addon/templates/management/drivers/index/details/orders.hbs +0 -1
- package/addon/templates/management/drivers/index/edit.hbs +1 -2
- package/addon/templates/management/drivers/index/new.hbs +1 -2
- package/addon/templates/management/fleets/index/edit.hbs +1 -2
- package/addon/templates/management/fleets/index/new.hbs +1 -2
- package/addon/templates/management/fleets/index.hbs +1 -2
- package/addon/templates/management/fuel-reports/index/edit.hbs +1 -2
- package/addon/templates/management/fuel-reports/index/new.hbs +1 -2
- package/addon/templates/management/fuel-reports/index.hbs +1 -2
- package/addon/templates/management/issues/index/edit.hbs +1 -2
- package/addon/templates/management/issues/index/new.hbs +1 -2
- package/addon/templates/management/issues/index.hbs +1 -2
- package/addon/templates/management/places/index/details/activity.hbs +0 -1
- package/addon/templates/management/places/index/details/comments.hbs +0 -1
- package/addon/templates/management/places/index/details/documents.hbs +0 -1
- package/addon/templates/management/places/index/details/map.hbs +0 -1
- package/addon/templates/management/places/index/details/operations.hbs +0 -1
- package/addon/templates/management/places/index/details/performance.hbs +0 -1
- package/addon/templates/management/places/index/details/rules.hbs +0 -1
- package/addon/templates/management/vehicles/index/details/equipment.hbs +0 -1
- package/addon/templates/management/vehicles/index/details/maintenance-history.hbs +2 -0
- package/addon/templates/management/vehicles/index/details/schedules.hbs +2 -0
- package/addon/templates/management/vehicles/index/details/work-orders.hbs +2 -0
- package/addon/templates/management/vehicles/index/details.hbs +1 -1
- package/addon/templates/management/vehicles/index/edit.hbs +1 -2
- package/addon/templates/management/vehicles/index/new.hbs +1 -2
- package/addon/templates/management/vendors/index/edit.hbs +1 -2
- package/addon/templates/management/vendors/index/new.hbs +1 -2
- package/addon/templates/management/vendors/index.hbs +1 -2
- package/addon/templates/management/vendors/integrated.hbs +1 -2
- package/addon/templates/operations/orchestrator.hbs +1 -0
- package/addon/templates/operations/orders/index.hbs +6 -1
- package/addon/templates/operations/scheduler/fleet-schedule.hbs +41 -0
- package/addon/templates/operations/scheduler/index.hbs +147 -88
- package/addon/templates/operations/scheduler.hbs +7 -1
- package/addon/templates/settings/avatars.hbs +1 -1
- package/addon/templates/settings/orchestrator.hbs +65 -0
- package/addon/templates/settings/payments/index.hbs +1 -5
- package/addon/templates/settings/scheduling.hbs +82 -0
- package/addon/utils/create-full-calendar-event-from-order.js +52 -14
- package/addon/utils/create-full-calendar-event-from-schedule-item.js +50 -0
- package/addon/utils/fleet-ops-options.js +254 -0
- package/addon/utils/route-colors.js +99 -0
- package/addon/utils/to-calendar-date.js +70 -0
- package/app/components/driver/schedule.js +1 -0
- package/app/components/maintenance/cost-panel.js +1 -0
- package/app/components/maintenance/panel-header.js +1 -0
- package/app/components/maintenance-schedule/details.js +1 -0
- package/app/components/maintenance-schedule/form.js +1 -0
- package/app/components/modals/add-driver-shift.js +1 -0
- package/app/components/modals/bulk-assign-orders.js +1 -0
- package/app/components/modals/driver-shift.js +1 -0
- package/app/components/modals/orchestrator-import.js +1 -0
- package/app/components/modals/scheduling-conflict.js +1 -0
- package/app/components/modals/send-work-order.js +1 -0
- package/app/components/modals/set-driver-availability.js +1 -0
- package/app/components/orchestrator/card-fields-settings.js +1 -0
- package/app/components/orchestrator/order-pool.js +1 -0
- package/app/components/orchestrator/phase-builder.js +1 -0
- package/app/components/orchestrator/plan-viewer.js +1 -0
- package/app/components/orchestrator/resource-panel.js +1 -0
- package/app/components/orchestrator-workbench.js +1 -0
- package/app/components/vehicle/details/maintenance-history.js +1 -0
- package/app/components/vehicle/details/schedules.js +1 -0
- package/app/components/vehicle/details/work-orders.js +1 -0
- package/app/controllers/operations/orchestrator.js +1 -0
- package/app/controllers/settings/orchestrator.js +1 -0
- package/app/controllers/settings/scheduling.js +1 -0
- package/app/routes/operations/orchestrator.js +1 -0
- package/app/routes/settings/orchestrator.js +1 -0
- package/app/routes/settings/scheduling.js +1 -0
- package/app/services/maintenance-schedule-actions.js +1 -0
- package/app/services/orchestration-engine-interface.js +1 -0
- package/app/services/orchestration-engine.js +1 -0
- package/app/services/order-allocation.js +1 -0
- package/app/services/scheduling.js +1 -0
- package/app/services/vroom-allocation-engine.js +1 -0
- package/app/templates/settings/scheduling.js +1 -0
- package/app/utils/create-full-calendar-event-from-schedule-item.js +1 -0
- package/app/utils/route-colors.js +1 -0
- package/composer.json +4 -2
- package/extension.json +1 -1
- package/package.json +6 -5
- package/server/config/fleetops.php +20 -1
- package/server/migrations/2025_08_28_054927_create_parts_table.php +2 -2
- package/server/migrations/2025_08_28_054932_add_public_id_to_maintenance_tables.php +45 -0
- package/server/migrations/2025_09_01_000001_create_maintenance_schedules_table.php +88 -0
- package/server/migrations/2026_04_01_000001_fix_monetary_columns_in_parts_table.php +48 -0
- package/server/migrations/2026_04_01_000003_add_photo_uuid_to_equipment_and_parts_tables.php +61 -0
- package/server/migrations/2026_04_01_000004_add_public_id_to_equipments_table.php +38 -0
- package/server/migrations/2026_04_01_000005_add_missing_columns_to_parts_table.php +67 -0
- package/server/migrations/2026_04_04_000001_add_reminder_offsets_to_maintenance_schedules.php +44 -0
- package/server/migrations/2026_04_08_000001_add_orchestrator_columns_to_vehicles_table.php +53 -0
- package/server/migrations/2026_04_08_000002_add_orchestrator_columns_to_drivers_table.php +41 -0
- package/server/migrations/2026_04_08_000003_add_orchestrator_columns_to_orders_table.php +38 -0
- package/server/migrations/2026_04_08_000004_add_orchestrator_columns_to_payloads_table.php +38 -0
- package/server/migrations/2026_04_08_000005_add_orchestrator_columns_to_waypoints_table.php +38 -0
- package/server/migrations/2026_04_09_000001_create_manifests_table.php +48 -0
- package/server/migrations/2026_04_09_000002_create_manifest_stops_table.php +48 -0
- package/server/migrations/2026_04_09_000003_add_manifest_uuid_to_orders_table.php +28 -0
- package/server/migrations/2026_04_13_000001_add_pod_notes_columns_to_waypoints_table.php +39 -0
- package/server/migrations/2026_04_14_000001_drop_redundant_capacity_columns_from_payloads_table.php +42 -0
- package/server/migrations/2026_04_14_000002_rename_capacity_columns_on_vehicles_table.php +48 -0
- package/server/resources/views/mail/maintenance-schedule-reminder.blade.php +59 -0
- package/server/resources/views/mail/work-order-dispatched.blade.php +67 -0
- package/server/src/Auth/Schemas/FleetOps.php +44 -0
- package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +150 -0
- package/server/src/Console/Commands/SendMaintenanceReminders.php +128 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +15 -2
- package/server/src/Http/Controllers/Api/v1/VehicleController.php +18 -2
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +1 -0
- package/server/src/Http/Controllers/Internal/v1/EquipmentController.php +27 -0
- package/server/src/Http/Controllers/Internal/v1/LiveController.php +9 -2
- package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +165 -0
- package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +304 -0
- package/server/src/Http/Controllers/Internal/v1/ManifestController.php +138 -0
- package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +975 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +42 -0
- package/server/src/Http/Controllers/Internal/v1/PartController.php +27 -0
- package/server/src/Http/Controllers/Internal/v1/SettingController.php +118 -0
- package/server/src/Http/Controllers/Internal/v1/Traits/DriverSchedulingTrait.php +214 -0
- package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +68 -0
- package/server/src/Http/Resources/v1/Driver.php +1 -0
- package/server/src/Http/Resources/v1/Maintenance.php +138 -0
- package/server/src/Http/Resources/v1/MaintenanceSchedule.php +137 -0
- package/server/src/Http/Resources/v1/Orchestrator/Order.php +116 -0
- package/server/src/Http/Resources/v1/Order.php +7 -4
- package/server/src/Http/Resources/v1/Waypoint.php +7 -0
- package/server/src/Http/Resources/v1/WorkOrder.php +136 -0
- package/server/src/Imports/EquipmentImport.php +32 -0
- package/server/src/Imports/MaintenanceImport.php +32 -0
- package/server/src/Imports/MaintenanceScheduleImport.php +32 -0
- package/server/src/Imports/PartImport.php +32 -0
- package/server/src/Imports/WorkOrderImport.php +32 -0
- package/server/src/Jobs/ProcessAllocationJob.php +119 -0
- package/server/src/Listeners/HandleDeliveryCompletion.php +47 -0
- package/server/src/Listeners/NotifyDriverOnShiftChange.php +63 -0
- package/server/src/Mail/MaintenanceScheduleReminder.php +68 -0
- package/server/src/Mail/WorkOrderDispatched.php +58 -0
- package/server/src/Models/Asset.php +2 -2
- package/server/src/Models/Device.php +1 -1
- package/server/src/Models/Driver.php +82 -4
- package/server/src/Models/Equipment.php +62 -2
- package/server/src/Models/Maintenance.php +127 -9
- package/server/src/Models/MaintenanceSchedule.php +353 -0
- package/server/src/Models/Manifest.php +214 -0
- package/server/src/Models/ManifestStop.php +162 -0
- package/server/src/Models/Order.php +70 -0
- package/server/src/Models/OrderConfig.php +5 -2
- package/server/src/Models/Part.php +69 -3
- package/server/src/Models/Place.php +1 -1
- package/server/src/Models/Sensor.php +1 -1
- package/server/src/Models/ServiceQuote.php +1 -1
- package/server/src/Models/Vehicle.php +18 -1
- package/server/src/Models/Warranty.php +1 -1
- package/server/src/Models/Waypoint.php +7 -1
- package/server/src/Models/WorkOrder.php +122 -12
- package/server/src/Notifications/DriverShiftChanged.php +110 -0
- package/server/src/Observers/WorkOrderObserver.php +107 -0
- package/server/src/Orchestration/Contracts/OrchestrationEngineInterface.php +63 -0
- package/server/src/Orchestration/Engines/DriverAssignmentEngine.php +265 -0
- package/server/src/Orchestration/Engines/GreedyOrchestrationEngine.php +155 -0
- package/server/src/Orchestration/Engines/RouteSequencingEngine.php +272 -0
- package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +192 -0
- package/server/src/Orchestration/OrchestrationEngineRegistry.php +83 -0
- package/server/src/Orchestration/Support/OrchestrationPayloadBuilder.php +380 -0
- package/server/src/Providers/EventServiceProvider.php +7 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +42 -15
- package/server/src/routes.php +65 -4
- package/translations/ar-ae.yml +44 -12
- package/translations/bg-bg.yaml +51 -10
- package/translations/en-us.yaml +444 -1
- package/translations/fr-fr.yaml +51 -10
- package/translations/mn-mn.yaml +51 -10
- package/translations/pt-br.yaml +51 -10
- package/translations/ru-ru.yaml +51 -10
- package/translations/vi-vn.yaml +48 -12
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
|
|
4
|
+
export default class MaintenanceSchedulesIndexRoute extends Route {
|
|
5
|
+
@service store;
|
|
6
|
+
|
|
7
|
+
queryParams = {
|
|
8
|
+
page: { refreshModel: true },
|
|
9
|
+
limit: { refreshModel: true },
|
|
10
|
+
sort: { refreshModel: true },
|
|
11
|
+
query: { refreshModel: true },
|
|
12
|
+
status: { refreshModel: true },
|
|
13
|
+
public_id: { refreshModel: true },
|
|
14
|
+
created_at: { refreshModel: true },
|
|
15
|
+
updated_at: { refreshModel: true },
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
model(params) {
|
|
19
|
+
return this.store.query('maintenance-schedule', { ...params });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,3 +1,29 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action } from '@ember/object';
|
|
2
4
|
|
|
3
|
-
export default class MaintenanceWorkOrdersIndexDetailsRoute extends Route {
|
|
5
|
+
export default class MaintenanceWorkOrdersIndexDetailsRoute extends Route {
|
|
6
|
+
@service store;
|
|
7
|
+
@service notifications;
|
|
8
|
+
@service hostRouter;
|
|
9
|
+
@service abilities;
|
|
10
|
+
@service intl;
|
|
11
|
+
|
|
12
|
+
@action error(error) {
|
|
13
|
+
this.notifications.serverError(error);
|
|
14
|
+
if (typeof error.message === 'string' && error.message.endsWith('not found')) {
|
|
15
|
+
return this.hostRouter.transitionTo('maintenance.work-orders.index');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
beforeModel() {
|
|
20
|
+
if (this.abilities.cannot('fleet-ops view work-order')) {
|
|
21
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
22
|
+
return this.hostRouter.transitionTo('maintenance.work-orders.index');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
model({ public_id }) {
|
|
27
|
+
return this.store.findRecord('work-order', public_id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,3 +1,29 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action } from '@ember/object';
|
|
2
4
|
|
|
3
|
-
export default class MaintenanceWorkOrdersIndexEditRoute extends Route {
|
|
5
|
+
export default class MaintenanceWorkOrdersIndexEditRoute extends Route {
|
|
6
|
+
@service store;
|
|
7
|
+
@service notifications;
|
|
8
|
+
@service hostRouter;
|
|
9
|
+
@service abilities;
|
|
10
|
+
@service intl;
|
|
11
|
+
|
|
12
|
+
@action error(error) {
|
|
13
|
+
this.notifications.serverError(error);
|
|
14
|
+
if (typeof error.message === 'string' && error.message.endsWith('not found')) {
|
|
15
|
+
return this.hostRouter.transitionTo('maintenance.work-orders.index');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
beforeModel() {
|
|
20
|
+
if (this.abilities.cannot('fleet-ops update work-order')) {
|
|
21
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
22
|
+
return this.hostRouter.transitionTo('maintenance.work-orders.index');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
model({ public_id }) {
|
|
27
|
+
return this.store.findRecord('work-order', public_id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Operations::AllocationRoute
|
|
6
|
+
*
|
|
7
|
+
* Entry point for the Dispatcher Workbench at /operations/allocation.
|
|
8
|
+
* The route performs an ability check and then hands off to the
|
|
9
|
+
* OrchestratorWorkbench component via the controller.
|
|
10
|
+
*/
|
|
11
|
+
export default class OperationsAllocationRoute extends Route {
|
|
12
|
+
@service notifications;
|
|
13
|
+
@service hostRouter;
|
|
14
|
+
@service abilities;
|
|
15
|
+
@service intl;
|
|
16
|
+
|
|
17
|
+
beforeModel() {
|
|
18
|
+
if (this.abilities.cannot('fleet-ops list order')) {
|
|
19
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
20
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
|
|
4
|
+
export default class OperationsSchedulerFleetScheduleRoute extends Route {
|
|
5
|
+
@service store;
|
|
6
|
+
@service notifications;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
@service hostRouter;
|
|
10
|
+
|
|
11
|
+
beforeModel() {
|
|
12
|
+
if (this.abilities.cannot('fleet-ops list driver')) {
|
|
13
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
14
|
+
return this.hostRouter.transitionTo('console.fleet-ops.operations.scheduler.index');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async model() {
|
|
19
|
+
return this.store.query('driver', { limit: 200 });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
setupController(controller, model) {
|
|
23
|
+
super.setupController(controller, model);
|
|
24
|
+
controller.drivers = model.toArray();
|
|
25
|
+
controller.loadScheduleItems.perform();
|
|
26
|
+
controller.loadScheduleExceptions.perform();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -1,46 +1,68 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
-
import { isValid as isValidDate } from 'date-fns';
|
|
4
|
-
import { isNone } from '@ember/utils';
|
|
5
|
-
// import createFullCalendarEventFromOrder from '../../../utils/create-full-calendar-event-from-order';
|
|
6
|
-
|
|
7
|
-
const getUnscheduledOrder = (order) => {
|
|
8
|
-
return isNone(order.scheduled_at);
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const getScheduledOrder = (order) => {
|
|
12
|
-
return isValidDate(order.scheduled_at);
|
|
13
|
-
};
|
|
14
3
|
|
|
4
|
+
/**
|
|
5
|
+
* OperationsSchedulerIndexRoute
|
|
6
|
+
*
|
|
7
|
+
* Responsibilities:
|
|
8
|
+
* 1. Access control — redirect if the user cannot list orders.
|
|
9
|
+
* 2. Initial data loading — fetch active orders and drivers in parallel.
|
|
10
|
+
* 3. Socket subscription lifecycle — delegate to the controller.
|
|
11
|
+
*
|
|
12
|
+
* All post-load logic (filtering, event mapping, conflict detection) lives
|
|
13
|
+
* in the controller and the SchedulingService.
|
|
14
|
+
*/
|
|
15
15
|
export default class OperationsSchedulerIndexRoute extends Route {
|
|
16
16
|
@service store;
|
|
17
|
-
@service notifications;
|
|
18
|
-
@service hostRouter;
|
|
19
17
|
@service abilities;
|
|
20
|
-
@service
|
|
18
|
+
@service hostRouter;
|
|
21
19
|
|
|
22
20
|
beforeModel() {
|
|
23
21
|
if (this.abilities.cannot('fleet-ops list order')) {
|
|
24
|
-
this.
|
|
25
|
-
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
22
|
+
return this.hostRouter.transitionTo('console.fleet-ops.index');
|
|
26
23
|
}
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
model() {
|
|
30
|
-
|
|
26
|
+
async model() {
|
|
27
|
+
// Load active orders (created, dispatched, active) alongside drivers.
|
|
28
|
+
// The broader status scope ensures dispatchers see each driver's full
|
|
29
|
+
// day — not just pre-dispatch orders — enabling accurate conflict
|
|
30
|
+
// detection and capacity visualisation.
|
|
31
|
+
const [orders, drivers] = await Promise.all([
|
|
32
|
+
this.store.query('order', {
|
|
33
|
+
status: ['created', 'dispatched', 'active'],
|
|
34
|
+
with: ['payload', 'driverAssigned.vehicle'],
|
|
35
|
+
limit: 500,
|
|
36
|
+
}),
|
|
37
|
+
this.store.query('driver', {
|
|
38
|
+
with: ['currentShift'],
|
|
39
|
+
limit: 200,
|
|
40
|
+
}),
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
return { orders, drivers };
|
|
31
44
|
}
|
|
32
45
|
|
|
33
46
|
setupController(controller, model) {
|
|
34
|
-
|
|
35
|
-
|
|
47
|
+
super.setupController(controller, model);
|
|
48
|
+
|
|
49
|
+
// Set drivers on the controller so the resource timeline can render them.
|
|
50
|
+
// Orders are read reactively from the Ember Data store via computed getters,
|
|
51
|
+
// so we do not need to set them explicitly here.
|
|
52
|
+
controller.set('drivers', model.drivers.toArray());
|
|
36
53
|
|
|
37
|
-
//
|
|
38
|
-
|
|
54
|
+
// Initialise viewDate to the current UTC instant.
|
|
55
|
+
// @event-calendar/core applies timezoneOffsetMins internally so the
|
|
56
|
+
// calendar opens on the correct company-local day automatically.
|
|
57
|
+
controller.set('viewDate', new Date());
|
|
39
58
|
|
|
40
|
-
//
|
|
41
|
-
controller.
|
|
59
|
+
// Open SocketCluster subscriptions for real-time calendar updates.
|
|
60
|
+
controller.subscribeToRealTimeUpdates();
|
|
61
|
+
}
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
//
|
|
63
|
+
resetController(controller) {
|
|
64
|
+
// Close all socket channels when the dispatcher navigates away
|
|
65
|
+
// to prevent memory leaks and stale event handlers.
|
|
66
|
+
controller.unsubscribeFromRealTimeUpdates();
|
|
45
67
|
}
|
|
46
68
|
}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
2
3
|
|
|
3
|
-
export default class OperationsSchedulerRoute extends Route {
|
|
4
|
+
export default class OperationsSchedulerRoute extends Route {
|
|
5
|
+
@service notifications;
|
|
6
|
+
@service hostRouter;
|
|
7
|
+
@service abilities;
|
|
8
|
+
@service intl;
|
|
9
|
+
|
|
10
|
+
beforeModel() {
|
|
11
|
+
if (this.abilities.cannot('fleet-ops list order')) {
|
|
12
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
13
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Route from '@ember/routing/route';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Settings::OrchestratorRoute
|
|
6
|
+
*
|
|
7
|
+
* Entry point for the allocation settings page at /settings/order-allocation.
|
|
8
|
+
* Loads current settings into the controller on entry.
|
|
9
|
+
*/
|
|
10
|
+
export default class SettingsOrchestratorRoute extends Route {
|
|
11
|
+
@service notifications;
|
|
12
|
+
@service abilities;
|
|
13
|
+
@service intl;
|
|
14
|
+
@service hostRouter;
|
|
15
|
+
|
|
16
|
+
beforeModel() {
|
|
17
|
+
if (this.abilities.cannot('fleet-ops list order')) {
|
|
18
|
+
this.notifications.warning(this.intl.t('common.unauthorized-access'));
|
|
19
|
+
return this.hostRouter.transitionTo('console.fleet-ops');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
setupController(controller) {
|
|
24
|
+
super.setupController(...arguments);
|
|
25
|
+
controller.loadSettings.perform();
|
|
26
|
+
}
|
|
27
|
+
}
|
package/addon/routes.js
CHANGED
|
@@ -14,7 +14,11 @@ export default buildRoutes(function () {
|
|
|
14
14
|
this.route('edit', { path: '/edit/:public_id' });
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
-
this.route('
|
|
17
|
+
this.route('orchestrator', function () {});
|
|
18
|
+
this.route('scheduler', function () {
|
|
19
|
+
this.route('index', { path: '/' });
|
|
20
|
+
this.route('fleet-schedule');
|
|
21
|
+
});
|
|
18
22
|
this.route('orders', { path: '/' }, function () {
|
|
19
23
|
this.route('index', { path: '/' }, function () {
|
|
20
24
|
this.route('new');
|
|
@@ -80,6 +84,9 @@ export default buildRoutes(function () {
|
|
|
80
84
|
this.route('positions');
|
|
81
85
|
this.route('devices');
|
|
82
86
|
this.route('equipment');
|
|
87
|
+
this.route('schedules');
|
|
88
|
+
this.route('work-orders');
|
|
89
|
+
this.route('maintenance-history');
|
|
83
90
|
this.route('virtual', { path: '/:slug' });
|
|
84
91
|
});
|
|
85
92
|
this.route('edit', { path: '/edit/:public_id' });
|
|
@@ -181,6 +188,27 @@ export default buildRoutes(function () {
|
|
|
181
188
|
this.route('tracking');
|
|
182
189
|
});
|
|
183
190
|
this.route('maintenance', function () {
|
|
191
|
+
this.route('schedules', function () {
|
|
192
|
+
this.route('index', { path: '/' }, function () {
|
|
193
|
+
this.route('new');
|
|
194
|
+
this.route('edit', { path: '/edit/:public_id' });
|
|
195
|
+
this.route('details', { path: '/:public_id' }, function () {
|
|
196
|
+
this.route('index', { path: '/' });
|
|
197
|
+
this.route('work-orders');
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
this.route('maintenances', function () {
|
|
203
|
+
this.route('index', { path: '/' }, function () {
|
|
204
|
+
this.route('new');
|
|
205
|
+
this.route('edit', { path: '/edit/:public_id' });
|
|
206
|
+
this.route('details', { path: '/:public_id' }, function () {
|
|
207
|
+
this.route('index', { path: '/' });
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
|
|
184
212
|
this.route('work-orders', function () {
|
|
185
213
|
this.route('index', { path: '/' }, function () {
|
|
186
214
|
this.route('new');
|
|
@@ -229,6 +257,8 @@ export default buildRoutes(function () {
|
|
|
229
257
|
this.route('custom-fields');
|
|
230
258
|
this.route('avatars');
|
|
231
259
|
this.route('routing');
|
|
260
|
+
this.route('orchestrator');
|
|
261
|
+
this.route('scheduling');
|
|
232
262
|
this.route('payments', function () {
|
|
233
263
|
this.route('index', { path: '/' });
|
|
234
264
|
this.route('onboard');
|
|
@@ -1,9 +1,47 @@
|
|
|
1
|
-
import ResourceActionService from '@fleetbase/ember-core/services/resource-action';
|
|
1
|
+
import ResourceActionService, { inject as service } from '@fleetbase/ember-core/services/resource-action';
|
|
2
2
|
import leafletIcon from '@fleetbase/ember-core/utils/leaflet-icon';
|
|
3
3
|
import config from 'ember-get-config';
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
|
+
import { isArray } from '@ember/array';
|
|
6
|
+
import { dasherize } from '@ember/string';
|
|
5
7
|
|
|
6
8
|
export default class DriverActionsService extends ResourceActionService {
|
|
9
|
+
@service('universe/menu-service') menuService;
|
|
10
|
+
|
|
11
|
+
get registeredTabs() {
|
|
12
|
+
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:driver:details');
|
|
13
|
+
return (isArray(registeredTabs) ? registeredTabs : [])
|
|
14
|
+
.map((tab) => {
|
|
15
|
+
delete tab.route;
|
|
16
|
+
if (!tab.key) {
|
|
17
|
+
tab.key = tab.id ?? dasherize(tab.label ?? tab.title);
|
|
18
|
+
}
|
|
19
|
+
return tab;
|
|
20
|
+
})
|
|
21
|
+
.filter((tab) => !tab.component);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
get panelTabs() {
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
key: 'overview',
|
|
28
|
+
label: this.intl.t('common.overview'),
|
|
29
|
+
component: 'driver/details',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: 'positions',
|
|
33
|
+
label: 'Positions',
|
|
34
|
+
component: 'positions-replay',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
key: 'schedule',
|
|
38
|
+
label: this.intl.t('common.schedule'),
|
|
39
|
+
component: 'driver/schedule',
|
|
40
|
+
},
|
|
41
|
+
...this.registeredTabs,
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
|
|
7
45
|
constructor() {
|
|
8
46
|
super(...arguments);
|
|
9
47
|
this.initialize('driver');
|
|
@@ -68,12 +106,7 @@ export default class DriverActionsService extends ResourceActionService {
|
|
|
68
106
|
},
|
|
69
107
|
},
|
|
70
108
|
],
|
|
71
|
-
tabs:
|
|
72
|
-
{
|
|
73
|
-
label: this.intl.t('common.overview'),
|
|
74
|
-
component: 'driver/details',
|
|
75
|
-
},
|
|
76
|
-
],
|
|
109
|
+
tabs: this.panelTabs,
|
|
77
110
|
...options,
|
|
78
111
|
});
|
|
79
112
|
},
|
|
@@ -32,7 +32,10 @@ export default class DriverSchedulingService extends Service {
|
|
|
32
32
|
*/
|
|
33
33
|
@task *createSchedule(data) {
|
|
34
34
|
try {
|
|
35
|
-
const schedule = this.store.createRecord('schedule',
|
|
35
|
+
const schedule = this.store.createRecord('schedule', {
|
|
36
|
+
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
37
|
+
...data,
|
|
38
|
+
});
|
|
36
39
|
yield schedule.save();
|
|
37
40
|
this.notifications.success('Schedule created successfully');
|
|
38
41
|
return schedule;
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
import ResourceActionService from '@fleetbase/ember-core/services/resource-action';
|
|
1
|
+
import ResourceActionService, { inject as service } from '@fleetbase/ember-core/services/resource-action';
|
|
2
2
|
|
|
3
3
|
export default class EquipmentActionsService extends ResourceActionService {
|
|
4
|
+
@service currentUser;
|
|
5
|
+
|
|
4
6
|
constructor() {
|
|
5
7
|
super(...arguments);
|
|
6
|
-
this.initialize('equipment'
|
|
8
|
+
this.initialize('equipment', {
|
|
9
|
+
defaultAttributes: {
|
|
10
|
+
currency: this.defaultCurrency,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get defaultCurrency() {
|
|
16
|
+
return this.currentUser?.company?.currency || 'USD';
|
|
7
17
|
}
|
|
8
18
|
|
|
9
19
|
transition = {
|
|
10
|
-
view: (equipment) => this.transitionTo('maintenance.
|
|
11
|
-
edit: (equipment) => this.transitionTo('maintenance.
|
|
12
|
-
create: () => this.transitionTo('maintenance.
|
|
20
|
+
view: (equipment) => this.transitionTo('maintenance.equipment.index.details', equipment),
|
|
21
|
+
edit: (equipment) => this.transitionTo('maintenance.equipment.index.edit', equipment),
|
|
22
|
+
create: () => this.transitionTo('maintenance.equipment.index.new'),
|
|
13
23
|
};
|
|
14
24
|
|
|
15
25
|
panel = {
|
|
@@ -233,11 +233,20 @@ export default class LeafletMapManagerService extends Service {
|
|
|
233
233
|
const { router, formatter } = this.leafletRoutingControl.get(routingService);
|
|
234
234
|
const tag = `routing:${Date.now().toString(36)}:${Math.random().toString(36).slice(2, 8)}`;
|
|
235
235
|
|
|
236
|
-
|
|
236
|
+
// Allow callers to suppress the routing control's default waypoint markers
|
|
237
|
+
// by passing createMarker: () => null in options. This is used by the
|
|
238
|
+
// orchestrator which renders its own custom div-icon markers via ember-leaflet.
|
|
239
|
+
const routingControlOptions = {
|
|
237
240
|
router,
|
|
238
241
|
formatter,
|
|
239
242
|
waypoints,
|
|
240
|
-
|
|
243
|
+
alternativeClassName: 'hidden',
|
|
244
|
+
addWaypoints: false,
|
|
245
|
+
};
|
|
246
|
+
if (typeof options.createMarker === 'function') {
|
|
247
|
+
routingControlOptions.createMarker = options.createMarker;
|
|
248
|
+
} else {
|
|
249
|
+
routingControlOptions.markerOptions = {
|
|
241
250
|
icon: L.icon({
|
|
242
251
|
iconUrl: '/assets/images/marker-icon.png',
|
|
243
252
|
iconRetinaUrl: '/assets/images/marker-icon-2x.png',
|
|
@@ -245,10 +254,9 @@ export default class LeafletMapManagerService extends Service {
|
|
|
245
254
|
iconSize: [25, 41],
|
|
246
255
|
iconAnchor: [12, 41],
|
|
247
256
|
}),
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
}).addTo(map);
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const routingControl = new RoutingControl(routingControlOptions).addTo(map);
|
|
252
260
|
|
|
253
261
|
// Track routing control
|
|
254
262
|
this.routingControl = routingControl;
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import ResourceActionService from '@fleetbase/ember-core/services/resource-action';
|
|
1
|
+
import ResourceActionService, { inject as service } from '@fleetbase/ember-core/services/resource-action';
|
|
2
2
|
|
|
3
3
|
export default class MaintenanceActionsService extends ResourceActionService {
|
|
4
|
+
@service currentUser;
|
|
5
|
+
|
|
4
6
|
constructor() {
|
|
5
7
|
super(...arguments);
|
|
6
|
-
this.initialize('maintenance'
|
|
8
|
+
this.initialize('maintenance', {
|
|
9
|
+
defaultAttributes: {
|
|
10
|
+
currency: this.defaultCurrency,
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get defaultCurrency() {
|
|
16
|
+
return this.currentUser?.company?.currency || 'USD';
|
|
7
17
|
}
|
|
8
18
|
|
|
9
19
|
transition = {
|
|
@@ -19,16 +29,14 @@ export default class MaintenanceActionsService extends ResourceActionService {
|
|
|
19
29
|
content: 'maintenance/form',
|
|
20
30
|
title: this.intl.t('common.create-a-new-resource', { resource: this.intl.t('resource.maintenance')?.toLowerCase() }),
|
|
21
31
|
useDefaultSaveTask: true,
|
|
22
|
-
saveOptions: {
|
|
23
|
-
callback: this.refresh,
|
|
24
|
-
},
|
|
32
|
+
saveOptions: { callback: this.refresh },
|
|
25
33
|
maintenance,
|
|
26
34
|
});
|
|
27
35
|
},
|
|
28
36
|
edit: (maintenance) => {
|
|
29
37
|
return this.resourceContextPanel.open({
|
|
30
38
|
content: 'maintenance/form',
|
|
31
|
-
title: this.intl.t('common.edit-resource-name', { resourceName: maintenance.
|
|
39
|
+
title: this.intl.t('common.edit-resource-name', { resourceName: maintenance.summary }),
|
|
32
40
|
useDefaultSaveTask: true,
|
|
33
41
|
maintenance,
|
|
34
42
|
});
|
|
@@ -36,12 +44,7 @@ export default class MaintenanceActionsService extends ResourceActionService {
|
|
|
36
44
|
view: (maintenance) => {
|
|
37
45
|
return this.resourceContextPanel.open({
|
|
38
46
|
maintenance,
|
|
39
|
-
tabs: [
|
|
40
|
-
{
|
|
41
|
-
label: this.intl.t('common.overview'),
|
|
42
|
-
component: 'maintenance/details',
|
|
43
|
-
},
|
|
44
|
-
],
|
|
47
|
+
tabs: [{ label: this.intl.t('common.overview'), component: 'maintenance/details' }],
|
|
45
48
|
});
|
|
46
49
|
},
|
|
47
50
|
};
|
|
@@ -61,7 +64,7 @@ export default class MaintenanceActionsService extends ResourceActionService {
|
|
|
61
64
|
edit: (maintenance, options = {}, saveOptions = {}) => {
|
|
62
65
|
return this.modalsManager.show('modals/resource', {
|
|
63
66
|
resource: maintenance,
|
|
64
|
-
title: this.intl.t('common.edit-resource-name', { resourceName: maintenance.
|
|
67
|
+
title: this.intl.t('common.edit-resource-name', { resourceName: maintenance.summary }),
|
|
65
68
|
acceptButtonText: this.intl.t('common.save-changes'),
|
|
66
69
|
saveButtonIcon: 'save',
|
|
67
70
|
component: 'maintenance/form',
|
|
@@ -72,7 +75,7 @@ export default class MaintenanceActionsService extends ResourceActionService {
|
|
|
72
75
|
view: (maintenance, options = {}) => {
|
|
73
76
|
return this.modalsManager.show('modals/resource', {
|
|
74
77
|
resource: maintenance,
|
|
75
|
-
title: maintenance.
|
|
78
|
+
title: maintenance.summary,
|
|
76
79
|
component: 'maintenance/details',
|
|
77
80
|
...options,
|
|
78
81
|
});
|