@fleetbase/fleetops-engine 0.6.50 → 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 +183 -67
- 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/contact/panel-header.hbs +11 -48
- package/addon/components/customer/details.hbs +1 -2
- package/addon/components/customer/form.hbs +63 -51
- package/addon/components/customer/form.js +27 -1
- package/addon/components/customer/orders.hbs +48 -0
- package/addon/components/customer/orders.js +67 -5
- 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/driver/form.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/home/getting-started-guidance.hbs +113 -0
- package/addon/components/home/getting-started-guidance.js +107 -0
- package/addon/components/issue/details/comments.hbs +3 -0
- package/addon/components/issue/details/comments.js +3 -0
- package/addon/components/issue/details/correspondence.hbs +9 -0
- package/addon/components/issue/details/correspondence.js +83 -0
- package/addon/components/issue/details/documents.hbs +69 -0
- package/addon/components/issue/details/documents.js +85 -0
- package/addon/components/issue/details.hbs +166 -59
- package/addon/components/issue/details.js +149 -0
- package/addon/components/issue/form.hbs +19 -1
- package/addon/components/issue/panel-header.hbs +43 -0
- package/addon/components/issue/panel-header.js +22 -0
- package/addon/components/issue/timeline.hbs +40 -0
- package/addon/components/issue/timeline.js +45 -0
- package/addon/components/layout/fleet-ops-sidebar.js +20 -2
- package/addon/components/leaflet-tracking-marker.js +3 -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/position-listing.js +3 -0
- package/addon/components/map/drawer/vehicle-listing.hbs +14 -1
- package/addon/components/map/leaflet-live-map.hbs +2 -2
- package/addon/components/map/leaflet-live-map.js +17 -0
- package/addon/components/map/order-list-overlay.hbs +4 -4
- 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/convert-customer-to-vendor.hbs +30 -0
- package/addon/components/modals/convert-customer-to-vendor.js +55 -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/issue-assign.hbs +20 -0
- package/addon/components/modals/issue-assign.js +49 -0
- package/addon/components/modals/issue-close.hbs +30 -0
- package/addon/components/modals/issue-close.js +73 -0
- package/addon/components/modals/issue-status.hbs +20 -0
- package/addon/components/modals/issue-status.js +43 -0
- package/addon/components/modals/reset-customer-credentials.js +12 -6
- package/addon/components/modals/telematic-connection-diagnostics.hbs +75 -0
- package/addon/components/modals/telematic-connection-diagnostics.js +287 -0
- package/addon/components/modals/update-order-activity.hbs +51 -17
- package/addon/components/modals/update-order-activity.js +59 -5
- 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/details/activity.js +2 -2
- package/addon/components/order/details/proof.hbs +40 -38
- package/addon/components/order/details/proof.js +31 -4
- package/addon/components/order/details.hbs +5 -5
- package/addon/components/order/details.js +19 -1
- package/addon/components/order/form/service-rate.hbs +2 -0
- package/addon/components/order/header.hbs +1 -1
- package/addon/components/route-list.hbs +0 -12
- package/addon/components/service-rate/details.hbs +1 -1
- package/addon/components/service-rate/form.hbs +4 -3
- package/addon/components/service-rate/form.js +4 -0
- 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/vendor/personnel-manager.hbs +166 -0
- package/addon/components/vendor/personnel-manager.js +143 -0
- package/addon/components/widget/fuel-providers.hbs +43 -0
- package/addon/components/widget/fuel-providers.js +27 -0
- package/addon/components/widget/live-fleet.hbs +1 -0
- package/addon/components/widget/live-fleet.js +2 -7
- package/addon/components/widget/revenue-trend.hbs +1 -1
- package/addon/components/widget/revenue-trend.js +75 -2
- 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/contacts/customers/details.js +31 -13
- package/addon/controllers/management/contacts/customers.js +16 -5
- package/addon/controllers/management/contacts/index/details.js +31 -13
- package/addon/controllers/management/contacts/index.js +7 -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/issues/index/details.js +52 -6
- package/addon/controllers/management/vehicles/index/details.js +32 -0
- package/addon/controllers/management/vehicles/index.js +26 -0
- package/addon/controllers/management/vendors/index/details.js +4 -0
- package/addon/controllers/operations/orders/index/details.js +11 -3
- package/addon/controllers/operations/orders/index.js +5 -1
- package/addon/controllers/settings/payments/index.js +5 -0
- package/addon/extension.js +29 -12
- package/addon/helpers/format-duration.js +1 -38
- package/addon/initializers/load-leaflet-assets.js +5 -6
- package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -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/management/issues/index/details.js +1 -1
- package/addon/routes.js +29 -9
- package/addon/services/contact-actions.js +231 -1
- 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/getting-started.js +44 -0
- package/addon/services/issue-actions.js +72 -1
- package/addon/services/leaflet-map-manager.js +2 -0
- package/addon/services/map-adapter/leaflet.js +19 -0
- package/addon/services/service-areas.js +3 -0
- package/addon/services/telematic-actions.js +9 -3
- package/addon/services/vehicle-actions.js +125 -0
- package/addon/styles/fleetops-engine.css +1313 -1
- 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/details.hbs +1 -1
- package/addon/templates/management/contacts/customers.hbs +15 -1
- package/addon/templates/management/contacts/index/details.hbs +1 -1
- package/addon/templates/management/contacts/index.hbs +19 -1
- package/addon/templates/management/contacts.hbs +2 -2
- 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/details/index.hbs +3 -1
- package/addon/templates/management/issues/index/details.hbs +3 -2
- 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/details/personnel.hbs +1 -2
- package/addon/templates/management/vendors/index.hbs +19 -1
- package/addon/templates/management/vendors/integrated.hbs +13 -1
- package/addon/templates/operations/orders/index/details/index.hbs +2 -2
- package/addon/templates/operations/orders/index.hbs +20 -2
- package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
- package/addon/templates/operations/service-rates/index/new.hbs +1 -0
- package/addon/templates/operations/service-rates/index.hbs +19 -1
- package/addon/templates/settings/payments/index.hbs +15 -1
- package/addon/templates/settings/payments/onboard.hbs +8 -8
- package/addon/utils/fleet-ops-options.js +3 -0
- package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
- package/addon/utils/leaflet-plugin-loader.js +219 -0
- package/addon/utils/setup-customer-portal.js +4 -64
- 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/home/getting-started-guidance.js +1 -0
- package/app/components/issue/details/comments.js +1 -0
- package/app/components/issue/details/correspondence.js +1 -0
- package/app/components/issue/details/documents.js +1 -0
- package/app/components/issue/panel-header.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/convert-customer-to-vendor.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/issue-assign.js +1 -0
- package/app/components/modals/issue-close.js +1 -0
- package/app/components/modals/issue-status.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/vendor/personnel-manager.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/helpers/format-duration.js +1 -1
- 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/services/getting-started.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/app/utils/leaflet-draw-namespace-guard.js +1 -0
- package/app/utils/leaflet-plugin-loader.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 +5 -5
- package/server/config/fuel-providers.php +42 -0
- package/server/config/telematics.php +139 -130
- package/server/migrations/2026_05_31_000001_add_portal_fields_to_vendor_personnels_table.php +30 -0
- package/server/migrations/2026_06_03_000000_ensure_tags_column_on_issues_table.php +31 -0
- package/server/migrations/2026_06_03_000001_add_order_uuid_to_issues_table.php +25 -0
- package/server/migrations/2026_06_04_000001_backfill_order_transaction_subjects.php +39 -0
- package/server/migrations/2026_06_04_000002_backfill_order_transaction_directions.php +24 -0
- 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/resources/views/mail/customer-credentials.blade.php +16 -13
- 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/Expansions/UserFilterExpansion.php +28 -0
- package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +26 -25
- package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
- package/server/src/Http/Controllers/Internal/v1/AnalyticsController.php +6 -0
- package/server/src/Http/Controllers/Internal/v1/ContactController.php +135 -0
- package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
- 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/GettingStartedController.php +17 -0
- package/server/src/Http/Controllers/Internal/v1/IssueController.php +251 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +172 -97
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
- 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/Internal/v1/VendorController.php +89 -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/Requests/CreateIssueRequest.php +4 -0
- package/server/src/Http/Requests/UpdateIssueRequest.php +4 -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/Order.php +12 -9
- package/server/src/Http/Resources/v1/Index/Vehicle.php +29 -22
- package/server/src/Http/Resources/v1/Issue.php +25 -0
- package/server/src/Http/Resources/v1/Order.php +20 -18
- 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/Mail/CustomerCredentialsMail.php +5 -6
- package/server/src/Models/Asset.php +2 -1
- package/server/src/Models/Contact.php +32 -52
- 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/Issue.php +47 -6
- package/server/src/Models/Order.php +33 -6
- package/server/src/Models/Part.php +2 -1
- package/server/src/Models/Sensor.php +21 -4
- package/server/src/Models/ServiceArea.php +1 -1
- 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/Models/VendorPersonnel.php +10 -1
- package/server/src/Models/Zone.php +1 -1
- package/server/src/Observers/PurchaseRateObserver.php +20 -0
- package/server/src/Observers/ZoneObserver.php +56 -0
- package/server/src/Providers/FleetOpsServiceProvider.php +11 -0
- package/server/src/Support/Analytics/FuelProviderSummary.php +42 -0
- package/server/src/Support/Analytics/TopDrivers.php +9 -1
- 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/GettingStarted.php +144 -0
- package/server/src/Support/PlaceSearch.php +282 -0
- package/server/src/Support/ResolvesOrderServiceStops.php +22 -12
- 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 +74 -5
- package/server/tests/AnalyticsRoutesTest.php +8 -0
- package/server/tests/CustomerContactIdentitySafetyTest.php +41 -0
- package/server/tests/DriverVehicleStatusDefaultTest.php +2 -2
- package/server/tests/FuelProviderRegistryTest.php +416 -0
- package/server/tests/GettingStartedStatusTest.php +21 -0
- package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
- package/server/tests/ServiceAreaZoneApiShapeTest.php +44 -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 +31 -0
- package/translations/bg-bg.yaml +81 -0
- package/translations/en-us.yaml +94 -0
- package/translations/es-pa.yaml +81 -0
- package/translations/fr-fr.yaml +81 -0
- package/translations/mn-mn.yaml +81 -0
- package/translations/pt-br.yaml +81 -0
- package/translations/ru-ru.yaml +81 -0
- package/translations/vi-vn.yaml +106 -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
|
@@ -7,10 +7,8 @@ use Fleetbase\FleetOps\Exceptions\CustomerUserConflictException;
|
|
|
7
7
|
use Fleetbase\FleetOps\Exceptions\UserAlreadyExistsException;
|
|
8
8
|
use Fleetbase\FleetOps\Support\Utils;
|
|
9
9
|
use Fleetbase\Models\CompanyUser;
|
|
10
|
-
use Fleetbase\Models\Invite;
|
|
11
10
|
use Fleetbase\Models\Model;
|
|
12
11
|
use Fleetbase\Models\User;
|
|
13
|
-
use Fleetbase\Notifications\UserInvited;
|
|
14
12
|
use Fleetbase\Traits\HasApiModelBehavior;
|
|
15
13
|
use Fleetbase\Traits\HasApiModelCache;
|
|
16
14
|
use Fleetbase\Traits\HasCustomFields;
|
|
@@ -145,7 +143,8 @@ class Contact extends Model
|
|
|
145
143
|
{
|
|
146
144
|
return SlugOptions::create()
|
|
147
145
|
->generateSlugsFrom('name')
|
|
148
|
-
->saveSlugsTo('slug')
|
|
146
|
+
->saveSlugsTo('slug')
|
|
147
|
+
->doNotGenerateSlugsOnUpdate();
|
|
149
148
|
}
|
|
150
149
|
|
|
151
150
|
public function company(): BelongsTo
|
|
@@ -301,15 +300,15 @@ class Contact extends Model
|
|
|
301
300
|
}
|
|
302
301
|
|
|
303
302
|
/**
|
|
304
|
-
* Creates a new user from the given contact
|
|
303
|
+
* Creates a new user from the given contact without sending an organization invitation.
|
|
305
304
|
*
|
|
306
305
|
* This method first checks if a user with the same email or phone number as the contact already exists.
|
|
307
306
|
* If such a user exists, it throws a UserAlreadyExistsException. Otherwise, it proceeds to create a new
|
|
308
307
|
* user record using the contact's details, assigns the user to the contact's company, and links the
|
|
309
|
-
* user to the contact.
|
|
308
|
+
* user to the contact.
|
|
310
309
|
*
|
|
311
310
|
* @param Contact $contact the contact instance from which the user should be created
|
|
312
|
-
* @param bool $sendInvite
|
|
311
|
+
* @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
|
|
313
312
|
*
|
|
314
313
|
* @return User the newly created user instance
|
|
315
314
|
*
|
|
@@ -379,8 +378,8 @@ class Contact extends Model
|
|
|
379
378
|
// Set user type
|
|
380
379
|
$user->setType($contact->type);
|
|
381
380
|
|
|
382
|
-
//
|
|
383
|
-
|
|
381
|
+
// Assign to company without triggering core organization invitations.
|
|
382
|
+
static::assignUserToContactCompany($contact, $user);
|
|
384
383
|
|
|
385
384
|
// Assign customer role
|
|
386
385
|
if ($contact->isCustomer()) {
|
|
@@ -393,23 +392,6 @@ class Contact extends Model
|
|
|
393
392
|
$contact->update(['user_uuid' => $user->uuid]);
|
|
394
393
|
}
|
|
395
394
|
|
|
396
|
-
// Optionally, send invite
|
|
397
|
-
if ($sendInvite) {
|
|
398
|
-
// send invitation to user
|
|
399
|
-
$invitation = Invite::create([
|
|
400
|
-
'company_uuid' => $user->company_uuid,
|
|
401
|
-
'created_by_uuid' => session('user'),
|
|
402
|
-
'subject_uuid' => $user->company_uuid,
|
|
403
|
-
'subject_type' => Utils::getMutationType('company'),
|
|
404
|
-
'protocol' => 'email',
|
|
405
|
-
'recipients' => [$user->email],
|
|
406
|
-
'reason' => 'join_company',
|
|
407
|
-
]);
|
|
408
|
-
|
|
409
|
-
// notify user
|
|
410
|
-
$user->notify(new UserInvited($invitation));
|
|
411
|
-
}
|
|
412
|
-
|
|
413
395
|
$contact->setRelation('user', $user);
|
|
414
396
|
|
|
415
397
|
return $user;
|
|
@@ -491,21 +473,20 @@ class Contact extends Model
|
|
|
491
473
|
}
|
|
492
474
|
|
|
493
475
|
/**
|
|
494
|
-
* Assigns a user to the company
|
|
476
|
+
* Assigns a user to the contact's company without sending an organization invitation.
|
|
495
477
|
*
|
|
496
478
|
* This method performs the following actions:
|
|
497
479
|
* 1. Associates the provided user with the current company, assigning them a role based on the
|
|
498
480
|
* company's type (e.g., 'Fleet-Ops Customer' or 'Fleet-Ops Contact').
|
|
499
481
|
* 2. If the user is of type 'customer', assigns the 'Fleet-Ops Customer' role specifically.
|
|
500
482
|
* 3. Updates the current entity's `user_uuid` to reference the assigned user.
|
|
501
|
-
* 4. Optionally sends an invitation email to the user, inviting them to join the company.
|
|
502
483
|
*
|
|
503
484
|
* @param User $user the user to be assigned to the company
|
|
504
|
-
* @param bool $sendInvite
|
|
485
|
+
* @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
|
|
505
486
|
*
|
|
506
487
|
* @return self returns the current instance to allow method chaining
|
|
507
488
|
*
|
|
508
|
-
* @throws \Exception if an error occurs during user assignment
|
|
489
|
+
* @throws \Exception if an error occurs during user assignment
|
|
509
490
|
*/
|
|
510
491
|
public function assignUser(User $user, bool $sendInvite = false): self
|
|
511
492
|
{
|
|
@@ -525,8 +506,8 @@ class Contact extends Model
|
|
|
525
506
|
}
|
|
526
507
|
}
|
|
527
508
|
|
|
528
|
-
//
|
|
529
|
-
|
|
509
|
+
// Assign to company without triggering core organization invitations.
|
|
510
|
+
static::assignUserToContactCompany($this, $user);
|
|
530
511
|
|
|
531
512
|
// Get the company user instance
|
|
532
513
|
$companyUser = $user->getCompanyUser($this->company);
|
|
@@ -538,23 +519,6 @@ class Contact extends Model
|
|
|
538
519
|
// Set user to contact
|
|
539
520
|
$this->update(['user_uuid' => $user->uuid]);
|
|
540
521
|
|
|
541
|
-
// Optionally, send invite
|
|
542
|
-
if ($sendInvite) {
|
|
543
|
-
// send invitation to user
|
|
544
|
-
$invitation = Invite::create([
|
|
545
|
-
'company_uuid' => $user->company_uuid,
|
|
546
|
-
'created_by_uuid' => session('user'),
|
|
547
|
-
'subject_uuid' => $user->company_uuid,
|
|
548
|
-
'subject_type' => Utils::getMutationType('company'),
|
|
549
|
-
'protocol' => 'email',
|
|
550
|
-
'recipients' => [$user->email],
|
|
551
|
-
'reason' => 'join_company',
|
|
552
|
-
]);
|
|
553
|
-
|
|
554
|
-
// notify user
|
|
555
|
-
$user->notify(new UserInvited($invitation));
|
|
556
|
-
}
|
|
557
|
-
|
|
558
522
|
$this->setRelation('user', $user);
|
|
559
523
|
|
|
560
524
|
return $this;
|
|
@@ -657,12 +621,11 @@ class Contact extends Model
|
|
|
657
621
|
}
|
|
658
622
|
|
|
659
623
|
/**
|
|
660
|
-
* Creates a new user from the current contact instance
|
|
624
|
+
* Creates a new user from the current contact instance without sending an organization invitation.
|
|
661
625
|
*
|
|
662
|
-
* This method is a wrapper around the createUserFromContact method.
|
|
663
|
-
* from a contact instance and, optionally, sending an invitation to the newly created user.
|
|
626
|
+
* This method is a wrapper around the createUserFromContact method.
|
|
664
627
|
*
|
|
665
|
-
* @param bool $sendInvite
|
|
628
|
+
* @param bool $sendInvite Deprecated and ignored. Contact and customer users do not receive organization invitations.
|
|
666
629
|
*
|
|
667
630
|
* @return User the newly created user instance
|
|
668
631
|
*/
|
|
@@ -709,4 +672,21 @@ class Contact extends Model
|
|
|
709
672
|
{
|
|
710
673
|
return !$this->hasUser();
|
|
711
674
|
}
|
|
675
|
+
|
|
676
|
+
private static function assignUserToContactCompany(Contact $contact, User $user): ?CompanyUser
|
|
677
|
+
{
|
|
678
|
+
$contact->loadMissing('company');
|
|
679
|
+
|
|
680
|
+
if (!$contact->company) {
|
|
681
|
+
return null;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
$role = $contact->isCustomer() ? 'Fleet-Ops Customer' : 'Fleet-Ops Contact';
|
|
685
|
+
$companyUser = $contact->company->addUser($user, $role);
|
|
686
|
+
|
|
687
|
+
$user->forceFill(['company_uuid' => $contact->company->uuid])->saveQuietly();
|
|
688
|
+
$user->setRelation('companyUser', $companyUser);
|
|
689
|
+
|
|
690
|
+
return $companyUser;
|
|
691
|
+
}
|
|
712
692
|
}
|
|
@@ -67,14 +67,14 @@ class Device extends Model
|
|
|
67
67
|
*
|
|
68
68
|
* @var array
|
|
69
69
|
*/
|
|
70
|
-
protected $searchableColumns = ['name', 'model', 'serial_number', 'manufacturer', 'public_id'];
|
|
70
|
+
protected $searchableColumns = ['name', 'model', 'serial_number', 'manufacturer', 'device_id', 'internal_id', 'imei', 'public_id'];
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* The attributes that can be used for filtering.
|
|
74
74
|
*
|
|
75
75
|
* @var array
|
|
76
76
|
*/
|
|
77
|
-
protected $filterParams = ['status', 'warranty_uuid', 'attachable_type'];
|
|
77
|
+
protected $filterParams = ['status', 'warranty_uuid', 'attachable_type', 'attachable_uuid', 'telematic_uuid', 'provider'];
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* The attributes that are mass assignable.
|
|
@@ -187,7 +187,8 @@ class Device extends Model
|
|
|
187
187
|
{
|
|
188
188
|
return SlugOptions::create()
|
|
189
189
|
->generateSlugsFrom(['name', 'serial_number'])
|
|
190
|
-
->saveSlugsTo('slug')
|
|
190
|
+
->saveSlugsTo('slug')
|
|
191
|
+
->doNotGenerateSlugsOnUpdate();
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
/**
|
|
@@ -195,7 +196,29 @@ class Device extends Model
|
|
|
195
196
|
*/
|
|
196
197
|
public function getActivitylogOptions(): LogOptions
|
|
197
198
|
{
|
|
198
|
-
return LogOptions::defaults()
|
|
199
|
+
return LogOptions::defaults()
|
|
200
|
+
->logOnly([
|
|
201
|
+
'company_uuid',
|
|
202
|
+
'telematic_uuid',
|
|
203
|
+
'attachable_uuid',
|
|
204
|
+
'attachable_type',
|
|
205
|
+
'device_id',
|
|
206
|
+
'internal_id',
|
|
207
|
+
'imei',
|
|
208
|
+
'imsi',
|
|
209
|
+
'firmware_version',
|
|
210
|
+
'provider',
|
|
211
|
+
'name',
|
|
212
|
+
'model',
|
|
213
|
+
'manufacturer',
|
|
214
|
+
'serial_number',
|
|
215
|
+
'installation_date',
|
|
216
|
+
'last_maintenance_date',
|
|
217
|
+
'online',
|
|
218
|
+
'status',
|
|
219
|
+
'last_online_at',
|
|
220
|
+
])
|
|
221
|
+
->logOnlyDirty();
|
|
199
222
|
}
|
|
200
223
|
|
|
201
224
|
public function telematic(): BelongsTo
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
namespace Fleetbase\FleetOps\Models;
|
|
4
4
|
|
|
5
5
|
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\FleetOps\Casts\Point;
|
|
7
|
+
use Fleetbase\LaravelMysqlSpatial\Eloquent\SpatialTrait;
|
|
6
8
|
use Fleetbase\Models\Alert;
|
|
7
9
|
use Fleetbase\Models\Company;
|
|
8
10
|
use Fleetbase\Models\Model;
|
|
@@ -35,6 +37,7 @@ class DeviceEvent extends Model
|
|
|
35
37
|
use LogsActivity;
|
|
36
38
|
use HasMetaAttributes;
|
|
37
39
|
use Searchable;
|
|
40
|
+
use SpatialTrait;
|
|
38
41
|
|
|
39
42
|
/**
|
|
40
43
|
* The database table used by the model.
|
|
@@ -55,14 +58,14 @@ class DeviceEvent extends Model
|
|
|
55
58
|
*
|
|
56
59
|
* @var array
|
|
57
60
|
*/
|
|
58
|
-
protected $searchableColumns = ['event_type', 'message', 'public_id'];
|
|
61
|
+
protected $searchableColumns = ['event_type', 'message', 'ident', 'code', 'provider', 'public_id'];
|
|
59
62
|
|
|
60
63
|
/**
|
|
61
64
|
* The attributes that can be used for filtering.
|
|
62
65
|
*
|
|
63
66
|
* @var array
|
|
64
67
|
*/
|
|
65
|
-
protected $filterParams = ['event_type', 'severity', 'device_uuid'];
|
|
68
|
+
protected $filterParams = ['event_type', 'severity', 'device_uuid', 'provider', 'code'];
|
|
66
69
|
|
|
67
70
|
/**
|
|
68
71
|
* The attributes that are mass assignable.
|
|
@@ -73,10 +76,12 @@ class DeviceEvent extends Model
|
|
|
73
76
|
'company_uuid',
|
|
74
77
|
'device_uuid',
|
|
75
78
|
'payload',
|
|
79
|
+
'data',
|
|
76
80
|
'meta',
|
|
77
81
|
'location',
|
|
78
82
|
'event_type',
|
|
79
83
|
'severity',
|
|
84
|
+
'message',
|
|
80
85
|
'ident',
|
|
81
86
|
'protocol',
|
|
82
87
|
'provider',
|
|
@@ -86,6 +91,8 @@ class DeviceEvent extends Model
|
|
|
86
91
|
'reason',
|
|
87
92
|
'comment',
|
|
88
93
|
'resolved_at',
|
|
94
|
+
'occurred_at',
|
|
95
|
+
'processed_at',
|
|
89
96
|
'slug',
|
|
90
97
|
];
|
|
91
98
|
|
|
@@ -108,6 +115,13 @@ class DeviceEvent extends Model
|
|
|
108
115
|
*/
|
|
109
116
|
protected $hidden = ['device'];
|
|
110
117
|
|
|
118
|
+
/**
|
|
119
|
+
* The attributes that are spatial columns.
|
|
120
|
+
*
|
|
121
|
+
* @var array
|
|
122
|
+
*/
|
|
123
|
+
protected $spatialFields = ['location'];
|
|
124
|
+
|
|
111
125
|
/**
|
|
112
126
|
* The attributes that should be cast to native types.
|
|
113
127
|
*
|
|
@@ -115,8 +129,12 @@ class DeviceEvent extends Model
|
|
|
115
129
|
*/
|
|
116
130
|
protected $casts = [
|
|
117
131
|
'payload' => Json::class,
|
|
132
|
+
'data' => Json::class,
|
|
118
133
|
'meta' => Json::class,
|
|
134
|
+
'location' => Point::class,
|
|
119
135
|
'resolved_at' => 'datetime',
|
|
136
|
+
'occurred_at' => 'datetime',
|
|
137
|
+
'processed_at' => 'datetime',
|
|
120
138
|
];
|
|
121
139
|
|
|
122
140
|
/**
|
|
@@ -145,7 +163,26 @@ class DeviceEvent extends Model
|
|
|
145
163
|
*/
|
|
146
164
|
public function getActivitylogOptions(): LogOptions
|
|
147
165
|
{
|
|
148
|
-
return LogOptions::defaults()
|
|
166
|
+
return LogOptions::defaults()
|
|
167
|
+
->logOnly([
|
|
168
|
+
'company_uuid',
|
|
169
|
+
'device_uuid',
|
|
170
|
+
'event_type',
|
|
171
|
+
'severity',
|
|
172
|
+
'message',
|
|
173
|
+
'ident',
|
|
174
|
+
'protocol',
|
|
175
|
+
'provider',
|
|
176
|
+
'mileage',
|
|
177
|
+
'state',
|
|
178
|
+
'code',
|
|
179
|
+
'reason',
|
|
180
|
+
'comment',
|
|
181
|
+
'resolved_at',
|
|
182
|
+
'occurred_at',
|
|
183
|
+
'processed_at',
|
|
184
|
+
])
|
|
185
|
+
->logOnlyDirty();
|
|
149
186
|
}
|
|
150
187
|
|
|
151
188
|
public function company(): BelongsTo
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\Models\Model;
|
|
7
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
8
|
+
use Fleetbase\Traits\HasPublicId;
|
|
9
|
+
use Fleetbase\Traits\HasUuid;
|
|
10
|
+
use Fleetbase\Traits\Searchable;
|
|
11
|
+
use Fleetbase\Traits\TracksApiCredential;
|
|
12
|
+
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
13
|
+
|
|
14
|
+
class FuelProviderConnection extends Model
|
|
15
|
+
{
|
|
16
|
+
use HasUuid;
|
|
17
|
+
use HasPublicId;
|
|
18
|
+
use TracksApiCredential;
|
|
19
|
+
use HasApiModelBehavior;
|
|
20
|
+
use Searchable;
|
|
21
|
+
|
|
22
|
+
protected $table = 'fuel_provider_connections';
|
|
23
|
+
protected $publicIdType = 'fuel_provider_connection';
|
|
24
|
+
protected $searchableColumns = ['public_id', 'name', 'provider', 'status', 'environment'];
|
|
25
|
+
protected $filterParams = ['provider', 'status', 'environment'];
|
|
26
|
+
|
|
27
|
+
protected $fillable = [
|
|
28
|
+
'company_uuid',
|
|
29
|
+
'provider',
|
|
30
|
+
'name',
|
|
31
|
+
'environment',
|
|
32
|
+
'status',
|
|
33
|
+
'credentials',
|
|
34
|
+
'sync_settings',
|
|
35
|
+
'last_sync_state',
|
|
36
|
+
'last_synced_at',
|
|
37
|
+
'last_tested_at',
|
|
38
|
+
'last_error',
|
|
39
|
+
'meta',
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
protected $casts = [
|
|
43
|
+
'credentials' => Json::class,
|
|
44
|
+
'sync_settings' => Json::class,
|
|
45
|
+
'last_sync_state' => Json::class,
|
|
46
|
+
'last_synced_at' => 'datetime',
|
|
47
|
+
'last_tested_at' => 'datetime',
|
|
48
|
+
'meta' => Json::class,
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
public function transactions(): HasMany
|
|
52
|
+
{
|
|
53
|
+
return $this->hasMany(FuelProviderTransaction::class, 'fuel_provider_connection_uuid', 'uuid');
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public function syncRuns(): HasMany
|
|
57
|
+
{
|
|
58
|
+
return $this->hasMany(FuelProviderSyncRun::class, 'fuel_provider_connection_uuid', 'uuid');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\Models\Model;
|
|
7
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
8
|
+
use Fleetbase\Traits\HasPublicId;
|
|
9
|
+
use Fleetbase\Traits\HasUuid;
|
|
10
|
+
use Fleetbase\Traits\Searchable;
|
|
11
|
+
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
12
|
+
|
|
13
|
+
class FuelProviderSyncRun extends Model
|
|
14
|
+
{
|
|
15
|
+
use HasUuid;
|
|
16
|
+
use HasPublicId;
|
|
17
|
+
use HasApiModelBehavior;
|
|
18
|
+
use Searchable;
|
|
19
|
+
|
|
20
|
+
protected $table = 'fuel_provider_sync_runs';
|
|
21
|
+
protected $publicIdType = 'fuel_provider_sync_run';
|
|
22
|
+
protected $searchableColumns = ['public_id', 'provider', 'status'];
|
|
23
|
+
protected $filterParams = ['provider', 'status', 'connection'];
|
|
24
|
+
|
|
25
|
+
protected $fillable = [
|
|
26
|
+
'company_uuid',
|
|
27
|
+
'fuel_provider_connection_uuid',
|
|
28
|
+
'provider',
|
|
29
|
+
'status',
|
|
30
|
+
'from',
|
|
31
|
+
'to',
|
|
32
|
+
'imported',
|
|
33
|
+
'matched',
|
|
34
|
+
'unmatched',
|
|
35
|
+
'fuel_reports_created',
|
|
36
|
+
'liters',
|
|
37
|
+
'amount',
|
|
38
|
+
'started_at',
|
|
39
|
+
'finished_at',
|
|
40
|
+
'error',
|
|
41
|
+
'summary',
|
|
42
|
+
'meta',
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
protected $casts = [
|
|
46
|
+
'from' => 'datetime',
|
|
47
|
+
'to' => 'datetime',
|
|
48
|
+
'started_at' => 'datetime',
|
|
49
|
+
'finished_at' => 'datetime',
|
|
50
|
+
'summary' => Json::class,
|
|
51
|
+
'meta' => Json::class,
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
public function connection(): BelongsTo
|
|
55
|
+
{
|
|
56
|
+
return $this->belongsTo(FuelProviderConnection::class, 'fuel_provider_connection_uuid', 'uuid');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
namespace Fleetbase\FleetOps\Models;
|
|
4
|
+
|
|
5
|
+
use Fleetbase\Casts\Json;
|
|
6
|
+
use Fleetbase\LaravelMysqlSpatial\Types\Point;
|
|
7
|
+
use Fleetbase\Models\Model;
|
|
8
|
+
use Fleetbase\Traits\HasApiModelBehavior;
|
|
9
|
+
use Fleetbase\Traits\HasPublicId;
|
|
10
|
+
use Fleetbase\Traits\HasUuid;
|
|
11
|
+
use Fleetbase\Traits\Searchable;
|
|
12
|
+
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
13
|
+
|
|
14
|
+
class FuelProviderTransaction extends Model
|
|
15
|
+
{
|
|
16
|
+
use HasUuid;
|
|
17
|
+
use HasPublicId;
|
|
18
|
+
use HasApiModelBehavior;
|
|
19
|
+
use Searchable;
|
|
20
|
+
|
|
21
|
+
protected $table = 'fuel_provider_transactions';
|
|
22
|
+
protected $publicIdType = 'fuel_provider_transaction';
|
|
23
|
+
protected $searchableColumns = ['public_id', 'provider', 'provider_transaction_id', 'vehicle_card_id', 'internal_number', 'plate_number', 'vin', 'serial_number', 'call_sign', 'station_name', 'trip_number'];
|
|
24
|
+
protected $filterParams = ['provider', 'sync_status', 'vehicle', 'driver', 'order', 'fuel_report', 'connection'];
|
|
25
|
+
|
|
26
|
+
protected $fillable = [
|
|
27
|
+
'company_uuid',
|
|
28
|
+
'fuel_provider_connection_uuid',
|
|
29
|
+
'fuel_report_uuid',
|
|
30
|
+
'vehicle_uuid',
|
|
31
|
+
'driver_uuid',
|
|
32
|
+
'order_uuid',
|
|
33
|
+
'provider',
|
|
34
|
+
'provider_transaction_id',
|
|
35
|
+
'provider_vehicle_id',
|
|
36
|
+
'vehicle_card_id',
|
|
37
|
+
'internal_number',
|
|
38
|
+
'structure_number',
|
|
39
|
+
'plate_number',
|
|
40
|
+
'vin',
|
|
41
|
+
'serial_number',
|
|
42
|
+
'call_sign',
|
|
43
|
+
'trip_number',
|
|
44
|
+
'station_name',
|
|
45
|
+
'station_latitude',
|
|
46
|
+
'station_longitude',
|
|
47
|
+
'transaction_at',
|
|
48
|
+
'volume',
|
|
49
|
+
'metric_unit',
|
|
50
|
+
'amount',
|
|
51
|
+
'currency',
|
|
52
|
+
'odometer',
|
|
53
|
+
'sync_status',
|
|
54
|
+
'matched_at',
|
|
55
|
+
'normalized_payload',
|
|
56
|
+
'raw_payload',
|
|
57
|
+
'meta',
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
protected $casts = [
|
|
61
|
+
'transaction_at' => 'datetime',
|
|
62
|
+
'matched_at' => 'datetime',
|
|
63
|
+
'normalized_payload' => Json::class,
|
|
64
|
+
'raw_payload' => Json::class,
|
|
65
|
+
'meta' => Json::class,
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
protected $appends = ['vehicle_name', 'driver_name', 'fuel_report_id', 'station_location'];
|
|
69
|
+
protected $hidden = ['vehicle', 'driver', 'fuelReport'];
|
|
70
|
+
|
|
71
|
+
public function connection(): BelongsTo
|
|
72
|
+
{
|
|
73
|
+
return $this->belongsTo(FuelProviderConnection::class, 'fuel_provider_connection_uuid', 'uuid');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public function fuelReport(): BelongsTo
|
|
77
|
+
{
|
|
78
|
+
return $this->belongsTo(FuelReport::class, 'fuel_report_uuid', 'uuid');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public function vehicle(): BelongsTo
|
|
82
|
+
{
|
|
83
|
+
return $this->belongsTo(Vehicle::class, 'vehicle_uuid', 'uuid');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public function driver(): BelongsTo
|
|
87
|
+
{
|
|
88
|
+
return $this->belongsTo(Driver::class, 'driver_uuid', 'uuid');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public function order(): BelongsTo
|
|
92
|
+
{
|
|
93
|
+
return $this->belongsTo(Order::class, 'order_uuid', 'uuid');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public function getVehicleNameAttribute(): ?string
|
|
97
|
+
{
|
|
98
|
+
return data_get($this, 'vehicle.display_name');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public function getDriverNameAttribute(): ?string
|
|
102
|
+
{
|
|
103
|
+
return data_get($this, 'driver.name');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public function getFuelReportIdAttribute(): ?string
|
|
107
|
+
{
|
|
108
|
+
return data_get($this, 'fuelReport.public_id');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public function getStationLocationAttribute(): ?Point
|
|
112
|
+
{
|
|
113
|
+
if (!$this->station_latitude || !$this->station_longitude) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return new Point($this->station_latitude, $this->station_longitude);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -91,7 +91,7 @@ class FuelReport extends Model
|
|
|
91
91
|
*
|
|
92
92
|
* @var array
|
|
93
93
|
*/
|
|
94
|
-
protected $appends = ['vehicle_name', 'driver_name', 'reporter_name'];
|
|
94
|
+
protected $appends = ['vehicle_name', 'driver_name', 'reporter_name', 'source', 'provider', 'fuel_provider_transaction_uuid'];
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
97
|
* The attributes excluded from the model's JSON form.
|
|
@@ -179,6 +179,21 @@ class FuelReport extends Model
|
|
|
179
179
|
return data_get($this, 'reportedBy.name');
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
+
public function getSourceAttribute(): ?string
|
|
183
|
+
{
|
|
184
|
+
return data_get($this, 'meta.source');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public function getProviderAttribute(): ?string
|
|
188
|
+
{
|
|
189
|
+
return data_get($this, 'meta.provider');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
public function getFuelProviderTransactionUuidAttribute(): ?string
|
|
193
|
+
{
|
|
194
|
+
return data_get($this, 'meta.fuel_provider_transaction_uuid');
|
|
195
|
+
}
|
|
196
|
+
|
|
182
197
|
public static function createFromImport(array $row, bool $saveInstance = false): FuelReport
|
|
183
198
|
{
|
|
184
199
|
// Filter array for null key values
|