@fleetbase/fleetops-engine 0.6.38 → 0.6.40

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 (432) hide show
  1. package/addon/components/activity/form.hbs +2 -12
  2. package/addon/components/activity/logic-builder.hbs +1 -1
  3. package/addon/components/custom-entity/form.hbs +4 -20
  4. package/addon/components/device/form.hbs +3 -15
  5. package/addon/components/device/panel-header.hbs +13 -2
  6. package/addon/components/driver/details.hbs +33 -2
  7. package/addon/components/driver/form.hbs +42 -0
  8. package/addon/components/driver/panel-header.hbs +8 -1
  9. package/addon/components/driver/schedule.hbs +115 -76
  10. package/addon/components/driver/schedule.js +349 -157
  11. package/addon/components/driver-onboard-settings.hbs +2 -8
  12. package/addon/components/entity-field-editing-settings.hbs +2 -5
  13. package/addon/components/equipment/card.hbs +49 -0
  14. package/addon/components/equipment/card.js +6 -0
  15. package/addon/components/equipment/details.hbs +83 -44
  16. package/addon/components/equipment/form.hbs +111 -41
  17. package/addon/components/equipment/form.js +78 -10
  18. package/addon/components/equipment/panel-header.hbs +36 -0
  19. package/addon/components/equipment/panel-header.js +2 -0
  20. package/addon/components/fleet/driver-listing.hbs +3 -1
  21. package/addon/components/fleet/vehicle-listing.hbs +4 -7
  22. package/addon/components/fleet-panel/vehicle-listing.hbs +1 -6
  23. package/addon/components/fuel-report/form.hbs +1 -5
  24. package/addon/components/layout/fleet-ops-sidebar.hbs +43 -38
  25. package/addon/components/layout/fleet-ops-sidebar.js +103 -24
  26. package/addon/components/maintenance/cost-panel.hbs +176 -0
  27. package/addon/components/maintenance/cost-panel.js +241 -0
  28. package/addon/components/maintenance/details.hbs +123 -60
  29. package/addon/components/maintenance/form.hbs +138 -78
  30. package/addon/components/maintenance/form.js +131 -6
  31. package/addon/components/maintenance/panel-header.hbs +31 -0
  32. package/addon/components/maintenance/panel-header.js +2 -0
  33. package/addon/components/maintenance-schedule/details.hbs +260 -0
  34. package/addon/components/maintenance-schedule/details.js +158 -0
  35. package/addon/components/maintenance-schedule/form.hbs +287 -0
  36. package/addon/components/maintenance-schedule/form.js +199 -0
  37. package/addon/components/map/container.hbs +1 -1
  38. package/addon/components/map/drawer/device-event-listing.hbs +1 -1
  39. package/addon/components/map/drawer/driver-listing.hbs +1 -6
  40. package/addon/components/map/drawer/place-listing.hbs +1 -6
  41. package/addon/components/map/drawer/vehicle-listing.hbs +1 -6
  42. package/addon/components/map/drawer.hbs +8 -1
  43. package/addon/components/map/leaflet-live-map.hbs +2 -1
  44. package/addon/components/map/toolbar/visibility-control-panel.hbs +1 -1
  45. package/addon/components/map/toolbar.hbs +4 -29
  46. package/addon/components/modals/add-driver-shift.hbs +155 -0
  47. package/addon/components/modals/add-driver-shift.js +210 -0
  48. package/addon/components/modals/bulk-assign-orders.hbs +67 -0
  49. package/addon/components/modals/driver-shift.hbs +43 -0
  50. package/addon/components/modals/driver-shift.js +56 -0
  51. package/addon/components/modals/entity-form.hbs +5 -28
  52. package/addon/components/modals/orchestrator-import.hbs +351 -0
  53. package/addon/components/modals/orchestrator-import.js +807 -0
  54. package/addon/components/modals/order-config-new-status.hbs +1 -5
  55. package/addon/components/modals/scheduling-conflict.hbs +47 -0
  56. package/addon/components/modals/scheduling-conflict.js +53 -0
  57. package/addon/components/modals/send-work-order.hbs +91 -0
  58. package/addon/components/modals/send-work-order.js +3 -0
  59. package/addon/components/modals/service-area-form.hbs +1 -6
  60. package/addon/components/modals/set-driver-availability.hbs +50 -0
  61. package/addon/components/modals/set-driver-availability.js +57 -0
  62. package/addon/components/modals/update-order-activity.hbs +13 -9
  63. package/addon/components/modals/user-form.hbs +1 -5
  64. package/addon/components/modals/vehicle-form.hbs +17 -102
  65. package/addon/components/modals/vendor-form.hbs +15 -82
  66. package/addon/components/orchestrator/card-fields-settings.hbs +76 -0
  67. package/addon/components/orchestrator/card-fields-settings.js +134 -0
  68. package/addon/components/orchestrator/order-pool.hbs +264 -0
  69. package/addon/components/orchestrator/order-pool.js +394 -0
  70. package/addon/components/orchestrator/phase-builder.hbs +162 -0
  71. package/addon/components/orchestrator/phase-builder.js +162 -0
  72. package/addon/components/orchestrator/plan-viewer.hbs +278 -0
  73. package/addon/components/orchestrator/plan-viewer.js +342 -0
  74. package/addon/components/orchestrator/resource-panel.hbs +301 -0
  75. package/addon/components/orchestrator/resource-panel.js +106 -0
  76. package/addon/components/orchestrator-workbench.hbs +318 -0
  77. package/addon/components/orchestrator-workbench.js +1088 -0
  78. package/addon/components/order/details/custom-fields.hbs +10 -1
  79. package/addon/components/order/details/detail.hbs +37 -2
  80. package/addon/components/order/details/detail.js +0 -1
  81. package/addon/components/order/details/integrated-vendor-details.hbs +4 -4
  82. package/addon/components/order/details/notes.hbs +1 -7
  83. package/addon/components/order/details/route.hbs +1 -5
  84. package/addon/components/order/form/details.hbs +44 -10
  85. package/addon/components/order/form/details.js +57 -0
  86. package/addon/components/order/form/notes.hbs +1 -7
  87. package/addon/components/order/form/payload.hbs +1 -7
  88. package/addon/components/order/form/route.hbs +3 -15
  89. package/addon/components/order/header.hbs +1 -7
  90. package/addon/components/order/route-editor.hbs +4 -25
  91. package/addon/components/order/schedule-card.hbs +102 -95
  92. package/addon/components/order/schedule-card.js +8 -3
  93. package/addon/components/order-config-manager/details.hbs +2 -10
  94. package/addon/components/order-config-manager/entities.hbs +1 -7
  95. package/addon/components/order-config-manager.hbs +1 -6
  96. package/addon/components/part/card.hbs +49 -0
  97. package/addon/components/part/card.js +6 -0
  98. package/addon/components/part/details.hbs +102 -56
  99. package/addon/components/part/form.hbs +131 -56
  100. package/addon/components/part/form.js +78 -11
  101. package/addon/components/part/panel-header.hbs +36 -0
  102. package/addon/components/part/panel-header.js +2 -0
  103. package/addon/components/place/form.hbs +1 -7
  104. package/addon/components/sensor/details.hbs +1 -1
  105. package/addon/components/sensor/form.hbs +5 -3
  106. package/addon/components/sensor/panel-header.hbs +8 -1
  107. package/addon/components/service-area/form.hbs +1 -6
  108. package/addon/components/service-rate/form.hbs +12 -60
  109. package/addon/components/telematic/form.hbs +6 -2
  110. package/addon/components/vehicle/details/maintenance-history.hbs +42 -0
  111. package/addon/components/vehicle/details/maintenance-history.js +32 -0
  112. package/addon/components/vehicle/details/schedules.hbs +40 -0
  113. package/addon/components/vehicle/details/schedules.js +32 -0
  114. package/addon/components/vehicle/details/work-orders.hbs +42 -0
  115. package/addon/components/vehicle/details/work-orders.js +32 -0
  116. package/addon/components/vehicle/details.hbs +52 -0
  117. package/addon/components/vehicle/form.hbs +51 -0
  118. package/addon/components/vehicle/panel-header.hbs +19 -49
  119. package/addon/components/warranty/details.hbs +3 -2
  120. package/addon/components/warranty/form.hbs +3 -17
  121. package/addon/components/work-order/details.hbs +135 -40
  122. package/addon/components/work-order/form.hbs +178 -45
  123. package/addon/components/work-order/form.js +197 -4
  124. package/addon/components/work-order/panel-header.hbs +31 -0
  125. package/addon/components/work-order/panel-header.js +2 -0
  126. package/addon/controllers/connectivity/devices/index/details.js +1 -1
  127. package/addon/controllers/maintenance/equipment/index/details/index.js +0 -1
  128. package/addon/controllers/maintenance/equipment/index/details.js +36 -1
  129. package/addon/controllers/maintenance/equipment/index/edit.js +56 -1
  130. package/addon/controllers/maintenance/equipment/index/new.js +32 -1
  131. package/addon/controllers/maintenance/equipment/index.js +127 -113
  132. package/addon/controllers/maintenance/maintenances/index/details/index.js +3 -0
  133. package/addon/controllers/maintenance/maintenances/index/details.js +54 -0
  134. package/addon/controllers/maintenance/maintenances/index/edit.js +68 -0
  135. package/addon/controllers/maintenance/maintenances/index/new.js +34 -0
  136. package/addon/controllers/maintenance/maintenances/index.js +191 -0
  137. package/addon/controllers/maintenance/parts/index/details/index.js +0 -1
  138. package/addon/controllers/maintenance/parts/index/details.js +36 -1
  139. package/addon/controllers/maintenance/parts/index/edit.js +56 -1
  140. package/addon/controllers/maintenance/parts/index/new.js +32 -1
  141. package/addon/controllers/maintenance/parts/index.js +135 -113
  142. package/addon/controllers/maintenance/schedules/index/details.js +115 -0
  143. package/addon/controllers/maintenance/schedules/index/edit.js +41 -0
  144. package/addon/controllers/maintenance/schedules/index/new.js +33 -0
  145. package/addon/controllers/maintenance/schedules/index.js +280 -0
  146. package/addon/controllers/maintenance/work-orders/index/details.js +41 -1
  147. package/addon/controllers/maintenance/work-orders/index/edit.js +67 -1
  148. package/addon/controllers/maintenance/work-orders/index/new.js +43 -1
  149. package/addon/controllers/maintenance/work-orders/index.js +105 -113
  150. package/addon/controllers/management/drivers/index/details.js +6 -1
  151. package/addon/controllers/management/vehicles/index/details.js +65 -0
  152. package/addon/controllers/management/vehicles/index.js +18 -0
  153. package/addon/controllers/operations/orchestrator.js +10 -0
  154. package/addon/controllers/operations/orders/index.js +6 -0
  155. package/addon/controllers/operations/scheduler/fleet-schedule.js +341 -0
  156. package/addon/controllers/operations/scheduler/index.js +799 -275
  157. package/addon/controllers/operations/scheduler.js +21 -0
  158. package/addon/controllers/settings/orchestrator.js +70 -0
  159. package/addon/controllers/settings/scheduling.js +155 -0
  160. package/addon/extension.js +19 -0
  161. package/addon/instance-initializers/register-vroom-allocation.js +27 -0
  162. package/addon/models/maintenance-schedule.js +61 -0
  163. package/addon/routes/maintenance/equipment/index/details.js +27 -1
  164. package/addon/routes/maintenance/equipment/index/edit.js +27 -1
  165. package/addon/routes/maintenance/maintenances/index/details/index.js +3 -0
  166. package/addon/routes/maintenance/maintenances/index/details.js +29 -0
  167. package/addon/routes/maintenance/maintenances/index/edit.js +29 -0
  168. package/addon/routes/maintenance/maintenances/index/new.js +3 -0
  169. package/addon/routes/maintenance/maintenances/index.js +23 -0
  170. package/addon/routes/maintenance/maintenances.js +3 -0
  171. package/addon/routes/maintenance/parts/index/details.js +27 -1
  172. package/addon/routes/maintenance/parts/index/edit.js +27 -1
  173. package/addon/routes/maintenance/schedules/index/details/index.js +2 -0
  174. package/addon/routes/maintenance/schedules/index/details/work-orders.js +11 -0
  175. package/addon/routes/maintenance/schedules/index/details.js +25 -0
  176. package/addon/routes/maintenance/schedules/index/edit.js +25 -0
  177. package/addon/routes/maintenance/schedules/index/new.js +2 -0
  178. package/addon/routes/maintenance/schedules/index.js +21 -0
  179. package/addon/routes/maintenance/schedules.js +2 -0
  180. package/addon/routes/maintenance/work-orders/index/details.js +27 -1
  181. package/addon/routes/maintenance/work-orders/index/edit.js +27 -1
  182. package/addon/routes/management/vehicles/index/details/maintenance-history.js +3 -0
  183. package/addon/routes/management/vehicles/index/details/schedules.js +3 -0
  184. package/addon/routes/management/vehicles/index/details/work-orders.js +3 -0
  185. package/addon/routes/operations/orchestrator.js +23 -0
  186. package/addon/routes/operations/scheduler/fleet-schedule.js +28 -0
  187. package/addon/routes/operations/scheduler/index.js +48 -26
  188. package/addon/routes/operations/scheduler.js +14 -1
  189. package/addon/routes/settings/orchestrator.js +27 -0
  190. package/addon/routes/settings/scheduling.js +3 -0
  191. package/addon/routes.js +31 -1
  192. package/addon/services/driver-actions.js +40 -7
  193. package/addon/services/driver-scheduling.js +4 -1
  194. package/addon/services/equipment-actions.js +15 -5
  195. package/addon/services/leaflet-map-manager.js +14 -6
  196. package/addon/services/maintenance-actions.js +17 -14
  197. package/addon/services/maintenance-schedule-actions.js +118 -0
  198. package/addon/services/orchestration-engine-interface.js +49 -0
  199. package/addon/services/orchestration-engine.js +74 -0
  200. package/addon/services/order-actions.js +15 -0
  201. package/addon/services/order-allocation.js +116 -0
  202. package/addon/services/part-actions.js +12 -2
  203. package/addon/services/scheduling.js +316 -0
  204. package/addon/services/vehicle-actions.js +70 -7
  205. package/addon/services/vroom-allocation-engine.js +45 -0
  206. package/addon/services/work-order-actions.js +79 -0
  207. package/addon/styles/fleetops-engine.css +1658 -0
  208. package/addon/templates/analytics/reports/index/edit.hbs +1 -1
  209. package/addon/templates/analytics/reports/index/new.hbs +1 -1
  210. package/addon/templates/application.hbs +6 -1
  211. package/addon/templates/connectivity/devices/index/details/events.hbs +0 -1
  212. package/addon/templates/connectivity/devices.hbs +0 -1
  213. package/addon/templates/connectivity/events/index/details.hbs +0 -1
  214. package/addon/templates/connectivity/events.hbs +0 -1
  215. package/addon/templates/connectivity/sensors.hbs +0 -1
  216. package/addon/templates/connectivity/telematics/index/details/devices.hbs +0 -1
  217. package/addon/templates/connectivity/telematics/index/details/events.hbs +0 -1
  218. package/addon/templates/connectivity/telematics/index/details/sensors.hbs +0 -1
  219. package/addon/templates/connectivity/telematics.hbs +0 -1
  220. package/addon/templates/connectivity/tracking.hbs +0 -1
  221. package/addon/templates/connectivity.hbs +0 -1
  222. package/addon/templates/maintenance/equipment/index/details/index.hbs +1 -2
  223. package/addon/templates/maintenance/equipment/index/details.hbs +15 -2
  224. package/addon/templates/maintenance/equipment/index/edit.hbs +12 -2
  225. package/addon/templates/maintenance/equipment/index/new.hbs +1 -2
  226. package/addon/templates/maintenance/equipment/index.hbs +48 -13
  227. package/addon/templates/maintenance/equipment.hbs +0 -1
  228. package/addon/templates/maintenance/maintenances/index/details/index.hbs +1 -0
  229. package/addon/templates/maintenance/maintenances/index/details.hbs +15 -0
  230. package/addon/templates/maintenance/maintenances/index/edit.hbs +12 -0
  231. package/addon/templates/maintenance/maintenances/index/new.hbs +11 -0
  232. package/addon/templates/maintenance/maintenances/index.hbs +14 -0
  233. package/addon/templates/maintenance/maintenances.hbs +1 -0
  234. package/addon/templates/maintenance/parts/index/details/index.hbs +1 -2
  235. package/addon/templates/maintenance/parts/index/details.hbs +15 -2
  236. package/addon/templates/maintenance/parts/index/edit.hbs +12 -2
  237. package/addon/templates/maintenance/parts/index/new.hbs +1 -2
  238. package/addon/templates/maintenance/parts/index.hbs +48 -13
  239. package/addon/templates/maintenance/parts.hbs +0 -1
  240. package/addon/templates/maintenance/schedules/index/details/index.hbs +1 -0
  241. package/addon/templates/maintenance/schedules/index/details/work-orders.hbs +39 -0
  242. package/addon/templates/maintenance/schedules/index/details.hbs +14 -0
  243. package/addon/templates/maintenance/schedules/index/edit.hbs +12 -0
  244. package/addon/templates/maintenance/schedules/index/new.hbs +11 -0
  245. package/addon/templates/maintenance/schedules/index.hbs +40 -0
  246. package/addon/templates/maintenance/schedules.hbs +1 -0
  247. package/addon/templates/maintenance/work-orders/index/details.hbs +2 -1
  248. package/addon/templates/maintenance/work-orders/index/edit.hbs +2 -4
  249. package/addon/templates/maintenance/work-orders/index/new.hbs +1 -2
  250. package/addon/templates/maintenance/work-orders.hbs +0 -1
  251. package/addon/templates/management/contacts/customers/edit.hbs +1 -2
  252. package/addon/templates/management/contacts/customers/new.hbs +1 -2
  253. package/addon/templates/management/contacts/customers.hbs +1 -1
  254. package/addon/templates/management/contacts/index/edit.hbs +1 -2
  255. package/addon/templates/management/contacts/index/new.hbs +1 -2
  256. package/addon/templates/management/drivers/index/details/orders.hbs +0 -1
  257. package/addon/templates/management/drivers/index/edit.hbs +1 -2
  258. package/addon/templates/management/drivers/index/new.hbs +1 -2
  259. package/addon/templates/management/fleets/index/edit.hbs +1 -2
  260. package/addon/templates/management/fleets/index/new.hbs +1 -2
  261. package/addon/templates/management/fleets/index.hbs +1 -2
  262. package/addon/templates/management/fuel-reports/index/edit.hbs +1 -2
  263. package/addon/templates/management/fuel-reports/index/new.hbs +1 -2
  264. package/addon/templates/management/fuel-reports/index.hbs +1 -2
  265. package/addon/templates/management/issues/index/edit.hbs +1 -2
  266. package/addon/templates/management/issues/index/new.hbs +1 -2
  267. package/addon/templates/management/issues/index.hbs +1 -2
  268. package/addon/templates/management/places/index/details/activity.hbs +0 -1
  269. package/addon/templates/management/places/index/details/comments.hbs +0 -1
  270. package/addon/templates/management/places/index/details/documents.hbs +0 -1
  271. package/addon/templates/management/places/index/details/map.hbs +0 -1
  272. package/addon/templates/management/places/index/details/operations.hbs +0 -1
  273. package/addon/templates/management/places/index/details/performance.hbs +0 -1
  274. package/addon/templates/management/places/index/details/rules.hbs +0 -1
  275. package/addon/templates/management/vehicles/index/details/equipment.hbs +0 -1
  276. package/addon/templates/management/vehicles/index/details/maintenance-history.hbs +2 -0
  277. package/addon/templates/management/vehicles/index/details/schedules.hbs +2 -0
  278. package/addon/templates/management/vehicles/index/details/work-orders.hbs +2 -0
  279. package/addon/templates/management/vehicles/index/details.hbs +1 -1
  280. package/addon/templates/management/vehicles/index/edit.hbs +1 -2
  281. package/addon/templates/management/vehicles/index/new.hbs +1 -2
  282. package/addon/templates/management/vendors/index/edit.hbs +1 -2
  283. package/addon/templates/management/vendors/index/new.hbs +1 -2
  284. package/addon/templates/management/vendors/index.hbs +1 -2
  285. package/addon/templates/management/vendors/integrated.hbs +1 -2
  286. package/addon/templates/operations/orchestrator.hbs +1 -0
  287. package/addon/templates/operations/orders/index.hbs +6 -1
  288. package/addon/templates/operations/scheduler/fleet-schedule.hbs +41 -0
  289. package/addon/templates/operations/scheduler/index.hbs +147 -88
  290. package/addon/templates/operations/scheduler.hbs +7 -1
  291. package/addon/templates/settings/avatars.hbs +1 -1
  292. package/addon/templates/settings/orchestrator.hbs +65 -0
  293. package/addon/templates/settings/payments/index.hbs +1 -5
  294. package/addon/templates/settings/scheduling.hbs +82 -0
  295. package/addon/utils/create-full-calendar-event-from-order.js +52 -14
  296. package/addon/utils/create-full-calendar-event-from-schedule-item.js +50 -0
  297. package/addon/utils/fleet-ops-options.js +254 -0
  298. package/addon/utils/route-colors.js +99 -0
  299. package/addon/utils/to-calendar-date.js +70 -0
  300. package/app/components/driver/schedule.js +1 -0
  301. package/app/components/maintenance/cost-panel.js +1 -0
  302. package/app/components/maintenance/panel-header.js +1 -0
  303. package/app/components/maintenance-schedule/details.js +1 -0
  304. package/app/components/maintenance-schedule/form.js +1 -0
  305. package/app/components/modals/add-driver-shift.js +1 -0
  306. package/app/components/modals/bulk-assign-orders.js +1 -0
  307. package/app/components/modals/driver-shift.js +1 -0
  308. package/app/components/modals/orchestrator-import.js +1 -0
  309. package/app/components/modals/scheduling-conflict.js +1 -0
  310. package/app/components/modals/send-work-order.js +1 -0
  311. package/app/components/modals/set-driver-availability.js +1 -0
  312. package/app/components/orchestrator/card-fields-settings.js +1 -0
  313. package/app/components/orchestrator/order-pool.js +1 -0
  314. package/app/components/orchestrator/phase-builder.js +1 -0
  315. package/app/components/orchestrator/plan-viewer.js +1 -0
  316. package/app/components/orchestrator/resource-panel.js +1 -0
  317. package/app/components/orchestrator-workbench.js +1 -0
  318. package/app/components/vehicle/details/maintenance-history.js +1 -0
  319. package/app/components/vehicle/details/schedules.js +1 -0
  320. package/app/components/vehicle/details/work-orders.js +1 -0
  321. package/app/controllers/operations/orchestrator.js +1 -0
  322. package/app/controllers/settings/orchestrator.js +1 -0
  323. package/app/controllers/settings/scheduling.js +1 -0
  324. package/app/routes/operations/orchestrator.js +1 -0
  325. package/app/routes/settings/orchestrator.js +1 -0
  326. package/app/routes/settings/scheduling.js +1 -0
  327. package/app/services/maintenance-schedule-actions.js +1 -0
  328. package/app/services/orchestration-engine-interface.js +1 -0
  329. package/app/services/orchestration-engine.js +1 -0
  330. package/app/services/order-allocation.js +1 -0
  331. package/app/services/scheduling.js +1 -0
  332. package/app/services/vroom-allocation-engine.js +1 -0
  333. package/app/templates/settings/scheduling.js +1 -0
  334. package/app/utils/create-full-calendar-event-from-schedule-item.js +1 -0
  335. package/app/utils/route-colors.js +1 -0
  336. package/composer.json +4 -2
  337. package/extension.json +1 -1
  338. package/package.json +6 -5
  339. package/server/config/fleetops.php +20 -1
  340. package/server/migrations/2025_08_28_054927_create_parts_table.php +2 -2
  341. package/server/migrations/2025_08_28_054932_add_public_id_to_maintenance_tables.php +45 -0
  342. package/server/migrations/2025_09_01_000001_create_maintenance_schedules_table.php +88 -0
  343. package/server/migrations/2026_04_01_000001_fix_monetary_columns_in_parts_table.php +48 -0
  344. package/server/migrations/2026_04_01_000003_add_photo_uuid_to_equipment_and_parts_tables.php +61 -0
  345. package/server/migrations/2026_04_01_000004_add_public_id_to_equipments_table.php +38 -0
  346. package/server/migrations/2026_04_01_000005_add_missing_columns_to_parts_table.php +67 -0
  347. package/server/migrations/2026_04_04_000001_add_reminder_offsets_to_maintenance_schedules.php +44 -0
  348. package/server/migrations/2026_04_08_000001_add_orchestrator_columns_to_vehicles_table.php +53 -0
  349. package/server/migrations/2026_04_08_000002_add_orchestrator_columns_to_drivers_table.php +41 -0
  350. package/server/migrations/2026_04_08_000003_add_orchestrator_columns_to_orders_table.php +38 -0
  351. package/server/migrations/2026_04_08_000004_add_orchestrator_columns_to_payloads_table.php +38 -0
  352. package/server/migrations/2026_04_08_000005_add_orchestrator_columns_to_waypoints_table.php +38 -0
  353. package/server/migrations/2026_04_09_000001_create_manifests_table.php +48 -0
  354. package/server/migrations/2026_04_09_000002_create_manifest_stops_table.php +48 -0
  355. package/server/migrations/2026_04_09_000003_add_manifest_uuid_to_orders_table.php +28 -0
  356. package/server/migrations/2026_04_13_000001_add_pod_notes_columns_to_waypoints_table.php +39 -0
  357. package/server/migrations/2026_04_14_000001_drop_redundant_capacity_columns_from_payloads_table.php +42 -0
  358. package/server/migrations/2026_04_14_000002_rename_capacity_columns_on_vehicles_table.php +48 -0
  359. package/server/resources/views/mail/maintenance-schedule-reminder.blade.php +59 -0
  360. package/server/resources/views/mail/work-order-dispatched.blade.php +67 -0
  361. package/server/src/Auth/Schemas/FleetOps.php +44 -0
  362. package/server/src/Console/Commands/ProcessMaintenanceTriggers.php +150 -0
  363. package/server/src/Console/Commands/SendMaintenanceReminders.php +128 -0
  364. package/server/src/Http/Controllers/Api/v1/OrderController.php +15 -2
  365. package/server/src/Http/Controllers/Api/v1/VehicleController.php +18 -2
  366. package/server/src/Http/Controllers/Internal/v1/DriverController.php +1 -0
  367. package/server/src/Http/Controllers/Internal/v1/EquipmentController.php +27 -0
  368. package/server/src/Http/Controllers/Internal/v1/LiveController.php +9 -2
  369. package/server/src/Http/Controllers/Internal/v1/MaintenanceController.php +165 -0
  370. package/server/src/Http/Controllers/Internal/v1/MaintenanceScheduleController.php +304 -0
  371. package/server/src/Http/Controllers/Internal/v1/ManifestController.php +138 -0
  372. package/server/src/Http/Controllers/Internal/v1/OrchestrationController.php +975 -0
  373. package/server/src/Http/Controllers/Internal/v1/OrderController.php +42 -0
  374. package/server/src/Http/Controllers/Internal/v1/PartController.php +27 -0
  375. package/server/src/Http/Controllers/Internal/v1/SettingController.php +118 -0
  376. package/server/src/Http/Controllers/Internal/v1/Traits/DriverSchedulingTrait.php +214 -0
  377. package/server/src/Http/Controllers/Internal/v1/WorkOrderController.php +68 -0
  378. package/server/src/Http/Resources/v1/Driver.php +1 -0
  379. package/server/src/Http/Resources/v1/Maintenance.php +138 -0
  380. package/server/src/Http/Resources/v1/MaintenanceSchedule.php +137 -0
  381. package/server/src/Http/Resources/v1/Orchestrator/Order.php +116 -0
  382. package/server/src/Http/Resources/v1/Order.php +7 -4
  383. package/server/src/Http/Resources/v1/Waypoint.php +7 -0
  384. package/server/src/Http/Resources/v1/WorkOrder.php +136 -0
  385. package/server/src/Imports/EquipmentImport.php +32 -0
  386. package/server/src/Imports/MaintenanceImport.php +32 -0
  387. package/server/src/Imports/MaintenanceScheduleImport.php +32 -0
  388. package/server/src/Imports/PartImport.php +32 -0
  389. package/server/src/Imports/WorkOrderImport.php +32 -0
  390. package/server/src/Jobs/ProcessAllocationJob.php +119 -0
  391. package/server/src/Listeners/HandleDeliveryCompletion.php +47 -0
  392. package/server/src/Listeners/NotifyDriverOnShiftChange.php +63 -0
  393. package/server/src/Mail/MaintenanceScheduleReminder.php +68 -0
  394. package/server/src/Mail/WorkOrderDispatched.php +58 -0
  395. package/server/src/Models/Asset.php +2 -2
  396. package/server/src/Models/Device.php +1 -1
  397. package/server/src/Models/Driver.php +82 -4
  398. package/server/src/Models/Equipment.php +62 -2
  399. package/server/src/Models/Maintenance.php +127 -9
  400. package/server/src/Models/MaintenanceSchedule.php +353 -0
  401. package/server/src/Models/Manifest.php +214 -0
  402. package/server/src/Models/ManifestStop.php +162 -0
  403. package/server/src/Models/Order.php +70 -0
  404. package/server/src/Models/OrderConfig.php +5 -2
  405. package/server/src/Models/Part.php +69 -3
  406. package/server/src/Models/Place.php +1 -1
  407. package/server/src/Models/Sensor.php +1 -1
  408. package/server/src/Models/ServiceQuote.php +1 -1
  409. package/server/src/Models/Vehicle.php +18 -1
  410. package/server/src/Models/Warranty.php +1 -1
  411. package/server/src/Models/Waypoint.php +7 -1
  412. package/server/src/Models/WorkOrder.php +122 -12
  413. package/server/src/Notifications/DriverShiftChanged.php +110 -0
  414. package/server/src/Observers/WorkOrderObserver.php +107 -0
  415. package/server/src/Orchestration/Contracts/OrchestrationEngineInterface.php +63 -0
  416. package/server/src/Orchestration/Engines/DriverAssignmentEngine.php +265 -0
  417. package/server/src/Orchestration/Engines/GreedyOrchestrationEngine.php +155 -0
  418. package/server/src/Orchestration/Engines/RouteSequencingEngine.php +272 -0
  419. package/server/src/Orchestration/Engines/VroomOrchestrationEngine.php +192 -0
  420. package/server/src/Orchestration/OrchestrationEngineRegistry.php +83 -0
  421. package/server/src/Orchestration/Support/OrchestrationPayloadBuilder.php +380 -0
  422. package/server/src/Providers/EventServiceProvider.php +7 -1
  423. package/server/src/Providers/FleetOpsServiceProvider.php +42 -15
  424. package/server/src/routes.php +65 -4
  425. package/translations/ar-ae.yml +44 -12
  426. package/translations/bg-bg.yaml +51 -10
  427. package/translations/en-us.yaml +444 -1
  428. package/translations/fr-fr.yaml +51 -10
  429. package/translations/mn-mn.yaml +51 -10
  430. package/translations/pt-br.yaml +51 -10
  431. package/translations/ru-ru.yaml +51 -10
  432. package/translations/vi-vn.yaml +48 -12
@@ -1,9 +1,5 @@
1
1
  <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
2
  <div class="modal-body-container">
3
- <InputGroup
4
- @name={{t "modals.order-config-new-status.new-status"}}
5
- @value={{@options.statusName}}
6
- @helpText={{t "modals.order-config-new-status.status-text"}}
7
- />
3
+ <InputGroup @name={{t "modals.order-config-new-status.new-status"}} @value={{@options.statusName}} @helpText={{t "modals.order-config-new-status.status-text"}} />
8
4
  </div>
9
5
  </Modal::Default>
@@ -0,0 +1,47 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ <div class="grid grid-cols-1 gap-4 text-xs dark:text-gray-100">
4
+
5
+ {{! ── Warning banner ─────────────────────────────────────────────── }}
6
+ <div class="flex items-start gap-3 rounded-lg bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-300 dark:border-yellow-700 px-3 py-3">
7
+ <FaIcon @icon="triangle-exclamation" class="text-yellow-500 mt-0.5 flex-shrink-0" />
8
+ <p class="text-yellow-800 dark:text-yellow-200 leading-relaxed">
9
+ {{t "scheduler.conflict-description" driverName=@options.driver.name orderTracking=@options.order.tracking}}
10
+ </p>
11
+ </div>
12
+
13
+ {{! ── Conflicting events list ─────────────────────────────────────── }}
14
+ <div class="rounded-md border border-yellow-200 dark:border-yellow-700 overflow-hidden">
15
+ <div class="bg-yellow-50 dark:bg-yellow-900/20 px-3 py-2 font-semibold text-yellow-800 dark:text-yellow-300 uppercase tracking-wide">
16
+ {{t "scheduler.conflicting-orders"}}
17
+ </div>
18
+ <div class="divide-y divide-gray-200 dark:divide-gray-700">
19
+ {{#each @options.conflicts as |conflict|}}
20
+ <div class="flex items-center justify-between px-3 py-2">
21
+ <div class="flex items-center gap-2">
22
+ <FaIcon @icon="box" class="text-gray-400" />
23
+ <span class="font-medium">{{conflict.tracking}}</span>
24
+ </div>
25
+ <span class="text-gray-500 dark:text-gray-400">
26
+ {{conflict.scheduledAtTime}}
27
+ </span>
28
+ </div>
29
+ {{/each}}
30
+ </div>
31
+ </div>
32
+
33
+ {{! ── Resolution prompt ───────────────────────────────────────────── }}
34
+ <p class="text-gray-600 dark:text-gray-400">
35
+ {{t "scheduler.conflict-resolution-prompt"}}
36
+ </p>
37
+
38
+ {{! ── Resolution buttons ──────────────────────────────────────────── }}
39
+ <div class="flex items-center gap-2 justify-end">
40
+ <Button @type="default" @text={{t "common.cancel"}} @icon="times" @size="sm" @onClick={{@onDecline}} />
41
+ <Button @type="default" @text={{t "scheduler.auto-adjust"}} @icon="wand-magic-sparkles" @size="sm" @isLoading={{@options.isLoading}} @onClick={{this.autoAdjust}} />
42
+ <Button @type="danger" @text={{t "scheduler.assign-anyway"}} @icon="triangle-exclamation" @size="sm" @isLoading={{@options.isLoading}} @onClick={{this.assignAnyway}} />
43
+ </div>
44
+
45
+ </div>
46
+ </div>
47
+ </Modal::Default>
@@ -0,0 +1,53 @@
1
+ import Component from '@glimmer/component';
2
+ import { action } from '@ember/object';
3
+ import { inject as service } from '@ember/service';
4
+
5
+ /**
6
+ * Modals::SchedulingConflict
7
+ *
8
+ * Surfaces a scheduling conflict when an order is dragged onto a driver row
9
+ * that already has an overlapping event. Provides three resolution paths:
10
+ *
11
+ * 1. Cancel — close the modal, leave the order unscheduled
12
+ * 2. Auto-Adjust — call @options.autoAdjust to find the next available slot
13
+ * 3. Assign Anyway — call @options.assignAnyway to force the assignment
14
+ *
15
+ * Options accepted (set via modalsManager.show):
16
+ * - order {Order} The order being scheduled
17
+ * - driver {Driver} The target driver
18
+ * - conflicts {Array} Existing events that overlap the requested slot
19
+ * - scheduledAt {Date} The originally requested start time
20
+ * - autoAdjust {Function} (modalsManager, done) => Promise
21
+ * - assignAnyway {Function} (modalsManager, done) => Promise
22
+ */
23
+ export default class ModalsSchedulingConflictComponent extends Component {
24
+ @service modalsManager;
25
+
26
+ /**
27
+ * Trigger the auto-adjust resolution path.
28
+ * Calls @options.autoAdjust(modalsManager, done) so the controller can
29
+ * start loading, find the best-fit slot, assign, and close the modal.
30
+ */
31
+ @action
32
+ autoAdjust() {
33
+ const { autoAdjust } = this.args.options;
34
+ if (typeof autoAdjust === 'function') {
35
+ const done = () => this.modalsManager.done();
36
+ autoAdjust(this.modalsManager, done);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Trigger the assign-anyway resolution path.
42
+ * Calls @options.assignAnyway(modalsManager, done) so the controller can
43
+ * skip the conflict check and force the assignment.
44
+ */
45
+ @action
46
+ assignAnyway() {
47
+ const { assignAnyway } = this.args.options;
48
+ if (typeof assignAnyway === 'function') {
49
+ const done = () => this.modalsManager.done();
50
+ assignAnyway(this.modalsManager, done);
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,91 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ <div class="text-sm text-gray-600 dark:text-gray-400 mb-4">
4
+ Review the details below before sending. The work order will be emailed to the assigned vendor.
5
+ </div>
6
+
7
+ {{! ── Work Order details ── }}
8
+ <div class="rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden mb-4">
9
+ <div class="bg-gray-50 dark:bg-gray-800 px-3 py-2 border-b border-gray-200 dark:border-gray-700">
10
+ <span class="text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Work Order</span>
11
+ </div>
12
+ <div class="px-3 py-3 space-y-2">
13
+ <div class="flex items-start justify-between gap-4">
14
+ <span class="text-xs text-gray-500 dark:text-gray-400 shrink-0 w-20">Subject</span>
15
+ <span class="text-xs font-medium text-gray-800 dark:text-gray-100 text-right">
16
+ {{n-a (or @options.workOrder.subject @options.workOrder.target_name)}}
17
+ </span>
18
+ </div>
19
+ <div class="flex items-start justify-between gap-4">
20
+ <span class="text-xs text-gray-500 dark:text-gray-400 shrink-0 w-20">ID</span>
21
+ <span class="text-xs font-mono text-gray-600 dark:text-gray-300 text-right">
22
+ {{n-a @options.workOrder.public_id}}
23
+ </span>
24
+ </div>
25
+ <div class="flex items-start justify-between gap-4">
26
+ <span class="text-xs text-gray-500 dark:text-gray-400 shrink-0 w-20">Status</span>
27
+ <span class="text-xs text-right">
28
+ <Badge @status={{@options.workOrder.status}}>{{smart-humanize @options.workOrder.status}}</Badge>
29
+ </span>
30
+ </div>
31
+ {{#if @options.workOrder.due_at}}
32
+ <div class="flex items-start justify-between gap-4">
33
+ <span class="text-xs text-gray-500 dark:text-gray-400 shrink-0 w-20">Due</span>
34
+ <span class="text-xs text-gray-600 dark:text-gray-300 text-right">
35
+ {{format-date-fns @options.workOrder.due_at}}
36
+ </span>
37
+ </div>
38
+ {{/if}}
39
+ </div>
40
+ </div>
41
+
42
+ {{! ── Recipient (vendor) details ── }}
43
+ <div class="rounded-lg border border-gray-200 dark:border-gray-700 overflow-hidden">
44
+ <div class="bg-gray-50 dark:bg-gray-800 px-3 py-2 border-b border-gray-200 dark:border-gray-700">
45
+ <span class="text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">Recipient</span>
46
+ </div>
47
+ {{#if @options.vendorName}}
48
+ <div class="px-3 py-3 space-y-2">
49
+ <div class="flex items-center gap-3">
50
+ <div class="flex-shrink-0 w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center">
51
+ <FaIcon @icon="building" class="text-blue-500 dark:text-blue-300 text-xs" />
52
+ </div>
53
+ <div class="flex-1 min-w-0">
54
+ <div class="text-sm font-medium text-gray-800 dark:text-gray-100 truncate">
55
+ {{@options.vendorName}}
56
+ </div>
57
+ {{#if @options.vendorEmail}}
58
+ <div class="text-xs text-gray-500 dark:text-gray-400 truncate flex items-center gap-1 mt-0.5">
59
+ <FaIcon @icon="envelope" class="text-gray-400 text-[10px]" />
60
+ {{@options.vendorEmail}}
61
+ </div>
62
+ {{/if}}
63
+ {{#if @options.vendorPhone}}
64
+ <div class="text-xs text-gray-500 dark:text-gray-400 truncate flex items-center gap-1 mt-0.5">
65
+ <FaIcon @icon="phone" class="text-gray-400 text-[10px]" />
66
+ {{@options.vendorPhone}}
67
+ </div>
68
+ {{/if}}
69
+ </div>
70
+ </div>
71
+ </div>
72
+ {{else}}
73
+ <div class="px-3 py-3">
74
+ <div class="flex items-center gap-2 text-amber-600 dark:text-amber-400">
75
+ <FaIcon @icon="triangle-exclamation" class="text-sm" />
76
+ <span class="text-xs">No vendor assigned to this work order.</span>
77
+ </div>
78
+ </div>
79
+ {{/if}}
80
+ </div>
81
+
82
+ {{#unless @options.vendorEmail}}
83
+ <div class="mt-3 flex items-start gap-2 p-3 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800">
84
+ <FaIcon @icon="circle-exclamation" class="text-red-500 dark:text-red-400 text-sm mt-0.5 shrink-0" />
85
+ <span class="text-xs text-red-700 dark:text-red-300">
86
+ The assigned vendor does not have an email address on file. Please update the vendor record before sending.
87
+ </span>
88
+ </div>
89
+ {{/unless}}
90
+ </div>
91
+ </Modal::Default>
@@ -0,0 +1,3 @@
1
+ import Component from '@glimmer/component';
2
+
3
+ export default class ModalsSendWorkOrderComponent extends Component {}
@@ -1,11 +1,6 @@
1
1
  <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
2
  <div class="modal-body-container">
3
- <InputGroup
4
- @value={{@options.serviceArea.name}}
5
- @name={{t "modals.service-area-form.name"}}
6
- @helpText={{t "modals.service-area-form.name-text"}}
7
- @required={{true}}
8
- />
3
+ <InputGroup @value={{@options.serviceArea.name}} @name={{t "modals.service-area-form.name"}} @helpText={{t "modals.service-area-form.name-text"}} @required={{true}} />
9
4
  <InputGroup @name={{t "modals.service-area-form.type"}} @helpText={{t "modals.service-area-form.type-text"}}>
10
5
  <Select
11
6
  @options={{@options.serviceAreaTypes}}
@@ -0,0 +1,50 @@
1
+ <Modal::Default @modalIsOpened={{@modalIsOpened}} @options={{@options}} @confirm={{@onConfirm}} @decline={{@onDecline}}>
2
+ <div class="modal-body-container">
3
+ <div class="grid grid-cols-1 gap-4 text-xs dark:text-gray-100">
4
+
5
+ {{! Availability type selection }}
6
+ <div class="input-group">
7
+ <label>{{t "scheduler.availability-type"}}</label>
8
+ <div class="flex gap-3 mt-1">
9
+ <button type="button" class="availability-type-btn {{if this.isAvailable 'is-selected-available' 'is-unselected'}}" {{on "click" (fn this.toggleAvailability true)}}>
10
+ <FaIcon @icon="circle-check" />
11
+ {{t "scheduler.available"}}
12
+ </button>
13
+ <button
14
+ type="button"
15
+ class="availability-type-btn {{unless this.isAvailable 'is-selected-unavailable' 'is-unselected'}}"
16
+ {{on "click" (fn this.toggleAvailability false)}}
17
+ >
18
+ <FaIcon @icon="circle-xmark" />
19
+ {{t "scheduler.unavailable-time-off"}}
20
+ </button>
21
+ </div>
22
+ </div>
23
+
24
+ {{! Date range }}
25
+ <div class="grid grid-cols-2 gap-4">
26
+ <div class="input-group">
27
+ <label>{{t "scheduler.start-date"}}</label>
28
+ <DateTimeInput @value={{@options.startAt}} @onChange={{this.updateStartAt}} placeholder={{t "scheduler.select-start-date"}} class="w-full form-input" />
29
+ </div>
30
+ <div class="input-group">
31
+ <label>{{t "scheduler.end-date"}}</label>
32
+ <DateTimeInput @value={{@options.endAt}} @onChange={{this.updateEndAt}} placeholder={{t "scheduler.select-end-date"}} class="w-full form-input" />
33
+ </div>
34
+ </div>
35
+
36
+ {{! Reason }}
37
+ <div class="input-group">
38
+ <label>{{t "scheduler.reason"}} <span class="text-gray-400">({{t "common.optional"}})</span></label>
39
+ <Input @value={{@options.reason}} @type="text" placeholder={{t "scheduler.reason-placeholder"}} class="w-full form-input" />
40
+ </div>
41
+
42
+ {{! Notes }}
43
+ <div class="input-group">
44
+ <label>{{t "common.notes"}}</label>
45
+ <Textarea @value={{@options.notes}} placeholder={{t "scheduler.notes-placeholder"}} class="w-full form-input" rows="3" />
46
+ </div>
47
+
48
+ </div>
49
+ </div>
50
+ </Modal::Default>
@@ -0,0 +1,57 @@
1
+ import Component from '@glimmer/component';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { action } from '@ember/object';
4
+
5
+ /**
6
+ * Modals::SetDriverAvailability
7
+ *
8
+ * Shared modal for both "Set Availability" (is_available=true) and
9
+ * "Request Time Off" (is_available=false) flows. The caller controls
10
+ * the initial value of `isAvailable` via modal options.
11
+ *
12
+ * Plain text/textarea inputs bind @value directly to @options — Ember's
13
+ * two-way binding keeps them in sync without manual update actions.
14
+ * DateTimeInput still uses @onChange because it emits a processed value.
15
+ *
16
+ * @example (from driver/schedule.js)
17
+ * this.modalsManager.show('modals/set-driver-availability', {
18
+ * isAvailable: false,
19
+ * confirm: async (modal) => { ... }
20
+ * });
21
+ */
22
+ export default class ModalsSetDriverAvailabilityComponent extends Component {
23
+ // isAvailable drives the button selection UI — must stay tracked
24
+ @tracked isAvailable = true;
25
+
26
+ constructor() {
27
+ super(...arguments);
28
+ const opts = this.args.options;
29
+
30
+ // Seed all fields onto @options so the template can bind @value directly
31
+ // and the confirm callback reads them back without any sync actions.
32
+ opts.startAt = opts.startAt ?? null;
33
+ opts.endAt = opts.endAt ?? null;
34
+ opts.reason = opts.reason ?? '';
35
+ opts.notes = opts.notes ?? '';
36
+
37
+ this.isAvailable = opts.isAvailable ?? true;
38
+ opts.isAvailable = this.isAvailable;
39
+ }
40
+
41
+ // DateTimeInput emits a processed value — needs @onChange
42
+ @action
43
+ updateStartAt(value) {
44
+ this.args.options.startAt = value;
45
+ }
46
+
47
+ @action
48
+ updateEndAt(value) {
49
+ this.args.options.endAt = value;
50
+ }
51
+
52
+ @action
53
+ toggleAvailability(value) {
54
+ this.isAvailable = value;
55
+ this.args.options.isAvailable = value;
56
+ }
57
+ }
@@ -42,13 +42,7 @@
42
42
  {{activity.details}}
43
43
 
44
44
  {{#if (eq activity.code "dispatched")}}
45
- <InfoBlock
46
- @type="warning"
47
- @size="xs"
48
- @icon="exclamation-triangle"
49
- @text={{t "modals.order-new-activity.dispatch"}}
50
- class="mt-1"
51
- />
45
+ <InfoBlock @type="warning" @size="xs" @icon="exclamation-triangle" @text={{t "modals.order-new-activity.dispatch"}} class="mt-1" />
52
46
  {{/if}}
53
47
  </span>
54
48
  </label>
@@ -72,10 +66,20 @@
72
66
  <label for="activity_custom" class="ml-3 flex flex-col cursor-pointer w-full pr-5">
73
67
  <div class="font-semibold text-sm mb-1">Add custom activity</div>
74
68
  <span class="block text-sm font-medium">
75
- <Input @type="text" @value={{this.customActivity.status}} class="form-input form-input-sm w-full rounded-b-none" placeholder={{t "modals.order-new-activity.status"}} />
69
+ <Input
70
+ @type="text"
71
+ @value={{this.customActivity.status}}
72
+ class="form-input form-input-sm w-full rounded-b-none"
73
+ placeholder={{t "modals.order-new-activity.status"}}
74
+ />
76
75
  </span>
77
76
  <span class="block text-sm">
78
- <Input @type="text" @value={{this.customActivity.details}} class="form-input form-input-sm w-full rounded-t-none" placeholder={{t "modals.order-new-activity.details"}} />
77
+ <Input
78
+ @type="text"
79
+ @value={{this.customActivity.details}}
80
+ class="form-input form-input-sm w-full rounded-t-none"
81
+ placeholder={{t "modals.order-new-activity.details"}}
82
+ />
79
83
  </span>
80
84
  </label>
81
85
  <div>
@@ -46,11 +46,7 @@
46
46
  <label>
47
47
  {{t "common.country"}}
48
48
  </label>
49
- <CountrySelect
50
- class="w-full form-input form-select form-datalist"
51
- @value={{@options.user.country}}
52
- @onChange={{fn (mut @options.user.country)}}
53
- />
49
+ <CountrySelect class="w-full form-input form-select form-datalist" @value={{@options.user.country}} @onChange={{fn (mut @options.user.country)}} />
54
50
  </div>
55
51
  </div>
56
52
  </div>
@@ -105,12 +105,7 @@
105
105
  <label>
106
106
  {{t "modals.vehicle-details.acceleration"}}
107
107
  </label>
108
- <Input
109
- @value={{@options.vehicle.model_0_to_100_kph}}
110
- @type="text"
111
- class="w-full form-input"
112
- placeholder={{t "modals.vehicle-details.acceleration"}}
113
- />
108
+ <Input @value={{@options.vehicle.model_0_to_100_kph}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-details.acceleration"}} />
114
109
  </div>
115
110
 
116
111
  <div class="input-group mb-2">
@@ -152,24 +147,14 @@
152
147
  <label>
153
148
  {{t "modals.vehicle-details.top-speed"}}
154
149
  </label>
155
- <Input
156
- @value={{@options.vehicle.model_top_speed_kph}}
157
- @type="text"
158
- class="w-full form-input"
159
- placeholder={{t "modals.vehicle-form.top-speed"}}
160
- />
150
+ <Input @value={{@options.vehicle.model_top_speed_kph}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.top-speed"}} />
161
151
  </div>
162
152
 
163
153
  <div class="input-group mb-2">
164
154
  <label>
165
155
  {{t "modals.vehicle-details.transmission"}}
166
156
  </label>
167
- <Input
168
- @value={{@options.vehicle.model_transmission_type}}
169
- @type="text"
170
- class="w-full form-input"
171
- placeholder={{t "modals.vehicle-form.transmission"}}
172
- />
157
+ <Input @value={{@options.vehicle.model_transmission_type}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.transmission"}} />
173
158
  </div>
174
159
 
175
160
  <div class="input-group mb-2">
@@ -183,12 +168,7 @@
183
168
  <label>
184
169
  {{t "modals.vehicle-details.wheelbase"}}
185
170
  </label>
186
- <Input
187
- @value={{@options.vehicle.model_wheelbase_mm}}
188
- @type="text"
189
- class="w-full form-input"
190
- placeholder={{t "modals.vehicle-form.wheelbase"}}
191
- />
171
+ <Input @value={{@options.vehicle.model_wheelbase_mm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.wheelbase"}} />
192
172
  </div>
193
173
 
194
174
  <div class="input-group mb-2">
@@ -206,12 +186,7 @@
206
186
  <label>
207
187
  {{t "modals.vehicle-details.engine-bore"}}
208
188
  </label>
209
- <Input
210
- @value={{@options.vehicle.model_engine_bore_mm}}
211
- @type="text"
212
- class="w-full form-input"
213
- placeholder={{t "modals.vehicle-form.engine-bore"}}
214
- />
189
+ <Input @value={{@options.vehicle.model_engine_bore_mm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.engine-bore"}} />
215
190
  </div>
216
191
 
217
192
  <div class="input-group mb-2">
@@ -225,12 +200,7 @@
225
200
  <label>
226
201
  {{t "modals.vehicle-details.compression"}}
227
202
  </label>
228
- <Input
229
- @value={{@options.vehicle.model_engine_compression}}
230
- @type="text"
231
- class="w-full form-input"
232
- placeholder={{t "modals.vehicle-form.compression"}}
233
- />
203
+ <Input @value={{@options.vehicle.model_engine_compression}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.compression"}} />
234
204
  </div>
235
205
 
236
206
  <div class="input-group mb-2">
@@ -244,84 +214,49 @@
244
214
  <label>
245
215
  {{t "modals.vehicle-details.position"}}
246
216
  </label>
247
- <Input
248
- @value={{@options.vehicle.model_engine_position}}
249
- @type="text"
250
- class="w-full form-input"
251
- placeholder={{t "modals.vehicle-form.position"}}
252
- />
217
+ <Input @value={{@options.vehicle.model_engine_position}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.position"}} />
253
218
  </div>
254
219
 
255
220
  <div class="input-group mb-2">
256
221
  <label>
257
222
  {{t "modals.vehicle-details.power-ps"}}
258
223
  </label>
259
- <Input
260
- @value={{@options.vehicle.model_engine_power_ps}}
261
- @type="text"
262
- class="w-full form-input"
263
- placeholder={{t "modals.vehicle-form.power-ps"}}
264
- />
224
+ <Input @value={{@options.vehicle.model_engine_power_ps}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.power-ps"}} />
265
225
  </div>
266
226
 
267
227
  <div class="input-group mb-2">
268
228
  <label>
269
229
  {{t "modals.vehicle-details.power-rpm"}}
270
230
  </label>
271
- <Input
272
- @value={{@options.vehicle.model_engine_power_rpm}}
273
- @type="text"
274
- class="w-full form-input"
275
- placeholder={{t "modals.vehicle-form.power-rpm"}}
276
- />
231
+ <Input @value={{@options.vehicle.model_engine_power_rpm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.power-rpm"}} />
277
232
  </div>
278
233
 
279
234
  <div class="input-group mb-2">
280
235
  <label>
281
236
  {{t "modals.vehicle-details.stroke"}}
282
237
  </label>
283
- <Input
284
- @value={{@options.vehicle.model_engine_stroke_mm}}
285
- @type="text"
286
- class="w-full form-input"
287
- placeholder={{t "modals.vehicle-form.stroke"}}
288
- />
238
+ <Input @value={{@options.vehicle.model_engine_stroke_mm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.stroke"}} />
289
239
  </div>
290
240
 
291
241
  <div class="input-group mb-2">
292
242
  <label>
293
243
  {{t "modals.vehicle-details.torque-nm"}}
294
244
  </label>
295
- <Input
296
- @value={{@options.vehicle.model_engine_torque_nm}}
297
- @type="text"
298
- class="w-full form-input"
299
- placeholder={{t "modals.vehicle-form.torque-nm"}}
300
- />
245
+ <Input @value={{@options.vehicle.model_engine_torque_nm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.torque-nm"}} />
301
246
  </div>
302
247
 
303
248
  <div class="input-group mb-2">
304
249
  <label>
305
250
  {{t "modals.vehicle-details.torque-rpm"}}
306
251
  </label>
307
- <Input
308
- @value={{@options.vehicle.model_engine_torque_rpm}}
309
- @type="text"
310
- class="w-full form-input"
311
- placeholder={{t "modals.vehicle-form.torque-rpm"}}
312
- />
252
+ <Input @value={{@options.vehicle.model_engine_torque_rpm}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.torque-rpm"}} />
313
253
  </div>
314
254
 
315
255
  <div class="input-group mb-2">
316
256
  <label>
317
257
  {{t "modals.vehicle-details.valves"}}
318
258
  </label>
319
- <Input
320
- @value={{@options.vehicle.model_engine_valves_per_cyl}}
321
- @type="text"
322
- class="w-full form-input"
323
- placeholder={{t "modals.vehicle-details.valves"}}
324
- />
259
+ <Input @value={{@options.vehicle.model_engine_valves_per_cyl}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-details.valves"}} />
325
260
  </div>
326
261
  </div>
327
262
  </ContentPanel>
@@ -332,12 +267,7 @@
332
267
  <label>
333
268
  {{t "modals.vehicle-details.fuel"}}
334
269
  </label>
335
- <Input
336
- @value={{@options.vehicle.model_engine_fuel}}
337
- @type="text"
338
- class="w-full form-input"
339
- placeholder={{t "modals.vehicle-form.fuel-type"}}
340
- />
270
+ <Input @value={{@options.vehicle.model_engine_fuel}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-form.fuel-type"}} />
341
271
  </div>
342
272
 
343
273
  <div class="input-group mb-2">
@@ -351,36 +281,21 @@
351
281
  <label>
352
282
  {{t "modals.vehicle-details.liters-city"}}
353
283
  </label>
354
- <Input
355
- @value={{@options.vehicle.model_lkm_city}}
356
- @type="text"
357
- class="w-full form-input"
358
- placeholder={{t "modals.vehicle-details.liters-city"}}
359
- />
284
+ <Input @value={{@options.vehicle.model_lkm_city}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-details.liters-city"}} />
360
285
  </div>
361
286
 
362
287
  <div class="input-group mb-2">
363
288
  <label>
364
289
  {{t "modals.vehicle-details.liters-highway"}}
365
290
  </label>
366
- <Input
367
- @value={{@options.vehicle.model_lkm_hwy}}
368
- @type="text"
369
- class="w-full form-input"
370
- placeholder={{t "modals.vehicle-details.liters-highway"}}
371
- />
291
+ <Input @value={{@options.vehicle.model_lkm_hwy}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-details.liters-highway"}} />
372
292
  </div>
373
293
 
374
294
  <div class="input-group mb-2">
375
295
  <label>
376
296
  {{t "modals.vehicle-details.liters-mixed"}}
377
297
  </label>
378
- <Input
379
- @value={{@options.vehicle.model_lkm_mixed}}
380
- @type="text"
381
- class="w-full form-input"
382
- placeholder={{t "modals.vehicle-details.liters-mixed"}}
383
- />
298
+ <Input @value={{@options.vehicle.model_lkm_mixed}} @type="text" class="w-full form-input" placeholder={{t "modals.vehicle-details.liters-mixed"}} />
384
299
  </div>
385
300
  </div>
386
301
  </ContentPanel>