@fleetbase/fleetops-engine 0.6.49 → 0.6.51

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.
Files changed (271) hide show
  1. package/README.md +185 -67
  2. package/addon/components/contact/panel-header.hbs +11 -48
  3. package/addon/components/customer/create-order-form.hbs +2 -2
  4. package/addon/components/customer/details.hbs +1 -2
  5. package/addon/components/customer/form.hbs +62 -50
  6. package/addon/components/customer/form.js +27 -1
  7. package/addon/components/customer/order-form.hbs +2 -2
  8. package/addon/components/customer/orders.hbs +50 -2
  9. package/addon/components/customer/orders.js +67 -5
  10. package/addon/components/display-place.hbs +2 -2
  11. package/addon/components/driver/form.hbs +1 -1
  12. package/addon/components/home/getting-started-guidance.hbs +113 -0
  13. package/addon/components/home/getting-started-guidance.js +107 -0
  14. package/addon/components/issue/details/comments.hbs +3 -0
  15. package/addon/components/issue/details/comments.js +3 -0
  16. package/addon/components/issue/details/correspondence.hbs +9 -0
  17. package/addon/components/issue/details/correspondence.js +83 -0
  18. package/addon/components/issue/details/documents.hbs +69 -0
  19. package/addon/components/issue/details/documents.js +85 -0
  20. package/addon/components/issue/details.hbs +220 -59
  21. package/addon/components/issue/details.js +245 -0
  22. package/addon/components/issue/form.hbs +19 -1
  23. package/addon/components/issue/panel-header.hbs +43 -0
  24. package/addon/components/issue/panel-header.js +22 -0
  25. package/addon/components/issue/timeline.hbs +40 -0
  26. package/addon/components/issue/timeline.js +45 -0
  27. package/addon/components/leaflet-tracking-marker.js +3 -0
  28. package/addon/components/map/drawer/position-listing.js +3 -0
  29. package/addon/components/map/google-live-map.js +6 -2
  30. package/addon/components/map/leaflet-live-map.hbs +48 -14
  31. package/addon/components/map/leaflet-live-map.js +201 -20
  32. package/addon/components/map/order-list-overlay.hbs +4 -4
  33. package/addon/components/modals/convert-customer-to-vendor.hbs +30 -0
  34. package/addon/components/modals/convert-customer-to-vendor.js +55 -0
  35. package/addon/components/modals/issue-assign.hbs +20 -0
  36. package/addon/components/modals/issue-assign.js +49 -0
  37. package/addon/components/modals/issue-close.hbs +30 -0
  38. package/addon/components/modals/issue-close.js +73 -0
  39. package/addon/components/modals/issue-status.hbs +20 -0
  40. package/addon/components/modals/issue-status.js +43 -0
  41. package/addon/components/modals/order-change-destination.hbs +46 -0
  42. package/addon/components/modals/order-change-destination.js +106 -0
  43. package/addon/components/modals/reset-customer-credentials.js +12 -6
  44. package/addon/components/modals/stop-activity.hbs +28 -0
  45. package/addon/components/modals/stop-activity.js +52 -0
  46. package/addon/components/modals/update-order-activity.hbs +78 -2
  47. package/addon/components/modals/update-order-activity.js +197 -5
  48. package/addon/components/orchestrator/resource-panel.hbs +0 -10
  49. package/addon/components/orchestrator/resource-panel.js +2 -4
  50. package/addon/components/order/activity-list.hbs +2 -2
  51. package/addon/components/order/activity-timeline.hbs +31 -29
  52. package/addon/components/order/details/activity.hbs +3 -3
  53. package/addon/components/order/details/activity.js +13 -2
  54. package/addon/components/order/details/documents.js +2 -0
  55. package/addon/components/order/details/proof.hbs +40 -38
  56. package/addon/components/order/details/proof.js +31 -4
  57. package/addon/components/order/details/purchase-rate.hbs +2 -2
  58. package/addon/components/order/details/route.hbs +11 -3
  59. package/addon/components/order/details/route.js +91 -14
  60. package/addon/components/order/details/tracking.hbs +101 -72
  61. package/addon/components/order/details/tracking.js +149 -2
  62. package/addon/components/order/details.hbs +5 -5
  63. package/addon/components/order/details.js +19 -1
  64. package/addon/components/order/form/details.hbs +3 -3
  65. package/addon/components/order/form/documents.js +11 -4
  66. package/addon/components/order/form/route.hbs +108 -104
  67. package/addon/components/order/form/route.js +37 -1
  68. package/addon/components/order/form/service-rate.hbs +2 -2
  69. package/addon/components/order/header.hbs +1 -1
  70. package/addon/components/order-config-manager/activity-flow.hbs +4 -1
  71. package/addon/components/order-config-manager/activity-flow.js +178 -12
  72. package/addon/components/place/address.js +1 -1
  73. package/addon/components/route-list.hbs +17 -29
  74. package/addon/components/route-list.js +42 -10
  75. package/addon/components/service-rate/details.hbs +42 -1
  76. package/addon/components/service-rate/form.hbs +119 -1
  77. package/addon/components/service-rate/form.js +59 -0
  78. package/addon/components/vehicle/form.js +1 -1
  79. package/addon/components/vehicle/pill.hbs +1 -1
  80. package/addon/components/vendor/personnel-manager.hbs +166 -0
  81. package/addon/components/vendor/personnel-manager.js +143 -0
  82. package/addon/components/widget/live-fleet.hbs +1 -0
  83. package/addon/components/widget/live-fleet.js +2 -7
  84. package/addon/components/widget/revenue-trend.hbs +1 -1
  85. package/addon/components/widget/revenue-trend.js +75 -2
  86. package/addon/controllers/management/contacts/customers/details.js +31 -13
  87. package/addon/controllers/management/contacts/customers.js +16 -5
  88. package/addon/controllers/management/contacts/index/details.js +31 -13
  89. package/addon/controllers/management/contacts/index.js +7 -0
  90. package/addon/controllers/management/issues/index/details.js +52 -6
  91. package/addon/controllers/management/vehicles/index/new.js +1 -1
  92. package/addon/controllers/management/vendors/index/details.js +4 -0
  93. package/addon/controllers/operations/orders/index/details.js +15 -7
  94. package/addon/controllers/operations/orders/index.js +15 -1
  95. package/addon/extension.js +19 -12
  96. package/addon/helpers/format-duration.js +1 -38
  97. package/addon/helpers/place-address-html.js +2 -2
  98. package/addon/initializers/load-leaflet-assets.js +5 -6
  99. package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -0
  100. package/addon/routes/management/issues/index/details.js +1 -1
  101. package/addon/routes/operations/service-rates/index.js +1 -1
  102. package/addon/routes.js +1 -0
  103. package/addon/services/contact-actions.js +231 -1
  104. package/addon/services/geofence.js +163 -19
  105. package/addon/services/getting-started.js +44 -0
  106. package/addon/services/issue-actions.js +71 -0
  107. package/addon/services/leaflet-contextmenu-manager.js +27 -0
  108. package/addon/services/leaflet-map-manager.js +2 -0
  109. package/addon/services/map-adapter/leaflet.js +19 -0
  110. package/addon/services/service-areas.js +3 -0
  111. package/addon/services/vehicle-actions.js +1 -1
  112. package/addon/styles/fleetops-engine.css +1127 -1
  113. package/addon/templates/management/contacts/customers/details.hbs +1 -1
  114. package/addon/templates/management/contacts/index/details.hbs +1 -1
  115. package/addon/templates/management/contacts.hbs +2 -2
  116. package/addon/templates/management/issues/index/details/index.hbs +3 -1
  117. package/addon/templates/management/issues/index/details.hbs +3 -2
  118. package/addon/templates/management/vendors/index/details/personnel.hbs +1 -2
  119. package/addon/templates/operations/orders/index/details/index.hbs +2 -2
  120. package/addon/templates/operations/orders/index.hbs +1 -1
  121. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  122. package/addon/templates/operations/service-rates/index/new.hbs +1 -0
  123. package/addon/templates/settings/payments/onboard.hbs +8 -8
  124. package/addon/utils/fleet-ops-options.js +2 -1
  125. package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
  126. package/addon/utils/leaflet-plugin-loader.js +219 -0
  127. package/addon/utils/normalize-order-config-flow.js +41 -0
  128. package/addon/utils/place-address-html.js +3 -2
  129. package/addon/utils/route-visualization.js +54 -7
  130. package/addon/utils/setup-customer-portal.js +4 -64
  131. package/app/components/home/getting-started-guidance.js +1 -0
  132. package/app/components/issue/details/comments.js +1 -0
  133. package/app/components/issue/details/correspondence.js +1 -0
  134. package/app/components/issue/details/documents.js +1 -0
  135. package/app/components/issue/panel-header.js +1 -0
  136. package/app/components/modals/convert-customer-to-vendor.js +1 -0
  137. package/app/components/modals/issue-assign.js +1 -0
  138. package/app/components/modals/issue-close.js +1 -0
  139. package/app/components/modals/issue-status.js +1 -0
  140. package/app/components/modals/order-change-destination.js +1 -0
  141. package/app/components/modals/stop-activity.js +1 -0
  142. package/app/components/vendor/personnel-manager.js +1 -0
  143. package/app/helpers/format-duration.js +1 -1
  144. package/app/services/getting-started.js +1 -0
  145. package/app/utils/leaflet-draw-namespace-guard.js +1 -0
  146. package/app/utils/leaflet-plugin-loader.js +1 -0
  147. package/composer.json +1 -1
  148. package/extension.json +1 -1
  149. package/package.json +5 -5
  150. package/server/migrations/2026_05_21_000001_add_geographic_rules_to_service_rate_fees_table.php +37 -0
  151. package/server/migrations/2026_05_25_000001_add_endpoint_tracking_refs_to_payloads_table.php +50 -0
  152. package/server/migrations/2026_05_27_000001_default_driver_vehicle_statuses_to_available.php +48 -0
  153. package/server/migrations/2026_05_31_000001_add_portal_fields_to_vendor_personnels_table.php +30 -0
  154. package/server/migrations/2026_06_03_000000_ensure_tags_column_on_issues_table.php +31 -0
  155. package/server/migrations/2026_06_03_000001_add_order_uuid_to_issues_table.php +25 -0
  156. package/server/migrations/2026_06_04_000001_backfill_order_transaction_subjects.php +39 -0
  157. package/server/migrations/2026_06_04_000002_backfill_order_transaction_directions.php +24 -0
  158. package/server/resources/views/labels/default.php +57 -49
  159. package/server/resources/views/labels/waypoint-label.php +27 -20
  160. package/server/resources/views/mail/customer-credentials.blade.php +16 -13
  161. package/server/seeders/Testing/ConnectivitySeeder.php +1 -0
  162. package/server/seeders/Testing/FleetSeeder.php +22 -22
  163. package/server/seeders/Testing/OrdersSeeder.php +6 -22
  164. package/server/seeders/Testing/VroomOrchestrationSeeder.php +21 -21
  165. package/server/src/Console/Commands/AuditCustomerUserConflicts.php +75 -0
  166. package/server/src/Exceptions/CustomerUserConflictException.php +13 -0
  167. package/server/src/Expansions/UserFilterExpansion.php +28 -0
  168. package/server/src/Http/Controllers/Api/v1/ContactController.php +17 -2
  169. package/server/src/Http/Controllers/Api/v1/CustomerController.php +876 -0
  170. package/server/src/Http/Controllers/Api/v1/DriverController.php +1 -1
  171. package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
  172. package/server/src/Http/Controllers/Api/v1/OrderConfigController.php +54 -0
  173. package/server/src/Http/Controllers/Api/v1/OrderController.php +109 -80
  174. package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
  175. package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +2 -2
  176. package/server/src/Http/Controllers/Api/v1/VehicleController.php +20 -3
  177. package/server/src/Http/Controllers/Internal/v1/ContactController.php +154 -0
  178. package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
  179. package/server/src/Http/Controllers/Internal/v1/GettingStartedController.php +17 -0
  180. package/server/src/Http/Controllers/Internal/v1/IssueController.php +251 -0
  181. package/server/src/Http/Controllers/Internal/v1/LiveController.php +101 -66
  182. package/server/src/Http/Controllers/Internal/v1/OrderController.php +530 -52
  183. package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
  184. package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +1 -1
  185. package/server/src/Http/Controllers/Internal/v1/SettingController.php +2 -2
  186. package/server/src/Http/Controllers/Internal/v1/VehicleController.php +54 -1
  187. package/server/src/Http/Controllers/Internal/v1/VendorController.php +89 -0
  188. package/server/src/Http/Middleware/AuthenticateCustomerToken.php +34 -0
  189. package/server/src/Http/Requests/CreateCustomerOrderRequest.php +63 -0
  190. package/server/src/Http/Requests/CreateCustomerRequest.php +48 -0
  191. package/server/src/Http/Requests/CreateDriverRequest.php +1 -1
  192. package/server/src/Http/Requests/CreateIssueRequest.php +4 -0
  193. package/server/src/Http/Requests/CreateVehicleRequest.php +25 -1
  194. package/server/src/Http/Requests/Internal/CreateDriverRequest.php +1 -1
  195. package/server/src/Http/Requests/UpdateIssueRequest.php +4 -0
  196. package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +29 -0
  197. package/server/src/Http/Resources/Internal/v1/OrderConfig.php +41 -0
  198. package/server/src/Http/Resources/v1/Customer.php +79 -0
  199. package/server/src/Http/Resources/v1/Index/Order.php +12 -9
  200. package/server/src/Http/Resources/v1/Issue.php +25 -0
  201. package/server/src/Http/Resources/v1/Order.php +20 -18
  202. package/server/src/Http/Resources/v1/OrderConfig.php +74 -0
  203. package/server/src/Http/Resources/v1/Payload.php +23 -20
  204. package/server/src/Http/Resources/v1/ServiceArea.php +33 -19
  205. package/server/src/Http/Resources/v1/ServiceRateFee.php +7 -0
  206. package/server/src/Listeners/HandleOrderDispatched.php +2 -2
  207. package/server/src/Mail/CustomerCredentialsMail.php +5 -6
  208. package/server/src/Models/Contact.php +122 -66
  209. package/server/src/Models/Customer.php +64 -0
  210. package/server/src/Models/Driver.php +12 -3
  211. package/server/src/Models/Entity.php +2 -2
  212. package/server/src/Models/Issue.php +47 -6
  213. package/server/src/Models/Order.php +62 -10
  214. package/server/src/Models/Payload.php +17 -1
  215. package/server/src/Models/ServiceArea.php +1 -1
  216. package/server/src/Models/ServiceRate.php +273 -1
  217. package/server/src/Models/ServiceRateFee.php +39 -9
  218. package/server/src/Models/TrackingNumber.php +8 -2
  219. package/server/src/Models/Vehicle.php +18 -2
  220. package/server/src/Models/VendorPersonnel.php +10 -1
  221. package/server/src/Models/Waypoint.php +2 -2
  222. package/server/src/Models/Zone.php +1 -1
  223. package/server/src/Notifications/LateDeparture.php +2 -2
  224. package/server/src/Notifications/ProlongedStoppage.php +2 -2
  225. package/server/src/Notifications/RouteDeviation.php +2 -2
  226. package/server/src/Observers/ContactObserver.php +2 -0
  227. package/server/src/Observers/PurchaseRateObserver.php +20 -0
  228. package/server/src/Observers/ServiceRateObserver.php +6 -6
  229. package/server/src/Observers/ZoneObserver.php +56 -0
  230. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +1 -1
  231. package/server/src/Providers/FleetOpsServiceProvider.php +2 -0
  232. package/server/src/Support/Analytics/AbstractAnalytics.php +6 -6
  233. package/server/src/Support/Analytics/FuelEfficiency.php +2 -2
  234. package/server/src/Support/Analytics/OrdersByStatus.php +1 -1
  235. package/server/src/Support/Analytics/RevenueTrend.php +0 -1
  236. package/server/src/Support/Analytics/TopDrivers.php +10 -2
  237. package/server/src/Support/CustomerAuth.php +98 -0
  238. package/server/src/Support/GettingStarted.php +144 -0
  239. package/server/src/Support/LabelPdf.php +52 -0
  240. package/server/src/Support/Metrics/AbstractMetric.php +4 -4
  241. package/server/src/Support/PlaceSearch.php +282 -0
  242. package/server/src/Support/ResolvesOrderServiceStops.php +522 -0
  243. package/server/src/Tracking/TrackingContextBuilder.php +41 -38
  244. package/server/src/Tracking/TrackingIntelligenceService.php +109 -9
  245. package/server/src/Tracking/TrackingStop.php +13 -11
  246. package/server/src/routes.php +76 -10
  247. package/server/tests/AnalyticsRoutesTest.php +8 -0
  248. package/server/tests/CapacityAllocationEngineTest.php +10 -10
  249. package/server/tests/CustomerContactIdentitySafetyTest.php +95 -0
  250. package/server/tests/CustomerEndpointTest.php +199 -0
  251. package/server/tests/DriverVehicleStatusDefaultTest.php +39 -0
  252. package/server/tests/GettingStartedStatusTest.php +21 -0
  253. package/server/tests/LabelPdfRenderingTest.php +23 -0
  254. package/server/tests/LiveControllerViewportTest.php +60 -0
  255. package/server/tests/MetricsRegistryTest.php +4 -8
  256. package/server/tests/OrchestrationPayloadBuilderTest.php +2 -2
  257. package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
  258. package/server/tests/OrderConfigEndpointTest.php +86 -0
  259. package/server/tests/OrderFileAttachmentTest.php +20 -0
  260. package/server/tests/ServiceAreaZoneApiShapeTest.php +78 -0
  261. package/server/tests/VehicleDriverAssignmentTest.php +18 -0
  262. package/translations/ar-ae.yml +9 -0
  263. package/translations/bg-bg.yaml +9 -0
  264. package/translations/en-us.yaml +12 -0
  265. package/translations/es-pa.yaml +9 -0
  266. package/translations/fr-fr.yaml +9 -0
  267. package/translations/mn-mn.yaml +9 -0
  268. package/translations/pt-br.yaml +9 -0
  269. package/translations/ru-ru.yaml +9 -0
  270. package/translations/vi-vn.yaml +9 -0
  271. package/server/migrations/2026_05_13_000001_repair_customer_contact_user_types.php +0 -86
@@ -0,0 +1,78 @@
1
+ <?php
2
+
3
+ use Fleetbase\FleetOps\Models\ServiceArea;
4
+ use Fleetbase\FleetOps\Models\Zone;
5
+
6
+ test('service area create and update accept persisted map geometry and style fields', function () {
7
+ $controller = file_get_contents(__DIR__ . '/../src/Http/Controllers/Api/v1/ServiceAreaController.php');
8
+
9
+ expect($controller)
10
+ ->toContain("'border'")
11
+ ->toContain("'color'")
12
+ ->toContain("'stroke_color'");
13
+ });
14
+
15
+ test('service area resource returns map geometry and style fields', function () {
16
+ $resource = file_get_contents(__DIR__ . '/../src/Http/Resources/v1/ServiceArea.php');
17
+
18
+ expect($resource)
19
+ ->toContain("'border'")
20
+ ->toContain("'color'")
21
+ ->toContain("'stroke_color'")
22
+ ->toContain("'trigger_on_entry'")
23
+ ->toContain("'trigger_on_exit'");
24
+ });
25
+
26
+ test('zone create accepts only service area public ids on the consumable api', function () {
27
+ $request = file_get_contents(__DIR__ . '/../src/Http/Requests/CreateZoneRequest.php');
28
+ $controller = file_get_contents(__DIR__ . '/../src/Http/Controllers/Api/v1/ZoneController.php');
29
+
30
+ expect($request)
31
+ ->toContain("'service_area'")
32
+ ->not->toContain("'service_area_uuid'");
33
+
34
+ expect($controller)
35
+ ->toContain("'public_id' => \$request->input('service_area')")
36
+ ->not->toContain("->orWhere('uuid'");
37
+ });
38
+
39
+ test('service area zones relationship uses the stored service area uuid foreign key', function () {
40
+ $relation = (new ServiceArea())->zones();
41
+
42
+ expect($relation->getForeignKeyName())->toBe('service_area_uuid')
43
+ ->and($relation->getLocalKeyName())->toBe('uuid');
44
+ });
45
+
46
+ test('zone service area relationship uses the stored service area uuid foreign key', function () {
47
+ $relation = (new Zone())->serviceArea();
48
+
49
+ expect($relation->getForeignKeyName())->toBe('service_area_uuid')
50
+ ->and($relation->getOwnerKeyName())->toBe('uuid');
51
+ });
52
+
53
+ test('zone observer is registered to invalidate service area cache when zones change', function () {
54
+ $provider = file_get_contents(__DIR__ . '/../src/Providers/FleetOpsServiceProvider.php');
55
+ $observer = file_get_contents(__DIR__ . '/../src/Observers/ZoneObserver.php');
56
+
57
+ expect($provider)
58
+ ->toContain('\Fleetbase\FleetOps\Models\Zone::class')
59
+ ->toContain('\Fleetbase\FleetOps\Observers\ZoneObserver::class');
60
+
61
+ expect($observer)
62
+ ->toContain('function created')
63
+ ->toContain('function updated')
64
+ ->toContain('function deleted')
65
+ ->toContain('function restored')
66
+ ->toContain("\$zone->getOriginal('service_area_uuid')")
67
+ ->toContain('ServiceArea::invalidateApiCacheManually($zone->company_uuid)')
68
+ ->toContain('ServiceArea::invalidateApiCacheManually()');
69
+ });
70
+
71
+ test('internal service area controller does not bypass api cache directly', function () {
72
+ $controller = file_get_contents(__DIR__ . '/../src/Http/Controllers/Internal/v1/ServiceAreaController.php');
73
+
74
+ expect($controller)
75
+ ->not->toContain('disableApiCache')
76
+ ->not->toContain('function queryRecord')
77
+ ->not->toContain('function findRecord');
78
+ });
@@ -0,0 +1,18 @@
1
+ <?php
2
+
3
+ test('vehicle updates preserve driver assignment unless driver input is explicit', function () {
4
+ $internalController = file_get_contents(dirname(__DIR__) . '/src/Http/Controllers/Internal/v1/VehicleController.php');
5
+ $publicController = file_get_contents(dirname(__DIR__) . '/src/Http/Controllers/Api/v1/VehicleController.php');
6
+ $vehicleModel = file_get_contents(dirname(__DIR__) . '/src/Models/Vehicle.php');
7
+
8
+ expect($internalController)
9
+ ->toContain('hasDriverInput($request)')
10
+ ->toContain('syncDriverAssignment($vehicle, $this->driverIdentifierFromRequest($request))')
11
+ ->toContain("Arr::has(\$payload, 'vehicle.driver_uuid')")
12
+ ->and($publicController)
13
+ ->toContain("\$request->exists('driver')")
14
+ ->toContain('$vehicle->unassignDriver()')
15
+ ->and($vehicleModel)
16
+ ->toContain('public function unassignDriver(): self')
17
+ ->toContain("Driver::where('vehicle_uuid', \$this->uuid)->update(['vehicle_uuid' => null])");
18
+ });
@@ -721,6 +721,15 @@ fleet-ops:
721
721
  fleet-ops-quickstart:
722
722
  message: لنرى ما يمكنك فعله لبدء العمليات...
723
723
  start-task: بدء المهمة
724
+ get-started:
725
+ title: Get Started with Fleet-Ops
726
+ subtitle: Set up the essentials and complete your first dispatch flow.
727
+ completed: completed
728
+ preview-title: First order workflow
729
+ recommended-features:
730
+ title: Recommended features for you
731
+ subtitle: Explore tools that help new operations teams get productive faster.
732
+ learn-more: Learn more
724
733
  key-metrics:
725
734
  title: مقاييس Fleet-Ops
726
735
  earnings: الأرباح
@@ -1594,6 +1594,15 @@ widget:
1594
1594
  fleet-ops-quickstart:
1595
1595
  message: Нека видим какво можете да направите, за да стартирате операциите...
1596
1596
  start-task: Започнете задача
1597
+ get-started:
1598
+ title: Get Started with Fleet-Ops
1599
+ subtitle: Set up the essentials and complete your first dispatch flow.
1600
+ completed: completed
1601
+ preview-title: First order workflow
1602
+ recommended-features:
1603
+ title: Recommended features for you
1604
+ subtitle: Explore tools that help new operations teams get productive faster.
1605
+ learn-more: Learn more
1597
1606
  key-metrics:
1598
1607
  title: Метрики на Fleet-Ops
1599
1608
  earnings: Печалби
@@ -8,6 +8,7 @@ common:
8
8
  dispatch-orders: Dispatch Orders
9
9
  dispatch-order: Dispatch Order
10
10
  assign-driver: Assign Driver
11
+ unassign-driver: Unassign Driver
11
12
  assign-drivers: Assign Drivers
12
13
  no-driver-assigned: No driver assigned
13
14
  details: Details
@@ -402,6 +403,8 @@ customer:
402
403
  select-address: Select Address
403
404
  new-address: New Adddress
404
405
  select-user: Select User
406
+ send-welcome-email: Send customer portal welcome email
407
+ send-welcome-email-help-text: Generate a temporary password and email this customer a link to sign in to the customer portal.
405
408
  upload-new-photo: Upload New Photo
406
409
  user-account: User Account
407
410
  user-account-help-text: Each customer profile needs to be connected to a specific user account. This association is essential for handling the authentication process, ensuring that each customer can securely access and manage their profile and other services.
@@ -1687,6 +1690,15 @@ widget:
1687
1690
  title: Geofence Violations
1688
1691
  live-fleet:
1689
1692
  title: Live Fleet Map
1693
+ get-started:
1694
+ title: Get Started with Fleet-Ops
1695
+ subtitle: Set up the essentials and complete your first dispatch flow.
1696
+ completed: completed
1697
+ preview-title: First order workflow
1698
+ recommended-features:
1699
+ title: Recommended features for you
1700
+ subtitle: Explore tools that help new operations teams get productive faster.
1701
+ learn-more: Learn more
1690
1702
  fleet-ops-quickstart:
1691
1703
  message: Let's see what you can do to jumpstart operations...
1692
1704
  start-task: Start Task
@@ -1487,6 +1487,15 @@ widget:
1487
1487
  fleet-ops-quickstart:
1488
1488
  message: Veamos qué puedes hacer para impulsar las operaciones...
1489
1489
  start-task: Iniciar tarea
1490
+ get-started:
1491
+ title: Get Started with Fleet-Ops
1492
+ subtitle: Set up the essentials and complete your first dispatch flow.
1493
+ completed: completed
1494
+ preview-title: First order workflow
1495
+ recommended-features:
1496
+ title: Recommended features for you
1497
+ subtitle: Explore tools that help new operations teams get productive faster.
1498
+ learn-more: Learn more
1490
1499
  key-metrics:
1491
1500
  title: Métricas de operaciones de flota
1492
1501
  earnings: Ganancias
@@ -1614,6 +1614,15 @@ widget:
1614
1614
  fleet-ops-quickstart:
1615
1615
  message: Voyons ce que vous pouvez faire pour démarrer rapidement les opérations...
1616
1616
  start-task: Démarrer la tâche
1617
+ get-started:
1618
+ title: Get Started with Fleet-Ops
1619
+ subtitle: Set up the essentials and complete your first dispatch flow.
1620
+ completed: completed
1621
+ preview-title: First order workflow
1622
+ recommended-features:
1623
+ title: Recommended features for you
1624
+ subtitle: Explore tools that help new operations teams get productive faster.
1625
+ learn-more: Learn more
1617
1626
  key-metrics:
1618
1627
  title: Métriques Fleet-Ops
1619
1628
  earnings: Gains
@@ -1565,6 +1565,15 @@ widget:
1565
1565
  fleet-ops-quickstart:
1566
1566
  message: Үйл ажиллагааг эхлүүлэхийн тулд юу хийж чадахаа харцгаая...
1567
1567
  start-task: Ажлыг эхлүүлэх
1568
+ get-started:
1569
+ title: Get Started with Fleet-Ops
1570
+ subtitle: Set up the essentials and complete your first dispatch flow.
1571
+ completed: completed
1572
+ preview-title: First order workflow
1573
+ recommended-features:
1574
+ title: Recommended features for you
1575
+ subtitle: Explore tools that help new operations teams get productive faster.
1576
+ learn-more: Learn more
1568
1577
  key-metrics:
1569
1578
  title: Флийт-Опсын хэмжүүрүүд
1570
1579
  earnings: Орлого
@@ -1584,6 +1584,15 @@ widget:
1584
1584
  fleet-ops-quickstart:
1585
1585
  message: Vamos ver o que você pode fazer para acelerar as operações...
1586
1586
  start-task: Iniciar Tarefa
1587
+ get-started:
1588
+ title: Get Started with Fleet-Ops
1589
+ subtitle: Set up the essentials and complete your first dispatch flow.
1590
+ completed: completed
1591
+ preview-title: First order workflow
1592
+ recommended-features:
1593
+ title: Recommended features for you
1594
+ subtitle: Explore tools that help new operations teams get productive faster.
1595
+ learn-more: Learn more
1587
1596
  key-metrics:
1588
1597
  title: Métricas Fleet-Ops
1589
1598
  earnings: Ganhos
@@ -1578,6 +1578,15 @@ widget:
1578
1578
  fleet-ops-quickstart:
1579
1579
  message: Давайте посмотрим, что вы можете сделать, чтобы быстро начать работу...
1580
1580
  start-task: Начать задачу
1581
+ get-started:
1582
+ title: Get Started with Fleet-Ops
1583
+ subtitle: Set up the essentials and complete your first dispatch flow.
1584
+ completed: completed
1585
+ preview-title: First order workflow
1586
+ recommended-features:
1587
+ title: Recommended features for you
1588
+ subtitle: Explore tools that help new operations teams get productive faster.
1589
+ learn-more: Learn more
1581
1590
  key-metrics:
1582
1591
  title: Метрики Fleet-Ops
1583
1592
  earnings: Доходы
@@ -722,6 +722,15 @@ fleet-ops:
722
722
  fleet-ops-quickstart:
723
723
  message: Hãy xem những gì bạn có thể làm để khởi động các hoạt động...
724
724
  start-task: Bắt đầu Nhiệm vụ
725
+ get-started:
726
+ title: Get Started with Fleet-Ops
727
+ subtitle: Set up the essentials and complete your first dispatch flow.
728
+ completed: completed
729
+ preview-title: First order workflow
730
+ recommended-features:
731
+ title: Recommended features for you
732
+ subtitle: Explore tools that help new operations teams get productive faster.
733
+ learn-more: Learn more
725
734
  key-metrics:
726
735
  title: Các Chỉ số Fleet-Ops
727
736
  earnings: Doanh thu
@@ -1,86 +0,0 @@
1
- <?php
2
-
3
- use Fleetbase\FleetOps\Models\Contact;
4
- use Fleetbase\Models\CompanyUser;
5
- use Illuminate\Database\Migrations\Migration;
6
- use Illuminate\Support\Facades\DB;
7
- use Illuminate\Support\Facades\Schema;
8
-
9
- return new class extends Migration {
10
- /**
11
- * Run the migrations.
12
- *
13
- * @return void
14
- */
15
- public function up()
16
- {
17
- Contact::withoutGlobalScopes()
18
- ->where('type', 'customer')
19
- ->whereNull('deleted_at')
20
- ->chunkById(100, function ($contacts) {
21
- foreach ($contacts as $contact) {
22
- try {
23
- $contact->repairCustomerTypeInvariant(true);
24
- } catch (Throwable $e) {
25
- // Skip ambiguous or unrecoverable records; runtime invariants handle new writes.
26
- }
27
- }
28
- });
29
-
30
- if (!$this->canUseCustomerRoleHint()) {
31
- return;
32
- }
33
-
34
- DB::table('contacts')
35
- ->select('contacts.id')
36
- ->join('company_users', function ($join) {
37
- $join->on('company_users.user_uuid', '=', 'contacts.user_uuid');
38
- $join->on('company_users.company_uuid', '=', 'contacts.company_uuid');
39
- })
40
- ->join('model_has_roles', function ($join) {
41
- $join->on('model_has_roles.model_uuid', '=', 'company_users.uuid');
42
- $join->where('model_has_roles.model_type', CompanyUser::class);
43
- })
44
- ->join('roles', 'roles.id', '=', 'model_has_roles.role_id')
45
- ->where('roles.name', 'Fleet-Ops Customer')
46
- ->whereNull('contacts.deleted_at')
47
- ->where(function ($query) {
48
- $query->whereNull('contacts.type');
49
- $query->orWhere('contacts.type', '!=', 'customer');
50
- })
51
- ->distinct()
52
- ->orderBy('contacts.id')
53
- ->chunk(100, function ($rows) {
54
- foreach ($rows as $row) {
55
- $contact = Contact::withoutGlobalScopes()->find($row->id);
56
- if (!$contact) {
57
- continue;
58
- }
59
-
60
- try {
61
- $contact->repairCustomerTypeInvariant(true);
62
- } catch (Throwable $e) {
63
- // Skip ambiguous or unrecoverable records; role is only a recovery hint.
64
- }
65
- }
66
- });
67
- }
68
-
69
- /**
70
- * Reverse the migrations.
71
- *
72
- * @return void
73
- */
74
- public function down()
75
- {
76
- // Data repair is intentionally not reversible.
77
- }
78
-
79
- private function canUseCustomerRoleHint(): bool
80
- {
81
- return Schema::hasTable('contacts')
82
- && Schema::hasTable('company_users')
83
- && Schema::hasTable('model_has_roles')
84
- && Schema::hasTable('roles');
85
- }
86
- };