@fleetbase/fleetops-engine 0.4.16 → 0.4.17

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 (218) hide show
  1. package/.php-cs-fixer.php +2 -0
  2. package/addon/components/activity-event-selector.hbs +35 -0
  3. package/addon/components/activity-event-selector.js +85 -0
  4. package/addon/components/activity-form-panel.hbs +23 -0
  5. package/addon/components/activity-form-panel.js +90 -0
  6. package/addon/components/activity-logic-builder.hbs +80 -0
  7. package/addon/components/activity-logic-builder.js +260 -0
  8. package/addon/components/contact-form-panel.hbs +1 -1
  9. package/addon/components/contact-panel.hbs +1 -1
  10. package/addon/components/custom-entity-form-panel.hbs +43 -0
  11. package/addon/components/custom-entity-form-panel.js +129 -0
  12. package/addon/components/custom-field-form-panel/options-input.hbs +12 -0
  13. package/addon/components/custom-field-form-panel/options-input.js +139 -0
  14. package/addon/components/custom-field-form-panel.hbs +77 -0
  15. package/addon/components/custom-field-form-panel.js +144 -0
  16. package/addon/components/custom-field.hbs +63 -41
  17. package/addon/components/custom-field.js +123 -25
  18. package/addon/components/driver-form-panel.hbs +1 -1
  19. package/addon/components/driver-panel.hbs +1 -1
  20. package/addon/components/edit-order-route-panel.hbs +1 -1
  21. package/addon/components/fleet-form-panel.hbs +1 -1
  22. package/addon/components/fleet-panel.hbs +1 -1
  23. package/addon/components/fuel-report-form-panel.hbs +1 -1
  24. package/addon/components/fuel-report-panel.hbs +1 -1
  25. package/addon/components/issue-form-panel.hbs +1 -1
  26. package/addon/components/issue-panel.hbs +1 -1
  27. package/addon/components/joint-graph.hbs +1 -0
  28. package/addon/components/joint-graph.js +103 -0
  29. package/addon/components/layout/fleet-ops-sidebar.hbs +3 -3
  30. package/addon/components/layout/fleet-ops-sidebar.js +1 -0
  31. package/addon/components/live-map.js +71 -28
  32. package/addon/components/modals/new-custom-field-group.hbs +5 -0
  33. package/addon/components/modals/new-order-config.hbs +3 -3
  34. package/addon/components/modals/order-new-activity.hbs +1 -1
  35. package/addon/components/order-config-manager/activity-flow.hbs +11 -0
  36. package/addon/components/order-config-manager/activity-flow.js +964 -0
  37. package/addon/components/order-config-manager/custom-fields.hbs +50 -0
  38. package/addon/components/order-config-manager/custom-fields.js +276 -0
  39. package/addon/components/order-config-manager/details.hbs +23 -0
  40. package/addon/components/order-config-manager/details.js +97 -0
  41. package/addon/components/order-config-manager/entities.hbs +54 -0
  42. package/addon/components/order-config-manager/entities.js +227 -0
  43. package/addon/components/order-config-manager-overlay.hbs +26 -0
  44. package/addon/components/order-config-manager-overlay.js +60 -0
  45. package/addon/components/order-config-manager.hbs +15 -0
  46. package/addon/components/order-config-manager.js +285 -0
  47. package/addon/components/order-flow.hbs +1 -0
  48. package/addon/components/order-flow.js +3 -0
  49. package/addon/components/place-form-panel.hbs +1 -1
  50. package/addon/components/place-panel.hbs +1 -1
  51. package/addon/components/vehicle-form-panel.hbs +1 -1
  52. package/addon/components/vehicle-panel.hbs +1 -1
  53. package/addon/components/vendor-form-panel.hbs +1 -1
  54. package/addon/components/vendor-panel.hbs +1 -1
  55. package/addon/controllers/application.js +5 -1
  56. package/addon/controllers/operations/order-config.js +42 -0
  57. package/addon/controllers/operations/orders/index/new.js +125 -21
  58. package/addon/controllers/operations/orders/index/view.js +87 -4
  59. package/addon/controllers/operations/orders/index.js +2 -2
  60. package/addon/engine.js +10 -1
  61. package/addon/initializers/load-jointjs.js +16 -0
  62. package/addon/routes/application.js +1 -1
  63. package/addon/routes/operations/order-config.js +28 -0
  64. package/addon/routes/operations/orders/index/new.js +2 -3
  65. package/addon/routes/operations/orders/index/view.js +1 -1
  66. package/addon/routes.js +1 -0
  67. package/addon/services/context-panel.js +65 -3
  68. package/addon/styles/fleetops-engine.css +268 -0
  69. package/addon/templates/application.hbs +1 -1
  70. package/addon/templates/operations/order-config.hbs +55 -0
  71. package/addon/templates/operations/orders/index/new.hbs +98 -339
  72. package/addon/templates/operations/orders/index/view.hbs +36 -96
  73. package/addon/templates/operations/orders/index.hbs +0 -1
  74. package/addon/utils/apply-context-component-arguments.js +4 -2
  75. package/addon/utils/create-custom-entity.js +22 -0
  76. package/addon/utils/create-flow-activity.js +31 -0
  77. package/addon/utils/get-custom-field-type-map.js +34 -0
  78. package/app/components/activity-event-selector.js +1 -0
  79. package/app/components/activity-form-panel.js +1 -0
  80. package/app/components/activity-logic-builder.js +1 -0
  81. package/app/components/custom-entity-form-panel.js +1 -0
  82. package/app/components/custom-field-form-panel/options-input.js +1 -0
  83. package/app/components/custom-field-form-panel.js +1 -0
  84. package/app/components/joint-graph.js +1 -0
  85. package/app/components/modals/new-custom-field-group.js +1 -0
  86. package/app/components/order-config-manager/activity-flow.js +1 -0
  87. package/app/components/order-config-manager/custom-fields.js +1 -0
  88. package/app/components/order-config-manager/details.js +1 -0
  89. package/app/components/order-config-manager/entities.js +1 -0
  90. package/app/components/order-config-manager-overlay.js +1 -0
  91. package/app/components/order-config-manager.js +1 -0
  92. package/app/components/order-flow.js +1 -0
  93. package/app/controllers/operations/order-config.js +1 -0
  94. package/app/routes/operations/order-config.js +1 -0
  95. package/app/templates/operations/order-config.js +1 -0
  96. package/app/utils/create-custom-entity.js +1 -0
  97. package/app/utils/create-flow-activity.js +1 -0
  98. package/app/utils/get-custom-field-type-map.js +1 -0
  99. package/composer.json +4 -3
  100. package/config/environment.js +1 -0
  101. package/extension.json +1 -1
  102. package/index.js +20 -0
  103. package/package.json +7 -5
  104. package/server/migrations/2023_04_27_053456_create_contacts_table.php +1 -2
  105. package/server/migrations/2023_04_27_053456_create_drivers_table.php +1 -2
  106. package/server/migrations/2023_04_27_053456_create_entities_table.php +1 -2
  107. package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +1 -2
  108. package/server/migrations/2023_04_27_053456_create_fleets_table.php +1 -2
  109. package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +1 -2
  110. package/server/migrations/2023_04_27_053456_create_integrated_vendors_table.php +1 -2
  111. package/server/migrations/2023_04_27_053456_create_issues_table.php +1 -2
  112. package/server/migrations/2023_04_27_053456_create_orders_table.php +1 -2
  113. package/server/migrations/2023_04_27_053456_create_payloads_table.php +1 -2
  114. package/server/migrations/2023_04_27_053456_create_places_table.php +1 -2
  115. package/server/migrations/2023_04_27_053456_create_positions_table.php +1 -2
  116. package/server/migrations/2023_04_27_053456_create_proofs_table.php +1 -2
  117. package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +1 -2
  118. package/server/migrations/2023_04_27_053456_create_routes_table.php +1 -2
  119. package/server/migrations/2023_04_27_053456_create_service_areas_table.php +1 -2
  120. package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +1 -2
  121. package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +1 -2
  122. package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +1 -2
  123. package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +1 -2
  124. package/server/migrations/2023_04_27_053456_create_service_rates_table.php +1 -2
  125. package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +1 -2
  126. package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +1 -2
  127. package/server/migrations/2023_04_27_053456_create_vehicles_table.php +1 -2
  128. package/server/migrations/2023_04_27_053456_create_vendors_table.php +1 -2
  129. package/server/migrations/2023_04_27_053456_create_waypoints_table.php +1 -2
  130. package/server/migrations/2023_04_27_053456_create_zones_table.php +1 -2
  131. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_companies_table.php +1 -2
  132. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_contacts_table.php +1 -2
  133. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_drivers_table.php +1 -2
  134. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_entities_table.php +1 -2
  135. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleet_drivers_table.php +1 -2
  136. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fleets_table.php +1 -2
  137. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_fuel_reports_table.php +1 -2
  138. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_integrated_vendors_table.php +1 -2
  139. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_issues_table.php +1 -2
  140. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_orders_table.php +1 -2
  141. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_payloads_table.php +1 -2
  142. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_places_table.php +1 -2
  143. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_positions_table.php +1 -2
  144. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_proofs_table.php +1 -2
  145. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_purchase_rates_table.php +1 -2
  146. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_routes_table.php +1 -2
  147. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_areas_table.php +1 -2
  148. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quote_items_table.php +1 -2
  149. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_quotes_table.php +1 -2
  150. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_fees_table.php +1 -2
  151. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rate_parcel_fees_table.php +1 -2
  152. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_service_rates_table.php +1 -2
  153. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_numbers_table.php +1 -2
  154. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_tracking_statuses_table.php +1 -2
  155. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vehicles_table.php +1 -2
  156. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_vendors_table.php +1 -2
  157. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_waypoints_table.php +1 -2
  158. package/server/migrations/2023_04_27_053459_add_foreign_keys_to_zones_table.php +1 -2
  159. package/server/migrations/2023_09_14_074512_update_vehicles_table.php +1 -2
  160. package/server/migrations/2023_09_14_074619_create_vehicle_devices_table.php +35 -36
  161. package/server/migrations/2023_09_26_071205_add_online_column_to_vehicles_table.php +1 -2
  162. package/server/migrations/2023_09_26_083957_create_fleet_vehicles_table.php +1 -2
  163. package/server/migrations/2023_09_27_023757_add_column_to_fleets_table.php +1 -2
  164. package/server/migrations/2023_10_05_074811_update_vehicle.php +1 -2
  165. package/server/migrations/2023_10_25_093014_create_vehicle_device_events_table.php +1 -2
  166. package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +1 -2
  167. package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +1 -2
  168. package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +1 -2
  169. package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +1 -2
  170. package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +1 -2
  171. package/server/migrations/2023_11_28_074244_add_supplier_uuid_column_to_entities_table.php +1 -2
  172. package/server/migrations/2023_12_14_100209_add_meta_column_on_driver_table copy.php +1 -2
  173. package/server/migrations/2024_02_18_100209_add_avatar_url_columns_table.php +3 -4
  174. package/server/migrations/2024_02_27_093648_create_order_configs_table.php +43 -0
  175. package/server/migrations/2024_03_07_075508_add_order_config_uuid_column_to_orders_table.php +28 -0
  176. package/server/seeders/OrderConfigSeeder.php +151 -0
  177. package/server/src/Casts/OrderConfigEntities.php +53 -0
  178. package/server/src/Console/Commands/FixLegacyOrderConfigs.php +66 -0
  179. package/server/src/Events/DriverLocationChanged.php +1 -1
  180. package/server/src/Events/DriverSimulatedLocationChanged.php +1 -1
  181. package/server/src/Flow/Activity.php +232 -6
  182. package/server/src/Flow/Condition.php +84 -0
  183. package/server/src/Flow/Event.php +88 -0
  184. package/server/src/Flow/Flow.php +50 -0
  185. package/server/src/Flow/FlowResource.php +143 -0
  186. package/server/src/Flow/Logic.php +57 -1
  187. package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
  188. package/server/src/Http/Controllers/Api/v1/IssueController.php +132 -0
  189. package/server/src/Http/Controllers/Api/v1/OrderController.php +130 -57
  190. package/server/src/Http/Controllers/Api/v1/OrganizationController.php +27 -0
  191. package/server/src/Http/Controllers/Api/v1/PlaceController.php +2 -3
  192. package/server/src/Http/Controllers/Controller.php +9 -0
  193. package/server/src/Http/Controllers/FleetOpsController.php +7 -0
  194. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +5 -259
  195. package/server/src/Http/Controllers/Internal/v1/OrderController.php +46 -26
  196. package/server/src/Http/Controllers/Internal/v1/SettingController.php +20 -0
  197. package/server/src/Http/Filter/OrderConfigFilter.php +13 -0
  198. package/server/src/Http/Requests/CreateIssueRequest.php +19 -0
  199. package/server/src/Http/Requests/UpdateIssueRequest.php +7 -0
  200. package/server/src/Http/Resources/v1/Order.php +3 -0
  201. package/server/src/Listeners/HandleOrderCanceled.php +8 -4
  202. package/server/src/Listeners/HandleOrderDispatched.php +14 -12
  203. package/server/src/Models/Order.php +527 -31
  204. package/server/src/Models/OrderConfig.php +419 -0
  205. package/server/src/Models/Payload.php +6 -7
  206. package/server/src/Notifications/OrderAssigned.php +1 -1
  207. package/server/src/Notifications/OrderCanceled.php +1 -1
  208. package/server/src/Notifications/OrderDispatchFailed.php +1 -1
  209. package/server/src/Notifications/OrderDispatched.php +1 -1
  210. package/server/src/Notifications/OrderPing.php +1 -1
  211. package/server/src/Providers/FleetOpsServiceProvider.php +3 -1
  212. package/server/src/Providers/NotificationServiceProvider.php +2 -1
  213. package/server/src/Support/Utils.php +17 -0
  214. package/server/src/Traits/HasTrackingNumber.php +9 -9
  215. package/server/src/routes.php +19 -11
  216. package/translations/en-us.yaml +137 -0
  217. package/server/src/Flow/Config.php +0 -7
  218. package/server/src/Support/Flow.php +0 -653
@@ -6,6 +6,7 @@ use Fleetbase\Exceptions\FleetbaseRequestValidationException;
6
6
  use Fleetbase\FleetOps\Events\OrderDispatchFailed;
7
7
  use Fleetbase\FleetOps\Events\OrderReady;
8
8
  use Fleetbase\FleetOps\Events\OrderStarted;
9
+ use Fleetbase\FleetOps\Flow\Activity;
9
10
  use Fleetbase\FleetOps\Http\Controllers\FleetOpsController;
10
11
  use Fleetbase\FleetOps\Http\Requests\CancelOrderRequest;
11
12
  use Fleetbase\FleetOps\Imports\OrdersImport;
@@ -17,9 +18,9 @@ use Fleetbase\FleetOps\Models\Place;
17
18
  use Fleetbase\FleetOps\Models\ServiceQuote;
18
19
  use Fleetbase\FleetOps\Models\TrackingStatus;
19
20
  use Fleetbase\FleetOps\Models\Waypoint;
20
- use Fleetbase\FleetOps\Support\Flow;
21
21
  use Fleetbase\FleetOps\Support\Utils;
22
22
  use Fleetbase\Http\Requests\Internal\BulkDeleteRequest;
23
+ use Fleetbase\Models\CustomFieldValue;
23
24
  use Fleetbase\Models\File;
24
25
  use Fleetbase\Models\Type;
25
26
  use Illuminate\Http\Request;
@@ -78,11 +79,12 @@ class OrderController extends FleetOpsController
78
79
  $isIntegratedVendorOrder = isset($requestInput['integrated_vendor_order']);
79
80
  $serviceQuote = ServiceQuote::resolveFromRequest($request);
80
81
 
81
- $route = Utils::get($input, 'route');
82
- $payload = Utils::get($input, 'payload');
83
- $waypoints = Utils::get($input, 'payload.waypoints');
84
- $entities = Utils::get($input, 'payload.entities');
85
- $uploads = Utils::get($input, 'files', []);
82
+ $route = Utils::get($input, 'route');
83
+ $payload = Utils::get($input, 'payload');
84
+ $waypoints = Utils::get($input, 'payload.waypoints');
85
+ $entities = Utils::get($input, 'payload.entities');
86
+ $uploads = Utils::get($input, 'files', []);
87
+ $customFieldValues = Utils::get($input, 'custom_field_values', []);
86
88
 
87
89
  // save order route & payload with request input
88
90
  $order
@@ -102,6 +104,20 @@ class OrderController extends FleetOpsController
102
104
  }
103
105
  }
104
106
 
107
+ // save custom field values
108
+ if (is_array($customFieldValues)) {
109
+ foreach ($customFieldValues as $customFieldValue) {
110
+ CustomFieldValue::create([
111
+ 'company_uuid' => session('company'),
112
+ 'custom_field_uuid' => data_get($customFieldValue, 'custom_field_uuid'),
113
+ 'subject_uuid' => $order->uuid,
114
+ 'subject_type' => Utils::getMutationType($order),
115
+ 'value' => data_get($customFieldValue, 'value'),
116
+ 'value_type' => data_get($customFieldValue, 'value_type', 'text'),
117
+ ]);
118
+ }
119
+ }
120
+
105
121
  // if it's integrated vendor order apply to meta
106
122
  if ($isIntegratedVendorOrder) {
107
123
  $order->updateMeta(
@@ -357,7 +373,7 @@ class OrderController extends FleetOpsController
357
373
  /**
358
374
  * @var \Fleetbase\Models\Order
359
375
  */
360
- $order = Order::select(['uuid', 'driver_assigned_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
376
+ $order = Order::select(['uuid', 'driver_assigned_uuid', 'order_config_uuid', 'adhoc', 'dispatched', 'dispatched_at'])->where('uuid', $request->input('order'))->withoutGlobalScopes()->first();
361
377
 
362
378
  if (!$order->hasDriverAssigned && !$order->adhoc) {
363
379
  return response()->error('No driver assigned to dispatch!');
@@ -367,7 +383,7 @@ class OrderController extends FleetOpsController
367
383
  return response()->error('Order has already been dispatched!');
368
384
  }
369
385
 
370
- $order->dispatch();
386
+ $order->dispatchWithActivity();
371
387
 
372
388
  return response()->json(
373
389
  [
@@ -425,7 +441,7 @@ class OrderController extends FleetOpsController
425
441
  $driver->save();
426
442
 
427
443
  // get the next order activity
428
- $flow = $activity = Flow::getNextActivity($order);
444
+ $flow = $activity = $order->config()->nextFirstActivity();
429
445
 
430
446
  /**
431
447
  * @var \Fleetbase\LaravelMysqlSpatial\Types\Point
@@ -443,11 +459,11 @@ class OrderController extends FleetOpsController
443
459
 
444
460
  // update activity for each waypoint and entity
445
461
  foreach ($payload->waypointMarkers as $waypointMarker) {
446
- $waypointMarker->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
462
+ $waypointMarker->insertActivity($activity, $location);
447
463
  }
448
464
 
449
465
  foreach ($payload->entities as $entity) {
450
- $entity->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
466
+ $entity->insertActivity($activity, $location);
451
467
  }
452
468
  }
453
469
 
@@ -477,10 +493,11 @@ class OrderController extends FleetOpsController
477
493
  return response()->error('No order found.');
478
494
  }
479
495
 
480
- $activity = $request->input('activity');
496
+ $activity = $request->array('activity');
497
+ $activity = new Activity($activity, $order->getConfigFlow());
481
498
 
482
- // handle pickup/dropoff order activity update as normal
483
- if (is_array($activity) && $activity['code'] === 'dispatched') {
499
+ // Handle pickup/dropoff order activity update as normal
500
+ if (Utils::isActivity($activity) && $activity->is('dispatched')) {
484
501
  // make sure driver is assigned if not trigger failed dispatch
485
502
  if (!$order->hasDriverAssigned && !$order->adhoc) {
486
503
  event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
@@ -493,28 +510,31 @@ class OrderController extends FleetOpsController
493
510
  return response()->json(['status' => 'dispatched']);
494
511
  }
495
512
 
496
- if (is_array($activity) && $activity['code'] === 'completed' && $order->driverAssigned) {
497
- // unset from driver current job
498
- $order->driverAssigned->unassignCurrentOrder();
499
- $order->notifyCompleted();
500
- }
501
-
502
513
  /**
503
514
  * @var \Fleetbase\LaravelMysqlSpatial\Types\Point
504
515
  */
505
516
  $location = $order->getLastLocation();
506
-
507
- $order->setStatus($activity['code']);
508
- $order->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
517
+ $order->setStatus($activity->code);
518
+ $order->insertActivity($activity, $location);
509
519
 
510
520
  // also update for each order entities if not multiple drop order
511
521
  // all entities will share the same activity status as is one drop order
512
522
  if (!$order->payload->isMultipleDropOrder) {
513
523
  foreach ($order->payload->entities as $entity) {
514
- $entity->insertActivity($activity['status'], $activity['details'], $location, $activity['code']);
524
+ $entity->insertActivity($activity, $location);
515
525
  }
516
526
  }
517
527
 
528
+ // Handle order completed
529
+ if (Utils::isActivity($activity) && $activity->completesOrder() && $order->driverAssigned) {
530
+ // unset from driver current job
531
+ $order->driverAssigned->unassignCurrentOrder();
532
+ $order->complete();
533
+ }
534
+
535
+ // Fire activity events
536
+ $activity->fireEvents($order);
537
+
518
538
  return response()->json(['status' => 'ok']);
519
539
  }
520
540
 
@@ -534,9 +554,9 @@ class OrderController extends FleetOpsController
534
554
  return response()->error('No order found.');
535
555
  }
536
556
 
537
- $flow = Flow::getOrderFlow($order);
557
+ $nextActivities = $order->config()->nextActivity();
538
558
 
539
- return response()->json($flow);
559
+ return response()->json($nextActivities);
540
560
  }
541
561
 
542
562
  /**
@@ -11,6 +11,15 @@ use Illuminate\Http\Request;
11
11
  */
12
12
  class SettingController extends Controller
13
13
  {
14
+ /**
15
+ * Retrieves the current visibility settings.
16
+ *
17
+ * This method fetches the visibility settings for 'fleet-ops' from the database and
18
+ * returns them in a JSON response. The settings are retrieved based on a specific key
19
+ * from the 'Setting' model.
20
+ *
21
+ * @return \Illuminate\Http\Response the visibility settings in JSON format
22
+ */
14
23
  public function getVisibilitySettings()
15
24
  {
16
25
  $visibilitySettings = Setting::where('key', 'fleet-ops.visibility')->value('value');
@@ -18,6 +27,17 @@ class SettingController extends Controller
18
27
  return response()->json(['visibilitySettings' => $visibilitySettings]);
19
28
  }
20
29
 
30
+ /**
31
+ * Saves the visibility settings provided in the request.
32
+ *
33
+ * This method accepts visibility settings via the request and updates them in the database.
34
+ * The new settings are saved using a specific key in the 'Setting' model. The method
35
+ * returns the updated settings in a JSON response.
36
+ *
37
+ * @param Request $request the HTTP request containing the visibility settings
38
+ *
39
+ * @return \Illuminate\Http\Response the updated visibility settings in JSON format
40
+ */
21
41
  public function saveVisibilitySettings(Request $request)
22
42
  {
23
43
  $visibilitySettings = $request->input('visibilitySettings', []);
@@ -0,0 +1,13 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Filter;
4
+
5
+ use Fleetbase\Http\Filter\Filter;
6
+
7
+ class OrderConfigFilter extends Filter
8
+ {
9
+ public function queryForInternal()
10
+ {
11
+ $this->builder->where('company_uuid', $this->session->get('company'));
12
+ }
13
+ }
@@ -0,0 +1,19 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Requests;
4
+
5
+ use Fleetbase\Http\Requests\FleetbaseRequest;
6
+
7
+ class CreateIssueRequest extends FleetbaseRequest
8
+ {
9
+ public function rules()
10
+ {
11
+ return [
12
+ 'driver' => ['required'],
13
+ 'location' => ['required'],
14
+ 'category' => ['nullable'],
15
+ 'type' => ['nullable'],
16
+ 'priority' => ['nullable'],
17
+ ];
18
+ }
19
+ }
@@ -0,0 +1,7 @@
1
+ <?php
2
+
3
+ namespace Fleetbase\FleetOps\Http\Requests;
4
+
5
+ class UpdateIssueRequest extends CreateIssueRequest
6
+ {
7
+ }
@@ -39,6 +39,8 @@ class Order extends FleetbaseResource
39
39
  'service_quote_uuid' => $this->when(Http::isInternalRequest(), $this->service_quote_uuid),
40
40
  'has_driver_assigned' => $this->when(Http::isInternalRequest(), $this->has_driver_assigned),
41
41
  'is_scheduled' => $this->when(Http::isInternalRequest(), $this->is_scheduled),
42
+ 'order_config' => $this->when(Http::isInternalRequest(), $this->whenLoaded('orderConfig', $this->orderConfig)),
43
+ 'custom_field_values' => $this->when(Http::isInternalRequest(), $this->customFieldValues),
42
44
  'customer' => $this->setCustomerType(Resolve::resourceForMorph($this->customer_type, $this->customer_uuid)),
43
45
  'payload' => new Payload($this->payload),
44
46
  'facilitator' => $this->setFacilitatorType(Resolve::resourceForMorph($this->facilitator_type, $this->facilitator_uuid)),
@@ -49,6 +51,7 @@ class Order extends FleetbaseResource
49
51
  'files' => $this->when(Http::isInternalRequest(), $this->files, File::collection($this->files)),
50
52
  'purchase_rate' => new PurchaseRate($this->purchaseRate),
51
53
  'notes' => $this->notes,
54
+ ...$this->getCustomFieldValues(),
52
55
  'type' => $this->type,
53
56
  'status' => $this->status,
54
57
  'pod_method' => $this->pod_method,
@@ -3,6 +3,7 @@
3
3
  namespace Fleetbase\FleetOps\Listeners;
4
4
 
5
5
  use Fleetbase\FleetOps\Events\OrderCanceled;
6
+ use Fleetbase\FleetOps\Flow\Activity;
6
7
  use Fleetbase\FleetOps\Models\Driver;
7
8
  use Fleetbase\FleetOps\Notifications\OrderCanceled as OrderCanceledNotification;
8
9
  use Illuminate\Contracts\Queue\ShouldQueue;
@@ -25,15 +26,18 @@ class HandleOrderCanceled implements ShouldQueue
25
26
  $order = $event->getModelRecord();
26
27
  $location = $order->getLastLocation();
27
28
 
28
- // update order activity
29
- $order->setStatus('canceled');
30
- $order->createActivity('Order canceled', 'Order was canceled', $location, $order->status);
29
+ // Create order cancel activity
30
+ $activity = $order->config()->getCanceledActivity();
31
+
32
+ // Update order activity
33
+ $order->setStatus($activity->status);
34
+ $order->createActivity($activity, $location);
31
35
 
32
36
  if ($order->isIntegratedVendorOrder()) {
33
37
  $order->facilitator->provider()->callback('onCanceled', $order);
34
38
  }
35
39
 
36
- // notify driver assigned order was canceled
40
+ // Notify driver assigned order was canceled
37
41
  if ($order->hasDriverAssigned) {
38
42
  /** @var \Fleetbase\Models\Driver */
39
43
  $driver = Driver::where('uuid', $order->driver_assigned_uuid)->withoutGlobalScopes()->first();
@@ -5,9 +5,9 @@ namespace Fleetbase\FleetOps\Listeners;
5
5
  use Fleetbase\FleetOps\Events\OrderDispatched;
6
6
  use Fleetbase\FleetOps\Events\OrderDispatchFailed;
7
7
  use Fleetbase\FleetOps\Models\Driver;
8
+ use Fleetbase\FleetOps\Models\TrackingStatus;
8
9
  use Fleetbase\FleetOps\Notifications\OrderDispatched as OrderDispatchedNotification;
9
10
  use Fleetbase\FleetOps\Notifications\OrderPing;
10
- use Fleetbase\FleetOps\Support\Flow;
11
11
  use Fleetbase\FleetOps\Support\Utils;
12
12
  use Illuminate\Contracts\Queue\ShouldQueue;
13
13
  use Illuminate\Queue\InteractsWithQueue;
@@ -39,15 +39,19 @@ class HandleOrderDispatched implements ShouldQueue
39
39
  return event(new OrderDispatchFailed($order, 'No driver assigned for order to dispatch to.'));
40
40
  }
41
41
 
42
- /** check for dispatch code in activity options, if there is the correct dispatch code update activity */
43
- $activity = Flow::getDispatchActivity($order);
44
-
45
- if ($activity) {
46
- /** update order activity */
47
- $location = $order->getLastLocation();
48
-
49
- $order->setStatus($activity['code']);
50
- $order->createActivity($activity['status'], $activity['details'], $location, $activity['code']);
42
+ /**
43
+ * Check if dispatch activity already exists, if not -
44
+ * Check for dispatch code in activity options, if there is the correct dispatch code update activity.
45
+ **/
46
+ $doesntHaveDispatchActivity = TrackingStatus::where(['code' => 'DISPATCHED', 'tracking_number_uuid' => $order->tracking_number_uuid])->doesntExist();
47
+ if ($doesntHaveDispatchActivity) {
48
+ $activity = $order->config()->getDispatchActivity();
49
+ if ($activity) {
50
+ /** update order activity */
51
+ $location = $order->getLastLocation();
52
+ $order->setStatus($activity->code);
53
+ $order->createActivity($activity, $location);
54
+ }
51
55
  }
52
56
 
53
57
  /* update dispatch attributes */
@@ -59,10 +63,8 @@ class HandleOrderDispatched implements ShouldQueue
59
63
  /* if order is adhoc ping drivers within radius of pickup to accept order * */
60
64
  if ($order->adhoc) {
61
65
  $order->load(['company']);
62
-
63
66
  $pickup = $order->getPickupLocation();
64
67
  $distance = $order->getAdhocDistance();
65
-
66
68
  if (!Utils::isPoint($pickup)) {
67
69
  return;
68
70
  }