@fleetbase/fleetops-engine 0.6.51 → 0.6.52
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/README.md +0 -2
- package/addon/components/cell/telematic-provider.hbs +16 -0
- package/addon/components/cell/telematic-provider.js +36 -0
- package/addon/components/cell/telematic-status.hbs +1 -0
- package/addon/components/cell/telematic-status.js +39 -0
- package/addon/components/device/manager.hbs +5 -6
- package/addon/components/device/manager.js +12 -15
- package/addon/components/driver/details.hbs +1 -1
- package/addon/components/fleet/vehicle-listing.js +1 -0
- package/addon/components/fuel-integration/form.hbs +200 -0
- package/addon/components/fuel-integration/form.js +242 -0
- package/addon/components/fuel-integration/hub.hbs +154 -0
- package/addon/components/fuel-integration/hub.js +165 -0
- package/addon/components/fuel-integration/matching-priority.hbs +76 -0
- package/addon/components/fuel-integration/matching-priority.js +145 -0
- package/addon/components/fuel-report/details.hbs +13 -1
- package/addon/components/issue/details.hbs +3 -57
- package/addon/components/issue/details.js +0 -96
- package/addon/components/layout/fleet-ops-sidebar.js +20 -2
- package/addon/components/map/drawer/device-event-listing.hbs +12 -2
- package/addon/components/map/drawer/driver-listing.hbs +14 -1
- package/addon/components/map/drawer/place-listing.hbs +14 -1
- package/addon/components/map/drawer/position-listing.hbs +12 -2
- package/addon/components/map/drawer/vehicle-listing.hbs +14 -1
- package/addon/components/modals/assigned-orders.hbs +40 -0
- package/addon/components/modals/attach-device.hbs +4 -3
- package/addon/components/modals/attach-telematic-device.hbs +25 -0
- package/addon/components/modals/attach-telematic-device.js +3 -0
- package/addon/components/modals/driver-assign-order.hbs +7 -58
- package/addon/components/modals/driver-assign-vehicle.hbs +10 -2
- package/addon/components/modals/fleet-assign-driver.hbs +18 -0
- package/addon/components/modals/fleet-assign-driver.js +3 -0
- package/addon/components/modals/fleet-assign-vehicle.hbs +18 -0
- package/addon/components/modals/fleet-assign-vehicle.js +3 -0
- package/addon/components/modals/telematic-connection-diagnostics.hbs +75 -0
- package/addon/components/modals/telematic-connection-diagnostics.js +287 -0
- package/addon/components/modals/vehicle-details.hbs +6 -1
- package/addon/components/modals/vehicle-form.hbs +8 -1
- package/addon/components/order/card.hbs +106 -0
- package/addon/components/order/card.js +257 -0
- package/addon/components/order/form/service-rate.hbs +2 -0
- package/addon/components/service-rate/form.hbs +3 -2
- package/addon/components/telematic/details.hbs +98 -87
- package/addon/components/telematic/details.js +230 -1
- package/addon/components/telematic/form.hbs +303 -72
- package/addon/components/telematic/form.js +519 -3
- package/addon/components/telematic/hub.hbs +149 -0
- package/addon/components/telematic/hub.js +142 -0
- package/addon/components/telematic/settings.hbs +152 -0
- package/addon/components/telematic/settings.js +45 -0
- package/addon/components/telematic/tab-empty-state.hbs +29 -0
- package/addon/components/telematic/tab-empty-state.js +33 -0
- package/addon/components/vehicle/details.hbs +6 -1
- package/addon/components/vehicle/form.hbs +2 -1
- package/addon/components/widget/fuel-providers.hbs +43 -0
- package/addon/components/widget/fuel-providers.js +27 -0
- package/addon/controllers/connectivity/devices/index/details.js +27 -1
- package/addon/controllers/connectivity/devices/index.js +14 -0
- package/addon/controllers/connectivity/fuel-providers/details/sync.js +18 -0
- package/addon/controllers/connectivity/fuel-providers/details/transactions.js +24 -0
- package/addon/controllers/connectivity/fuel-providers/details.js +69 -0
- package/addon/controllers/connectivity/fuel-providers/edit.js +24 -0
- package/addon/controllers/connectivity/fuel-providers/index.js +177 -0
- package/addon/controllers/connectivity/fuel-providers/new.js +37 -0
- package/addon/controllers/connectivity/telematics/details/attachments.js +247 -0
- package/addon/controllers/connectivity/telematics/details/devices.js +368 -0
- package/addon/controllers/connectivity/telematics/details/events.js +244 -0
- package/addon/controllers/connectivity/telematics/details/index.js +3 -0
- package/addon/controllers/connectivity/telematics/details/logs.js +43 -0
- package/addon/controllers/connectivity/telematics/details/sensors.js +270 -0
- package/addon/controllers/connectivity/telematics/details.js +149 -0
- package/addon/controllers/connectivity/telematics/{index/edit.js → edit.js} +15 -4
- package/addon/controllers/connectivity/telematics/index.js +25 -5
- package/addon/controllers/connectivity/telematics/{index/new.js → new.js} +8 -2
- package/addon/controllers/management/drivers/index/details.js +78 -1
- package/addon/controllers/management/drivers/index.js +39 -0
- package/addon/controllers/management/fleets/index/details.js +23 -1
- package/addon/controllers/management/fleets/index.js +6 -1
- package/addon/controllers/management/fuel-reports/index.js +37 -1
- package/addon/controllers/management/fuel-transactions/index/details.js +70 -0
- package/addon/controllers/management/fuel-transactions/index.js +240 -0
- package/addon/controllers/management/vehicles/index/details.js +32 -0
- package/addon/controllers/management/vehicles/index.js +26 -0
- package/addon/controllers/operations/orders/index.js +4 -0
- package/addon/controllers/settings/payments/index.js +5 -0
- package/addon/extension.js +10 -0
- package/addon/routes/connectivity/fuel-providers/details/index.js +7 -0
- package/addon/routes/connectivity/fuel-providers/details/matching.js +7 -0
- package/addon/routes/connectivity/fuel-providers/details/settings.js +7 -0
- package/addon/routes/connectivity/fuel-providers/details/sync.js +18 -0
- package/addon/routes/connectivity/fuel-providers/details/transactions.js +14 -0
- package/addon/routes/connectivity/fuel-providers/details.js +18 -0
- package/addon/routes/connectivity/fuel-providers/edit.js +18 -0
- package/addon/routes/connectivity/fuel-providers/index.js +20 -0
- package/addon/routes/connectivity/fuel-providers/new.js +3 -0
- package/addon/routes/connectivity/fuel-providers.js +3 -0
- package/addon/routes/connectivity/telematics/details/attachments.js +28 -0
- package/addon/routes/connectivity/telematics/details/devices.js +30 -0
- package/addon/routes/connectivity/telematics/details/events.js +33 -0
- package/addon/routes/connectivity/telematics/details/index.js +3 -0
- package/addon/routes/connectivity/telematics/details/logs.js +17 -0
- package/addon/routes/connectivity/telematics/details/sensors.js +29 -0
- package/addon/routes/connectivity/telematics/{index/details.js → details.js} +1 -1
- package/addon/routes/connectivity/telematics/{index/edit.js → edit.js} +1 -1
- package/addon/routes/connectivity/telematics/new.js +3 -0
- package/addon/routes/management/drivers/index/details/activity.js +3 -0
- package/addon/routes/management/fuel-reports/index.js +2 -0
- package/addon/routes/management/fuel-transactions/index/details.js +18 -0
- package/addon/routes/management/fuel-transactions/index.js +21 -0
- package/addon/routes/management/fuel-transactions.js +3 -0
- package/addon/routes.js +28 -9
- package/addon/services/device-actions.js +64 -1
- package/addon/services/device-event-actions.js +12 -1
- package/addon/services/driver-actions.js +147 -11
- package/addon/services/fleet-actions.js +66 -1
- package/addon/services/fuel-integration-actions.js +31 -0
- package/addon/services/issue-actions.js +1 -1
- package/addon/services/telematic-actions.js +9 -3
- package/addon/services/vehicle-actions.js +125 -0
- package/addon/styles/fleetops-engine.css +310 -34
- package/addon/templates/analytics/reports/index.hbs +19 -1
- package/addon/templates/connectivity/devices/index.hbs +19 -1
- package/addon/templates/connectivity/events/index.hbs +16 -1
- package/addon/templates/connectivity/fuel-providers/details/index.hbs +38 -0
- package/addon/templates/connectivity/fuel-providers/details/matching.hbs +13 -0
- package/addon/templates/connectivity/fuel-providers/details/settings.hbs +11 -0
- package/addon/templates/connectivity/fuel-providers/details/sync.hbs +48 -0
- package/addon/templates/connectivity/fuel-providers/details/transactions.hbs +21 -0
- package/addon/templates/connectivity/fuel-providers/details.hbs +51 -0
- package/addon/templates/connectivity/fuel-providers/edit.hbs +24 -0
- package/addon/templates/connectivity/fuel-providers/index.hbs +12 -0
- package/addon/templates/connectivity/fuel-providers/new.hbs +22 -0
- package/addon/templates/connectivity/fuel-providers.hbs +1 -0
- package/addon/templates/connectivity/sensors/index.hbs +19 -1
- package/addon/templates/connectivity/telematics/details/attachments.hbs +163 -0
- package/addon/templates/connectivity/telematics/details/devices.hbs +88 -0
- package/addon/templates/connectivity/telematics/details/events.hbs +101 -0
- package/addon/templates/connectivity/telematics/{index/details → details}/index.hbs +0 -1
- package/addon/templates/connectivity/telematics/details/logs.hbs +69 -0
- package/addon/templates/connectivity/telematics/details/sensors.hbs +88 -0
- package/addon/templates/connectivity/telematics/details.hbs +53 -0
- package/addon/templates/connectivity/telematics/edit.hbs +27 -0
- package/addon/templates/connectivity/telematics/index.hbs +6 -8
- package/addon/templates/connectivity/telematics/new.hbs +24 -0
- package/addon/templates/maintenance/equipment/index.hbs +19 -1
- package/addon/templates/maintenance/maintenances/index.hbs +15 -1
- package/addon/templates/maintenance/parts/index.hbs +19 -1
- package/addon/templates/maintenance/schedules/index.hbs +19 -1
- package/addon/templates/maintenance/work-orders/index.hbs +19 -1
- package/addon/templates/management/contacts/customers.hbs +15 -1
- package/addon/templates/management/contacts/index.hbs +19 -1
- package/addon/templates/management/drivers/index/details/activity.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +19 -1
- package/addon/templates/management/fleets/index.hbs +19 -1
- package/addon/templates/management/fuel-reports/index.hbs +19 -1
- package/addon/templates/management/fuel-transactions/index/details.hbs +73 -0
- package/addon/templates/management/fuel-transactions/index.hbs +58 -0
- package/addon/templates/management/fuel-transactions.hbs +1 -0
- package/addon/templates/management/issues/index.hbs +19 -1
- package/addon/templates/management/places/index.hbs +19 -1
- package/addon/templates/management/vehicles/index.hbs +19 -1
- package/addon/templates/management/vendors/index.hbs +19 -1
- package/addon/templates/management/vendors/integrated.hbs +13 -1
- package/addon/templates/operations/orders/index.hbs +19 -1
- package/addon/templates/operations/service-rates/index.hbs +19 -1
- package/addon/templates/settings/payments/index.hbs +15 -1
- package/addon/utils/fleet-ops-options.js +3 -0
- package/app/components/cell/telematic-provider.js +1 -0
- package/app/components/cell/telematic-status.js +1 -0
- package/app/components/fuel-integration/form.js +1 -0
- package/app/components/fuel-integration/hub.js +1 -0
- package/app/components/fuel-integration/matching-priority.js +1 -0
- package/app/components/modals/assigned-orders.js +1 -0
- package/app/components/modals/attach-telematic-device.js +1 -0
- package/app/components/modals/fleet-assign-driver.js +1 -0
- package/app/components/modals/fleet-assign-vehicle.js +1 -0
- package/app/components/modals/telematic-connection-diagnostics.js +1 -0
- package/app/components/order/card.js +1 -0
- package/app/components/telematic/hub.js +1 -0
- package/app/components/telematic/settings.js +1 -0
- package/app/components/telematic/tab-empty-state.js +1 -0
- package/app/components/widget/fuel-providers.js +1 -0
- package/app/controllers/connectivity/fuel-providers/details/sync.js +1 -0
- package/app/controllers/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
- package/app/controllers/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
- package/app/controllers/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
- package/app/controllers/connectivity/{telematics/index/details → fuel-providers}/index.js +1 -1
- package/app/controllers/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
- package/app/controllers/connectivity/telematics/details/attachments.js +1 -0
- package/app/controllers/connectivity/telematics/details/devices.js +1 -0
- package/app/controllers/connectivity/telematics/details/events.js +1 -0
- package/app/controllers/connectivity/telematics/details/index.js +1 -0
- package/app/controllers/connectivity/telematics/details/logs.js +1 -0
- package/app/controllers/connectivity/telematics/details/sensors.js +1 -0
- package/app/controllers/connectivity/telematics/details.js +1 -0
- package/app/controllers/connectivity/telematics/edit.js +1 -0
- package/app/controllers/connectivity/telematics/new.js +1 -0
- package/app/controllers/management/fuel-transactions/index/details.js +1 -0
- package/app/controllers/management/fuel-transactions/index.js +1 -0
- package/app/routes/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
- package/app/routes/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
- package/app/routes/connectivity/fuel-providers/details/settings.js +1 -0
- package/app/routes/connectivity/fuel-providers/details/sync.js +1 -0
- package/app/routes/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
- package/app/routes/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
- package/app/routes/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
- package/app/routes/connectivity/fuel-providers/index.js +1 -0
- package/app/routes/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
- package/app/routes/connectivity/fuel-providers.js +1 -0
- package/app/routes/connectivity/telematics/details/attachments.js +1 -0
- package/app/routes/connectivity/telematics/details/devices.js +1 -0
- package/app/routes/connectivity/telematics/details/events.js +1 -0
- package/app/routes/connectivity/telematics/details/index.js +1 -0
- package/app/routes/connectivity/telematics/details/logs.js +1 -0
- package/app/routes/connectivity/telematics/details/sensors.js +1 -0
- package/app/routes/connectivity/telematics/details.js +1 -0
- package/app/routes/connectivity/telematics/edit.js +1 -0
- package/app/routes/connectivity/telematics/new.js +1 -0
- package/app/routes/management/drivers/index/details/activity.js +1 -0
- package/app/routes/management/fuel-transactions/index/details.js +1 -0
- package/app/routes/management/fuel-transactions/index.js +1 -0
- package/app/routes/management/fuel-transactions.js +1 -0
- package/app/services/fuel-integration-actions.js +1 -0
- package/app/templates/connectivity/{telematics/index → fuel-providers}/details/index.js +1 -1
- package/app/templates/connectivity/{telematics/index/details/events.js → fuel-providers/details/matching.js} +1 -1
- package/app/templates/connectivity/fuel-providers/details/settings.js +1 -0
- package/app/templates/connectivity/fuel-providers/details/sync.js +1 -0
- package/app/templates/connectivity/{telematics/index/details/devices.js → fuel-providers/details/transactions.js} +1 -1
- package/app/templates/connectivity/{telematics/index → fuel-providers}/details.js +1 -1
- package/app/templates/connectivity/{telematics/index → fuel-providers}/edit.js +1 -1
- package/app/templates/connectivity/fuel-providers/index.js +1 -0
- package/app/templates/connectivity/{telematics/index → fuel-providers}/new.js +1 -1
- package/app/templates/connectivity/fuel-providers.js +1 -0
- package/app/templates/connectivity/telematics/details/attachments.js +1 -0
- package/app/templates/connectivity/telematics/details/devices.js +1 -0
- package/app/templates/connectivity/telematics/details/events.js +1 -0
- package/app/templates/connectivity/telematics/details/index.js +1 -0
- package/app/templates/connectivity/telematics/details/logs.js +1 -0
- package/app/templates/connectivity/telematics/details/sensors.js +1 -0
- package/app/templates/connectivity/telematics/details.js +1 -0
- package/app/templates/connectivity/telematics/edit.js +1 -0
- package/app/templates/connectivity/telematics/new.js +1 -0
- package/app/templates/management/drivers/index/details/activity.js +1 -0
- package/app/templates/management/fuel-transactions/index/details.js +1 -0
- package/app/templates/management/fuel-transactions/index.js +1 -0
- package/app/templates/management/fuel-transactions.js +1 -0
- package/assets/images/telematics/providers/afaqy.webp +0 -0
- package/assets/images/telematics/providers/default.webp +0 -0
- package/assets/images/telematics/providers/flespi.webp +0 -0
- package/assets/images/telematics/providers/geotab.webp +0 -0
- package/assets/images/telematics/providers/safee.webp +0 -0
- package/assets/images/telematics/providers/samsara.webp +0 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +4 -4
- package/server/config/fuel-providers.php +42 -0
- package/server/config/telematics.php +139 -130
- package/server/migrations/2026_06_06_000001_harden_device_events_telematics_contract.php +59 -0
- package/server/migrations/2026_06_08_000001_create_fuel_provider_connections_table.php +37 -0
- package/server/migrations/2026_06_08_000002_create_fuel_provider_transactions_table.php +53 -0
- package/server/migrations/2026_06_08_000003_create_fuel_provider_sync_runs_table.php +40 -0
- package/server/migrations/2026_06_10_000001_add_fuel_card_number_to_vehicles_table.php +25 -0
- package/server/migrations/2026_06_10_000002_add_vehicle_identity_columns_to_fuel_provider_transactions_table.php +39 -0
- package/server/src/Contracts/FuelProvider.php +30 -0
- package/server/src/Contracts/TelematicProviderDescriptor.php +3 -1
- package/server/src/Events/FuelProviderTransactionImported.php +17 -0
- package/server/src/Events/FuelProviderTransactionMatched.php +17 -0
- package/server/src/Events/FuelProviderTransactionUnmatched.php +17 -0
- package/server/src/Events/FuelReportCreatedFromProvider.php +18 -0
- package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +6 -0
- package/server/src/Http/Controllers/Internal/v1/DeviceController.php +76 -2
- package/server/src/Http/Controllers/Internal/v1/DeviceEventController.php +44 -0
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +158 -7
- package/server/src/Http/Controllers/Internal/v1/FuelProviderConnectionController.php +124 -0
- package/server/src/Http/Controllers/Internal/v1/FuelProviderSyncRunController.php +10 -0
- package/server/src/Http/Controllers/Internal/v1/FuelProviderTransactionController.php +76 -0
- package/server/src/Http/Controllers/Internal/v1/SensorController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/TelematicController.php +178 -15
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +165 -0
- package/server/src/Http/Controllers/TelematicWebhookController.php +103 -19
- package/server/src/Http/Filter/FuelProviderConnectionFilter.php +33 -0
- package/server/src/Http/Filter/FuelProviderSyncRunFilter.php +28 -0
- package/server/src/Http/Filter/FuelProviderTransactionFilter.php +59 -0
- package/server/src/Http/Filter/FuelReportFilter.php +10 -0
- package/server/src/Http/Resources/v1/Driver.php +15 -0
- package/server/src/Http/Resources/v1/FuelProviderConnection.php +30 -0
- package/server/src/Http/Resources/v1/FuelProviderSyncRun.php +36 -0
- package/server/src/Http/Resources/v1/FuelProviderTransaction.php +54 -0
- package/server/src/Http/Resources/v1/FuelReport.php +28 -22
- package/server/src/Http/Resources/v1/Index/Driver.php +26 -20
- package/server/src/Http/Resources/v1/Index/Vehicle.php +29 -22
- package/server/src/Http/Resources/v1/Vehicle.php +17 -0
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +2 -0
- package/server/src/Jobs/SyncFuelProviderTransactionsJob.php +57 -0
- package/server/src/Jobs/SyncTelematicDevicesJob.php +36 -6
- package/server/src/Jobs/TestTelematicConnectionJob.php +9 -22
- package/server/src/Models/Asset.php +2 -1
- package/server/src/Models/Contact.php +2 -1
- package/server/src/Models/Device.php +27 -4
- package/server/src/Models/DeviceEvent.php +40 -3
- package/server/src/Models/Driver.php +2 -1
- package/server/src/Models/Equipment.php +2 -1
- package/server/src/Models/Fleet.php +2 -1
- package/server/src/Models/FuelProviderConnection.php +60 -0
- package/server/src/Models/FuelProviderSyncRun.php +58 -0
- package/server/src/Models/FuelProviderTransaction.php +119 -0
- package/server/src/Models/FuelReport.php +16 -1
- package/server/src/Models/Part.php +2 -1
- package/server/src/Models/Sensor.php +21 -4
- package/server/src/Models/ServiceRate.php +39 -2
- package/server/src/Models/Vehicle.php +14 -2
- package/server/src/Models/Vendor.php +2 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +10 -0
- package/server/src/Support/Analytics/FuelProviderSummary.php +42 -0
- package/server/src/Support/FuelProviders/FuelProviderDescriptor.php +55 -0
- package/server/src/Support/FuelProviders/FuelProviderRegistry.php +75 -0
- package/server/src/Support/FuelProviders/FuelProviderService.php +447 -0
- package/server/src/Support/FuelProviders/Providers/AbstractFuelProvider.php +98 -0
- package/server/src/Support/FuelProviders/Providers/PetroAppFuelProvider.php +167 -0
- package/server/src/Support/Telematics/Providers/AbstractProvider.php +27 -6
- package/server/src/Support/Telematics/Providers/AfaqyProvider.php +55 -26
- package/server/src/Support/Telematics/Providers/FlespiProvider.php +1 -0
- package/server/src/Support/Telematics/Providers/GeotabProvider.php +1 -0
- package/server/src/Support/Telematics/Providers/SafeeProvider.php +32 -22
- package/server/src/Support/Telematics/Providers/SamsaraProvider.php +3 -1
- package/server/src/Support/Telematics/TelematicService.php +340 -21
- package/server/src/routes.php +41 -4
- package/server/tests/FuelProviderRegistryTest.php +416 -0
- package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +44 -0
- package/server/tests/TelematicsHardeningTest.php +268 -0
- package/server/tests/VehicleDriverAssignmentTest.php +51 -0
- package/translations/ar-ae.yml +22 -0
- package/translations/bg-bg.yaml +72 -0
- package/translations/en-us.yaml +83 -0
- package/translations/es-pa.yaml +72 -0
- package/translations/fr-fr.yaml +72 -0
- package/translations/mn-mn.yaml +72 -0
- package/translations/pt-br.yaml +72 -0
- package/translations/ru-ru.yaml +72 -0
- package/translations/vi-vn.yaml +97 -0
- package/addon/controllers/connectivity/telematics/index/details/devices.js +0 -3
- package/addon/controllers/connectivity/telematics/index/details/events.js +0 -3
- package/addon/controllers/connectivity/telematics/index/details/index.js +0 -3
- package/addon/controllers/connectivity/telematics/index/details/sensors.js +0 -3
- package/addon/controllers/connectivity/telematics/index/details.js +0 -24
- package/addon/routes/connectivity/telematics/index/details/devices.js +0 -3
- package/addon/routes/connectivity/telematics/index/details/events.js +0 -3
- package/addon/routes/connectivity/telematics/index/details/index.js +0 -3
- package/addon/routes/connectivity/telematics/index/details/sensors.js +0 -3
- package/addon/routes/connectivity/telematics/index/new.js +0 -3
- 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/index/details.hbs +0 -14
- package/addon/templates/connectivity/telematics/index/edit.hbs +0 -12
- package/addon/templates/connectivity/telematics/index/new.hbs +0 -12
- package/app/controllers/connectivity/telematics/index/details/events.js +0 -1
- package/app/controllers/connectivity/telematics/index/details/sensors.js +0 -1
- package/app/routes/connectivity/telematics/index/details/sensors.js +0 -1
- package/app/templates/connectivity/telematics/index/details/sensors.js +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import { task } from 'ember-concurrency';
|
|
5
|
+
|
|
6
|
+
export default class ConnectivityTelematicsDetailsController extends Controller {
|
|
7
|
+
@service hostRouter;
|
|
8
|
+
@service fetch;
|
|
9
|
+
@service modalsManager;
|
|
10
|
+
@service notifications;
|
|
11
|
+
|
|
12
|
+
get tabs() {
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
route: 'connectivity.telematics.details.index',
|
|
16
|
+
label: 'Overview',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
route: 'connectivity.telematics.details.devices',
|
|
20
|
+
label: 'Devices',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
route: 'connectivity.telematics.details.attachments',
|
|
24
|
+
label: 'Vehicle Attachments',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
route: 'connectivity.telematics.details.sensors',
|
|
28
|
+
label: 'Sensors',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
route: 'connectivity.telematics.details.events',
|
|
32
|
+
label: 'Events',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
route: 'connectivity.telematics.details.logs',
|
|
36
|
+
label: 'Logs',
|
|
37
|
+
},
|
|
38
|
+
].map((tab) => ({
|
|
39
|
+
...tab,
|
|
40
|
+
active: this.isTabActive(tab.route),
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
get actionButtons() {
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
icon: 'plug',
|
|
48
|
+
text: 'Test',
|
|
49
|
+
onClick: () => this.openConnectionTestDialog(),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
icon: 'satellite-dish',
|
|
53
|
+
text: 'Discover',
|
|
54
|
+
onClick: () => this.discoverDevices.perform(),
|
|
55
|
+
isLoading: this.discoverDevices.isRunning,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
icon: 'cog',
|
|
59
|
+
fn: () => this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.edit', this.model),
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get telematicId() {
|
|
65
|
+
return this.model?.id;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
isTabActive(routeName) {
|
|
69
|
+
return this.hostRouter.currentRouteName?.endsWith(routeName);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
get healthStatus() {
|
|
73
|
+
switch (this.model?.status) {
|
|
74
|
+
case 'active':
|
|
75
|
+
case 'connected':
|
|
76
|
+
return 'success';
|
|
77
|
+
case 'synchronizing':
|
|
78
|
+
return 'info';
|
|
79
|
+
case 'error':
|
|
80
|
+
case 'degraded':
|
|
81
|
+
case 'disconnected':
|
|
82
|
+
return 'warning';
|
|
83
|
+
case 'initialized':
|
|
84
|
+
return 'default';
|
|
85
|
+
default:
|
|
86
|
+
return 'default';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get statusLabel() {
|
|
91
|
+
switch (this.model?.status) {
|
|
92
|
+
case 'initialized':
|
|
93
|
+
return 'Not tested';
|
|
94
|
+
case 'connected':
|
|
95
|
+
return 'Connected';
|
|
96
|
+
case 'synchronizing':
|
|
97
|
+
return 'Syncing';
|
|
98
|
+
case 'active':
|
|
99
|
+
return 'Connected';
|
|
100
|
+
case 'error':
|
|
101
|
+
return 'Needs attention';
|
|
102
|
+
case null:
|
|
103
|
+
case undefined:
|
|
104
|
+
return 'Unknown';
|
|
105
|
+
default:
|
|
106
|
+
return 'Unknown';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
get connectionTestLabel() {
|
|
111
|
+
switch (this.model?.meta?.last_test_result) {
|
|
112
|
+
case 'success':
|
|
113
|
+
return 'Verified';
|
|
114
|
+
case 'failed':
|
|
115
|
+
return 'Failed';
|
|
116
|
+
default:
|
|
117
|
+
return 'Not tested';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
get lastSyncAt() {
|
|
122
|
+
if (this.model?.status === 'synchronizing') {
|
|
123
|
+
return this.model?.meta?.last_sync_started_at;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return this.model?.meta?.last_sync_completed_at;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@action openConnectionTestDialog() {
|
|
130
|
+
this.modalsManager.show('modals/telematic-connection-diagnostics', {
|
|
131
|
+
title: 'Test Connection',
|
|
132
|
+
acceptButtonText: 'Run Test',
|
|
133
|
+
acceptButtonIcon: 'plug',
|
|
134
|
+
declineButtonText: 'Close',
|
|
135
|
+
telematic: this.model,
|
|
136
|
+
onTested: () => this.hostRouter.refresh(),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@task *discoverDevices() {
|
|
141
|
+
try {
|
|
142
|
+
const result = yield this.fetch.post(`telematics/${this.telematicId}/discover`);
|
|
143
|
+
this.notifications.success(result.message ?? 'Device discovery initiated.');
|
|
144
|
+
yield this.hostRouter.refresh();
|
|
145
|
+
} catch (error) {
|
|
146
|
+
this.notifications.serverError(error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -4,7 +4,7 @@ import { inject as service } from '@ember/service';
|
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
5
|
import { task } from 'ember-concurrency';
|
|
6
6
|
|
|
7
|
-
export default class
|
|
7
|
+
export default class ConnectivityTelematicsEditController extends Controller {
|
|
8
8
|
@service hostRouter;
|
|
9
9
|
@service intl;
|
|
10
10
|
@service notifications;
|
|
@@ -27,7 +27,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
|
|
|
27
27
|
this.events.trackResourceUpdated(telematic);
|
|
28
28
|
this.overlay?.close();
|
|
29
29
|
|
|
30
|
-
yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.
|
|
30
|
+
yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.details', telematic);
|
|
31
31
|
this.notifications.success(
|
|
32
32
|
this.intl.t('common.resource-updated-success', {
|
|
33
33
|
resource: this.intl.t('resource.telematic'),
|
|
@@ -52,7 +52,18 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
|
|
|
52
52
|
return this.#confirmContinueWithUnsavedChanges(this.model);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
return this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.
|
|
55
|
+
return this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.details', this.model);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@action openConnectionTestDialog() {
|
|
59
|
+
this.modalsManager.show('modals/telematic-connection-diagnostics', {
|
|
60
|
+
title: 'Test Connection',
|
|
61
|
+
acceptButtonText: 'Run Test',
|
|
62
|
+
acceptButtonIcon: 'plug',
|
|
63
|
+
declineButtonText: 'Close',
|
|
64
|
+
telematic: this.model,
|
|
65
|
+
onTested: () => this.hostRouter.refresh(),
|
|
66
|
+
});
|
|
56
67
|
}
|
|
57
68
|
|
|
58
69
|
#confirmContinueWithUnsavedChanges(telematic, options = {}) {
|
|
@@ -62,7 +73,7 @@ export default class ConnectivityTelematicsIndexEditController extends Controlle
|
|
|
62
73
|
acceptButtonText: this.intl.t('common.continue'),
|
|
63
74
|
confirm: async () => {
|
|
64
75
|
telematic.rollbackAttributes();
|
|
65
|
-
await this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.
|
|
76
|
+
await this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.details', telematic);
|
|
66
77
|
},
|
|
67
78
|
...options,
|
|
68
79
|
});
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
3
|
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { task } from 'ember-concurrency';
|
|
4
5
|
import fleetOpsOptions from '../../../utils/fleet-ops-options';
|
|
5
6
|
|
|
6
7
|
export default class ConnectivityTelematicsIndexController extends Controller {
|
|
7
8
|
@service telematicActions;
|
|
9
|
+
@service fetch;
|
|
8
10
|
@service intl;
|
|
11
|
+
@service notifications;
|
|
12
|
+
@tracked providers = [];
|
|
9
13
|
|
|
10
14
|
/** query params */
|
|
11
15
|
@tracked queryParams = ['name', 'provider', 'status', 'page', 'limit', 'sort', 'query', 'public_id', 'created_at', 'updated_at'];
|
|
@@ -17,6 +21,11 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
17
21
|
@tracked provider;
|
|
18
22
|
@tracked status;
|
|
19
23
|
|
|
24
|
+
constructor() {
|
|
25
|
+
super(...arguments);
|
|
26
|
+
this.loadProviders.perform();
|
|
27
|
+
}
|
|
28
|
+
|
|
20
29
|
/** action buttons */
|
|
21
30
|
@tracked actionButtons = [
|
|
22
31
|
{
|
|
@@ -59,11 +68,11 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
59
68
|
{
|
|
60
69
|
sticky: true,
|
|
61
70
|
label: 'Provider',
|
|
62
|
-
valuePath: '
|
|
63
|
-
cellComponent: '
|
|
64
|
-
cellClassNames: 'uppercase',
|
|
71
|
+
valuePath: 'name',
|
|
72
|
+
cellComponent: 'cell/telematic-provider',
|
|
65
73
|
action: this.telematicActions.transition.view,
|
|
66
74
|
permission: 'fleet-ops view telematic',
|
|
75
|
+
width: 460,
|
|
67
76
|
resizable: true,
|
|
68
77
|
sortable: true,
|
|
69
78
|
filterable: true,
|
|
@@ -73,7 +82,8 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
73
82
|
{
|
|
74
83
|
label: this.intl.t('column.status'),
|
|
75
84
|
valuePath: 'status',
|
|
76
|
-
cellComponent: '
|
|
85
|
+
cellComponent: 'cell/telematic-status',
|
|
86
|
+
cellClassNames: 'fleetops-provider-connections-cell-middle',
|
|
77
87
|
resizable: true,
|
|
78
88
|
sortable: true,
|
|
79
89
|
filterable: true,
|
|
@@ -84,6 +94,7 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
84
94
|
label: this.intl.t('column.created-at'),
|
|
85
95
|
valuePath: 'createdAt',
|
|
86
96
|
sortParam: 'created_at',
|
|
97
|
+
cellClassNames: 'fleetops-provider-connections-cell-middle',
|
|
87
98
|
resizable: true,
|
|
88
99
|
sortable: true,
|
|
89
100
|
filterable: true,
|
|
@@ -93,6 +104,7 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
93
104
|
label: this.intl.t('column.updated-at'),
|
|
94
105
|
valuePath: 'updatedAt',
|
|
95
106
|
sortParam: 'updated_at',
|
|
107
|
+
cellClassNames: 'fleetops-provider-connections-cell-middle',
|
|
96
108
|
resizable: true,
|
|
97
109
|
sortable: true,
|
|
98
110
|
hidden: true,
|
|
@@ -107,7 +119,7 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
107
119
|
ddButtonIcon: 'ellipsis-h',
|
|
108
120
|
ddButtonIconPrefix: 'fas',
|
|
109
121
|
ddMenuLabel: this.intl.t('common.resource-actions', { resource: this.intl.t('resource.telematic') }),
|
|
110
|
-
cellClassNames: 'overflow-visible',
|
|
122
|
+
cellClassNames: 'fleetops-provider-connections-cell-middle overflow-visible',
|
|
111
123
|
wrapperClass: 'flex items-center justify-end mx-2',
|
|
112
124
|
sticky: 'right',
|
|
113
125
|
width: 60,
|
|
@@ -137,4 +149,12 @@ export default class ConnectivityTelematicsIndexController extends Controller {
|
|
|
137
149
|
searchable: false,
|
|
138
150
|
},
|
|
139
151
|
];
|
|
152
|
+
|
|
153
|
+
@task *loadProviders() {
|
|
154
|
+
try {
|
|
155
|
+
this.providers = yield this.fetch.get('telematics/providers');
|
|
156
|
+
} catch (error) {
|
|
157
|
+
this.notifications.serverError(error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
140
160
|
}
|
|
@@ -4,7 +4,7 @@ import { inject as service } from '@ember/service';
|
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
5
|
import { task } from 'ember-concurrency';
|
|
6
6
|
|
|
7
|
-
export default class
|
|
7
|
+
export default class ConnectivityTelematicsNewController extends Controller {
|
|
8
8
|
@service telematicActions;
|
|
9
9
|
@service hostRouter;
|
|
10
10
|
@service intl;
|
|
@@ -12,6 +12,8 @@ export default class ConnectivityTelematicsIndexNewController extends Controller
|
|
|
12
12
|
@service events;
|
|
13
13
|
@tracked overlay;
|
|
14
14
|
@tracked telematic = this.telematicActions.createNewInstance();
|
|
15
|
+
queryParams = ['setupProvider'];
|
|
16
|
+
@tracked setupProvider;
|
|
15
17
|
|
|
16
18
|
@task *save(telematic) {
|
|
17
19
|
try {
|
|
@@ -20,7 +22,7 @@ export default class ConnectivityTelematicsIndexNewController extends Controller
|
|
|
20
22
|
this.overlay?.close();
|
|
21
23
|
|
|
22
24
|
yield this.hostRouter.refresh();
|
|
23
|
-
yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.
|
|
25
|
+
yield this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.details', telematic);
|
|
24
26
|
this.notifications.success('Telematic created successfully.');
|
|
25
27
|
this.resetForm();
|
|
26
28
|
} catch (err) {
|
|
@@ -31,4 +33,8 @@ export default class ConnectivityTelematicsIndexNewController extends Controller
|
|
|
31
33
|
@action resetForm() {
|
|
32
34
|
this.telematic = this.telematicActions.createNewInstance();
|
|
33
35
|
}
|
|
36
|
+
|
|
37
|
+
@action cancel() {
|
|
38
|
+
return this.hostRouter.transitionTo('console.fleet-ops.connectivity.telematics.index');
|
|
39
|
+
}
|
|
34
40
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import Controller from '@ember/controller';
|
|
2
|
+
import { action } from '@ember/object';
|
|
2
3
|
import { inject as service } from '@ember/service';
|
|
3
4
|
import { isArray } from '@ember/array';
|
|
4
5
|
|
|
5
6
|
export default class ManagementDriverIndexDetailsController extends Controller {
|
|
6
7
|
@service('universe/menu-service') menuService;
|
|
8
|
+
@service driverActions;
|
|
9
|
+
@service issueActions;
|
|
7
10
|
@service hostRouter;
|
|
8
11
|
@service intl;
|
|
9
12
|
|
|
@@ -16,22 +19,96 @@ export default class ManagementDriverIndexDetailsController extends Controller {
|
|
|
16
19
|
},
|
|
17
20
|
{
|
|
18
21
|
route: 'management.drivers.index.details.positions',
|
|
19
|
-
label: '
|
|
22
|
+
label: this.intl.t('common.positions'),
|
|
20
23
|
},
|
|
21
24
|
{
|
|
22
25
|
route: 'management.drivers.index.details.schedule',
|
|
23
26
|
label: this.intl.t('common.schedule'),
|
|
24
27
|
},
|
|
28
|
+
{
|
|
29
|
+
route: 'management.drivers.index.details.activity',
|
|
30
|
+
label: this.intl.t('common.activity'),
|
|
31
|
+
},
|
|
25
32
|
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
26
33
|
];
|
|
27
34
|
}
|
|
28
35
|
|
|
36
|
+
hasAssignedVehicle(driver) {
|
|
37
|
+
return Boolean(driver?.vehicle_uuid || driver?.vehicle?.id || driver?.vehicle?.uuid || driver?.vehicle_name);
|
|
38
|
+
}
|
|
39
|
+
|
|
29
40
|
get actionButtons() {
|
|
30
41
|
return [
|
|
31
42
|
{
|
|
32
43
|
icon: 'pencil',
|
|
33
44
|
fn: () => this.hostRouter.transitionTo('console.fleet-ops.management.drivers.index.edit', this.model),
|
|
45
|
+
permission: 'fleet-ops update driver',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
icon: 'ellipsis-h',
|
|
49
|
+
iconPrefix: 'fas',
|
|
50
|
+
renderInPlace: true,
|
|
51
|
+
items: [
|
|
52
|
+
{
|
|
53
|
+
text: this.intl.t('driver.actions.assign-order'),
|
|
54
|
+
icon: 'clipboard-list',
|
|
55
|
+
fn: () => this.driverActions.assignOrder(this.model),
|
|
56
|
+
permission: 'fleet-ops assign-order-for driver',
|
|
57
|
+
},
|
|
58
|
+
...(Number(this.model.assigned_orders_count) > 0
|
|
59
|
+
? [
|
|
60
|
+
{
|
|
61
|
+
text: this.intl.t('driver.actions.unassign-orders'),
|
|
62
|
+
icon: 'user-minus',
|
|
63
|
+
fn: () => this.driverActions.unassignOrders(this.model),
|
|
64
|
+
permission: 'fleet-ops assign-order-for driver',
|
|
65
|
+
},
|
|
66
|
+
]
|
|
67
|
+
: []),
|
|
68
|
+
{
|
|
69
|
+
separator: true,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
text: this.intl.t('driver.actions.assign-vehicle'),
|
|
73
|
+
icon: 'car',
|
|
74
|
+
fn: () => this.driverActions.assignVehicle(this.model),
|
|
75
|
+
permission: 'fleet-ops assign-vehicle-for driver',
|
|
76
|
+
},
|
|
77
|
+
...(this.hasAssignedVehicle(this.model)
|
|
78
|
+
? [
|
|
79
|
+
{
|
|
80
|
+
text: this.intl.t('driver.actions.unassign-vehicle'),
|
|
81
|
+
icon: 'link-slash',
|
|
82
|
+
fn: () => this.driverActions.unassignVehicle(this.model),
|
|
83
|
+
permission: 'fleet-ops assign-vehicle-for driver',
|
|
84
|
+
},
|
|
85
|
+
]
|
|
86
|
+
: []),
|
|
87
|
+
{
|
|
88
|
+
separator: true,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
text: this.intl.t('driver.actions.locate-driver'),
|
|
92
|
+
icon: 'location-dot',
|
|
93
|
+
fn: () => this.driverActions.locate(this.model),
|
|
94
|
+
permission: 'fleet-ops view driver',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
text: this.intl.t('driver.actions.create-issue'),
|
|
98
|
+
icon: 'triangle-exclamation',
|
|
99
|
+
fn: () => this.createIssue(this.model),
|
|
100
|
+
permission: 'fleet-ops create issue',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
34
103
|
},
|
|
35
104
|
];
|
|
36
105
|
}
|
|
106
|
+
|
|
107
|
+
@action createIssue(driver) {
|
|
108
|
+
this.issueActions.modal.create({
|
|
109
|
+
driver,
|
|
110
|
+
driver_uuid: driver.id,
|
|
111
|
+
title: this.intl.t('driver.prompts.issue-title', { driverName: driver.name }),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
37
114
|
}
|
|
@@ -5,6 +5,7 @@ import { action } from '@ember/object';
|
|
|
5
5
|
|
|
6
6
|
export default class ManagementDriversIndexController extends Controller {
|
|
7
7
|
@service driverActions;
|
|
8
|
+
@service issueActions;
|
|
8
9
|
@service fleetActions;
|
|
9
10
|
@service vendorActions;
|
|
10
11
|
@service vehicleActions;
|
|
@@ -47,6 +48,10 @@ export default class ManagementDriversIndexController extends Controller {
|
|
|
47
48
|
@tracked layout = 'table';
|
|
48
49
|
@tracked table;
|
|
49
50
|
|
|
51
|
+
hasAssignedVehicle(driver) {
|
|
52
|
+
return Boolean(driver?.vehicle_uuid || driver?.vehicle?.id || driver?.vehicle?.uuid || driver?.vehicle_name);
|
|
53
|
+
}
|
|
54
|
+
|
|
50
55
|
/** action buttons */
|
|
51
56
|
get actionButtons() {
|
|
52
57
|
return [
|
|
@@ -261,11 +266,13 @@ export default class ManagementDriversIndexController extends Controller {
|
|
|
261
266
|
actions: [
|
|
262
267
|
{
|
|
263
268
|
label: this.intl.t('common.view-resource', { resource: this.intl.t('resource.driver') }),
|
|
269
|
+
icon: 'eye',
|
|
264
270
|
fn: this.driverActions.transition.view,
|
|
265
271
|
permission: 'fleet-ops view driver',
|
|
266
272
|
},
|
|
267
273
|
{
|
|
268
274
|
label: this.intl.t('common.edit-resource', { resource: this.intl.t('resource.driver') }),
|
|
275
|
+
icon: 'pencil',
|
|
269
276
|
fn: this.driverActions.transition.edit,
|
|
270
277
|
permission: 'fleet-ops update driver',
|
|
271
278
|
},
|
|
@@ -274,24 +281,48 @@ export default class ManagementDriversIndexController extends Controller {
|
|
|
274
281
|
},
|
|
275
282
|
{
|
|
276
283
|
label: this.intl.t('driver.actions.assign-order'),
|
|
284
|
+
icon: 'clipboard-list',
|
|
277
285
|
fn: this.driverActions.assignOrder,
|
|
278
286
|
permission: 'fleet-ops assign-order-for driver',
|
|
279
287
|
},
|
|
280
288
|
{
|
|
281
289
|
label: this.intl.t('driver.actions.assign-vehicle'),
|
|
290
|
+
icon: 'car',
|
|
282
291
|
fn: this.driverActions.assignVehicle,
|
|
283
292
|
permission: 'fleet-ops assign-vehicle-for driver',
|
|
284
293
|
},
|
|
294
|
+
{
|
|
295
|
+
label: this.intl.t('driver.actions.unassign-orders'),
|
|
296
|
+
icon: 'user-minus',
|
|
297
|
+
fn: this.driverActions.unassignOrders,
|
|
298
|
+
permission: 'fleet-ops assign-order-for driver',
|
|
299
|
+
isVisible: (driver) => Number(driver.assigned_orders_count) > 0,
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
label: this.intl.t('driver.actions.unassign-vehicle'),
|
|
303
|
+
icon: 'link-slash',
|
|
304
|
+
fn: this.driverActions.unassignVehicle,
|
|
305
|
+
permission: 'fleet-ops assign-vehicle-for driver',
|
|
306
|
+
isVisible: (driver) => this.hasAssignedVehicle(driver),
|
|
307
|
+
},
|
|
285
308
|
{
|
|
286
309
|
label: this.intl.t('driver.actions.locate-driver'),
|
|
310
|
+
icon: 'location-dot',
|
|
287
311
|
fn: this.driverActions.locate,
|
|
288
312
|
permission: 'fleet-ops view driver',
|
|
289
313
|
},
|
|
314
|
+
{
|
|
315
|
+
label: this.intl.t('driver.actions.create-issue'),
|
|
316
|
+
icon: 'triangle-exclamation',
|
|
317
|
+
fn: this.createIssue,
|
|
318
|
+
permission: 'fleet-ops create issue',
|
|
319
|
+
},
|
|
290
320
|
{
|
|
291
321
|
separator: true,
|
|
292
322
|
},
|
|
293
323
|
{
|
|
294
324
|
label: this.intl.t('common.delete-resource', { resource: this.intl.t('resource.driver') }),
|
|
325
|
+
icon: 'trash',
|
|
295
326
|
fn: this.driverActions.delete,
|
|
296
327
|
permission: 'fleet-ops delete driver',
|
|
297
328
|
},
|
|
@@ -307,4 +338,12 @@ export default class ManagementDriversIndexController extends Controller {
|
|
|
307
338
|
@action changeLayout(layout) {
|
|
308
339
|
this.layout = layout;
|
|
309
340
|
}
|
|
341
|
+
|
|
342
|
+
@action createIssue(driver) {
|
|
343
|
+
this.issueActions.modal.create({
|
|
344
|
+
driver,
|
|
345
|
+
driver_uuid: driver.id,
|
|
346
|
+
title: `Issue reported for ${driver.name}`,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
310
349
|
}
|
|
@@ -4,7 +4,9 @@ import { isArray } from '@ember/array';
|
|
|
4
4
|
|
|
5
5
|
export default class ManagementFleetsIndexDetailsController extends Controller {
|
|
6
6
|
@service('universe/menu-service') menuService;
|
|
7
|
+
@service fleetActions;
|
|
7
8
|
@service hostRouter;
|
|
9
|
+
@service intl;
|
|
8
10
|
|
|
9
11
|
get tabs() {
|
|
10
12
|
const registeredTabs = this.menuService.getMenuItems('fleet-ops:component:place:details');
|
|
@@ -19,7 +21,7 @@ export default class ManagementFleetsIndexDetailsController extends Controller {
|
|
|
19
21
|
},
|
|
20
22
|
{
|
|
21
23
|
route: 'management.fleets.index.details.drivers',
|
|
22
|
-
label: '
|
|
24
|
+
label: this.intl.t('menu.drivers'),
|
|
23
25
|
},
|
|
24
26
|
...(isArray(registeredTabs) ? registeredTabs : []),
|
|
25
27
|
];
|
|
@@ -30,6 +32,26 @@ export default class ManagementFleetsIndexDetailsController extends Controller {
|
|
|
30
32
|
{
|
|
31
33
|
icon: 'pencil',
|
|
32
34
|
fn: () => this.hostRouter.transitionTo('console.fleet-ops.management.fleets.index.edit', this.model),
|
|
35
|
+
permission: 'fleet-ops update fleet',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
icon: 'ellipsis-h',
|
|
39
|
+
iconPrefix: 'fas',
|
|
40
|
+
renderInPlace: true,
|
|
41
|
+
items: [
|
|
42
|
+
{
|
|
43
|
+
text: this.intl.t('fleet.actions.assign-driver'),
|
|
44
|
+
icon: 'user-plus',
|
|
45
|
+
fn: () => this.fleetActions.assignDriver(this.model),
|
|
46
|
+
permission: 'fleet-ops assign-driver-for fleet',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
text: this.intl.t('fleet.actions.assign-vehicle'),
|
|
50
|
+
icon: 'car',
|
|
51
|
+
fn: () => this.fleetActions.assignVehicle(this.model),
|
|
52
|
+
permission: 'fleet-ops assign-vehicle-for fleet',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
33
55
|
},
|
|
34
56
|
];
|
|
35
57
|
}
|
|
@@ -241,7 +241,12 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
241
241
|
{
|
|
242
242
|
label: this.intl.t('fleet.actions.assign-driver'),
|
|
243
243
|
permission: 'fleet-ops assign-driver-for fleet',
|
|
244
|
-
fn:
|
|
244
|
+
fn: this.fleetActions.assignDriver,
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
label: this.intl.t('fleet.actions.assign-vehicle'),
|
|
248
|
+
permission: 'fleet-ops assign-vehicle-for fleet',
|
|
249
|
+
fn: this.fleetActions.assignVehicle,
|
|
245
250
|
},
|
|
246
251
|
{
|
|
247
252
|
separator: true,
|
|
@@ -8,7 +8,24 @@ export default class ManagementFuelReportsIndexController extends Controller {
|
|
|
8
8
|
@service intl;
|
|
9
9
|
|
|
10
10
|
/** query params */
|
|
11
|
-
@tracked queryParams = [
|
|
11
|
+
@tracked queryParams = [
|
|
12
|
+
'page',
|
|
13
|
+
'limit',
|
|
14
|
+
'sort',
|
|
15
|
+
'query',
|
|
16
|
+
'public_id',
|
|
17
|
+
'internal_id',
|
|
18
|
+
'vehicle',
|
|
19
|
+
'driver',
|
|
20
|
+
'created_by',
|
|
21
|
+
'updated_by',
|
|
22
|
+
'status',
|
|
23
|
+
'source',
|
|
24
|
+
'provider',
|
|
25
|
+
'country',
|
|
26
|
+
'volume',
|
|
27
|
+
'odometer',
|
|
28
|
+
];
|
|
12
29
|
@tracked page = 1;
|
|
13
30
|
@tracked limit;
|
|
14
31
|
@tracked sort = '-created_at';
|
|
@@ -20,6 +37,8 @@ export default class ManagementFuelReportsIndexController extends Controller {
|
|
|
20
37
|
@tracked volume;
|
|
21
38
|
@tracked odometer;
|
|
22
39
|
@tracked status;
|
|
40
|
+
@tracked source;
|
|
41
|
+
@tracked provider;
|
|
23
42
|
@tracked table;
|
|
24
43
|
|
|
25
44
|
/** action buttons */
|
|
@@ -130,6 +149,23 @@ export default class ManagementFuelReportsIndexController extends Controller {
|
|
|
130
149
|
filterComponent: 'filter/multi-option',
|
|
131
150
|
filterOptions: ['draft', 'pending-approval', 'approved', 'rejected', 'revised', 'submitted', 'in-review', 'confirmed', 'processed', 'archived', 'cancelled'],
|
|
132
151
|
},
|
|
152
|
+
{
|
|
153
|
+
label: 'Source',
|
|
154
|
+
valuePath: 'source',
|
|
155
|
+
resizable: true,
|
|
156
|
+
sortable: false,
|
|
157
|
+
filterable: true,
|
|
158
|
+
filterComponent: 'filter/multi-option',
|
|
159
|
+
filterOptions: ['manual', 'import', 'fuel_provider'],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
label: 'Provider',
|
|
163
|
+
valuePath: 'provider',
|
|
164
|
+
resizable: true,
|
|
165
|
+
sortable: false,
|
|
166
|
+
filterable: true,
|
|
167
|
+
filterComponent: 'filter/string',
|
|
168
|
+
},
|
|
133
169
|
{
|
|
134
170
|
label: this.intl.t('column.volume'),
|
|
135
171
|
valuePath: 'volume',
|