@fleetbase/fleetops-engine 0.0.1

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 (446) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +32 -0
  3. package/addon/components/cell/driver-name.hbs +13 -0
  4. package/addon/components/cell/driver-name.js +30 -0
  5. package/addon/components/custom-field-value.hbs +11 -0
  6. package/addon/components/custom-field-value.js +41 -0
  7. package/addon/components/custom-field.hbs +42 -0
  8. package/addon/components/custom-field.js +46 -0
  9. package/addon/components/display-place.hbs +52 -0
  10. package/addon/components/display-place.js +11 -0
  11. package/addon/components/driver-card-mini.hbs +12 -0
  12. package/addon/components/driver-card-mini.js +25 -0
  13. package/addon/components/driver-card.hbs +27 -0
  14. package/addon/components/driver-card.js +14 -0
  15. package/addon/components/event-timeline/event.hbs +5 -0
  16. package/addon/components/event-timeline.hbs +7 -0
  17. package/addon/components/event-timeline.js +423 -0
  18. package/addon/components/file-icon.js +1 -0
  19. package/addon/components/fleet-driver-listing.hbs +73 -0
  20. package/addon/components/fleet-driver-listing.js +117 -0
  21. package/addon/components/full-calendar/draggable.js +1 -0
  22. package/addon/components/full-calendar.js +1 -0
  23. package/addon/components/full-size.js +1 -0
  24. package/addon/components/global-search.hbs +84 -0
  25. package/addon/components/global-search.js +52 -0
  26. package/addon/components/horizontal-route.hbs +33 -0
  27. package/addon/components/horizontal-route.js +48 -0
  28. package/addon/components/integrated-order-details.hbs +117 -0
  29. package/addon/components/integrated-order-details.js +10 -0
  30. package/addon/components/leaflet-draw-control.js +147 -0
  31. package/addon/components/leaflet-rotated-marker.js +24 -0
  32. package/addon/components/live-map.hbs +63 -0
  33. package/addon/components/live-map.js +856 -0
  34. package/addon/components/map-container/toolbar/zones-panel.hbs +41 -0
  35. package/addon/components/map-container/toolbar/zones-panel.js +106 -0
  36. package/addon/components/map-container/toolbar-container.hbs +1 -0
  37. package/addon/components/map-container/toolbar-container.js +3 -0
  38. package/addon/components/map-container/toolbar.hbs +51 -0
  39. package/addon/components/map-container/toolbar.js +34 -0
  40. package/addon/components/map-container/topbar.hbs +1 -0
  41. package/addon/components/map-container/topbar.js +3 -0
  42. package/addon/components/map-container/view-switch.hbs +1 -0
  43. package/addon/components/map-container/view-switch.js +3 -0
  44. package/addon/components/map-container.hbs +1 -0
  45. package/addon/components/map-container.js +15 -0
  46. package/addon/components/modals/assign-driver.hbs +24 -0
  47. package/addon/components/modals/assign-driver.js +3 -0
  48. package/addon/components/modals/clone-config-form.hbs +6 -0
  49. package/addon/components/modals/contact-details.hbs +44 -0
  50. package/addon/components/modals/contact-form.hbs +56 -0
  51. package/addon/components/modals/driver-assign-order.hbs +67 -0
  52. package/addon/components/modals/driver-assign-vehicle.hbs +20 -0
  53. package/addon/components/modals/driver-assign-vendor.hbs +20 -0
  54. package/addon/components/modals/driver-details.hbs +85 -0
  55. package/addon/components/modals/driver-form.hbs +83 -0
  56. package/addon/components/modals/edit-meta-form.hbs +20 -0
  57. package/addon/components/modals/entity-form.hbs +57 -0
  58. package/addon/components/modals/entity-meta-field-prompt.hbs +6 -0
  59. package/addon/components/modals/fleet-details.hbs +31 -0
  60. package/addon/components/modals/fleet-form.hbs +26 -0
  61. package/addon/components/modals/fuel-report-details.hbs +34 -0
  62. package/addon/components/modals/fuel-report-form.hbs +26 -0
  63. package/addon/components/modals/group-details.hbs +42 -0
  64. package/addon/components/modals/group-form.hbs +54 -0
  65. package/addon/components/modals/install-prompt.hbs +21 -0
  66. package/addon/components/modals/map-field-form.hbs +9 -0
  67. package/addon/components/modals/map-field-group-form.hbs +6 -0
  68. package/addon/components/modals/map-layer-form.hbs +29 -0
  69. package/addon/components/modals/meta-field-form.hbs +8 -0
  70. package/addon/components/modals/meta-field-group-form.hbs +5 -0
  71. package/addon/components/modals/new-order-config.hbs +11 -0
  72. package/addon/components/modals/option-prompt.hbs +17 -0
  73. package/addon/components/modals/order-assign-driver.hbs +25 -0
  74. package/addon/components/modals/order-config-new-status.hbs +5 -0
  75. package/addon/components/modals/order-event.hbs +18 -0
  76. package/addon/components/modals/order-form.hbs +63 -0
  77. package/addon/components/modals/order-import.hbs +84 -0
  78. package/addon/components/modals/order-label.hbs +7 -0
  79. package/addon/components/modals/order-meta.hbs +12 -0
  80. package/addon/components/modals/order-new-activity.hbs +62 -0
  81. package/addon/components/modals/order-route-form.hbs +111 -0
  82. package/addon/components/modals/place-assign-vendor.hbs +20 -0
  83. package/addon/components/modals/place-details.hbs +105 -0
  84. package/addon/components/modals/place-form.hbs +30 -0
  85. package/addon/components/modals/point-map.hbs +16 -0
  86. package/addon/components/modals/policy-form.hbs +22 -0
  87. package/addon/components/modals/resend-verification-email.hbs +25 -0
  88. package/addon/components/modals/role-form.hbs +16 -0
  89. package/addon/components/modals/select-payment-method.hbs +12 -0
  90. package/addon/components/modals/service-area-form.hbs +31 -0
  91. package/addon/components/modals/set-password.hbs +15 -0
  92. package/addon/components/modals/uninstall-prompt.hbs +21 -0
  93. package/addon/components/modals/user-form.hbs +56 -0
  94. package/addon/components/modals/vehicle-details.hbs +227 -0
  95. package/addon/components/modals/vehicle-form.hbs +282 -0
  96. package/addon/components/modals/vendor-details.hbs +77 -0
  97. package/addon/components/modals/vendor-form.hbs +168 -0
  98. package/addon/components/modals/view-service-area.hbs +12 -0
  99. package/addon/components/modals/view-zone.hbs +12 -0
  100. package/addon/components/modals/zone-form.hbs +16 -0
  101. package/addon/components/operations-pane/pane.hbs +1 -0
  102. package/addon/components/order/header.hbs +48 -0
  103. package/addon/components/order/header.js +26 -0
  104. package/addon/components/order/place-card.hbs +51 -0
  105. package/addon/components/order/place-card.js +33 -0
  106. package/addon/components/order/schedule-card.hbs +35 -0
  107. package/addon/components/order/schedule-card.js +17 -0
  108. package/addon/components/order/sub-header/item.hbs +16 -0
  109. package/addon/components/order/sub-header.hbs +3 -0
  110. package/addon/components/order-config/activity-flow-editor.hbs +108 -0
  111. package/addon/components/order-config/activity-flow-editor.js +374 -0
  112. package/addon/components/order-config/details-editor.hbs +32 -0
  113. package/addon/components/order-config/details-editor.js +16 -0
  114. package/addon/components/order-config/entities-editor.hbs +84 -0
  115. package/addon/components/order-config/entities-editor.js +123 -0
  116. package/addon/components/order-config/fields-editor.hbs +122 -0
  117. package/addon/components/order-config/fields-editor.js +233 -0
  118. package/addon/components/order-config/selector.hbs +1 -0
  119. package/addon/components/order-config/selector.js +3 -0
  120. package/addon/components/order-config.hbs +66 -0
  121. package/addon/components/order-config.js +296 -0
  122. package/addon/components/order-list-overlay/driver-panel-title.hbs +6 -0
  123. package/addon/components/order-list-overlay/order.hbs +22 -0
  124. package/addon/components/order-list-overlay/order.js +3 -0
  125. package/addon/components/order-list-overlay.hbs +120 -0
  126. package/addon/components/order-list-overlay.js +227 -0
  127. package/addon/components/route-list.hbs +47 -0
  128. package/addon/components/route-list.js +11 -0
  129. package/addon/components/settings-window.hbs +15 -0
  130. package/addon/components/settings-window.js +62 -0
  131. package/addon/components/split-grid.js +1 -0
  132. package/addon/components/widget/fleet-ops-quickstart.hbs +40 -0
  133. package/addon/components/widget/fleet-ops-quickstart.js +58 -0
  134. package/addon/components/widget/issues.hbs +1 -0
  135. package/addon/components/widget/key-metrics.hbs +121 -0
  136. package/addon/components/widget/key-metrics.js +46 -0
  137. package/addon/components/widget/live-order-map.hbs +59 -0
  138. package/addon/components/widget/live-order-map.js +11 -0
  139. package/addon/components/widget/recent-orders.hbs +35 -0
  140. package/addon/components/widget/recent-orders.js +24 -0
  141. package/addon/components/widget/transaction-earnings.hbs +1 -0
  142. package/addon/components/widget/transactions.hbs +36 -0
  143. package/addon/components/widget/transactions.js +29 -0
  144. package/addon/components/widget/weekly-orders.hbs +1 -0
  145. package/addon/components/widget/weekly-orders.js +3 -0
  146. package/addon/controllers/application.js +40 -0
  147. package/addon/controllers/management/contacts/index.js +438 -0
  148. package/addon/controllers/management/drivers/index.js +868 -0
  149. package/addon/controllers/management/fleets/index.js +507 -0
  150. package/addon/controllers/management/fuel-reports/index.js +428 -0
  151. package/addon/controllers/management/issues/index.js +335 -0
  152. package/addon/controllers/management/places/index.js +571 -0
  153. package/addon/controllers/management/vehicles/index.js +616 -0
  154. package/addon/controllers/management/vendors/index.js +626 -0
  155. package/addon/controllers/management.js +5 -0
  156. package/addon/controllers/operations/orders/index/config/types.js +17 -0
  157. package/addon/controllers/operations/orders/index/config.js +13 -0
  158. package/addon/controllers/operations/orders/index/new.js +1213 -0
  159. package/addon/controllers/operations/orders/index/view.js +794 -0
  160. package/addon/controllers/operations/orders/index.js +674 -0
  161. package/addon/controllers/operations/scheduler/index.js +110 -0
  162. package/addon/controllers/operations/service-rates/index/edit.js +59 -0
  163. package/addon/controllers/operations/service-rates/index/new.js +369 -0
  164. package/addon/controllers/operations/service-rates/index.js +275 -0
  165. package/addon/controllers/operations/zones/index.js +470 -0
  166. package/addon/engine.js +19 -0
  167. package/addon/helpers/avatar-url.js +9 -0
  168. package/addon/helpers/extract-coordinates.js +6 -0
  169. package/addon/helpers/feature-group.js +14 -0
  170. package/addon/helpers/flow-raw-status.js +13 -0
  171. package/addon/helpers/format-point.js +13 -0
  172. package/addon/helpers/get-tip-amount.js +19 -0
  173. package/addon/helpers/is-active-route.js +1 -0
  174. package/addon/helpers/is-facilitator-supported-place.js +6 -0
  175. package/addon/helpers/is-not-facilitator-supported-place.js +6 -0
  176. package/addon/helpers/is-waypoint-record.js +6 -0
  177. package/addon/helpers/point-coordinates.js +10 -0
  178. package/addon/helpers/point-to-coordinates.js +28 -0
  179. package/addon/helpers/service-name.js +6 -0
  180. package/addon/helpers/waypoint-label.js +1 -0
  181. package/addon/instance-initializers/register-leaflet-draw-control-layer.js +17 -0
  182. package/addon/instance-initializers/register-leaflet-rotated-marker.js +17 -0
  183. package/addon/modifiers/translate-x.js +5 -0
  184. package/addon/routes/application.js +25 -0
  185. package/addon/routes/comms/chat.js +3 -0
  186. package/addon/routes/comms/intercom.js +3 -0
  187. package/addon/routes/comms.js +3 -0
  188. package/addon/routes/home.js +20 -0
  189. package/addon/routes/management/contacts/index.js +24 -0
  190. package/addon/routes/management/contacts.js +3 -0
  191. package/addon/routes/management/drivers/index.js +33 -0
  192. package/addon/routes/management/drivers.js +3 -0
  193. package/addon/routes/management/fleets/index.js +27 -0
  194. package/addon/routes/management/fleets.js +3 -0
  195. package/addon/routes/management/fuel-reports/index.js +23 -0
  196. package/addon/routes/management/fuel-reports.js +3 -0
  197. package/addon/routes/management/index.js +3 -0
  198. package/addon/routes/management/issues/index.js +24 -0
  199. package/addon/routes/management/issues.js +3 -0
  200. package/addon/routes/management/places/index.js +18 -0
  201. package/addon/routes/management/places.js +3 -0
  202. package/addon/routes/management/vehicles/index.js +35 -0
  203. package/addon/routes/management/vehicles.js +3 -0
  204. package/addon/routes/management/vendors/index.js +34 -0
  205. package/addon/routes/management/vendors.js +3 -0
  206. package/addon/routes/management.js +3 -0
  207. package/addon/routes/operations/dispatch.js +3 -0
  208. package/addon/routes/operations/orders/index/config/types.js +17 -0
  209. package/addon/routes/operations/orders/index/config.js +3 -0
  210. package/addon/routes/operations/orders/index/new.js +16 -0
  211. package/addon/routes/operations/orders/index/view.js +37 -0
  212. package/addon/routes/operations/orders/index.js +35 -0
  213. package/addon/routes/operations/orders.js +4 -0
  214. package/addon/routes/operations/scheduler/index.js +10 -0
  215. package/addon/routes/operations/scheduler.js +3 -0
  216. package/addon/routes/operations/service-rates/index/edit.js +35 -0
  217. package/addon/routes/operations/service-rates/index/new.js +15 -0
  218. package/addon/routes/operations/service-rates/index.js +49 -0
  219. package/addon/routes/operations/service-rates.js +10 -0
  220. package/addon/routes/operations/zones/index.js +25 -0
  221. package/addon/routes/operations/zones.js +7 -0
  222. package/addon/routes/operations.js +3 -0
  223. package/addon/routes.js +55 -0
  224. package/addon/services/map-manager.js +3 -0
  225. package/addon/services/service-areas.js +385 -0
  226. package/addon/templates/application.hbs +27 -0
  227. package/addon/templates/comms/chat.hbs +1 -0
  228. package/addon/templates/comms/intercom.hbs +1 -0
  229. package/addon/templates/comms.hbs +1 -0
  230. package/addon/templates/home.hbs +1 -0
  231. package/addon/templates/management/contacts/index.hbs +23 -0
  232. package/addon/templates/management/contacts.hbs +1 -0
  233. package/addon/templates/management/drivers/index.hbs +35 -0
  234. package/addon/templates/management/drivers.hbs +1 -0
  235. package/addon/templates/management/fleets/index.hbs +22 -0
  236. package/addon/templates/management/fleets.hbs +1 -0
  237. package/addon/templates/management/fuel-reports/index.hbs +21 -0
  238. package/addon/templates/management/fuel-reports.hbs +1 -0
  239. package/addon/templates/management/index.hbs +53 -0
  240. package/addon/templates/management/issues/index.hbs +21 -0
  241. package/addon/templates/management/issues.hbs +1 -0
  242. package/addon/templates/management/places/index.hbs +34 -0
  243. package/addon/templates/management/places.hbs +1 -0
  244. package/addon/templates/management/vehicles/index.hbs +22 -0
  245. package/addon/templates/management/vehicles.hbs +1 -0
  246. package/addon/templates/management/vendors/index.hbs +22 -0
  247. package/addon/templates/management/vendors.hbs +1 -0
  248. package/addon/templates/management.hbs +1 -0
  249. package/addon/templates/operations/dispatch.hbs +1 -0
  250. package/addon/templates/operations/orders/index/config/types.hbs +26 -0
  251. package/addon/templates/operations/orders/index/config.hbs +24 -0
  252. package/addon/templates/operations/orders/index/new.hbs +506 -0
  253. package/addon/templates/operations/orders/index/view.hbs +428 -0
  254. package/addon/templates/operations/orders/index.hbs +48 -0
  255. package/addon/templates/operations/orders.hbs +1 -0
  256. package/addon/templates/operations/scheduler/index.hbs +30 -0
  257. package/addon/templates/operations/scheduler.hbs +1 -0
  258. package/addon/templates/operations/service-rates/index/edit.hbs +1 -0
  259. package/addon/templates/operations/service-rates/index/new.hbs +308 -0
  260. package/addon/templates/operations/service-rates/index.hbs +23 -0
  261. package/addon/templates/operations/service-rates.hbs +1 -0
  262. package/addon/templates/operations/zones/index.hbs +72 -0
  263. package/addon/templates/operations/zones.hbs +1 -0
  264. package/addon/templates/operations.hbs +1 -0
  265. package/addon/utils/calculate-percentage.js +1 -0
  266. package/addon/utils/extract-coordinates.js +1 -0
  267. package/addon/utils/format-currency.js +1 -0
  268. package/addon/utils/geojson/geo-json.js +17 -0
  269. package/addon/utils/is-facilitator-supported-place.js +14 -0
  270. package/addon/utils/to-model.js +1 -0
  271. package/app/components/cell/driver-name.js +1 -0
  272. package/app/components/custom-field-value.js +1 -0
  273. package/app/components/custom-field.js +1 -0
  274. package/app/components/display-place.js +1 -0
  275. package/app/components/driver-card-mini.js +1 -0
  276. package/app/components/driver-card.js +1 -0
  277. package/app/components/event-timeline/event.js +1 -0
  278. package/app/components/event-timeline.js +1 -0
  279. package/app/components/file-icon.js +1 -0
  280. package/app/components/fleet-driver-listing.js +1 -0
  281. package/app/components/full-calendar/draggable.js +1 -0
  282. package/app/components/full-calendar.js +1 -0
  283. package/app/components/full-size.js +1 -0
  284. package/app/components/global-search.js +1 -0
  285. package/app/components/horizontal-route.js +1 -0
  286. package/app/components/integrated-order-details.js +1 -0
  287. package/app/components/leaflet-draw-control.js +1 -0
  288. package/app/components/leaflet-rotated-marker.js +1 -0
  289. package/app/components/live-map.js +1 -0
  290. package/app/components/map-container/toolbar/zones-panel.js +1 -0
  291. package/app/components/map-container/toolbar-container.js +1 -0
  292. package/app/components/map-container/toolbar.js +1 -0
  293. package/app/components/map-container/topbar.js +1 -0
  294. package/app/components/map-container/view-switch.js +1 -0
  295. package/app/components/map-container.js +1 -0
  296. package/app/components/modals/assign-driver.js +1 -0
  297. package/app/components/modals/clone-config-form.js +1 -0
  298. package/app/components/modals/contact-details.js +1 -0
  299. package/app/components/modals/contact-form.js +1 -0
  300. package/app/components/modals/driver-assign-order.js +1 -0
  301. package/app/components/modals/driver-assign-vehicle.js +1 -0
  302. package/app/components/modals/driver-assign-vendor.js +1 -0
  303. package/app/components/modals/driver-details.js +1 -0
  304. package/app/components/modals/driver-form.js +1 -0
  305. package/app/components/modals/edit-meta-form.js +1 -0
  306. package/app/components/modals/entity-form.js +1 -0
  307. package/app/components/modals/entity-meta-field-prompt.js +1 -0
  308. package/app/components/modals/fleet-details.js +1 -0
  309. package/app/components/modals/fleet-form.js +1 -0
  310. package/app/components/modals/fuel-report-details.js +1 -0
  311. package/app/components/modals/fuel-report-form.js +1 -0
  312. package/app/components/modals/group-details.js +1 -0
  313. package/app/components/modals/group-form.js +1 -0
  314. package/app/components/modals/install-prompt.js +1 -0
  315. package/app/components/modals/map-field-form.js +1 -0
  316. package/app/components/modals/map-field-group-form.js +1 -0
  317. package/app/components/modals/map-layer-form.js +1 -0
  318. package/app/components/modals/meta-field-form.js +1 -0
  319. package/app/components/modals/meta-field-group-form.js +1 -0
  320. package/app/components/modals/new-order-config.js +1 -0
  321. package/app/components/modals/option-prompt.js +1 -0
  322. package/app/components/modals/order-assign-driver.js +1 -0
  323. package/app/components/modals/order-config-new-status.js +1 -0
  324. package/app/components/modals/order-event.js +1 -0
  325. package/app/components/modals/order-form.js +1 -0
  326. package/app/components/modals/order-import.js +1 -0
  327. package/app/components/modals/order-label.js +1 -0
  328. package/app/components/modals/order-meta.js +1 -0
  329. package/app/components/modals/order-new-activity.js +1 -0
  330. package/app/components/modals/order-route-form.js +1 -0
  331. package/app/components/modals/place-assign-vendor.js +1 -0
  332. package/app/components/modals/place-details.js +1 -0
  333. package/app/components/modals/place-form.js +1 -0
  334. package/app/components/modals/point-map.js +1 -0
  335. package/app/components/modals/policy-form.js +1 -0
  336. package/app/components/modals/resend-verification-email.js +1 -0
  337. package/app/components/modals/role-form.js +1 -0
  338. package/app/components/modals/select-payment-method.js +1 -0
  339. package/app/components/modals/service-area-form.js +1 -0
  340. package/app/components/modals/set-password.js +1 -0
  341. package/app/components/modals/uninstall-prompt.js +1 -0
  342. package/app/components/modals/user-form.js +1 -0
  343. package/app/components/modals/vehicle-details.js +1 -0
  344. package/app/components/modals/vehicle-form.js +1 -0
  345. package/app/components/modals/vendor-details.js +1 -0
  346. package/app/components/modals/vendor-form.js +1 -0
  347. package/app/components/modals/view-service-area.js +1 -0
  348. package/app/components/modals/view-zone.js +1 -0
  349. package/app/components/modals/zone-form.js +1 -0
  350. package/app/components/operations-pane/pane.js +1 -0
  351. package/app/components/order/header.js +1 -0
  352. package/app/components/order/place-card.js +1 -0
  353. package/app/components/order/schedule-card.js +1 -0
  354. package/app/components/order/sub-header/item.js +1 -0
  355. package/app/components/order/sub-header.js +1 -0
  356. package/app/components/order-config/activity-flow-editor.js +1 -0
  357. package/app/components/order-config/details-editor.js +1 -0
  358. package/app/components/order-config/entities-editor.js +1 -0
  359. package/app/components/order-config/fields-editor.js +1 -0
  360. package/app/components/order-config/selector.js +1 -0
  361. package/app/components/order-config.js +1 -0
  362. package/app/components/order-list-overlay/driver-panel-title.js +1 -0
  363. package/app/components/order-list-overlay/order.js +1 -0
  364. package/app/components/order-list-overlay.js +1 -0
  365. package/app/components/route-list.js +1 -0
  366. package/app/components/settings-window.js +1 -0
  367. package/app/components/split-grid.js +1 -0
  368. package/app/components/widget/issues.js +1 -0
  369. package/app/components/widget/key-metrics.js +1 -0
  370. package/app/components/widget/live-order-map.js +1 -0
  371. package/app/components/widget/recent-orders.js +1 -0
  372. package/app/components/widget/recommended-todo.js +1 -0
  373. package/app/components/widget/transaction-earnings.js +1 -0
  374. package/app/components/widget/transactions.js +1 -0
  375. package/app/components/widget/weekly-orders.js +1 -0
  376. package/app/controllers/application.js +1 -0
  377. package/app/controllers/management/contacts/index.js +1 -0
  378. package/app/controllers/management/drivers/index/details.js +1 -0
  379. package/app/controllers/management/drivers/index.js +1 -0
  380. package/app/controllers/management/fleets/index/details.js +1 -0
  381. package/app/controllers/management/fleets/index.js +1 -0
  382. package/app/controllers/management/fuel-reports/index.js +1 -0
  383. package/app/controllers/management/issues/index.js +1 -0
  384. package/app/controllers/management/places/index.js +1 -0
  385. package/app/controllers/management/vehicles/index.js +1 -0
  386. package/app/controllers/management/vendors/index/details/remarks.js +1 -0
  387. package/app/controllers/management/vendors/index/details.js +1 -0
  388. package/app/controllers/management/vendors/index.js +1 -0
  389. package/app/controllers/management.js +1 -0
  390. package/app/controllers/operations/orders/index/config/types.js +1 -0
  391. package/app/controllers/operations/orders/index/config.js +1 -0
  392. package/app/controllers/operations/orders/index/new.js +1 -0
  393. package/app/controllers/operations/orders/index/view.js +1 -0
  394. package/app/controllers/operations/scheduler/index.js +1 -0
  395. package/app/controllers/operations/service-rates/index/edit.js +1 -0
  396. package/app/controllers/operations/service-rates/index/new.js +1 -0
  397. package/app/controllers/operations/service-rates/index.js +1 -0
  398. package/app/controllers/operations/zones/index.js +1 -0
  399. package/app/helpers/avatar-url.js +1 -0
  400. package/app/helpers/extract-coordinates.js +1 -0
  401. package/app/helpers/feature-group.js +1 -0
  402. package/app/helpers/flow-raw-status.js +1 -0
  403. package/app/helpers/format-point.js +1 -0
  404. package/app/helpers/get-tip-amount.js +1 -0
  405. package/app/helpers/is-facilitator-supported-place.js +1 -0
  406. package/app/helpers/is-not-facilitator-supported-place.js +1 -0
  407. package/app/helpers/is-waypoint-record.js +1 -0
  408. package/app/helpers/point-coordinates.js +1 -0
  409. package/app/helpers/point-to-coordinates.js +1 -0
  410. package/app/helpers/service-name.js +1 -0
  411. package/app/helpers/waypoint-label.js +1 -0
  412. package/app/modifiers/translate-x.js +1 -0
  413. package/app/routes/home.js +1 -0
  414. package/app/routes/management/fleets/index/details.js +1 -0
  415. package/app/routes/operations/orders/index/config/types.js +1 -0
  416. package/app/routes/operations/orders/index/config.js +1 -0
  417. package/app/routes/operations/orders/index/new.js +1 -0
  418. package/app/routes/operations/orders/index/view.js +1 -0
  419. package/app/routes/operations/scheduler/index.js +1 -0
  420. package/app/routes/operations/scheduler.js +1 -0
  421. package/app/routes/operations/service-rates/index/edit.js +1 -0
  422. package/app/routes/operations/service-rates/index/new.js +1 -0
  423. package/app/services/map-manager.js +1 -0
  424. package/app/services/service-areas.js +1 -0
  425. package/app/templates/home.js +1 -0
  426. package/app/templates/management/fleets/index/details.js +1 -0
  427. package/app/templates/operations/orders/index/config/types.js +1 -0
  428. package/app/templates/operations/orders/index/config.js +1 -0
  429. package/app/templates/operations/orders/index/new.js +1 -0
  430. package/app/templates/operations/orders/index/view.js +1 -0
  431. package/app/templates/operations/scheduler/index.js +1 -0
  432. package/app/templates/operations/scheduler.js +1 -0
  433. package/app/templates/operations/service-rates/index/edit.js +1 -0
  434. package/app/templates/operations/service-rates/index/new.js +1 -0
  435. package/app/utils/calculate-percentage.js +1 -0
  436. package/app/utils/extract-coordinates.js +1 -0
  437. package/app/utils/format-currency.js +1 -0
  438. package/app/utils/geojson/geo-json.js +1 -0
  439. package/app/utils/is-facilitator-supported-place.js +1 -0
  440. package/app/utils/is-latitude.js +1 -0
  441. package/app/utils/to-model.js +1 -0
  442. package/assets/images/drawing-controls-spritesheet-inverted.png +0 -0
  443. package/config/environment.js +25 -0
  444. package/index.js +73 -0
  445. package/package.json +132 -0
  446. package/pnpm-lock.yaml +12613 -0
@@ -0,0 +1,308 @@
1
+ <Overlay @position="right" @noBackdrop={{true}} @fullHeight={{true}} @width="700">
2
+ <Overlay::Header @title={{if this.serviceRate.id this.serviceRate.service_name "New service rate"}} @status={{this.serviceRate.public_id}} @hideStatusDot={{true}} @createdAt={{this.serviceRate.createdAt}} @onPressCancel={{this.transitionBack}}>
3
+ {{#if this.serviceRate.id}}
4
+ <Button @icon="save" @type="primary" @text="Save Service Rate" @onClick={{this.updateServiceRate}} @isLoading={{this.isUpdatingServiceRate}} @isSubscriptionRequired={{true}} />
5
+ {{else}}
6
+ <Button @icon="check" @type="primary" @text="Create Service Rate" @onClick={{this.createServiceRate}} @isLoading={{this.isCreatingServiceRate}} @isSubscriptionRequired={{true}} />
7
+ {{/if}}
8
+ </Overlay::Header>
9
+
10
+ <Overlay::Body @wrapperClass="new-service-rate-overlay-body px-4 space-y-4 pt-4" @increaseInnerBodyHeightBy={{1000}}>
11
+ <div>
12
+ <div class="grid grid-cols-2 gap-2">
13
+ <div class="input-group">
14
+ <InputLabel @labelText="Service Name" @helpText="Display name for this service." @required={{true}} />
15
+ <Input @type="text" @value={{this.serviceRate.service_name}} placeholder="Service Name" class="form-input w-full" />
16
+ </div>
17
+
18
+ <div class="input-group">
19
+ <InputLabel @labelText="Service Order Type" @helpText="Restrict this service rate to an explicit `order type`." />
20
+ <Select class="w-full" @options={{this.serviceTypes}} @value={{this.serviceRate.service_type}} @optionLabel="name" @optionValue="key" @onSelect={{fn (mut this.serviceRate.service_type)}} @placeholder="Select order type to restrict service to" />
21
+ </div>
22
+
23
+ <div class="input-group">
24
+ <InputLabel @labelText="Base Fee" @helpText="Set a base fee which represents the minimum cost for this serice." @required={{true}} />
25
+ <MoneyInput class="w-full" @value={{this.serviceRate.base_fee}} @currency={{this.serviceRate.currency}} @canSelectCurrency={{true}} @onCurrencyChange={{fn (mut this.serviceRate.currency)}} />
26
+ </div>
27
+
28
+ <div class="input-group">
29
+ <InputLabel @labelText="Rate Calculation Method" @helpText="The method this service will use to calculate rates when queried." @required={{true}} />
30
+ <Select class="w-full" @options={{this.calculationMethods}} @value={{this.serviceRate.rate_calculation_method}} @optionLabel="name" @optionValue="key" @onSelect={{fn (mut this.serviceRate.rate_calculation_method)}} @placeholder="Select rate calculation method" />
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ {{#if this.serviceRate.isParcelService}}
36
+ <div class="input-group">
37
+ <InputLabel @labelText="Estimated Delivery Days" @helpText="The estimated number of days this service will take. For a same-day service use `0`." @required={{true}} />
38
+
39
+ <Input @type="number" @value={{this.serviceRate.estimated_days}} placeholder="Estimated Delivery Days" class="form-input w-full" />
40
+ </div>
41
+ {{/if}}
42
+
43
+ <div class="input-group col-span-2">
44
+ <InputLabel @labelText="Duration Terms" @helpText="Add additional terms of service regarding duration for this serice rate." />
45
+
46
+ <Input @type="text" @value={{this.serviceRate.duration_terms}} placeholder="Duration terms if applicable" class="form-input w-full" />
47
+ </div>
48
+
49
+ {{#if this.serviceRate.isFixedMeter}}
50
+ <ContentPanel @title="Fixed Meter Options" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
51
+ <InfoBlock class="mb-5" @text="This option defines a fixed fee per kilometer." @exampleText="For example: Every 1 kilometer a fixed fee is defined. If the distance traveled by the order is 3,300 meters the fixed fee for the 3rd kilometer will be added to the sum of the base fee." />
52
+
53
+ <div class="input-group">
54
+ <InputLabel @labelText="Maximum Distance" @helpText="The maximum distance servicable." @required={{true}} />
55
+ <Input @type="number" @value={{this.fixedMeterMaxDistance}} placeholder="Maximum Distance" class="form-input w-full" />
56
+ </div>
57
+
58
+ <div class="table-scrolling-height overflow-y-scroll">
59
+ <div class="next-table-wrapper h-auto table-fluid rounded-none">
60
+ <table class="table table-fixed">
61
+ <thead>
62
+ <tr>
63
+ <th>Distance</th>
64
+ <th>Fee</th>
65
+ </tr>
66
+ </thead>
67
+ <tbody>
68
+ {{#each this.rateFees as |rateFee|}}
69
+ <tr>
70
+ <td>{{rateFee.distance}}-{{add rateFee.distance 1}} {{this.fixedMeterUnit}}
71
+ </td>
72
+ <td>
73
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{rateFee.fee}} />
74
+ </td>
75
+ </tr>
76
+ {{/each}}
77
+ </tbody>
78
+ </table>
79
+ </div>
80
+ </div>
81
+ </ContentPanel>
82
+ {{else if this.serviceRate.isPerDrop}}
83
+ <ContentPanel @title="Per Drop-off Options" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
84
+ <InfoBlock class="mb-5" @text="This option defines a fixed fee per drop-offs." @exampleText="For example: 1-5 dropoffs in the order will cost $x amount, 5-10 dropoffs per order will cost $x amount. This will be added to the sum of the base fee." />
85
+
86
+ <div class="input-group">
87
+ <Button @text="Add drop-off range" @icon="plus" @iconPrefix="fas" @onClick={{this.addPerDropoffRateFee}} />
88
+ </div>
89
+
90
+ <div class="table-wrapper table-fluid rounded-none">
91
+ <table class="table table-fixed">
92
+ <thead>
93
+ <tr>
94
+ <th>Min Drop</th>
95
+ <th>Max Drop</th>
96
+ <th>Fee</th>
97
+ <th></th>
98
+ </tr>
99
+ </thead>
100
+ <tbody>
101
+ {{#each this.perDropRateFees as |rateFee index|}}
102
+ <tr>
103
+ <td>
104
+ <Input @type="number" @value={{rateFee.min}} placeholder="Min" class="form-input w-16" />
105
+ </td>
106
+ <td>
107
+ <Input @type="number" @value={{rateFee.max}} placeholder="Max" class="form-input w-16" />
108
+ </td>
109
+ <td>
110
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{rateFee.fee}} />
111
+ </td>
112
+ <td>
113
+ <a href="javascript:;" class="text-danger text-red-500 font-semibold" {{on "click" (fn this.removePerDropoffRateFee index)}}>Remove</a>
114
+ </td>
115
+ </tr>
116
+ {{/each}}
117
+ </tbody>
118
+ </table>
119
+ </div>
120
+ </ContentPanel>
121
+ {{else if this.serviceRate.isPerMeter}}
122
+ <ContentPanel @title="Per Meter" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
123
+ <InfoBlock class="mb-5" @text="This option allows the service to be calculated per kilometer or meter, that means you define a flat fee which is then multiplied by the distance which can be either meter or kilometer." @exampleText="For example: {fee} * {distance} + {baseFee}" />
124
+
125
+ <div class="grid grid-cols-2 gap-2">
126
+ <div class="input-group">
127
+ <InputLabel @labelText="Per Meter Flat Rate Fee" @helpText="The single flat fee which will be multipled by the distance." @required={{true}} />
128
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{this.serviceRate.per_meter_flat_rate_fee}} />
129
+ </div>
130
+
131
+ <div class="input-group">
132
+ <InputLabel @labelText="Distance Unit" @helpText="The unit of distance can be either per kilometer or meter." @required={{true}} />
133
+ <Select class="w-full" @options={{this.distanceUnits}} @value={{this.serviceRate.per_meter_unit}} @optionLabel="name" @optionValue="key" @onSelect={{fn (mut this.serviceRate.per_meter_unit)}} placeholder="Select distance unit." />
134
+ </div>
135
+
136
+ <div class="col-span-2">
137
+ <InputInfo>
138
+ <code class="dark:text-gray-100">( {{this.serviceRate.per_meter_flat_rate_fee}} * {distance} {{this.serviceRate.per_meter_unit}} ) + {{this.serviceRate.base_fee}}</code>
139
+ </InputInfo>
140
+ </div>
141
+ </div>
142
+ </ContentPanel>
143
+ {{else if this.serviceRate.isAlgorithm}}
144
+ <ContentPanel @title="Custom Algorithm" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
145
+ <InfoBlock class="mb-5">
146
+ This option is to define a custom calculation for this service's fee with variables.
147
+ Note that variables must be wrapped in a single curly brace.
148
+
149
+ <div class="block my-4 break-text">
150
+ <ul class="list-disc space-y-2 pl-16">
151
+ <li class="leading-5"><i>distance</i> - the distance in meters from the order
152
+ route.</li>
153
+ <li class="leading-5"><i>time</i> - the route ETA in seconds.</li>
154
+ </ul>
155
+ </div>
156
+
157
+ <div>
158
+ <h4 class="mb-1 text-sm font-semibold">Example</h4>
159
+ <div class="mb-3 text-inherit">
160
+ If the order request is a distance of 2,200 meters with an ETA of 30 minutes.
161
+ Then the following formula will calculate a service fee of $2.50, which will be
162
+ added to the base fee.
163
+ </div>
164
+ <code class="text-xs font-mono">(( {distance} / 50 ) * .05 ) + (( {time} / 60 ) * .01)</code>
165
+ </div>
166
+ </InfoBlock>
167
+
168
+ <div class="input-group">
169
+ <InputLabel @labelText="Algorithm" @helpText="Define a formula to be evaluated for this service rate calculation." @required={{true}} />
170
+ <Input @type="tel" @value={{this.serviceRate.algorithm}} placeholder="(( {distance} / 50 ) * .05 ) + (( {time} / 60 ) * .01)" class="form-input w-full" />
171
+ </div>
172
+ </ContentPanel>
173
+ {{/if}}
174
+
175
+ {{#if this.serviceRate.isParcelService}}
176
+ <ContentPanel @title="Parcel Fee's" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
177
+ <div class="space-y-2">
178
+ {{#each this.parcelFees as |parcelFee|}}
179
+ <div class="dark:text-gray-100">
180
+ <div class="grid grid-cols-7">
181
+ <div class="flex flex-col items-start justify-start pt-3">
182
+ <img src="/images/boxes/{{parcelFee.size}}.png" alt="parcel size {{parcelFee.size}}" width="44" class="w-11">
183
+ <label class="mt-2">{{humanize parcelFee.size}}</label>
184
+ </div>
185
+ <div class="col-span-6 dimensions-box">
186
+ <div class="grid grid-cols-4 gap-2 px-2 mb-2">
187
+ <div class="input-group">
188
+ <InputLabel @labelText="Length" />
189
+ <Input @type="tel" @value={{parcelFee.length}} placeholder="Length in {{parcelFee.dimension_unit}}" class="form-input w-4/5" />
190
+ </div>
191
+
192
+ <div class="input-group">
193
+ <InputLabel @labelText="Width" />
194
+ <Input @type="tel" @value={{parcelFee.width}} placeholder="Width in {{parcelFee.dimension_unit}}" class="form-input w-4/5" />
195
+ </div>
196
+
197
+ <div class="input-group">
198
+ <InputLabel @labelText="Height" />
199
+ <Input @type="tel" @value={{parcelFee.height}} placeholder="Height in {{parcelFee.dimension_unit}}" class="form-input w-4/5" />
200
+ </div>
201
+
202
+ <div class="input-group">
203
+ <InputLabel @labelText="Weight" />
204
+ <Input @type="tel" @value={{parcelFee.weight}} placeholder="Weight in {{parcelFee.weight_unit}}" class="form-input w-4/5" />
205
+ </div>
206
+ </div>
207
+ <div class="grid grid-cols-3 gap-2 px-2">
208
+ <div class="input-group">
209
+ <InputLabel @labelText="Dimensions Unit" />
210
+ <Select class="w-full" @options={{this.dimensionUnits}} @value={{parcelFee.dimension_unit}} placeholder="Select unit" />
211
+ </div>
212
+
213
+ <div class="input-group">
214
+ <InputLabel @labelText="Weight Unit" />
215
+ <Select class="w-full" @options={{this.weightUnits}} @value={{parcelFee.weight_unit}} placeholder="Select unit" />
216
+ </div>
217
+
218
+ <div class="input-group">
219
+ <InputLabel @labelText="Additional Fee" />
220
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{parcelFee.fee}} />
221
+ </div>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ </div>
226
+ {{/each}}
227
+ </div>
228
+ </ContentPanel>
229
+ {{/if}}
230
+
231
+ <ContentPanel @title="Cash on Delivery" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
232
+ <Toggle @wrapperClass="justify-start-i mb-5" @label="Enable additional fee for `cash on delivery` orders?" @isToggled={{this.serviceRate.has_cod_fee}} @onToggle={{fn (mut this.serviceRate.has_cod_fee)}} />
233
+
234
+ {{#if this.serviceRate.has_cod_fee}}
235
+ <div class="grid grid-cols-2 gap-2">
236
+ <div class="input-group">
237
+ <InputLabel @labelText="Cash on Delivery Fee Calculation Method" @helpText="Method used to calculate the COD fee." @required={{true}} />
238
+ <Select class="w-full" @options={{this.codCalculationMethods}} @optionLabel="name" @optionValue="key" @value={{this.serviceRate.cod_calculation_method}} @onSelect={{fn (mut
239
+ this.serviceRate.cod_calculation_method)}} @placeholder="Select COD fee calculation method" />
240
+ </div>
241
+
242
+ {{#if this.serviceRate.hasCodFlatFee}}
243
+ <div class="input-group">
244
+ <InputLabel @labelText="Cash on Delivery Flat Fee" @helpText="Defines a flat fee to be added during peak hours." @required={{true}} />
245
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{this.serviceRate.cod_flat_fee}} />
246
+ </div>
247
+ {{else if this.serviceRate.hasCodPercentageFee}}
248
+ <div class="input-group">
249
+ <InputLabel @labelText="Cash on Delivery Fee Percentage" @helpText="Defines a percentage based fee from the service rate subtotal to be added as the COD fee." @required={{true}} />
250
+ <Input @type="number" min="0" max="100" @value={{this.serviceRate.cod_percent}} placeholder="Percentage" class="form-input w-full" />
251
+ </div>
252
+ {{/if}}
253
+ </div>
254
+ {{/if}}
255
+ </ContentPanel>
256
+
257
+ <ContentPanel @title="Peak Hours" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
258
+ <Toggle @wrapperClass="justify-start-i mb-5" @label="Enable additional fee for order made during service defined `peak hours`?" @isToggled={{this.serviceRate.has_peak_hours_fee}} @onToggle={{fn (mut this.serviceRate.has_peak_hours_fee)}} />
259
+
260
+ {{#if this.serviceRate.has_peak_hours_fee}}
261
+ <div class="grid grid-cols-2 gap-2">
262
+ <div class="input-group">
263
+ <InputLabel @labelText="Peak Hours Start" @helpText="Defines the what time the peak hour fee starts." @required={{true}} />
264
+
265
+ <Input @type="time" @value={{this.serviceRate.peak_hours_start}} class="form-input w-full" />
266
+ </div>
267
+
268
+ <div class="input-group">
269
+ <InputLabel @labelText="Peak Hours End" @helpText="Defines the what time the peak hour fee ends." @required={{true}} />
270
+
271
+ <Input @type="time" @value={{this.serviceRate.peak_hours_end}} class="form-input w-full" />
272
+ </div>
273
+ </div>
274
+
275
+ <div class="input-group">
276
+ <InputLabel @labelText="Peak Hours Fee Calculation Method" @helpText="Method used to calculate the peak hours fee." @required={{true}} />
277
+ <Select class="w-full" @options={{this.peakHourCalculationMethods}} @optionLabel="name" @optionValue="key" @value={{this.serviceRate.peak_hours_calculation_method}} @onSelect={{fn (mut this.serviceRate.peak_hours_calculation_method)}} @placeholder="Select peak hours fee calculation method" />
278
+ </div>
279
+
280
+ {{#if this.serviceRate.hasPeakHoursFlatFee}}
281
+ <div class="input-group">
282
+ <InputLabel @labelText="Peak Hours Flat Fee" @helpText="Defines a flat fee to be added during peak hours." @required={{true}} />
283
+ <MoneyInput class="w-full" @currency={{this.serviceRate.currency}} @value={{this.serviceRate.peak_hours_flat_fee}} />
284
+ </div>
285
+ {{else if this.serviceRate.hasPeakHoursPercentageFee}}
286
+ <div class="input-group">
287
+ <InputLabel @labelText="Peak Hours Fee Percentage" @helpText="Defines a percentage based fee from the service rate subtotal to be added during peak hours." @required={{true}} />
288
+ <Input @type="number" min="0" max="100" @value={{this.serviceRate.peak_hours_percent}} placeholder="Percentage" class="form-input w-full" />
289
+ </div>
290
+ {{/if}}
291
+ {{/if}}
292
+ </ContentPanel>
293
+
294
+ <ContentPanel @title="Restrict Service" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
295
+ <div class="input-group">
296
+ <InputLabel @labelText="Service Area" @helpText="Restrict this service to order request originating from a service area." />
297
+ <Select class="w-full" @options={{this.serviceAreas}} @optionLabel="name" @optionValue="id" @value={{this.serviceRate.service_area_uuid}} @onSelect={{fn this.selectServiceArea}} @placeholder="Restrict to service area" @disabled={{not this.serviceAreas.length}} />
298
+ </div>
299
+
300
+ {{#if this.serviceRate.service_area_uuid}}
301
+ <div class="input-group">
302
+ <InputLabel @labelText="Zone" @helpText="Restrict this service to order request originating from a specific zone." />
303
+ <Select class="w-full" @options={{this.zones}} @optionLabel="name" @optionValue="id" @value={{this.serviceRate.zone_uuid}} @onSelect={{fn (mut this.serviceRate.zone_uuid)}} @placeholder="Restrict to zone" @disabled={{not this.zones.length}} />
304
+ </div>
305
+ {{/if}}
306
+ </ContentPanel>
307
+ </Overlay::Body>
308
+ </Overlay>
@@ -0,0 +1,23 @@
1
+ <Layout::Section::Header @title="Service Rates" @searchQuery={{this.query}} @onSearch={{perform this.search}}>
2
+ <FiltersPicker @columns={{this.columns}} @onApply={{fn this.filters.apply this}} @onClear={{fn this.filters.reset this}} @onFilterClear={{this.filters.clear}} @onChange={{this.filters.set}} @buttonWrapperClass="mr-2" />
3
+ <VisibleColumnPicker @columns={{this.columns}} @onChange={{fn (mut this.columns)}} class="mr-2" />
4
+ {{#if (safe-has this.table "selectedRows")}}
5
+ <DropdownButton @icon="layer-group" @text="Bulk Action" @type="magic" @size="sm" @buttonWrapperClass="mr-2" @contentClass="dropdown-menu" as |dd|>
6
+ <div class="next-dd-menu mt-2 mx-0">
7
+ <div class="px-1">
8
+ <a href="#" class="text-red-500 next-dd-item" {{on "click" (dropdown-fn dd this.bulkDeleteServiceRates this.selectedServiceRates)}}>
9
+ Delete Service Rates
10
+ </a>
11
+ </div>
12
+ </div>
13
+ </DropdownButton>
14
+ {{/if}}
15
+ <Button @icon="plus" @iconPrefix="fas" @type="primary" @text="New" class="mr-2" @onClick={{transition-to 'operations.service-rates.index.new'}} />
16
+ <Button @icon="long-arrow-up" @iconClass="rotate-icon-45" @text="Export" />
17
+ </Layout::Section::Header>
18
+
19
+ <Layout::Section::Body>
20
+ <Table @rows={{@model}} @columns={{this.columns}} @selectable={{true}} @canSelectAll={{true}} @onSetup={{fn (mut this.table)}} />
21
+ </Layout::Section::Body>
22
+
23
+ {{outlet}}
@@ -0,0 +1 @@
1
+ {{outlet}}
@@ -0,0 +1,72 @@
1
+ <div class="relative shadow-inner h-full" {{did-resize (fn this.handleMapResize (hash verticalTopPadding=65))}}>
2
+ <LeafletMap {{set-container-dimensions (hash verticalTopPadding=65)}} class="z-0 zones-leaflet" @lat={{this.userLatitude}} @lng={{this.userLongitude}} @zoom={{14}} @onLoad={{this.setMapReference}} as |layers|>
3
+ <layers.tile @url="https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png" />
4
+
5
+ {{#each @model as |serviceArea|}}
6
+ {{#each serviceArea.zones as |zone|}}
7
+ <layers.polygon @id={{zone.id}} @locations={{zone.locations}} @color={{or zone.stroke_color "#48BB78"}} @onAdd={{fn
8
+ this.makeZoneEditable zone}} />
9
+ {{/each}}
10
+ {{/each}}
11
+
12
+ {{#if this.showDrawControl}}
13
+ <LeafletDrawControl @draw={{hash marker=false circlemarker=false circle=false polyline=false}} @onDrawDrawstop={{this.createZoneFromLayer}} @onDrawDeleted={{this.deleteZoneBorders}} @onDrawEditstop={{this.saveZoneCoordinateChanges}} @onDrawFeatureGroupCreated={{this.setFeatureGroup}} />
14
+ {{/if}}
15
+
16
+ {{#if this.activeServiceArea}}
17
+ <layers.polygon @locations={{this.activeServiceArea.bounds}} @color="#48BB78" />
18
+ {{/if}}
19
+ </LeafletMap>
20
+
21
+ <div class="z-20 absolute right-0 top-0">
22
+ <div class="zones-panel">
23
+ <div class="content-panel">
24
+ <div class="content-panel-header items-center flex">
25
+ <h3 class="text-lg font-semibold dark:text-gray-100">
26
+ Zones
27
+ </h3>
28
+
29
+ <div class="flex items-center">
30
+ <Button @size="sm" @icon="crosshairs" @onClick={{this.moveToCurrentLocation}} class="mr-2" />
31
+ <Button @type="primary" @size="sm" @text="New Service Area" @onClick={{this.createServiceArea}} />
32
+ </div>
33
+ </div>
34
+ <div class="content-panel-body no-padding sidebar-panels not-service-nav w-full">
35
+ <ContentPanel @title={{serviceArea.name}} @open={{true}} @panelBodyClass="bg-white dark:bg-gray-800">
36
+ <div class="px-2 mb-2">
37
+ <div class="flex items-center justify-end">
38
+ <Button class="mr-2" @icon="eye" @type="magic" @text="Focus" @onClick={{fn this.startZoneEditing serviceArea}} @helpText="Moves map focus to {{serviceArea.name}}. Once focused you will then be able to edit, delete, and define zone bounds for the service area." />
39
+ <DropdownButton @icon="cog" @size="sm" @contentClass="dropdown-menu" @size="xs" @horizontalPosition="right" @helpText="Service Area options." as |dd|>
40
+ <div class="dropdown-menu-content context-menu">
41
+ <a href="javascript:;" class="dropdown-menu-item" {{on "click" (fn this.renameServiceArea serviceArea)}}>Rename Service Area</a>
42
+ <a href="javascript:;" class="dropdown-menu-item" {{on "click" (fn this.deleteServiceArea serviceArea)}}>Delete Service Area</a>
43
+ </div>
44
+ </DropdownButton>
45
+ </div>
46
+ </div>
47
+ <div class="px-0 py-1">
48
+ {{#each serviceArea.zones as |zone|}}
49
+ <div class="flex items-center justify-between border-t w-full border-gray-900 py-3 px-5 dark:text-gray-100">
50
+ <div>
51
+ <div class="font-semibold mb-1">
52
+ <FaIcon @icon="map-marker" class="mr-1" />
53
+ {{zone.name}}
54
+ </div>
55
+ <div>Created At: {{zone.createdAt}}</div>
56
+ </div>
57
+
58
+ <div>
59
+ <Button @icon="edit" @size="xs" @helpText="Edit the zone boundary." />
60
+ <Button @icon="drafting-compass" @size="xs" @helpText="View zone details." @onClick={{fn this.editZone zone}} />
61
+ <Button @icon="trash" @size="xs" @helpText="Delete this zone." @onClick={{fn this.deleteZone zone}} />
62
+ </div>
63
+ </div>
64
+ {{/each}}
65
+ </div>
66
+ </ContentPanel>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ {{outlet}}
@@ -0,0 +1 @@
1
+ {{outlet}}
@@ -0,0 +1 @@
1
+ {{outlet}}
@@ -0,0 +1 @@
1
+ export { default, calculatePercentage } from '@fleetbase/ember-core/utils/calculate-percentage';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/ember-core/utils/extract-coordinates';
@@ -0,0 +1 @@
1
+ export { default, formatCurrency } from '@fleetbase/ember-core/utils/format-currency';
@@ -0,0 +1,17 @@
1
+ import calculateBounds from './calculate-bounds';
2
+ import EmberObject from '@ember/object';
3
+
4
+ const excludeFromJSON = ['length'];
5
+
6
+ export default class GeoJson extends EmberObject {
7
+ toJSON() {
8
+ var obj = {};
9
+ for (var key in this) {
10
+ if (this.hasOwnProperty(key) && excludeFromJSON.indexOf(key) === -1) {
11
+ obj[key] = this[key];
12
+ }
13
+ }
14
+ obj.bbox = calculateBounds(this);
15
+ return obj;
16
+ }
17
+ }
@@ -0,0 +1,14 @@
1
+ import { isEmpty } from '@ember/utils';
2
+ import { isArray } from '@ember/array';
3
+
4
+ export default function isFacilitatorSupportedPlace(facilitator, place) {
5
+ const supportedCountries = facilitator?.get('supported_countries');
6
+ const country = place?.get('country');
7
+ console.log('isFacilitatorSupportedPlace()', supportedCountries, country, place);
8
+
9
+ if (isEmpty(supportedCountries) || isEmpty(country)) {
10
+ return true;
11
+ }
12
+
13
+ return isArray(supportedCountries) && supportedCountries.includes(country);
14
+ }
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/ember-core/utils/to-model';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/cell/driver-name';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/custom-field-value';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/custom-field';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/display-place';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/driver-card-mini';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/driver-card';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/event-timeline/event';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/event-timeline';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/file-icon';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/fleet-driver-listing';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/full-calendar/draggable';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/full-calendar';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/full-size';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/global-search';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/horizontal-route';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/integrated-order-details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/leaflet-draw-control';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/leaflet-rotated-marker';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/live-map';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container/toolbar/zones-panel';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container/toolbar-container';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container/toolbar';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container/topbar';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container/view-switch';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/map-container';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/assign-driver';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/clone-config-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/contact-details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/contact-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/driver-assign-order';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/driver-assign-vehicle';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/driver-assign-vendor';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/driver-details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/driver-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/edit-meta-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/entity-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/entity-meta-field-prompt';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/fleet-details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/fleet-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/fuel-report-details';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/fuel-report-form';
@@ -0,0 +1 @@
1
+ export { default } from '@fleetbase/fleetops-engine/components/modals/group-details';