@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.
- package/README.md +185 -67
- package/addon/components/contact/panel-header.hbs +11 -48
- package/addon/components/customer/create-order-form.hbs +2 -2
- package/addon/components/customer/details.hbs +1 -2
- package/addon/components/customer/form.hbs +62 -50
- package/addon/components/customer/form.js +27 -1
- package/addon/components/customer/order-form.hbs +2 -2
- package/addon/components/customer/orders.hbs +50 -2
- package/addon/components/customer/orders.js +67 -5
- package/addon/components/display-place.hbs +2 -2
- package/addon/components/driver/form.hbs +1 -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 +220 -59
- package/addon/components/issue/details.js +245 -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/leaflet-tracking-marker.js +3 -0
- package/addon/components/map/drawer/position-listing.js +3 -0
- package/addon/components/map/google-live-map.js +6 -2
- package/addon/components/map/leaflet-live-map.hbs +48 -14
- package/addon/components/map/leaflet-live-map.js +201 -20
- package/addon/components/map/order-list-overlay.hbs +4 -4
- 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/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/order-change-destination.hbs +46 -0
- package/addon/components/modals/order-change-destination.js +106 -0
- package/addon/components/modals/reset-customer-credentials.js +12 -6
- package/addon/components/modals/stop-activity.hbs +28 -0
- package/addon/components/modals/stop-activity.js +52 -0
- package/addon/components/modals/update-order-activity.hbs +78 -2
- package/addon/components/modals/update-order-activity.js +197 -5
- package/addon/components/orchestrator/resource-panel.hbs +0 -10
- package/addon/components/orchestrator/resource-panel.js +2 -4
- package/addon/components/order/activity-list.hbs +2 -2
- package/addon/components/order/activity-timeline.hbs +31 -29
- package/addon/components/order/details/activity.hbs +3 -3
- package/addon/components/order/details/activity.js +13 -2
- package/addon/components/order/details/documents.js +2 -0
- package/addon/components/order/details/proof.hbs +40 -38
- package/addon/components/order/details/proof.js +31 -4
- package/addon/components/order/details/purchase-rate.hbs +2 -2
- package/addon/components/order/details/route.hbs +11 -3
- package/addon/components/order/details/route.js +91 -14
- package/addon/components/order/details/tracking.hbs +101 -72
- package/addon/components/order/details/tracking.js +149 -2
- package/addon/components/order/details.hbs +5 -5
- package/addon/components/order/details.js +19 -1
- package/addon/components/order/form/details.hbs +3 -3
- package/addon/components/order/form/documents.js +11 -4
- package/addon/components/order/form/route.hbs +108 -104
- package/addon/components/order/form/route.js +37 -1
- package/addon/components/order/form/service-rate.hbs +2 -2
- package/addon/components/order/header.hbs +1 -1
- package/addon/components/order-config-manager/activity-flow.hbs +4 -1
- package/addon/components/order-config-manager/activity-flow.js +178 -12
- package/addon/components/place/address.js +1 -1
- package/addon/components/route-list.hbs +17 -29
- package/addon/components/route-list.js +42 -10
- package/addon/components/service-rate/details.hbs +42 -1
- package/addon/components/service-rate/form.hbs +119 -1
- package/addon/components/service-rate/form.js +59 -0
- package/addon/components/vehicle/form.js +1 -1
- package/addon/components/vehicle/pill.hbs +1 -1
- package/addon/components/vendor/personnel-manager.hbs +166 -0
- package/addon/components/vendor/personnel-manager.js +143 -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/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/issues/index/details.js +52 -6
- package/addon/controllers/management/vehicles/index/new.js +1 -1
- package/addon/controllers/management/vendors/index/details.js +4 -0
- package/addon/controllers/operations/orders/index/details.js +15 -7
- package/addon/controllers/operations/orders/index.js +15 -1
- package/addon/extension.js +19 -12
- package/addon/helpers/format-duration.js +1 -38
- package/addon/helpers/place-address-html.js +2 -2
- package/addon/initializers/load-leaflet-assets.js +5 -6
- package/addon/initializers/patch-ember-leaflet-tooltip-layer.js +51 -0
- package/addon/routes/management/issues/index/details.js +1 -1
- package/addon/routes/operations/service-rates/index.js +1 -1
- package/addon/routes.js +1 -0
- package/addon/services/contact-actions.js +231 -1
- package/addon/services/geofence.js +163 -19
- package/addon/services/getting-started.js +44 -0
- package/addon/services/issue-actions.js +71 -0
- package/addon/services/leaflet-contextmenu-manager.js +27 -0
- 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/vehicle-actions.js +1 -1
- package/addon/styles/fleetops-engine.css +1127 -1
- package/addon/templates/management/contacts/customers/details.hbs +1 -1
- package/addon/templates/management/contacts/index/details.hbs +1 -1
- package/addon/templates/management/contacts.hbs +2 -2
- 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/vendors/index/details/personnel.hbs +1 -2
- package/addon/templates/operations/orders/index/details/index.hbs +2 -2
- package/addon/templates/operations/orders/index.hbs +1 -1
- 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/settings/payments/onboard.hbs +8 -8
- package/addon/utils/fleet-ops-options.js +2 -1
- package/addon/utils/leaflet-draw-namespace-guard.js +22 -0
- package/addon/utils/leaflet-plugin-loader.js +219 -0
- package/addon/utils/normalize-order-config-flow.js +41 -0
- package/addon/utils/place-address-html.js +3 -2
- package/addon/utils/route-visualization.js +54 -7
- package/addon/utils/setup-customer-portal.js +4 -64
- 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/convert-customer-to-vendor.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/order-change-destination.js +1 -0
- package/app/components/modals/stop-activity.js +1 -0
- package/app/components/vendor/personnel-manager.js +1 -0
- package/app/helpers/format-duration.js +1 -1
- package/app/services/getting-started.js +1 -0
- package/app/utils/leaflet-draw-namespace-guard.js +1 -0
- package/app/utils/leaflet-plugin-loader.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +5 -5
- package/server/migrations/2026_05_21_000001_add_geographic_rules_to_service_rate_fees_table.php +37 -0
- package/server/migrations/2026_05_25_000001_add_endpoint_tracking_refs_to_payloads_table.php +50 -0
- package/server/migrations/2026_05_27_000001_default_driver_vehicle_statuses_to_available.php +48 -0
- 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/resources/views/labels/default.php +57 -49
- package/server/resources/views/labels/waypoint-label.php +27 -20
- package/server/resources/views/mail/customer-credentials.blade.php +16 -13
- package/server/seeders/Testing/ConnectivitySeeder.php +1 -0
- package/server/seeders/Testing/FleetSeeder.php +22 -22
- package/server/seeders/Testing/OrdersSeeder.php +6 -22
- package/server/seeders/Testing/VroomOrchestrationSeeder.php +21 -21
- package/server/src/Console/Commands/AuditCustomerUserConflicts.php +75 -0
- package/server/src/Exceptions/CustomerUserConflictException.php +13 -0
- package/server/src/Expansions/UserFilterExpansion.php +28 -0
- package/server/src/Http/Controllers/Api/v1/ContactController.php +17 -2
- package/server/src/Http/Controllers/Api/v1/CustomerController.php +876 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +1 -1
- package/server/src/Http/Controllers/Api/v1/IssueController.php +2 -0
- package/server/src/Http/Controllers/Api/v1/OrderConfigController.php +54 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +109 -80
- package/server/src/Http/Controllers/Api/v1/PlaceController.php +10 -58
- package/server/src/Http/Controllers/Api/v1/ServiceAreaController.php +2 -2
- package/server/src/Http/Controllers/Api/v1/VehicleController.php +20 -3
- package/server/src/Http/Controllers/Internal/v1/ContactController.php +154 -0
- package/server/src/Http/Controllers/Internal/v1/CustomerController.php +116 -6
- 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/LiveController.php +101 -66
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +530 -52
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +10 -68
- package/server/src/Http/Controllers/Internal/v1/ServiceQuoteController.php +1 -1
- package/server/src/Http/Controllers/Internal/v1/SettingController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/VehicleController.php +54 -1
- package/server/src/Http/Controllers/Internal/v1/VendorController.php +89 -0
- package/server/src/Http/Middleware/AuthenticateCustomerToken.php +34 -0
- package/server/src/Http/Requests/CreateCustomerOrderRequest.php +63 -0
- package/server/src/Http/Requests/CreateCustomerRequest.php +48 -0
- package/server/src/Http/Requests/CreateDriverRequest.php +1 -1
- package/server/src/Http/Requests/CreateIssueRequest.php +4 -0
- package/server/src/Http/Requests/CreateVehicleRequest.php +25 -1
- package/server/src/Http/Requests/Internal/CreateDriverRequest.php +1 -1
- package/server/src/Http/Requests/UpdateIssueRequest.php +4 -0
- package/server/src/Http/Requests/VerifyCreateCustomerRequest.php +29 -0
- package/server/src/Http/Resources/Internal/v1/OrderConfig.php +41 -0
- package/server/src/Http/Resources/v1/Customer.php +79 -0
- package/server/src/Http/Resources/v1/Index/Order.php +12 -9
- 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/OrderConfig.php +74 -0
- package/server/src/Http/Resources/v1/Payload.php +23 -20
- package/server/src/Http/Resources/v1/ServiceArea.php +33 -19
- package/server/src/Http/Resources/v1/ServiceRateFee.php +7 -0
- package/server/src/Listeners/HandleOrderDispatched.php +2 -2
- package/server/src/Mail/CustomerCredentialsMail.php +5 -6
- package/server/src/Models/Contact.php +122 -66
- package/server/src/Models/Customer.php +64 -0
- package/server/src/Models/Driver.php +12 -3
- package/server/src/Models/Entity.php +2 -2
- package/server/src/Models/Issue.php +47 -6
- package/server/src/Models/Order.php +62 -10
- package/server/src/Models/Payload.php +17 -1
- package/server/src/Models/ServiceArea.php +1 -1
- package/server/src/Models/ServiceRate.php +273 -1
- package/server/src/Models/ServiceRateFee.php +39 -9
- package/server/src/Models/TrackingNumber.php +8 -2
- package/server/src/Models/Vehicle.php +18 -2
- package/server/src/Models/VendorPersonnel.php +10 -1
- package/server/src/Models/Waypoint.php +2 -2
- package/server/src/Models/Zone.php +1 -1
- package/server/src/Notifications/LateDeparture.php +2 -2
- package/server/src/Notifications/ProlongedStoppage.php +2 -2
- package/server/src/Notifications/RouteDeviation.php +2 -2
- package/server/src/Observers/ContactObserver.php +2 -0
- package/server/src/Observers/PurchaseRateObserver.php +20 -0
- package/server/src/Observers/ServiceRateObserver.php +6 -6
- package/server/src/Observers/ZoneObserver.php +56 -0
- package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +1 -1
- package/server/src/Providers/FleetOpsServiceProvider.php +2 -0
- package/server/src/Support/Analytics/AbstractAnalytics.php +6 -6
- package/server/src/Support/Analytics/FuelEfficiency.php +2 -2
- package/server/src/Support/Analytics/OrdersByStatus.php +1 -1
- package/server/src/Support/Analytics/RevenueTrend.php +0 -1
- package/server/src/Support/Analytics/TopDrivers.php +10 -2
- package/server/src/Support/CustomerAuth.php +98 -0
- package/server/src/Support/GettingStarted.php +144 -0
- package/server/src/Support/LabelPdf.php +52 -0
- package/server/src/Support/Metrics/AbstractMetric.php +4 -4
- package/server/src/Support/PlaceSearch.php +282 -0
- package/server/src/Support/ResolvesOrderServiceStops.php +522 -0
- package/server/src/Tracking/TrackingContextBuilder.php +41 -38
- package/server/src/Tracking/TrackingIntelligenceService.php +109 -9
- package/server/src/Tracking/TrackingStop.php +13 -11
- package/server/src/routes.php +76 -10
- package/server/tests/AnalyticsRoutesTest.php +8 -0
- package/server/tests/CapacityAllocationEngineTest.php +10 -10
- package/server/tests/CustomerContactIdentitySafetyTest.php +95 -0
- package/server/tests/CustomerEndpointTest.php +199 -0
- package/server/tests/DriverVehicleStatusDefaultTest.php +39 -0
- package/server/tests/GettingStartedStatusTest.php +21 -0
- package/server/tests/LabelPdfRenderingTest.php +23 -0
- package/server/tests/LiveControllerViewportTest.php +60 -0
- package/server/tests/MetricsRegistryTest.php +4 -8
- package/server/tests/OrchestrationPayloadBuilderTest.php +2 -2
- package/server/tests/OrderActivityFlowRegressionTest.php +116 -0
- package/server/tests/OrderConfigEndpointTest.php +86 -0
- package/server/tests/OrderFileAttachmentTest.php +20 -0
- package/server/tests/ServiceAreaZoneApiShapeTest.php +78 -0
- package/server/tests/VehicleDriverAssignmentTest.php +18 -0
- package/translations/ar-ae.yml +9 -0
- package/translations/bg-bg.yaml +9 -0
- package/translations/en-us.yaml +12 -0
- package/translations/es-pa.yaml +9 -0
- package/translations/fr-fr.yaml +9 -0
- package/translations/mn-mn.yaml +9 -0
- package/translations/pt-br.yaml +9 -0
- package/translations/ru-ru.yaml +9 -0
- package/translations/vi-vn.yaml +9 -0
- 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
|
+
});
|
package/translations/ar-ae.yml
CHANGED
|
@@ -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: الأرباح
|
package/translations/bg-bg.yaml
CHANGED
|
@@ -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: Печалби
|
package/translations/en-us.yaml
CHANGED
|
@@ -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
|
package/translations/es-pa.yaml
CHANGED
|
@@ -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
|
package/translations/fr-fr.yaml
CHANGED
|
@@ -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
|
package/translations/mn-mn.yaml
CHANGED
|
@@ -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: Орлого
|
package/translations/pt-br.yaml
CHANGED
|
@@ -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
|
package/translations/ru-ru.yaml
CHANGED
|
@@ -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: Доходы
|
package/translations/vi-vn.yaml
CHANGED
|
@@ -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
|
-
};
|