@fleetbase/fleetops-engine 0.6.51 → 0.6.53
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/operations-monitor.hbs +201 -0
- package/addon/components/layout/fleet-ops-sidebar/operations-monitor.js +589 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +19 -233
- package/addon/components/layout/fleet-ops-sidebar.js +287 -376
- package/addon/components/maintenance-schedule/form.js +1 -0
- 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/payload.js +3 -1
- 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 +18 -1
- 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/maintenance/index.js +100 -0
- 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/index.js +88 -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/index.js +142 -0
- package/addon/controllers/settings/payments/index.js +5 -0
- package/addon/extension.js +31 -0
- package/addon/routes/analytics/index.js +3 -0
- package/addon/routes/connectivity/devices/index.js +3 -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/maintenance/index.js +3 -0
- package/addon/routes/maintenance/work-orders/index.js +2 -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/settings/index.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 +2237 -162
- package/addon/templates/analytics/index.hbs +14 -0
- 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/index.hbs +113 -0
- 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/index.hbs +109 -73
- 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/index.hbs +83 -0
- package/addon/templates/settings/payments/index.hbs +15 -1
- package/addon/templates/settings/routing.hbs +2 -2
- 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/maintenance/index.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/controllers/management/index.js +1 -0
- package/app/controllers/settings/index.js +1 -0
- package/app/routes/analytics/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/maintenance/index.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/routes/settings/index.js +1 -0
- package/app/services/fuel-integration-actions.js +1 -0
- package/app/templates/analytics/index.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/maintenance/index.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/app/templates/management/index.js +1 -0
- package/app/templates/settings/index.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/migrations/2026_06_15_000001_normalize_device_attachable_vehicle_morph_types.php +30 -0
- package/server/src/Console/Commands/FixInvalidPolymorphicRelationTypeNamespaces.php +1 -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 +140 -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/HubController.php +300 -0
- package/server/src/Http/Controllers/Internal/v1/SearchController.php +506 -0
- package/server/src/Http/Controllers/Internal/v1/SensorController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/TelematicController.php +179 -16
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +249 -0
- package/server/src/Http/Controllers/TelematicWebhookController.php +103 -19
- package/server/src/Http/Filter/DeviceFilter.php +74 -0
- package/server/src/Http/Filter/DriverFilter.php +6 -0
- 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/Filter/VehicleFilter.php +6 -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 +105 -17
- 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 +3 -2
- 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 +20 -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 +105 -38
- 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 +50 -4
- package/server/tests/FuelProviderRegistryTest.php +416 -0
- package/server/tests/HubRoutesTest.php +62 -0
- package/server/tests/ServiceRateAlgorithmWeightVariablesTest.php +44 -0
- package/server/tests/TelematicsHardeningTest.php +359 -0
- package/server/tests/VehicleDriverAssignmentTest.php +51 -0
- package/translations/ar-ae.yml +23 -1
- 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 +98 -1
- 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
|
@@ -1,87 +1,318 @@
|
|
|
1
|
-
<div class="
|
|
2
|
-
<
|
|
3
|
-
<div class="
|
|
4
|
-
<
|
|
5
|
-
<div class="
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
<div class="flex min-h-0 flex-1 flex-col" ...attributes>
|
|
2
|
+
<div class="min-h-0 flex-1 overflow-y-auto px-4 py-4 md:px-6">
|
|
3
|
+
<div class="mx-auto flex w-full max-w-6xl flex-col gap-4">
|
|
4
|
+
<section class="rounded-md border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
5
|
+
<div class="grid grid-cols-1 gap-2 md:grid-cols-5">
|
|
6
|
+
{{#each this.setupSteps as |step index|}}
|
|
7
|
+
<button
|
|
8
|
+
type="button"
|
|
9
|
+
class="rounded-md border p-2 text-left transition
|
|
10
|
+
{{if step.active 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-500/10' 'border-gray-200 bg-white hover:border-gray-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-gray-600'}}"
|
|
11
|
+
{{on "click" (fn this.goToStep index)}}
|
|
12
|
+
>
|
|
13
|
+
<div class="flex items-center gap-2">
|
|
14
|
+
<div
|
|
15
|
+
class="flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-md text-xs
|
|
16
|
+
{{if step.active 'bg-blue-600 text-white dark:bg-blue-500' (if step.complete 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300' 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300')}}"
|
|
17
|
+
>
|
|
18
|
+
<FaIcon @icon={{if step.complete "check" step.icon}} />
|
|
19
|
+
</div>
|
|
20
|
+
<div class="min-w-0">
|
|
21
|
+
<div class="text-[10px] font-semibold uppercase text-gray-400 dark:text-gray-500">{{add index 1}}</div>
|
|
22
|
+
<div class="truncate text-xs font-bold text-gray-900 dark:text-gray-100">{{step.label}}</div>
|
|
23
|
+
</div>
|
|
19
24
|
</div>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
</button>
|
|
26
|
+
{{/each}}
|
|
27
|
+
</div>
|
|
28
|
+
</section>
|
|
29
|
+
|
|
30
|
+
{{#if (eq this.activeStep 0)}}
|
|
31
|
+
<section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
32
|
+
<div class="mb-3">
|
|
33
|
+
<h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Choose Provider</h2>
|
|
34
|
+
<p class="text-xs text-gray-500 dark:text-gray-300">Select the provider that will supply device connectivity and telemetry.</p>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
{{#if this.loadProviders.isRunning}}
|
|
38
|
+
<div class="flex min-h-[140px] items-center justify-center"><Spinner /></div>
|
|
39
|
+
{{else}}
|
|
40
|
+
<div class="grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-4">
|
|
41
|
+
{{#each this.providerCards as |provider|}}
|
|
42
|
+
<button
|
|
43
|
+
type="button"
|
|
44
|
+
class="flex min-h-[128px] flex-col rounded-md border p-3 text-left transition
|
|
45
|
+
{{if provider.selected 'border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-gray-800' 'border-gray-200 bg-white hover:border-blue-300 dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-400'}}"
|
|
46
|
+
disabled={{cannot-write @resource}}
|
|
47
|
+
{{on "click" (fn this.selectProvider provider)}}
|
|
48
|
+
>
|
|
49
|
+
<div class="flex items-start justify-between gap-3">
|
|
50
|
+
<div class="flex min-w-0 items-center gap-2">
|
|
51
|
+
<Image src={{provider.icon}} class="h-7 w-7 rounded" />
|
|
52
|
+
<div class="min-w-0">
|
|
53
|
+
<div class="truncate text-sm font-bold text-gray-900 dark:text-gray-100">{{provider.label}}</div>
|
|
54
|
+
<div class="truncate text-[11px] uppercase text-gray-400 dark:text-gray-500">{{provider.type}}</div>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
{{#if provider.selected}}
|
|
58
|
+
<Badge @status="success" @hideStatusDot={{true}}>Selected</Badge>
|
|
59
|
+
{{/if}}
|
|
23
60
|
</div>
|
|
61
|
+
<p class="mt-3 line-clamp-2 flex-1 text-xs leading-5 text-gray-500 dark:text-gray-300">{{provider.description}}</p>
|
|
62
|
+
</button>
|
|
63
|
+
{{/each}}
|
|
64
|
+
</div>
|
|
65
|
+
{{/if}}
|
|
66
|
+
</section>
|
|
67
|
+
{{else if (eq this.activeStep 1)}}
|
|
68
|
+
<section class="grid grid-cols-1 gap-4 lg:grid-cols-3">
|
|
69
|
+
<div class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 lg:col-span-2">
|
|
70
|
+
<div class="mb-3">
|
|
71
|
+
<div>
|
|
72
|
+
<h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Credentials</h2>
|
|
73
|
+
<p class="text-xs text-gray-500 dark:text-gray-300">FleetOps uses these credentials to test the connection and sync devices.</p>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
{{#if this.selectedProvider}}
|
|
78
|
+
<div class="grid grid-cols-1 gap-2 lg:grid-cols-2 no-input-group-padding text-xs">
|
|
79
|
+
{{#each this.credentialFields as |field|}}
|
|
80
|
+
<InputGroup
|
|
81
|
+
@name={{field.label}}
|
|
82
|
+
@value={{get @resource.credentials field.name}}
|
|
83
|
+
@required={{field.required}}
|
|
84
|
+
@type={{field.type}}
|
|
85
|
+
@placeholder={{field.placeholder}}
|
|
86
|
+
@helpText={{field.help_text}}
|
|
87
|
+
{{on "input" (fn this.setCredential field)}}
|
|
88
|
+
/>
|
|
89
|
+
{{/each}}
|
|
90
|
+
</div>
|
|
91
|
+
{{#if this.hasAdvancedCredentialFields}}
|
|
92
|
+
<details class="mt-4 rounded-md border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-900/40">
|
|
93
|
+
<summary class="flex cursor-pointer list-none items-center justify-between gap-3 px-3 py-2 text-xs font-semibold text-gray-700 dark:text-gray-200">
|
|
94
|
+
<span class="inline-flex items-center gap-2">
|
|
95
|
+
<FaIcon @icon="sliders" />
|
|
96
|
+
Advanced connection settings
|
|
97
|
+
</span>
|
|
98
|
+
<span class="text-[11px] font-normal text-gray-400 dark:text-gray-500">Endpoint overrides</span>
|
|
99
|
+
</summary>
|
|
100
|
+
<div class="border-t border-gray-200 p-3 dark:border-gray-700">
|
|
101
|
+
<div class="grid grid-cols-1 gap-2 lg:grid-cols-2 no-input-group-padding text-xs">
|
|
102
|
+
{{#each this.advancedCredentialFields as |field|}}
|
|
103
|
+
<InputGroup
|
|
104
|
+
@name={{field.label}}
|
|
105
|
+
@value={{or (get @resource.credentials field.name) field.default_value}}
|
|
106
|
+
@required={{field.required}}
|
|
107
|
+
@type={{field.type}}
|
|
108
|
+
@placeholder={{field.placeholder}}
|
|
109
|
+
@helpText={{field.help_text}}
|
|
110
|
+
{{on "input" (fn this.setCredential field)}}
|
|
111
|
+
/>
|
|
112
|
+
{{/each}}
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</details>
|
|
116
|
+
{{/if}}
|
|
117
|
+
{{else}}
|
|
118
|
+
<div class="rounded-md border border-dashed border-gray-300 p-6 text-center text-xs text-gray-500 dark:border-gray-700 dark:text-gray-300">
|
|
119
|
+
Choose a provider before entering credentials.
|
|
120
|
+
</div>
|
|
121
|
+
{{/if}}
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
{{#if this.selectedProvider}}
|
|
125
|
+
<aside class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
126
|
+
<div class="flex items-start gap-3">
|
|
127
|
+
<Image src={{this.selectedProvider.icon}} class="h-9 w-9 rounded" />
|
|
128
|
+
<div class="min-w-0">
|
|
129
|
+
<div class="truncate text-sm font-bold text-gray-900 dark:text-gray-100">{{this.selectedProvider.label}}</div>
|
|
130
|
+
<p class="mt-1 text-xs leading-5 text-gray-500 dark:text-gray-300">{{this.selectedProvider.description}}</p>
|
|
24
131
|
</div>
|
|
25
|
-
</
|
|
132
|
+
</div>
|
|
133
|
+
<div class="mt-3 flex flex-wrap gap-2">
|
|
134
|
+
<Badge @status={{if this.selectedProvider.supports_discovery "success" "default"}} @hideStatusDot={{true}}>Discovery</Badge>
|
|
135
|
+
<Badge @status={{if this.selectedProvider.supports_webhooks "success" "default"}} @hideStatusDot={{true}}>Webhooks</Badge>
|
|
136
|
+
</div>
|
|
137
|
+
</aside>
|
|
138
|
+
{{/if}}
|
|
139
|
+
</section>
|
|
140
|
+
{{else if (eq this.activeStep 2)}}
|
|
141
|
+
<section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
142
|
+
<div class="mb-3">
|
|
143
|
+
<div>
|
|
144
|
+
<h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Test Connection</h2>
|
|
145
|
+
<p class="text-xs text-gray-500 dark:text-gray-300">Confirm the provider accepts the credentials before saving this connection.</p>
|
|
26
146
|
</div>
|
|
27
|
-
</InputGroup>
|
|
28
|
-
</div>
|
|
29
|
-
</ContentPanel>
|
|
30
|
-
|
|
31
|
-
{{#if this.selectedProvider}}
|
|
32
|
-
<ContentPanel @title="Credentials" @open={{true}} @actionButtons={{this.credentialsActionButtons}} @wrapperClass="bordered-top">
|
|
33
|
-
<div class="grid grid-cols-1 gap-2 lg:grid-cols-2 lg:gap-2 no-input-group-padding text-xs">
|
|
34
|
-
{{#each this.selectedProvider.required_fields as |field|}}
|
|
35
|
-
<InputGroup
|
|
36
|
-
@name={{field.label}}
|
|
37
|
-
@value={{get @resource.credentials field.name}}
|
|
38
|
-
@required={{field.required}}
|
|
39
|
-
@type={{if (eq field.type "password") "text" field.type}}
|
|
40
|
-
@helpText={{field.help_text}}
|
|
41
|
-
{{on "input" (fn this.setCredential field)}}
|
|
42
|
-
/>
|
|
43
|
-
{{/each}}
|
|
44
147
|
</div>
|
|
45
|
-
</ContentPanel>
|
|
46
148
|
|
|
47
|
-
|
|
48
|
-
|
|
149
|
+
<div
|
|
150
|
+
class="rounded-md border p-4 text-xs transition
|
|
151
|
+
{{if (eq this.connectionState 'success') 'border-green-200 bg-green-50 dark:border-green-800 dark:bg-green-900/10'}}
|
|
152
|
+
{{if (eq this.connectionState 'failed') 'border-red-200 bg-red-50 dark:border-red-800 dark:bg-red-900/10'}}
|
|
153
|
+
{{if (eq this.connectionState 'testing') 'border-blue-200 bg-blue-50 dark:border-blue-800 dark:bg-blue-900/10'}}
|
|
154
|
+
{{if (eq this.connectionState 'idle') 'border-dashed border-gray-300 bg-white dark:border-gray-700 dark:bg-gray-800'}}"
|
|
155
|
+
>
|
|
156
|
+
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
|
|
157
|
+
<div class="flex min-w-0 items-start gap-3">
|
|
158
|
+
<div
|
|
159
|
+
class="flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-md
|
|
160
|
+
{{if (eq this.connectionState 'success') 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'}}
|
|
161
|
+
{{if (eq this.connectionState 'failed') 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300'}}
|
|
162
|
+
{{if (eq this.connectionState 'testing') 'bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300 animate-pulse'}}
|
|
163
|
+
{{if (eq this.connectionState 'idle') 'bg-gray-100 text-gray-500 dark:bg-gray-700 dark:text-gray-300'}}"
|
|
164
|
+
>
|
|
165
|
+
{{#if (eq this.connectionState "testing")}}
|
|
166
|
+
<Spinner />
|
|
167
|
+
{{else if (eq this.connectionState "success")}}
|
|
168
|
+
<FaIcon @icon="check" />
|
|
169
|
+
{{else if (eq this.connectionState "failed")}}
|
|
170
|
+
<FaIcon @icon="triangle-exclamation" />
|
|
171
|
+
{{else}}
|
|
172
|
+
<FaIcon @icon="plug" />
|
|
173
|
+
{{/if}}
|
|
174
|
+
</div>
|
|
175
|
+
<div class="min-w-0">
|
|
176
|
+
<div class="text-sm font-bold text-gray-900 dark:text-gray-100">{{this.connectionStateTitle}}</div>
|
|
177
|
+
{{#if this.connectionStateMessage}}
|
|
178
|
+
<p class="mt-1 max-w-3xl text-xs leading-5 text-gray-600 dark:text-gray-300">{{this.connectionStateMessage}}</p>
|
|
179
|
+
{{/if}}
|
|
180
|
+
|
|
181
|
+
{{#if this.hasConnectionMetadata}}
|
|
182
|
+
<div class="mt-3 flex flex-wrap gap-2">
|
|
183
|
+
{{#each this.connectionMetadataEntries as |item|}}
|
|
184
|
+
<span class="inline-flex items-center rounded-md border border-gray-200 bg-white px-2 py-1 text-[11px] text-gray-600 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300">
|
|
185
|
+
<span class="mr-1 font-semibold text-gray-900 dark:text-gray-100">{{item.label}}</span>
|
|
186
|
+
{{item.value}}
|
|
187
|
+
</span>
|
|
188
|
+
{{/each}}
|
|
189
|
+
</div>
|
|
190
|
+
{{/if}}
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
<div class="flex flex-shrink-0 items-center justify-end">
|
|
195
|
+
{{#if (eq this.connectionState "failed")}}
|
|
196
|
+
<Button @icon="rotate" @text="Retry Test" @size="xs" @isLoading={{this.testConnection.isRunning}} @disabled={{this.testConnection.isRunning}} @onClick={{perform this.testConnection}} />
|
|
197
|
+
{{else if (eq this.connectionState "success")}}
|
|
198
|
+
<Button @icon="rotate" @text="Test Again" @size="xs" @isLoading={{this.testConnection.isRunning}} @disabled={{this.testConnection.isRunning}} @onClick={{perform this.testConnection}} />
|
|
199
|
+
{{else if (eq this.connectionState "idle")}}
|
|
200
|
+
<Button @icon="plug" @text="Test Connection" @size="xs" @isLoading={{this.testConnection.isRunning}} @disabled={{this.testConnection.isRunning}} @onClick={{perform this.testConnection}} />
|
|
201
|
+
{{/if}}
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<div
|
|
206
|
+
class="-mx-4 mt-4 border-t px-4
|
|
207
|
+
{{if (eq this.connectionState 'success') 'border-green-200 dark:border-green-800'}}
|
|
208
|
+
{{if (eq this.connectionState 'failed') 'border-red-200 dark:border-red-800'}}
|
|
209
|
+
{{if (eq this.connectionState 'testing') 'border-blue-200 dark:border-blue-800'}}
|
|
210
|
+
{{if (eq this.connectionState 'idle') 'border-gray-300 dark:border-gray-700'}}"
|
|
211
|
+
>
|
|
212
|
+
<div class="flex flex-col gap-2 py-2 md:flex-row md:items-center md:justify-between">
|
|
213
|
+
<button type="button" class="inline-flex items-center gap-2 text-xs font-semibold text-blue-600 hover:text-blue-700 dark:text-blue-300 dark:hover:text-blue-200" {{on "click" this.toggleConnectionDiagnostics}}>
|
|
214
|
+
<FaIcon @icon={{if this.showConnectionDiagnostics "chevron-up" "chevron-down"}} class="text-[10px]" />
|
|
215
|
+
<span>{{if this.showConnectionDiagnostics "Hide diagnostics" "Show diagnostics"}}</span>
|
|
216
|
+
</button>
|
|
217
|
+
|
|
218
|
+
{{#if this.showConnectionDiagnostics}}
|
|
219
|
+
<Button @icon="copy" @text="Copy diagnostics" @size="xs" @disabled={{not this.hasConnectionDiagnostics}} @onClick={{this.copyConnectionDiagnostics}} />
|
|
220
|
+
{{/if}}
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
{{#if this.showConnectionDiagnostics}}
|
|
224
|
+
<div class="mt-3 max-h-56 overflow-y-auto rounded-md border border-gray-800 bg-gray-900 p-3 font-mono text-[11px] leading-5 shadow-inner dark:border-gray-700 dark:bg-gray-900">
|
|
225
|
+
{{#each this.connectionDiagnosticEntries as |entry|}}
|
|
226
|
+
<div
|
|
227
|
+
class="flex gap-3
|
|
228
|
+
{{if (eq entry.tone 'success') 'text-green-300'}}
|
|
229
|
+
{{if (eq entry.tone 'danger') 'text-red-300'}}
|
|
230
|
+
{{if (eq entry.tone 'info') 'text-blue-300'}}
|
|
231
|
+
{{if (eq entry.tone 'warning') 'text-yellow-300'}}
|
|
232
|
+
{{if (eq entry.tone 'muted') 'text-gray-300'}}"
|
|
233
|
+
>
|
|
234
|
+
<span class="flex-shrink-0 text-gray-500">[{{entry.time}}]</span>
|
|
235
|
+
<span class="min-w-0 break-words">{{entry.text}}</span>
|
|
236
|
+
</div>
|
|
237
|
+
{{/each}}
|
|
238
|
+
</div>
|
|
239
|
+
{{/if}}
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
|
|
243
|
+
</section>
|
|
244
|
+
{{else if (eq this.activeStep 3)}}
|
|
245
|
+
<section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
246
|
+
<div class="mb-3">
|
|
247
|
+
<h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Configure Integration</h2>
|
|
248
|
+
<p class="text-xs text-gray-500 dark:text-gray-300">Name the connection and confirm any provider-facing URLs.</p>
|
|
249
|
+
</div>
|
|
250
|
+
|
|
251
|
+
<div class="grid grid-cols-1 gap-2 lg:grid-cols-2 no-input-group-padding text-xs">
|
|
49
252
|
<InputGroup @value={{@resource.name}} @name="Integration Name" />
|
|
50
253
|
|
|
51
254
|
{{#if this.selectedProvider.supports_webhooks}}
|
|
52
|
-
<InputGroup
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
dashboard to receive real-time updates.
|
|
64
|
-
</small>
|
|
255
|
+
<InputGroup @name="Webhook URL" @wrapperClass="lg:col-span-2">
|
|
256
|
+
{{#if this.webhookUrl}}
|
|
257
|
+
<ClickToCopy @value={{this.webhookUrl}} class="w-full">
|
|
258
|
+
<Input @value={{this.webhookUrl}} class="form-input w-full" readonly />
|
|
259
|
+
</ClickToCopy>
|
|
260
|
+
<small class="form-text text-muted mt-1">Use this public URL in the provider dashboard.</small>
|
|
261
|
+
{{else}}
|
|
262
|
+
<div class="rounded-md border border-yellow-200 bg-yellow-50 p-3 text-xs text-yellow-800 dark:border-yellow-700 dark:bg-gray-800 dark:text-yellow-300">
|
|
263
|
+
The webhook URL will be available after this connection has a public ID.
|
|
264
|
+
</div>
|
|
265
|
+
{{/if}}
|
|
65
266
|
</InputGroup>
|
|
267
|
+
{{else}}
|
|
268
|
+
<div class="rounded-md border border-dashed border-gray-300 p-3 text-xs text-gray-500 dark:border-gray-700 dark:text-gray-300 lg:col-span-2">
|
|
269
|
+
This provider does not require FleetOps webhook configuration.
|
|
270
|
+
</div>
|
|
66
271
|
{{/if}}
|
|
67
272
|
</div>
|
|
68
|
-
</ContentPanel>
|
|
69
|
-
{{/if}}
|
|
70
273
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
<
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<
|
|
79
|
-
|
|
80
|
-
|
|
274
|
+
</section>
|
|
275
|
+
{{else}}
|
|
276
|
+
<section class="rounded-md border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800">
|
|
277
|
+
<div class="mb-3">
|
|
278
|
+
<h2 class="text-sm font-bold text-gray-900 dark:text-gray-100">Hardware Identity</h2>
|
|
279
|
+
<p class="text-xs text-gray-500 dark:text-gray-300">Optional blackbox metadata for provider hardware installed in the fleet.</p>
|
|
280
|
+
</div>
|
|
281
|
+
<div class="grid grid-cols-1 gap-2 lg:grid-cols-3 no-input-group-padding text-xs">
|
|
282
|
+
<InputGroup @value={{@resource.model}} @name="Model" />
|
|
283
|
+
<InputGroup @value={{@resource.serial_number}} @name="Serial Number" />
|
|
284
|
+
<InputGroup @value={{@resource.firmware_version}} @name="Firmware Version" />
|
|
285
|
+
<InputGroup @value={{@resource.imei}} @name="IMEI" />
|
|
286
|
+
<InputGroup @value={{@resource.imsi}} @name="IMSI" />
|
|
287
|
+
<InputGroup @value={{@resource.iccid}} @name="ICCID" />
|
|
288
|
+
</div>
|
|
289
|
+
</section>
|
|
81
290
|
|
|
82
|
-
|
|
291
|
+
<CustomField::Yield @subject={{@resource}} @wrapperClass="bordered-top" />
|
|
83
292
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
293
|
+
<RegistryYield @registry="fleet-ops:component:telematic:form" as |RegistryComponent|>
|
|
294
|
+
<RegistryComponent @resource={{@resource}} @controller={{@controller}} @permission={{get-write-permission @resource}} />
|
|
295
|
+
</RegistryYield>
|
|
296
|
+
{{/if}}
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<footer class="flex-shrink-0 border-t border-gray-200 bg-white px-4 py-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 dark:shadow-sm dark:shadow-black/30 md:px-6">
|
|
301
|
+
<div class="mx-auto flex w-full max-w-6xl flex-col gap-2 md:flex-row md:items-center md:justify-between">
|
|
302
|
+
<div class="text-xs text-gray-500 dark:text-gray-300">{{@footerHelp}}</div>
|
|
303
|
+
<div class="flex items-center justify-end gap-2">
|
|
304
|
+
<Button @icon="times" @text="Cancel" @size="sm" @onClick={{@onCancel}} />
|
|
305
|
+
<Button @icon="arrow-left" @text="Back" @size="sm" @disabled={{not this.canGoBack}} @onClick={{this.previousStep}} />
|
|
306
|
+
<Button
|
|
307
|
+
@icon={{this.primaryFooterIcon}}
|
|
308
|
+
@text={{this.primaryFooterLabel}}
|
|
309
|
+
@type="primary"
|
|
310
|
+
@size="sm"
|
|
311
|
+
@isLoading={{@isSaving}}
|
|
312
|
+
@disabled={{not this.canUsePrimaryAction}}
|
|
313
|
+
@onClick={{this.primaryFooterAction}}
|
|
314
|
+
/>
|
|
315
|
+
</div>
|
|
316
|
+
</div>
|
|
317
|
+
</footer>
|
|
318
|
+
</div>
|