@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
@@ -33,12 +33,6 @@
33
33
  </div>
34
34
  <span>{{t "fleet-ops.operations.orders.index.new.edit-order"}}</span>
35
35
  </a>
36
- <a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.addCustomField)}}>
37
- <div class="w-6">
38
- <FaIcon @icon="edit" />
39
- </div>
40
- <span>{{t "fleet-ops.operations.orders.index.new.add-field"}}</span>
41
- </a>
42
36
  </div>
43
37
  </div>
44
38
  </DropdownButton>
@@ -51,47 +45,27 @@
51
45
  <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
52
46
  <div class="input-group">
53
47
  <InputLabel @labelText={{t "fleet-ops.operations.orders.index.new.order-type"}} @helpText={{t "fleet-ops.operations.orders.index.new.order-type-help-text"}} />
54
- <Select
55
- class="w-full"
56
- @options={{this.types}}
57
- @value={{this.order.type}}
58
- @optionLabel="name"
59
- @optionValue="key"
60
- @onSelect={{this.setConfig}}
61
- @placeholder={{t "fleet-ops.operations.orders.index.new.order-type-placeholder"}}
62
- />
48
+ <select class="form-select w-full has--placeholder" {{on "change" this.setConfig}}>
49
+ <option selected disabled>
50
+ {{t "fleet-ops.operations.orders.index.new.order-type-placeholder"}}
51
+ </option>
52
+ {{#each this.orderConfigs as |orderConfig|}}
53
+ <option value={{orderConfig.id}} selected={{eq this.orderConfig.id orderConfig.id}}>
54
+ {{orderConfig.name}}
55
+ </option>
56
+ {{/each}}
57
+ </select>
63
58
  </div>
64
59
 
65
- <InputGroup
66
- @name={{t "fleet-ops.operations.orders.index.new.internal-id"}}
67
- @value={{this.order.internal_id}}
68
- @helpText={{t "fleet-ops.operations.orders.index.new.internal-id-help-text"}}
69
- />
60
+ <InputGroup @name={{t "fleet-ops.operations.orders.index.new.internal-id"}} @value={{this.order.internal_id}} @helpText={{t "fleet-ops.operations.orders.index.new.internal-id-help-text"}} />
70
61
 
71
62
  <InputGroup>
72
63
  <InputLabel @labelText={{t "fleet-ops.operations.orders.index.new.schedule"}} @helpText={{t "fleet-ops.operations.orders.index.new.schedule-help-text"}} />
73
- <DateTimeInput
74
- class="form-input"
75
- @value={{this.order.scheduled_at}}
76
- @minDate={{format-date (now) "yyyy-MM-dd"}}
77
- @minTime={{format-date (now) "HH:mm"}}
78
- @onUpdate={{this.scheduleOrder}}
79
- @disabled={{this.order.dispatched}}
80
- />
64
+ <DateTimeInput class="form-input" @value={{this.order.scheduled_at}} @minDate={{format-date (now) "yyyy-MM-dd"}} @minTime={{format-date (now) "HH:mm"}} @onUpdate={{this.scheduleOrder}} @disabled={{this.order.dispatched}} />
81
65
  </InputGroup>
82
66
 
83
67
  <InputGroup @name={{t "fleet-ops.operations.orders.index.new.customer"}} @helpText={{t "fleet-ops.operations.orders.index.new.customer-help-text"}}>
84
- <ModelSelect
85
- @modelName="customer"
86
- @selectedModel={{this.order.customer}}
87
- @placeholder={{t "fleet-ops.operations.orders.index.new.customer-placeholder"}}
88
- @triggerClass="form-select form-input"
89
- @infiniteScroll={{false}}
90
- @renderInPlace={{true}}
91
- @allowClear={{true}}
92
- @onChange={{this.setOrderCustomer}}
93
- as |model|
94
- >
68
+ <ModelSelect @modelName="customer" @selectedModel={{this.order.customer}} @placeholder={{t "fleet-ops.operations.orders.index.new.customer-placeholder"}} @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @allowClear={{true}} @onChange={{this.setOrderCustomer}} as |model|>
95
69
  <div class="flex items-center">
96
70
  <div class="w-7">
97
71
  <FaIcon @icon={{if model.isVendor "warehouse" "user"}} />
@@ -104,17 +78,7 @@
104
78
  </InputGroup>
105
79
 
106
80
  <InputGroup @name={{t "fleet-ops.operations.orders.index.new.facilitator"}} @helpText={{t "fleet-ops.operations.orders.index.new.facilitator-help-text"}}>
107
- <ModelSelect
108
- @modelName="facilitator"
109
- @selectedModel={{this.order.facilitator}}
110
- @placeholder={{t "fleet-ops.operations.orders.index.new.facilitator-placeholder"}}
111
- @triggerClass="form-select form-input"
112
- @allowClear={{true}}
113
- @infiniteScroll={{false}}
114
- @renderInPlace={{true}}
115
- @onChange={{this.setOrderFacilitator}}
116
- as |model|
117
- >
81
+ <ModelSelect @modelName="facilitator" @selectedModel={{this.order.facilitator}} @placeholder={{t "fleet-ops.operations.orders.index.new.facilitator-placeholder"}} @triggerClass="form-select form-input" @allowClear={{true}} @infiniteScroll={{false}} @renderInPlace={{true}} @onChange={{this.setOrderFacilitator}} as |model|>
118
82
  <div class="flex items-center">
119
83
  <div class="w-7">
120
84
  {{#if model.isIntegratedVendor}}
@@ -131,36 +95,13 @@
131
95
  </InputGroup>
132
96
 
133
97
  {{#if (and this.order.facilitator.isIntegratedVendor this.order.facilitator.service_types.length)}}
134
- <InputGroup
135
- @name={{t "fleet-ops.operations.orders.index.new.service-type"}}
136
- @helpText={{concat (t "fleet-ops.operations.orders.index.new.service-type-help-text") this.order.facilitator.name "."}}
137
- >
138
- <Select
139
- class="w-full"
140
- @options={{this.order.facilitator.service_types}}
141
- @value={{this.integratedVendorServiceType}}
142
- @optionLabel="description"
143
- @optionValue="key"
144
- @onSelect={{this.selectIntegratedServiceType}}
145
- @placeholder={{t "fleet-ops.operations.orders.index.new.service-type-placeholder"}}
146
- />
98
+ <InputGroup @name={{t "fleet-ops.operations.orders.index.new.service-type"}} @helpText={{concat (t "fleet-ops.operations.orders.index.new.service-type-help-text") this.order.facilitator.name "."}}>
99
+ <Select class="w-full" @options={{this.order.facilitator.service_types}} @value={{this.integratedVendorServiceType}} @optionLabel="description" @optionValue="key" @onSelect={{this.selectIntegratedServiceType}} @placeholder={{t "fleet-ops.operations.orders.index.new.service-type-placeholder"}} />
147
100
  </InputGroup>
148
101
  {{/if}}
149
102
 
150
103
  <InputGroup @name={{t "fleet-ops.operations.orders.index.new.assign-driver"}} @helpText={{t "fleet-ops.operations.orders.index.new.assign-driver-help-text"}}>
151
- <ModelSelect
152
- @modelName="driver"
153
- @selectedModel={{this.order.driver_assigned}}
154
- @query={{@options.driversQuery}}
155
- @placeholder={{t "fleet-ops.operations.orders.index.new.assign-driver-placeholder"}}
156
- @triggerClass="form-select form-input"
157
- @infiniteScroll={{false}}
158
- @renderInPlace={{true}}
159
- @allowClear={{true}}
160
- @disabled={{this.isUsingIntegratedVendor}}
161
- @onChange={{fn (mut this.order.driver_assigned)}}
162
- as |model|
163
- >
104
+ <ModelSelect @modelName="driver" @selectedModel={{this.order.driver_assigned}} @query={{@options.driversQuery}} @placeholder={{t "fleet-ops.operations.orders.index.new.assign-driver-placeholder"}} @triggerClass="form-select form-input" @infiniteScroll={{false}} @renderInPlace={{true}} @allowClear={{true}} @disabled={{this.isUsingIntegratedVendor}} @onChange={{fn (mut this.order.driver_assigned)}} as |model|>
164
105
  <div class="flex items-center">
165
106
  <div class="w-7">
166
107
  <FaIcon @icon="id-card-alt" />
@@ -182,29 +123,14 @@
182
123
 
183
124
  {{#if (and this.order.pod_required (not this.isUsingIntegratedVendor))}}
184
125
  <InputGroup>
185
- <InputLabel
186
- @labelText={{t "fleet-ops.operations.orders.index.new.proof-delivery"}}
187
- @helpText={{t "fleet-ops.operations.orders.index.new.proof-delivery-help-text"}}
188
- />
189
- <Select
190
- class="w-full"
191
- @options={{this.podOptions}}
192
- @value={{this.order.pod_method}}
193
- @onSelect={{fn (mut this.order.pod_method)}}
194
- @placeholder={{t "fleet-ops.operations.orders.index.new.proof-delivery-placeholder"}}
195
- />
126
+ <InputLabel @labelText={{t "fleet-ops.operations.orders.index.new.proof-delivery"}} @helpText={{t "fleet-ops.operations.orders.index.new.proof-delivery-help-text"}} />
127
+ <Select class="w-full" @options={{this.podOptions}} @value={{this.order.pod_method}} @onSelect={{fn (mut this.order.pod_method)}} @placeholder={{t "fleet-ops.operations.orders.index.new.proof-delivery-placeholder"}} />
196
128
  </InputGroup>
197
129
  {{/if}}
198
130
 
199
131
  {{#if this.order.adhoc}}
200
132
  <div>
201
- <InputGroup
202
- @name={{t "fleet-ops.operations.orders.index.new.adhoc-ping"}}
203
- @type="number"
204
- @value={{this.order.adhoc_distance}}
205
- @wrapperClass="mb-0"
206
- @helpText={{t "fleet-ops.operations.orders.index.new.adhoc-ping-help-text"}}
207
- />
133
+ <InputGroup @name={{t "fleet-ops.operations.orders.index.new.adhoc-ping"}} @type="number" @value={{this.order.adhoc_distance}} @wrapperClass="mb-0" @helpText={{t "fleet-ops.operations.orders.index.new.adhoc-ping-help-text"}} />
208
134
  <div class="mt-2 px-3 py-1 rounded-lg border border-blue-600 bg-blue-100 flex items-center">
209
135
  <FaIcon @icon="triangle-exclamation" class="text-blue-900 mr-1.5" />
210
136
  <span class="text-blue-900 text-xs">{{t "fleet-ops.operations.orders.index.new.adhoc-ping-message"}}</span>
@@ -214,106 +140,36 @@
214
140
 
215
141
  <div class="lg:col-span-2">
216
142
  <InputGroup @wrapperClass="pt-2">
217
- <Toggle
218
- @label={{t "fleet-ops.operations.orders.index.new.ad-hoc"}}
219
- @wrapperClass="justify-start-i"
220
- @isToggled={{this.order.adhoc}}
221
- @onToggle={{this.toggleAdhoc}}
222
- @disabled={{this.isUsingIntegratedVendor}}
223
- @helpText={{t "fleet-ops.operations.orders.index.new.ad-hoc-help-text"}}
224
- />
143
+ <Toggle @label={{t "fleet-ops.operations.orders.index.new.ad-hoc"}} @wrapperClass="justify-start-i" @isToggled={{this.order.adhoc}} @onToggle={{this.toggleAdhoc}} @disabled={{this.isUsingIntegratedVendor}} @helpText={{t "fleet-ops.operations.orders.index.new.ad-hoc-help-text"}} />
225
144
  </InputGroup>
226
145
  </div>
227
146
 
228
147
  <div class="lg:col-span-2">
229
148
  <InputGroup @wrapperClass="pt-1">
230
- <Toggle
231
- @label={{t "fleet-ops.operations.orders.index.new.dispatch"}}
232
- @wrapperClass="justify-start-i"
233
- @isToggled={{this.order.dispatched}}
234
- @onToggle={{fn (mut this.order.dispatched)}}
235
- @disabled={{this.isUsingIntegratedVendor}}
236
- @helpText={{t "fleet-ops.operations.orders.index.new.dispatch-help-text"}}
237
- />
149
+ <Toggle @label={{t "fleet-ops.operations.orders.index.new.dispatch"}} @wrapperClass="justify-start-i" @isToggled={{this.order.dispatched}} @onToggle={{fn (mut this.order.dispatched)}} @disabled={{this.isUsingIntegratedVendor}} @helpText={{t "fleet-ops.operations.orders.index.new.dispatch-help-text"}} />
238
150
  </InputGroup>
239
151
  </div>
240
152
 
241
153
  <div class="lg:col-span-2">
242
154
  <InputGroup @wrapperClass="pt-1">
243
- <Toggle
244
- @label={{t "fleet-ops.operations.orders.index.new.require-proof"}}
245
- @wrapperClass="justify-start-i"
246
- @isToggled={{this.order.pod_required}}
247
- @onToggle={{this.toggleProofOfDelivery}}
248
- @helpText={{t "fleet-ops.operations.orders.index.new.require-proof-help-text"}}
249
- />
155
+ <Toggle @label={{t "fleet-ops.operations.orders.index.new.require-proof"}} @wrapperClass="justify-start-i" @isToggled={{this.order.pod_required}} @onToggle={{this.toggleProofOfDelivery}} @helpText={{t "fleet-ops.operations.orders.index.new.require-proof-help-text"}} />
250
156
  </InputGroup>
251
157
  </div>
252
158
  </div>
253
159
  </ContentPanel>
254
160
 
255
- {{#if this.typeConfig}}
256
- {{#each this.groupedMetaFields as |group|}}
257
- <ContentPanel
258
- @title={{if group.value (humanize group.value) (t "fleet-ops.operations.orders.index.new.additional-details")}}
259
- @open={{true}}
260
- @pad={{true}}
261
- @panelBodyClass="bg-white dark:bg-gray-800"
262
- >
263
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
264
- {{#each group.items as |metaField|}}
265
- <div class="input-group {{if (eq metaField.type 'boolean') 'col-span-2 items-center' ''}}">
266
- <div class="flex items-center justify-between">
267
- {{#if (not-eq metaField.type "boolean")}}
268
- <InputLabel @labelText={{metaField.label}} @required={{metaField.required}} />
269
- {{/if}}
270
-
271
- {{#if metaField.removable}}
272
- <div class="flex items-center pr-1">
273
- <a href="javascript:;" {{on "click" (fn this.removeMeta metaField)}}>
274
- {{t "fleet-ops.common.remove"}}
275
- </a>
276
- </div>
277
- {{/if}}
278
- </div>
279
-
280
- <CustomField
281
- @metaField={{metaField}}
282
- @value={{metaField.value}}
283
- @placeholder={{metaField.label}}
284
- @onChange={{fn (mut metaField.value)}}
285
- class="{{if (eq metaField.type 'boolean') 'h-10 flex flex-row items-center' ''}}"
286
- />
287
- </div>
161
+ {{#if this.orderConfig}}
162
+ {{#each this.customFieldGroups as |group|}}
163
+ <ContentPanel @title={{group.name}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
164
+ <div class="grid grid-cols-{{or group.meta.grid_size 1}} gap-2">
165
+ {{#each group.customFields as |customField|}}
166
+ <CustomField @customField={{customField}} @order={{this.order}} @orderConfig={{this.orderConfig}} @onChange={{this.setCustomFieldValue}} />
288
167
  {{/each}}
289
168
  </div>
290
169
  </ContentPanel>
291
170
  {{/each}}
292
171
  {{/if}}
293
172
 
294
- <ContentPanel
295
- @title={{t "fleet-ops.operations.orders.index.new.metadata"}}
296
- @open={{this.order.meta.length}}
297
- @pad={{true}}
298
- @panelBodyClass="bg-white dark:bg-gray-800"
299
- @actionButtons={{this.metadataButtons}}
300
- >
301
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
302
- {{#each this.order.meta as |metaField index|}}
303
- <InputGroup>
304
- <div class="flex justify-between items-center mb-0.5">
305
- <label>{{metaField.label}}</label>
306
- <a href="javascript:;" class="text-xs" {{on "click" (fn this.editCustomField index)}}>
307
- <FaIcon @icon="edit" @size="sm" class="mr-1" />
308
- Edit
309
- </a>
310
- </div>
311
- <Input class="w-full form-input" @value={{metaField.value}} placeholder={{metaField.label}} />
312
- </InputGroup>
313
- {{/each}}
314
- </div>
315
- </ContentPanel>
316
-
317
173
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.new.route"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
318
174
  <div class="flex flex-row justify-between mb-4">
319
175
  <div class="flex">
@@ -321,23 +177,8 @@
321
177
  </div>
322
178
  <div class="flex flex-1 justify-end space-x-2">
323
179
  {{#if this.isMultipleDropoffOrder}}
324
- <Button
325
- @type="magic"
326
- @icon="magic"
327
- @text={{t "fleet-ops.operations.orders.index.new.optimize-route"}}
328
- @size="sm"
329
- @onClick={{this.optimizeRoute}}
330
- @helpText={{t "fleet-ops.operations.orders.index.new.optimize-route-help-text"}}
331
- @disabled={{lt this.waypoints.length 3}}
332
- @isLoading={{this.isOptimizingRoute}}
333
- />
334
- <Button
335
- @icon="map-marked-alt"
336
- @text={{t "fleet-ops.operations.orders.index.new.add-waypoint"}}
337
- @size="sm"
338
- @onClick={{this.addWaypoint}}
339
- @helpText={{t "fleet-ops.operations.orders.index.new.add-waypoint-help-text"}}
340
- />
180
+ <Button @type="magic" @icon="magic" @text={{t "fleet-ops.operations.orders.index.new.optimize-route"}} @size="sm" @onClick={{this.optimizeRoute}} @helpText={{t "fleet-ops.operations.orders.index.new.optimize-route-help-text"}} @disabled={{lt this.waypoints.length 3}} @isLoading={{this.isOptimizingRoute}} />
181
+ <Button @icon="map-marked-alt" @text={{t "fleet-ops.operations.orders.index.new.add-waypoint"}} @size="sm" @onClick={{this.addWaypoint}} @helpText={{t "fleet-ops.operations.orders.index.new.add-waypoint-help-text"}} />
341
182
  {{/if}}
342
183
  </div>
343
184
  </div>
@@ -354,27 +195,12 @@
354
195
  </div>
355
196
 
356
197
  <div class="flex-1 px-3">
357
- <ModelSelect
358
- @modelName="place"
359
- @selectedModel={{waypoint.place}}
360
- @placeholder={{concat (t "fleet-ops.operations.orders.index.new.select-waypoint-placeholder") " " (add index 1)}}
361
- @triggerClass="form-select form-input truncate max-w-300px"
362
- @infiniteScroll={{false}}
363
- @customSearchEndpoint="places/search"
364
- @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}}
365
- @renderInPlace={{true}}
366
- @onChange={{fn this.setWaypointPlace index}}
367
- as |model|
368
- >
198
+ <ModelSelect @modelName="place" @selectedModel={{waypoint.place}} @placeholder={{concat (t "fleet-ops.operations.orders.index.new.select-waypoint-placeholder") " " (add index 1)}} @triggerClass="form-select form-input truncate max-w-300px" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setWaypointPlace index}} as |model|>
369
199
  {{model.address}}
370
200
  </ModelSelect>
371
201
 
372
202
  {{#if (and this.isUsingIntegratedVendor (is-not-facilitator-supported-place this.order.facilitator waypoint.place))}}
373
- <InfoBlock
374
- class="my-2 px-4 py-1.5 danger"
375
- @blockClass="flex flex-row items-center"
376
- @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}}
377
- />
203
+ <InfoBlock class="my-2 px-4 py-1.5 danger" @blockClass="flex flex-row items-center" @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}} />
378
204
  {{/if}}
379
205
 
380
206
  {{#if waypoint.place.hasInvalidCoordinates}}
@@ -412,27 +238,12 @@
412
238
  </div>
413
239
  </div>
414
240
 
415
- <ModelSelect
416
- @modelName="place"
417
- @selectedModel={{this.payload.pickup}}
418
- @placeholder={{t "fleet-ops.operations.orders.index.new.select-pickup"}}
419
- @triggerClass="form-select form-input"
420
- @infiniteScroll={{false}}
421
- @customSearchEndpoint="places/search"
422
- @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}}
423
- @renderInPlace={{true}}
424
- @onChange={{fn this.setPayloadPlace "pickup"}}
425
- as |model|
426
- >
241
+ <ModelSelect @modelName="place" @selectedModel={{this.payload.pickup}} @placeholder={{t "fleet-ops.operations.orders.index.new.select-pickup"}} @triggerClass="form-select form-input" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setPayloadPlace "pickup"}} as |model|>
427
242
  {{model.address}}
428
243
  </ModelSelect>
429
244
 
430
245
  {{#if (and this.isUsingIntegratedVendor (is-not-facilitator-supported-place this.order.facilitator this.payload.pickup))}}
431
- <InfoBlock
432
- class="my-2 px-4 py-1.5 danger"
433
- @blockClass="flex flex-row items-center"
434
- @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}}
435
- />
246
+ <InfoBlock class="my-2 px-4 py-1.5 danger" @blockClass="flex flex-row items-center" @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}} />
436
247
  {{/if}}
437
248
 
438
249
  {{#if this.payload.pickup.hasInvalidCoordinates}}
@@ -459,27 +270,12 @@
459
270
  </div>
460
271
  </div>
461
272
 
462
- <ModelSelect
463
- @modelName="place"
464
- @selectedModel={{this.payload.dropoff}}
465
- @placeholder={{t "fleet-ops.operations.orders.index.new.select-dropoff"}}
466
- @triggerClass="form-select form-input"
467
- @infiniteScroll={{false}}
468
- @customSearchEndpoint="places/search"
469
- @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}}
470
- @renderInPlace={{true}}
471
- @onChange={{fn this.setPayloadPlace "dropoff"}}
472
- as |model|
473
- >
273
+ <ModelSelect @modelName="place" @selectedModel={{this.payload.dropoff}} @placeholder={{t "fleet-ops.operations.orders.index.new.select-dropoff"}} @triggerClass="form-select form-input" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setPayloadPlace "dropoff"}} as |model|>
474
274
  {{model.address}}
475
275
  </ModelSelect>
476
276
 
477
277
  {{#if (and this.isUsingIntegratedVendor (is-not-facilitator-supported-place this.order.facilitator this.payload.dropoff))}}
478
- <InfoBlock
479
- class="my-2 px-4 py-1.5 danger"
480
- @blockClass="flex flex-row items-center"
481
- @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}}
482
- />
278
+ <InfoBlock class="my-2 px-4 py-1.5 danger" @blockClass="flex flex-row items-center" @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}} />
483
279
  {{/if}}
484
280
 
485
281
  {{#if this.payload.dropoff.hasInvalidCoordinates}}
@@ -499,27 +295,12 @@
499
295
  {{/if}}
500
296
  </div>
501
297
 
502
- <ModelSelect
503
- @modelName="place"
504
- @selectedModel={{this.payload.return}}
505
- @placeholder={{t "fleet-ops.operations.orders.index.new.select-return"}}
506
- @triggerClass="form-select form-input"
507
- @infiniteScroll={{false}}
508
- @customSearchEndpoint="places/search"
509
- @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}}
510
- @renderInPlace={{true}}
511
- @onChange={{fn this.setPayloadPlace "return"}}
512
- as |model|
513
- >
298
+ <ModelSelect @modelName="place" @selectedModel={{this.payload.return}} @placeholder={{t "fleet-ops.operations.orders.index.new.select-return"}} @triggerClass="form-select form-input" @infiniteScroll={{false}} @customSearchEndpoint="places/search" @query={{hash geo=true latitude=this.userLatitude longitude=this.userLongitude}} @renderInPlace={{true}} @onChange={{fn this.setPayloadPlace "return"}} as |model|>
514
299
  {{model.address}}
515
300
  </ModelSelect>
516
301
 
517
302
  {{#if (and this.isUsingIntegratedVendor (is-not-facilitator-supported-place this.order.facilitator this.payload.return))}}
518
- <InfoBlock
519
- class="my-2 px-4 py-1.5 danger"
520
- @blockClass="flex flex-row items-center"
521
- @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}}
522
- />
303
+ <InfoBlock class="my-2 px-4 py-1.5 danger" @blockClass="flex flex-row items-center" @text={{concat this.order.facilitator.name (t "fleet-ops.operations.orders.index.new.infoblock-text")}} />
523
304
  {{/if}}
524
305
 
525
306
  {{#if this.payload.return.hasInvalidCoordinates}}
@@ -533,9 +314,36 @@
533
314
  {{/if}}
534
315
  </ContentPanel>
535
316
 
317
+ {{#if this.renderableComponents}}
318
+ {{#each this.renderableComponents as |renderableComponent|}}
319
+ {{component renderableComponent order=this.order}}
320
+ {{/each}}
321
+ {{/if}}
322
+
536
323
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.new.payload-entities"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
537
324
  {{#if this.isNotCsvImportedOrder}}
538
- <Button @wrapperClass="mb-4" @icon="plus" @iconPrefix="fas" @text={{t "fleet-ops.operations.orders.index.new.add-item-order"}} @size="sm" @onClick={{this.addEntity}} />
325
+ <div class="flex items-center mb-4">
326
+ <Button @wrapperClass="mr-2" @icon="square-plus" @iconPrefix="fas" @text={{t "fleet-ops.operations.orders.index.new.add-item-order"}} @size="sm" @onClick={{this.addEntity}} />
327
+ {{#if this.orderConfig.entities}}
328
+ <DropdownButton @type="magic" @icon="ellipsis-h" @size="sm" @iconPrefix="fas" @text={{t "fleet-ops.operations.orders.index.new.add-entity"}} @triggerClass="mr-2 hidden md:flex" as |dd|>
329
+ <div class="next-dd-menu mt-1 mx-0" aria-labelledby="user-menu">
330
+ {{#each this.orderConfig.entities as |customEntity|}}
331
+ <div class="p-1">
332
+ <a href="javascript:;" class="next-dd-item" {{on "click" (dropdown-fn dd this.addFromCustomEntity customEntity)}}>
333
+ <div class="w-6">
334
+ <FaIcon @icon="cube" />
335
+ </div>
336
+ <div>
337
+ <div class="font-semibold">{{customEntity.name}}</div>
338
+ <span class="text-xs">{{customEntity.description}}</span>
339
+ </div>
340
+ </a>
341
+ </div>
342
+ {{/each}}
343
+ </div>
344
+ </DropdownButton>
345
+ {{/if}}
346
+ </div>
539
347
  {{/if}}
540
348
  {{#if this.isCsvImportedOrder}}
541
349
  <div class="space-y-2">
@@ -547,13 +355,7 @@
547
355
  <h4 class="font-bold dark:text-gray-100">{{group.waypoint.place.address}}</h4>
548
356
  </div>
549
357
  <div>
550
- <Button
551
- @icon="plus"
552
- @iconPrefix="fas"
553
- @text={{t "fleet-ops.operations.orders.index.new.add-item-button"}}
554
- @size="sm"
555
- @onClick={{fn this.addEntity group.importId}}
556
- />
358
+ <Button @icon="plus" @iconPrefix="fas" @text={{t "fleet-ops.operations.orders.index.new.add-item-button"}} @size="sm" @onClick={{fn this.addEntity group.importId}} />
557
359
  </div>
558
360
  </div>
559
361
  <div class="grid grid-cols-2 lg:grid-cols-3 gap-4 lg:gap-2">
@@ -568,24 +370,12 @@
568
370
  <Input @value={{entity.name}} @type="text" class="w-full form-input form-input-sm" placeholder={{t "fleet-ops.common.name"}} />
569
371
  </div>
570
372
  <div>
571
- <Input
572
- @value={{entity.sku}}
573
- @type="text"
574
- class="w-full form-input form-input-sm"
575
- placeholder={{t "fleet-ops.operations.orders.index.new.sku"}}
576
- />
373
+ <Input @value={{entity.sku}} @type="text" class="w-full form-input form-input-sm" placeholder={{t "fleet-ops.operations.orders.index.new.sku"}} />
577
374
  </div>
578
375
  <Button @icon="pencil" @text={{t "fleet-ops.operations.orders.index.new.edit-item"}} @size="sm" @onClick={{fn this.editEntity entity}} />
579
376
  </div>
580
377
  <div class="absolute top-0 right-0 p-2">
581
- <Button
582
- @icon="times"
583
- @iconPrefix="fas"
584
- @type="danger"
585
- @size="xs"
586
- @onClick={{fn this.removeEntity entity}}
587
- @wrapperClass={{if (eq index 0) "invisible"}}
588
- />
378
+ <Button @icon="times" @iconPrefix="fas" @type="danger" @size="xs" @onClick={{fn this.removeEntity entity}} @wrapperClass={{if (eq index 0) "invisible"}} />
589
379
  </div>
590
380
  </div>
591
381
  </div>
@@ -626,14 +416,7 @@
626
416
  <Button @icon="pencil" @text={{t "fleet-ops.operations.orders.index.new.edit-item"}} @size="sm" @onClick={{fn this.editEntity entity}} />
627
417
  </div>
628
418
  <div class="absolute top-0 right-0 p-2">
629
- <Button
630
- @icon="times"
631
- @iconPrefix="fas"
632
- @type="danger"
633
- @size="xs"
634
- @onClick={{fn this.removeEntity entity}}
635
- @wrapperClass={{if (eq index 0) "invisible"}}
636
- />
419
+ <Button @icon="times" @iconPrefix="fas" @type="danger" @size="xs" @onClick={{fn this.removeEntity entity}} @wrapperClass={{if (eq index 0) "invisible"}} />
637
420
  </div>
638
421
  </div>
639
422
  </div>
@@ -643,39 +426,15 @@
643
426
  </ContentPanel>
644
427
 
645
428
  <ContentPanel @title={{t "fleet-ops.common.service"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
646
- <Toggle
647
- @label={{t "fleet-ops.operations.orders.index.new.apply-service-rate"}}
648
- @wrapperClass="justify-start-i mb-4"
649
- @isToggled={{this.servicable}}
650
- @onToggle={{this.checkServiceRates}}
651
- @disabled={{this.isNotServicable}}
652
- @helpText={{t "fleet-ops.operations.orders.index.new.service-help-text"}}
653
- />
429
+ <Toggle @label={{t "fleet-ops.operations.orders.index.new.apply-service-rate"}} @wrapperClass="justify-start-i mb-4" @isToggled={{this.servicable}} @onToggle={{this.checkServiceRates}} @disabled={{this.isNotServicable}} @helpText={{t "fleet-ops.operations.orders.index.new.service-help-text"}} />
654
430
 
655
431
  {{#if this.servicable}}
656
- <ContentPanel
657
- @title={{t "fleet-ops.operations.orders.index.new.service-quotes"}}
658
- @open={{true}}
659
- @pad={{true}}
660
- @wrapperClass="mt-6"
661
- @panelBodyClass="bg-white dark:bg-gray-800"
662
- >
432
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.new.service-quotes"}} @open={{true}} @pad={{true}} @wrapperClass="mt-6" @panelBodyClass="bg-white dark:bg-gray-800">
663
433
  {{#unless this.isUsingIntegratedVendor}}
664
434
  <div class="input-group mb-2i">
665
- <InputLabel
666
- @labelText={{t "fleet-ops.operations.orders.index.new.select-service-rate"}}
667
- @helpText={{t "fleet-ops.operations.orders.index.new.service-quotes-help-text"}}
668
- />
669
-
670
- <Select
671
- class="w-full"
672
- @options={{this.serviceRates}}
673
- @value={{this.selectedServiceRate}}
674
- @optionLabel="service_name"
675
- @optionValue="uuid"
676
- @onSelect={{this.getQuotes}}
677
- @placeholder={{t "fleet-ops.operations.orders.index.new.select-service-rate"}}
678
- />
435
+ <InputLabel @labelText={{t "fleet-ops.operations.orders.index.new.select-service-rate"}} @helpText={{t "fleet-ops.operations.orders.index.new.service-quotes-help-text"}} />
436
+
437
+ <Select class="w-full" @options={{this.serviceRates}} @value={{this.selectedServiceRate}} @optionLabel="service_name" @optionValue="uuid" @onSelect={{this.getQuotes}} @placeholder={{t "fleet-ops.operations.orders.index.new.select-service-rate"}} />
679
438
  </div>
680
439
  {{/unless}}
681
440
 
@@ -685,11 +444,7 @@
685
444
 
686
445
  {{#if this.isFetchingQuotes}}
687
446
  <div class="flex items-center justify-center py-5">
688
- <Spinner
689
- class="text-sm dark:text-gray-100 flex flex-row items-center"
690
- @iconClass="mr-2"
691
- @loadingMessage={{t "fleet-ops.operations.orders.index.new.loading-message"}}
692
- />
447
+ <Spinner class="text-sm dark:text-gray-100 flex flex-row items-center" @iconClass="mr-2" @loadingMessage={{t "fleet-ops.operations.orders.index.new.loading-message"}} />
693
448
  </div>
694
449
  {{else}}
695
450
  <InfoBlock class="my-3" @text={{t "fleet-ops.operations.orders.index.new.info-text"}} />
@@ -698,14 +453,7 @@
698
453
  {{#each this.serviceQuotes as |serviceQuote index|}}
699
454
  <div class="radio-group-item shadow-sm flex-col pl-0i pr-0i {{if (eq @options.selected index) 'is-checked'}}">
700
455
  <div class="flex flex-row items-center mb-2.5 px-4">
701
- <RadioButton
702
- @radioClass="focus:ring-blue-500 h-6 w-6 text-blue-500"
703
- @radioId={{serviceQuote.uuid}}
704
- @value={{serviceQuote.uuid}}
705
- @groupValue={{this.selectedServiceQuote}}
706
- @name="serviceQuote"
707
- @changed={{fn (mut this.selectedServiceQuote)}}
708
- />
456
+ <RadioButton @radioClass="focus:ring-blue-500 h-6 w-6 text-blue-500" @radioId={{serviceQuote.uuid}} @value={{serviceQuote.uuid}} @groupValue={{this.selectedServiceQuote}} @name="serviceQuote" @changed={{fn (mut this.selectedServiceQuote)}} />
709
457
  <label for={{serviceQuote.uuid}} class="ml-3 flex-1">{{serviceQuote.public_id}}</label>
710
458
  <Badge @hideStatusDot={{true}} @status="info">
711
459
  {{serviceQuote.request_id}}
@@ -743,15 +491,11 @@
743
491
  </div>
744
492
  </div>
745
493
  {{else}}
746
- <InfoBlock
747
- class="my-2 px-4 py-1.5 warning"
748
- @blockClass="flex flex-row items-center"
749
- @text={{if
494
+ <InfoBlock class="my-2 px-4 py-1.5 warning" @blockClass="flex flex-row items-center" @text={{if
750
495
  this.payloadCoordinates.length
751
496
  (t "fleet-ops.operations.orders.index.new.no-service-info-text")
752
497
  (t "fleet-ops.operations.orders.index.new.input-order-info-text")
753
- }}
754
- />
498
+ }} />
755
499
  {{/each}}
756
500
  </div>
757
501
  {{/if}}
@@ -766,9 +510,7 @@
766
510
  <ContentPanel @title={{t "fleet-ops.operations.orders.index.view.documents-panel-title"}} @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
767
511
  <div class="space-y-4">
768
512
  {{#if this.isUploading}}
769
- <div
770
- 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"
771
- >
513
+ <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">
772
514
  <div class="flex items-center justify-center py-5">
773
515
  <Spinner class="text-sm dar:text-gray-100" @loadingMessage={{t "fleet-ops.common.uploading"}} />
774
516
  </div>
@@ -833,6 +575,23 @@
833
575
  </div>
834
576
  </ContentPanel>
835
577
 
578
+ <ContentPanel @title={{t "fleet-ops.operations.orders.index.new.metadata"}} @open={{this.order.meta.length}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800" @actionButtons={{this.metadataButtons}}>
579
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-2">
580
+ {{#each this.order.meta as |metaField index|}}
581
+ <InputGroup>
582
+ <div class="flex justify-between items-center mb-0.5">
583
+ <label>{{metaField.label}}</label>
584
+ <a href="javascript:;" class="text-xs" {{on "click" (fn this.editCustomField index)}}>
585
+ <FaIcon @icon="edit" @size="sm" class="mr-1" />
586
+ {{t "common.edit"}}
587
+ </a>
588
+ </div>
589
+ <Input class="w-full form-input" @value={{metaField.value}} placeholder={{metaField.label}} />
590
+ </InputGroup>
591
+ {{/each}}
592
+ </div>
593
+ </ContentPanel>
594
+
836
595
  <Spacer @height="300px" />
837
596
  </Overlay::Body>
838
597
  </Overlay>