@fleetbase/fleetops-engine 0.4.15 → 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 (220) 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/Expansions/UserExpansion.php +4 -4
  182. package/server/src/Flow/Activity.php +232 -6
  183. package/server/src/Flow/Condition.php +84 -0
  184. package/server/src/Flow/Event.php +88 -0
  185. package/server/src/Flow/Flow.php +50 -0
  186. package/server/src/Flow/FlowResource.php +143 -0
  187. package/server/src/Flow/Logic.php +57 -1
  188. package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
  189. package/server/src/Http/Controllers/Api/v1/IssueController.php +132 -0
  190. package/server/src/Http/Controllers/Api/v1/OrderController.php +130 -57
  191. package/server/src/Http/Controllers/Api/v1/OrganizationController.php +27 -0
  192. package/server/src/Http/Controllers/Api/v1/PlaceController.php +2 -3
  193. package/server/src/Http/Controllers/Controller.php +9 -0
  194. package/server/src/Http/Controllers/FleetOpsController.php +7 -0
  195. package/server/src/Http/Controllers/Internal/v1/OrderConfigController.php +5 -259
  196. package/server/src/Http/Controllers/Internal/v1/OrderController.php +56 -35
  197. package/server/src/Http/Controllers/Internal/v1/SettingController.php +20 -0
  198. package/server/src/Http/Filter/OrderConfigFilter.php +13 -0
  199. package/server/src/Http/Requests/CreateIssueRequest.php +19 -0
  200. package/server/src/Http/Requests/UpdateIssueRequest.php +7 -0
  201. package/server/src/Http/Resources/v1/Order.php +3 -0
  202. package/server/src/Http/Resources/v1/Payload.php +1 -1
  203. package/server/src/Listeners/HandleOrderCanceled.php +8 -4
  204. package/server/src/Listeners/HandleOrderDispatched.php +14 -12
  205. package/server/src/Models/Order.php +527 -31
  206. package/server/src/Models/OrderConfig.php +419 -0
  207. package/server/src/Models/Payload.php +8 -7
  208. package/server/src/Notifications/OrderAssigned.php +1 -1
  209. package/server/src/Notifications/OrderCanceled.php +1 -1
  210. package/server/src/Notifications/OrderDispatchFailed.php +1 -1
  211. package/server/src/Notifications/OrderDispatched.php +1 -1
  212. package/server/src/Notifications/OrderPing.php +1 -1
  213. package/server/src/Providers/FleetOpsServiceProvider.php +3 -1
  214. package/server/src/Providers/NotificationServiceProvider.php +2 -1
  215. package/server/src/Support/Utils.php +17 -0
  216. package/server/src/Traits/HasTrackingNumber.php +9 -9
  217. package/server/src/routes.php +19 -11
  218. package/translations/en-us.yaml +137 -0
  219. package/server/src/Flow/Config.php +0 -7
  220. package/server/src/Support/Flow.php +0 -653
@@ -202,6 +202,25 @@
202
202
  </div>
203
203
  </ContentPanel>
204
204
 
205
+ {{#if @model.order_config}}
206
+ {{#each this.customFieldGroups as |group|}}
207
+ <ContentPanel @title={{group.name}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
208
+ <div class="grid grid-cols-{{or group.meta.grid_size 1}} gap-2">
209
+ {{#each group.customFields as |customField|}}
210
+ <div class="field-info-container space-y-2">
211
+ <div class="field-name">{{customField.label}}</div>
212
+ {{#if (and (eq customField.type "file-upload") customField.value.asFile)}}
213
+ <File @file={{customField.value.asFile}} @onDelete={{fn this.removeCustomFieldFile customField.value}} class="custom-field-file" />
214
+ {{else}}
215
+ <div class="field-value">{{n-a customField.value.value}}</div>
216
+ {{/if}}
217
+ </div>
218
+ {{/each}}
219
+ </div>
220
+ </ContentPanel>
221
+ {{/each}}
222
+ {{/if}}
223
+
205
224
  {{#if @model.purchase_rate}}
206
225
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.purchase-rate-panel-title"}} @open={{true}} @pad={{false}} @panelBodyClass="bg-white dark:bg-gray-800">
207
226
  <div class="order-view-purchase-rate-table-wrapper next-table-wrapper h-auto table-fluid rounded-b-md">
@@ -239,33 +258,24 @@
239
258
  </ContentPanel>
240
259
  {{/if}}
241
260
 
242
- <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.notes-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
243
- <p class="text-gray-700 dark:text-gray-300 leading-5 text-sm">{{n-a @model.notes}}</p>
261
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.notes-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800" @actionButtons={{this.notesPanelButtons}}>
262
+ {{#if this.isEditingOrderNotes}}
263
+ <Textarea @value={{@model.notes}} class="form-input w-full" placeholder={{t "fleet-ops.operations.orders.index.view.notes-placeholder"}} rows={{4}} />
264
+ <div class="flex items-center space-x-2">
265
+ <Button @type="primary" @icon="save" @text={{t "fleet-ops.operations.orders.index.view.save-order-note"}} @onClick={{perform this.saveOrderNotes}} @isLoading={{not this.saveOrderNotes.isIdle}} />
266
+ <Button @type="default" @icon="times" @text={{t "fleet-ops.common.cancel"}} @onClick={{this.saveOrderNotes}} />
267
+ </div>
268
+ {{else}}
269
+ <p class="text-gray-700 dark:text-gray-300 leading-5 text-sm">{{n-a @model.notes}}</p>
270
+ {{/if}}
244
271
  </ContentPanel>
245
-
272
+
246
273
  {{#if @model.isIntegratedVendorOrder}}
247
274
  <ContentPanel @title={{concat @model.facilitator.name (t "fleet-ops.operations.orders.index.view.order-details-title")}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
248
275
  <IntegratedOrderDetails @integratedVendor={{@model.facilitator}} @details={{@model.meta.integrated_vendor_order}} />
249
276
  </ContentPanel>
250
277
  {{/if}}
251
278
 
252
- {{#if @model.order_config}}
253
- {{#each @model.groupedMetaFields as |group|}}
254
- <ContentPanel @title={{if group.value (humanize group.value) (t "fleet-ops.operations.orders.index.view.additional-details-title")}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
255
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
256
- {{#each group.items as |metaField|}}
257
- <div class="field-info-container space-y-2">
258
- <div class="field-name">{{metaField.label}}</div>
259
- <div class="field-value">
260
- <CustomFieldValue @metaField={{metaField}} @value={{get @model.meta metaField.key}} />
261
- </div>
262
- </div>
263
- {{/each}}
264
- </div>
265
- </ContentPanel>
266
- {{/each}}
267
- {{/if}}
268
-
269
279
  {{#if @model.tracking_number}}
270
280
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.tracking"}} @prefixTitleRight={{@model.tracking}} @isLoading={{not this.loadOrderRelations.isIdle}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
271
281
  <div class="mb-4 flex justify-end">
@@ -305,78 +315,10 @@
305
315
  {{/if}}
306
316
  </ContentPanel>
307
317
 
308
- {{#if @model.isStorefrontOrder}}
309
- <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.order-summary"}} @prefixTitleRight={{if @model.payload.cod_amount "Cash" ""}} @prefixTitleRightClass="text-green-400" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
310
- <div class="flex flex-col space-y-4 p-2 overflow-hidden">
311
- {{#each @model.payload.entities as |entity|}}
312
- <div class="flex flex-1">
313
- <div class="mr-2">
314
- <div class="flex items-center justify-center w-6 h-5 border border-gray-200 dark:border-blue-400 rounded-md">
315
- <span class="text-blue-400 text-xs">{{entity.meta.quantity}}x</span>
316
- </div>
317
- </div>
318
- <div class="flex-1 flex">
319
- <div class="mr-4">
320
- <img src={{entity.photo_url}} class="w-12 h-12 rounded-md shadow-sm" alt={{entity.name}} />
321
- </div>
322
- <div>
323
- <h4 class="font-semibold dark:text-gray-100 mb-1 text-sm">{{entity.name}}</h4>
324
- <div class="flex flex-wrap truncate w-44">
325
- <p class="dark:text-gray-50 text-xs truncate">{{entity.description}}</p>
326
- </div>
327
- <div>
328
- {{#each entity.meta.variants as |variant|}}
329
- <div>
330
- <span class="text-xs dark:text-gray-50">{{variant.name}}</span>
331
- </div>
332
- {{/each}}
333
- </div>
334
- <div>
335
- {{#each entity.meta.addons as |addon|}}
336
- <div>
337
- <span class="text-xs dark:text-gray-50">+ {{addon.name}}</span>
338
- </div>
339
- {{/each}}
340
- </div>
341
- </div>
342
- </div>
343
- <div>
344
- <span class="dark:text-gray-50 text-sm">{{format-currency entity.meta.subtotal entity.currency}}</span>
345
- </div>
346
- </div>
347
- {{/each}}
348
- </div>
349
- <div class="p-2 space-y-2 border-t border-b dark:border-gray-800">
350
- <div class="flex items-center justify-between">
351
- <span class="dark:text-gray-50 text-sm">{{t "fleet-ops.operations.orders.index.view.subtotal"}}</span>
352
- <span class="dark:text-gray-50 text-sm">{{format-currency @model.meta.subtotal @model.meta.currency}}</span>
353
- </div>
354
- {{#unless @model.meta.is_pickup}}
355
- <div class="flex items-center justify-between">
356
- <span class="dark:text-gray-50 text-sm">{{t "fleet-ops.operations.orders.index.view.delivery-fee"}}</span>
357
- <span class="dark:text-gray-50 text-sm">{{format-currency @model.meta.delivery_fee @model.meta.currency}}</span>
358
- </div>
359
- {{/unless}}
360
- {{#if @model.meta.tip}}
361
- <div class="flex items-center justify-between">
362
- <span class="dark:text-gray-50 text-sm">{{t "fleet-ops.operations.orders.index.view.tip"}}</span>
363
- <span class="dark:text-gray-50 text-sm">{{get-tip-amount @model.meta.tip @model.meta.subtotal @model.meta.currency}}</span>
364
- </div>
365
- {{/if}}
366
- {{#if @model.meta.delivery_tip}}
367
- <div class="flex items-center justify-between">
368
- <span class="dark:text-gray-50 text-sm">{{t "fleet-ops.operations.orders.index.view.delivery-tip"}}</span>
369
- <span class="dark:text-gray-50 text-sm">{{get-tip-amount @model.meta.delivery_tip @model.meta.subtotal @model.meta.currency}}</span>
370
- </div>
371
- {{/if}}
372
- </div>
373
- <div class="p-2">
374
- <div class="flex items-center justify-between">
375
- <span class="dark:text-gray-50 font-bold text-sm">{{t "fleet-ops.operations.orders.index.view.total"}}</span>
376
- <span class="dark:text-gray-50 font-bold text-sm">{{format-currency @model.meta.total @model.meta.currency}}</span>
377
- </div>
378
- </div>
379
- </ContentPanel>
318
+ {{#if this.renderableComponents}}
319
+ {{#each this.renderableComponents as |renderableComponent|}}
320
+ {{component renderableComponent order=this.order}}
321
+ {{/each}}
380
322
  {{/if}}
381
323
 
382
324
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.payload"}} @open={{gt @model.payload.entities.length 0}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
@@ -473,13 +415,11 @@
473
415
  </div>
474
416
  {{/if}}
475
417
  </ContentPanel>
476
-
418
+
477
419
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.documents-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
478
420
  <div class="space-y-4">
479
421
  {{#if this.isUploading}}
480
- <div
481
- class="dropzone w-full rounded-lg px-4 py-8 bg-gray-50 dark:bg-gray-900 bg-opacity-25 text-gray-900 dark:text-white text-center flex flex-col items-center justify-center border-2 border-dashed border-gray-200 dark:border-indigo-500"
482
- >
422
+ <div class="dropzone w-full rounded-lg px-4 py-8 bg-gray-50 dark:bg-gray-900 bg-opacity-25 text-gray-900 dark:text-white text-center flex flex-col items-center justify-center border-2 border-dashed border-gray-200 dark:border-indigo-500">
483
423
  <div class="flex items-center justify-center py-5">
484
424
  <Spinner class="text-sm dar:text-gray-100" @loadingMessage={{t "fleet-ops.common.uploading"}} />
485
425
  </div>
@@ -21,7 +21,6 @@
21
21
 
22
22
  {{#if this.isTableLayout}}
23
23
  <Layout::Section::Header @title={{t "fleet-ops.common.orders"}} @onSearch={{perform this.search}}>
24
- <Button @icon="cogs" @text={{t "fleet-ops.common.config"}} class="mr-2" @onClick={{fn (transition-to "operations.orders.index.config")}} />
25
24
  <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
26
25
  <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
27
26
  {{#if (safe-has this.table "selectedRows")}}
@@ -1,4 +1,6 @@
1
1
  import getModelName from '@fleetbase/ember-core/utils/get-model-name';
2
+ import isModel from '@fleetbase/ember-core/utils/is-model';
3
+ import { camelize } from '@ember/string';
2
4
 
3
5
  /**
4
6
  * Applies context and dynamic arguments to a given component.
@@ -9,8 +11,8 @@ export default function applyContextComponentArguments(component) {
9
11
  const { context, dynamicArgs = {} } = component.args;
10
12
 
11
13
  // Apply context model if available
12
- if (context) {
13
- const contextModelName = getModelName(context);
14
+ if (context && isModel(context)) {
15
+ const contextModelName = camelize(getModelName(context));
14
16
  if (contextModelName) {
15
17
  component[contextModelName] = context;
16
18
  }
@@ -0,0 +1,22 @@
1
+ import ObjectProxy from '@ember/object/proxy';
2
+ import config from '../config/environment';
3
+ import generateUUID from '@fleetbase/ember-core/utils/generate-uuid';
4
+ import { get } from '@ember/object';
5
+
6
+ export default function createCustomEntity(name = '', type = '', description = '', props = {}) {
7
+ return ObjectProxy.create({
8
+ content: {
9
+ id: generateUUID(),
10
+ name,
11
+ description,
12
+ type,
13
+ dimensions_unit: 'cm',
14
+ weight_unit: 'kg',
15
+ photo_url: typeof props.photo_url === 'string' ? props.photo_url : get(config, 'defaultValues.entityImage'),
16
+ ...props,
17
+ _internalModel: {
18
+ modelName: 'custom-entity',
19
+ },
20
+ },
21
+ });
22
+ }
@@ -0,0 +1,31 @@
1
+ import ObjectProxy from '@ember/object/proxy';
2
+ import generateUUID from '@fleetbase/ember-core/utils/generate-uuid';
3
+ import { underscore } from '@ember/string';
4
+
5
+ export default function createFlowActivity(name = '', status = '', details = '', sequence = 0, color = '#1f2937', props = {}) {
6
+ return ObjectProxy.create({
7
+ content: {
8
+ code: underscore(name),
9
+ key: underscore(name),
10
+ status,
11
+ details,
12
+ sequence,
13
+ color,
14
+ activities: [],
15
+ events: [],
16
+ logic: [],
17
+ actions: [],
18
+ entities: [],
19
+ complete: false,
20
+ require_pod: false,
21
+ pod_method: 'scan',
22
+ options: {},
23
+ node: null,
24
+ internalId: generateUUID(),
25
+ _internalModel: {
26
+ modelName: 'activity',
27
+ },
28
+ ...props,
29
+ },
30
+ });
31
+ }
@@ -0,0 +1,34 @@
1
+ export default function getCustomFieldTypeMap() {
2
+ return {
3
+ input: {
4
+ component: 'input',
5
+ },
6
+ phoneInput: {
7
+ component: 'phone-input',
8
+ },
9
+ moneyInput: {
10
+ component: 'money-input',
11
+ },
12
+ dateTimeInput: {
13
+ component: 'date-time-input',
14
+ },
15
+ radioButton: {
16
+ component: 'radio-button-select',
17
+ hasOptions: true,
18
+ },
19
+ select: {
20
+ component: 'select',
21
+ hasOptions: true,
22
+ },
23
+ // modelSelect: {
24
+ // allowedModels: ['driver', 'contact', 'vendor', 'place', 'issue', 'fuel-report'],
25
+ // component: 'model-select',
26
+ // },
27
+ fileUpload: {
28
+ component: 'file-upload',
29
+ },
30
+ // dropzone: {
31
+ // component: 'file-dropzone',
32
+ // },
33
+ };
34
+ }
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/activity-event-selector';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/activity-form-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/activity-logic-builder';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/custom-entity-form-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/custom-field-form-panel/options-input';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/custom-field-form-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/joint-graph';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/new-custom-field-group';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager/activity-flow';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager/custom-fields';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager/details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager/entities';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager-overlay';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-config-manager';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/order-flow';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/controllers/operations/order-config';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/routes/operations/order-config';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/templates/operations/order-config';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/create-custom-entity';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/create-flow-activity';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/utils/get-custom-field-type-map';
package/composer.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fleetbase/fleetops-api",
3
- "version": "0.4.15",
3
+ "version": "0.4.17",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "keywords": [
6
6
  "fleetbase-extension",
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "require": {
24
24
  "php": "^8.0",
25
- "fleetbase/core-api": "^1.4.9",
25
+ "fleetbase/core-api": "^1.4.11",
26
26
  "barryvdh/laravel-dompdf": "^2.0",
27
27
  "brick/geo": "0.7.2",
28
28
  "cknow/laravel-money": "^7.1",
@@ -44,7 +44,8 @@
44
44
  },
45
45
  "autoload": {
46
46
  "psr-4": {
47
- "Fleetbase\\FleetOps\\": "server/src/"
47
+ "Fleetbase\\FleetOps\\": "server/src/",
48
+ "Fleetbase\\FleetOps\\Seeders\\": "seeders/"
48
49
  }
49
50
  },
50
51
  "autoload-dev": {
@@ -14,6 +14,7 @@ module.exports = function (environment) {
14
14
  contactImage: getenv('DEFAULT_CONTACT_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
15
15
  vendorImage: getenv('DEFAULT_VENDOR_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/no-avatar.png'),
16
16
  vehicleImage: getenv('DEFAULT_VEHICLE_IMAGE', 'https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/vehicle-placeholder.png'),
17
+ entityImage: getenv('DEFAULT_ENTITY_IMAGE', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/parcels/medium.png'),
17
18
  vehicleAvatar: getenv('DEFAUL_VEHICLE_AVATAR', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/vehicle-icons/mini_bus.svg'),
18
19
  driverAvatar: getenv('DEFAUL_DRIVER_AVATAR', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/driver-icons/moto-driver.png'),
19
20
  placeAvatar: getenv('DEFAUL_PLACE_AVATAR', 'https://flb-assets.s3-ap-southeast-1.amazonaws.com/static/place-icons/basic-building.png'),
package/extension.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "Fleet-Ops",
3
- "version": "0.4.15",
3
+ "version": "0.4.17",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "repository": "https://github.com/fleetbase/fleetops",
6
6
  "license": "MIT",
package/index.js CHANGED
@@ -65,6 +65,26 @@ module.exports = buildEngine({
65
65
  );
66
66
  }
67
67
 
68
+ // jointjs
69
+ const jointJsPath = path.join(this.pathBase('@joint/core'), 'dist');
70
+ trees.push(
71
+ new Funnel(jointJsPath, {
72
+ destDir: '/',
73
+ include: ['joint.min.js'],
74
+ exclude: [],
75
+ })
76
+ );
77
+
78
+ // jointjs directed graph
79
+ const jointJsDirectedGraphPath = path.join(this.pathBase('@joint/layout-directed-graph'), 'dist');
80
+ trees.push(
81
+ new Funnel(jointJsDirectedGraphPath, {
82
+ destDir: '/',
83
+ include: ['DirectedGraph.min.js'],
84
+ exclude: [],
85
+ })
86
+ );
87
+
68
88
  trees.push(
69
89
  new Funnel(leafletImagesPath, {
70
90
  srcDir: '/',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fleetbase/fleetops-engine",
3
- "version": "0.4.15",
3
+ "version": "0.4.17",
4
4
  "description": "Fleet & Transport Management Extension for Fleetbase",
5
5
  "fleetbase": {
6
6
  "route": "fleet-ops"
@@ -42,25 +42,27 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/core": "^7.23.2",
45
- "@fleetbase/ember-core": "^0.2.4",
45
+ "@fleetbase/ember-core": "^0.2.5",
46
46
  "@fleetbase/ember-ui": "^0.2.11",
47
- "@fleetbase/fleetops-data": "^0.1.9",
47
+ "@fleetbase/fleetops-data": "^0.1.12",
48
48
  "@fleetbase/leaflet-routing-machine": "^3.2.16",
49
49
  "@fortawesome/ember-fontawesome": "^0.4.1",
50
50
  "@fortawesome/fontawesome-svg-core": "^6.4.0",
51
51
  "@fortawesome/free-solid-svg-icons": "^6.4.0",
52
+ "@joint/core": "^4.0.1",
53
+ "@joint/layout-directed-graph": "^4.0.1",
52
54
  "@terraformer/spatial": "^2.1.2",
53
55
  "@zestia/ember-dragula": "^12.0.0",
54
56
  "broccoli-funnel": "^3.0.8",
55
57
  "broccoli-merge-trees": "^4.2.0",
56
58
  "ember-cli-babel": "^8.2.0",
57
59
  "ember-cli-htmlbars": "^6.3.0",
60
+ "ember-drag-sort": "^3.0.1",
58
61
  "ember-intl": "6.3.2",
59
62
  "ember-leaflet": "^5.1.1",
60
63
  "ember-radio-button": "^3.0.0-beta.1",
61
64
  "ember-tag-input": "^3.1.0",
62
65
  "ember-wormhole": "^0.6.0",
63
- "ember-drag-sort": "^3.0.1",
64
66
  "leaflet": "^1.9.4",
65
67
  "leaflet-contextmenu": "^1.4.0",
66
68
  "leaflet-draw": "^1.0.4",
@@ -68,12 +70,12 @@
68
70
  "leaflet-rotatedmarker": "^0.2.0"
69
71
  },
70
72
  "devDependencies": {
71
- "@fleetbase/intl-lint": "^0.0.1",
72
73
  "@babel/eslint-parser": "^7.22.15",
73
74
  "@babel/plugin-proposal-decorators": "^7.23.2",
74
75
  "@ember/optional-features": "^2.0.0",
75
76
  "@ember/test-helpers": "^3.2.0",
76
77
  "@embroider/test-setup": "^3.0.2",
78
+ "@fleetbase/intl-lint": "^0.0.1",
77
79
  "@glimmer/component": "^1.1.2",
78
80
  "@glimmer/tracking": "^1.1.2",
79
81
  "broccoli-asset-rev": "^3.0.0",
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
4
4
  use Illuminate\Database\Schema\Blueprint;
5
5
  use Illuminate\Support\Facades\Schema;
6
6
 
7
- return new class extends Migration
8
- {
7
+ return new class() extends Migration {
9
8
  /**
10
9
  * Run the migrations.
11
10
  *