@fleetbase/fleetops-engine 0.3.1 → 0.3.2

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 (234) hide show
  1. package/addon/components/contact-form-panel.hbs +82 -0
  2. package/addon/components/contact-form-panel.js +195 -0
  3. package/addon/components/contact-panel/details.hbs +36 -0
  4. package/addon/components/contact-panel/details.js +3 -0
  5. package/addon/components/contact-panel.hbs +52 -0
  6. package/addon/components/contact-panel.js +161 -0
  7. package/addon/components/driver-form-panel.hbs +39 -55
  8. package/addon/components/driver-form-panel.js +41 -0
  9. package/addon/components/driver-panel/details.hbs +2 -2
  10. package/addon/components/driver-panel.hbs +12 -10
  11. package/addon/components/driver-panel.js +13 -0
  12. package/addon/components/fleet-form-panel.hbs +28 -28
  13. package/addon/components/fleet-form-panel.js +150 -1
  14. package/addon/components/fleet-listing-panel.hbs +8 -0
  15. package/addon/components/fleet-listing-panel.js +34 -0
  16. package/addon/components/fleet-panel/details.hbs +30 -0
  17. package/addon/components/fleet-panel/driver-listing.hbs +72 -0
  18. package/addon/components/fleet-panel/driver-listing.js +149 -0
  19. package/addon/components/fleet-panel/vehicle-listing.hbs +72 -0
  20. package/addon/components/fleet-panel/vehicle-listing.js +149 -0
  21. package/addon/components/fleet-panel.hbs +12 -58
  22. package/addon/components/fleet-panel.js +148 -26
  23. package/addon/components/fleet-vehicle-listing.hbs +0 -1
  24. package/addon/components/fuel-report-form-panel.hbs +41 -0
  25. package/addon/components/fuel-report-form-panel.js +122 -0
  26. package/addon/components/fuel-report-panel/details.hbs +38 -0
  27. package/addon/components/fuel-report-panel.hbs +30 -0
  28. package/addon/components/fuel-report-panel.js +161 -0
  29. package/addon/components/issue-form-panel.hbs +85 -0
  30. package/addon/components/issue-form-panel.js +211 -0
  31. package/addon/components/issue-panel/details.hbs +48 -0
  32. package/addon/components/issue-panel.hbs +30 -0
  33. package/addon/components/issue-panel.js +160 -0
  34. package/addon/components/layout/fleet-ops-sidebar.hbs +2 -2
  35. package/addon/components/live-map.js +2 -0
  36. package/addon/components/map-container/toolbar.hbs +9 -9
  37. package/addon/components/map-container/topbar.hbs +1 -1
  38. package/addon/components/modals/issue-details.hbs +38 -0
  39. package/addon/components/modals/issue-from.hbs +138 -0
  40. package/addon/components/place-form-panel.hbs +50 -0
  41. package/addon/components/place-form-panel.js +134 -0
  42. package/addon/components/place-panel/details.hbs +95 -0
  43. package/addon/components/place-panel.hbs +30 -0
  44. package/addon/components/place-panel.js +161 -0
  45. package/addon/components/vehicle-form-panel.hbs +35 -44
  46. package/addon/components/vehicle-form-panel.js +41 -0
  47. package/addon/components/vehicle-panel/details.hbs +8 -2
  48. package/addon/components/vehicle-panel.hbs +8 -6
  49. package/addon/components/vendor-form-panel/create-form.hbs +114 -0
  50. package/addon/components/vendor-form-panel/create-form.js +158 -0
  51. package/addon/components/vendor-form-panel/edit-form.hbs +98 -0
  52. package/addon/components/vendor-form-panel/edit-form.js +51 -0
  53. package/addon/components/vendor-form-panel.hbs +48 -0
  54. package/addon/components/vendor-form-panel.js +226 -0
  55. package/addon/components/vendor-panel/details.hbs +77 -0
  56. package/addon/components/vendor-panel/details.js +12 -0
  57. package/addon/components/vendor-panel.hbs +58 -0
  58. package/addon/components/vendor-panel.js +161 -0
  59. package/addon/controllers/management/contacts/index/details.js +55 -0
  60. package/addon/controllers/management/contacts/index/edit.js +111 -0
  61. package/addon/controllers/management/contacts/index/new.js +88 -0
  62. package/addon/controllers/management/contacts/index.js +23 -128
  63. package/addon/controllers/management/drivers/index/new.js +2 -2
  64. package/addon/controllers/management/drivers/index.js +18 -32
  65. package/addon/controllers/management/fleets/index/details.js +53 -0
  66. package/addon/controllers/management/fleets/index/edit.js +75 -41
  67. package/addon/controllers/management/fleets/index/new.js +42 -57
  68. package/addon/controllers/management/fleets/index.js +0 -1
  69. package/addon/controllers/management/fuel-reports/index/details.js +63 -0
  70. package/addon/controllers/management/fuel-reports/index/edit.js +111 -0
  71. package/addon/controllers/management/fuel-reports/index/new.js +95 -0
  72. package/addon/controllers/management/fuel-reports/index.js +57 -127
  73. package/addon/controllers/management/issues/index/details.js +54 -0
  74. package/addon/controllers/management/issues/index/edit.js +111 -0
  75. package/addon/controllers/management/issues/index/new.js +94 -0
  76. package/addon/controllers/management/issues/index.js +131 -26
  77. package/addon/controllers/management/places/index/details.js +55 -0
  78. package/addon/controllers/management/places/index/edit.js +111 -0
  79. package/addon/controllers/management/places/index/new.js +88 -0
  80. package/addon/controllers/management/places/index.js +21 -182
  81. package/addon/controllers/management/vehicles/index/new.js +2 -6
  82. package/addon/controllers/management/vendors/index/details.js +55 -0
  83. package/addon/controllers/management/vendors/index/edit.js +111 -0
  84. package/addon/controllers/management/vendors/index/new.js +88 -0
  85. package/addon/controllers/management/vendors/index.js +43 -247
  86. package/addon/routes/management/contacts/index/details.js +14 -0
  87. package/addon/routes/management/contacts/index/edit.js +10 -0
  88. package/addon/routes/management/contacts/index/new.js +3 -0
  89. package/addon/routes/management/contacts/index.js +1 -1
  90. package/addon/routes/management/fleets/index/details.js +1 -1
  91. package/addon/routes/management/fleets/index/edit.js +1 -1
  92. package/addon/routes/management/fleets/index.js +1 -1
  93. package/addon/routes/management/fuel-reports/index/details.js +14 -0
  94. package/addon/routes/management/fuel-reports/index/edit.js +10 -0
  95. package/addon/routes/management/fuel-reports/index/new.js +3 -0
  96. package/addon/routes/management/fuel-reports/index.js +3 -1
  97. package/addon/routes/management/issues/index/details.js +14 -0
  98. package/addon/routes/management/issues/index/edit.js +10 -0
  99. package/addon/routes/management/issues/index/new.js +3 -0
  100. package/addon/routes/management/issues/index.js +1 -1
  101. package/addon/routes/management/places/index/details.js +14 -0
  102. package/addon/routes/management/places/index/edit.js +10 -0
  103. package/addon/routes/management/places/index/new.js +3 -0
  104. package/addon/routes/management/places/index.js +6 -1
  105. package/addon/routes/management/vendors/index/details.js +15 -0
  106. package/addon/routes/management/vendors/index/edit.js +11 -0
  107. package/addon/routes/management/vendors/index/new.js +3 -0
  108. package/addon/routes/management/vendors/index.js +1 -0
  109. package/addon/routes.js +27 -7
  110. package/addon/services/context-panel.js +60 -0
  111. package/addon/templates/management/contacts/index/details.hbs +1 -0
  112. package/addon/templates/management/contacts/index/edit.hbs +1 -0
  113. package/addon/templates/management/contacts/index/new.hbs +1 -0
  114. package/addon/templates/management/contacts/index.hbs +22 -3
  115. package/addon/templates/management/drivers/index.hbs +29 -5
  116. package/addon/templates/management/fleets/index/details.hbs +1 -1
  117. package/addon/templates/management/fleets/index/edit.hbs +1 -1
  118. package/addon/templates/management/fleets/index/new.hbs +1 -1
  119. package/addon/templates/management/fuel-reports/index/details.hbs +1 -0
  120. package/addon/templates/management/fuel-reports/index/edit.hbs +1 -0
  121. package/addon/templates/management/fuel-reports/index/new.hbs +1 -0
  122. package/addon/templates/management/fuel-reports/index.hbs +25 -4
  123. package/addon/templates/management/issues/index/details.hbs +1 -0
  124. package/addon/templates/management/issues/index/edit.hbs +1 -0
  125. package/addon/templates/management/issues/index/new.hbs +1 -0
  126. package/addon/templates/management/issues/index.hbs +5 -3
  127. package/addon/templates/management/places/index/details.hbs +1 -0
  128. package/addon/templates/management/places/index/edit.hbs +1 -0
  129. package/addon/templates/management/places/index/new.hbs +1 -0
  130. package/addon/templates/management/vendors/index/details.hbs +1 -0
  131. package/addon/templates/management/vendors/index/edit.hbs +1 -0
  132. package/addon/templates/management/vendors/index/new.hbs +1 -0
  133. package/addon/templates/operations/orders/index.hbs +3 -3
  134. package/app/components/contact-form-panel.js +1 -0
  135. package/app/components/contact-panel/details.js +1 -0
  136. package/app/components/contact-panel.js +1 -0
  137. package/app/components/fleet-listing-panel.js +1 -0
  138. package/app/components/fleet-panel/details.js +1 -0
  139. package/app/components/fleet-panel/driver-listing.js +1 -0
  140. package/app/components/fleet-panel/vehicle-listing.js +1 -0
  141. package/app/components/fuel-report-form-panel.js +1 -0
  142. package/app/components/fuel-report-panel.js +1 -0
  143. package/app/components/issue-form-panel.js +1 -0
  144. package/app/components/issue-panel.js +1 -0
  145. package/app/components/place-form-panel.js +1 -0
  146. package/app/components/place-panel.js +1 -0
  147. package/app/components/vendor-form-panel/create-form.js +1 -0
  148. package/app/components/vendor-form-panel/edit-form.js +1 -0
  149. package/app/components/vendor-form-panel.js +1 -0
  150. package/app/components/vendor-panel/details.js +1 -0
  151. package/app/components/vendor-panel.js +1 -0
  152. package/app/controllers/management/contacts/index/details.js +1 -0
  153. package/app/controllers/management/contacts/index/edit.js +1 -0
  154. package/app/controllers/management/contacts/index/new.js +1 -0
  155. package/app/controllers/management/fuel-reports/index/details.js +1 -0
  156. package/app/controllers/management/fuel-reports/index/edit.js +1 -0
  157. package/app/controllers/management/fuel-reports/index/new.js +1 -0
  158. package/app/controllers/management/issues/index/details.js +1 -0
  159. package/app/controllers/management/issues/index/edit.js +1 -0
  160. package/app/controllers/management/issues/index/new.js +1 -0
  161. package/app/controllers/management/places/index/details.js +1 -0
  162. package/app/controllers/management/places/index/edit.js +1 -0
  163. package/app/controllers/management/places/index/new.js +1 -0
  164. package/app/controllers/management/vendors/index/edit.js +1 -0
  165. package/app/controllers/management/vendors/index/new.js +1 -0
  166. package/app/routes/addon/routes/management/places/index/new.js +1 -0
  167. package/app/routes/management/contacts/index/details.js +1 -0
  168. package/app/routes/management/contacts/index/edit.js +1 -0
  169. package/app/routes/management/contacts/index/new.js +1 -0
  170. package/app/routes/management/fuel-reports/index/details.js +1 -0
  171. package/app/routes/management/fuel-reports/index/edit.js +1 -0
  172. package/app/routes/management/fuel-reports/index/new.js +1 -0
  173. package/app/routes/management/issues/index/details.js +1 -0
  174. package/app/routes/management/issues/index/edit.js +1 -0
  175. package/app/routes/management/issues/index/new.js +1 -0
  176. package/app/routes/management/places/index/details.js +1 -0
  177. package/app/routes/management/places/index/edit.js +1 -0
  178. package/app/routes/management/places/index/new.js +1 -0
  179. package/app/routes/management/vendors/index/details.js +1 -0
  180. package/app/routes/management/vendors/index/edit.js +1 -0
  181. package/app/routes/management/vendors/index/new.js +1 -0
  182. package/app/templates/addon/routes/management/places/index/new.js +1 -0
  183. package/app/templates/management/contacts/index/details.js +1 -0
  184. package/app/templates/management/contacts/index/edit.js +1 -0
  185. package/app/templates/management/contacts/index/new.js +1 -0
  186. package/app/templates/management/fuel-reports/index/details.js +1 -0
  187. package/app/templates/management/fuel-reports/index/edit.js +1 -0
  188. package/app/templates/management/fuel-reports/index/new.js +1 -0
  189. package/app/templates/management/issues/index/details.js +1 -0
  190. package/app/templates/management/issues/index/edit.js +1 -0
  191. package/app/templates/management/issues/index/new.js +1 -0
  192. package/app/templates/management/places/index/details.js +1 -0
  193. package/app/templates/management/places/index/edit.js +1 -0
  194. package/app/templates/management/places/index/new.js +1 -0
  195. package/app/templates/management/vendors/index/details.js +1 -0
  196. package/app/templates/management/vendors/index/edit.js +1 -0
  197. package/app/templates/management/vendors/index/new.js +1 -0
  198. package/composer.json +1 -1
  199. package/config/environment.js +2 -1
  200. package/extension.json +1 -1
  201. package/package.json +4 -3
  202. package/server/migrations/2023_11_03_072503_refactor_issues_table_columns.php +42 -0
  203. package/server/migrations/2023_11_06_040645_refactor_fuel_reports_table.php +38 -0
  204. package/server/src/Casts/Point.php +15 -1
  205. package/server/src/Http/Controllers/Internal/v1/DriverController.php +33 -15
  206. package/server/src/Http/Filter/FleetFilter.php +7 -0
  207. package/server/src/Http/Filter/FuelReportFilter.php +58 -0
  208. package/server/src/Http/Filter/IssueFilter.php +69 -0
  209. package/server/src/Http/Filter/VehicleFilter.php +10 -0
  210. package/server/src/Http/Middleware/TransformLocationMiddleware.php +48 -0
  211. package/server/src/Http/Resources/v1/Driver.php +1 -0
  212. package/server/src/Http/Resources/v1/Fleet.php +20 -21
  213. package/server/src/Http/Resources/v1/FuelReport.php +37 -35
  214. package/server/src/Http/Resources/v1/Issue.php +77 -0
  215. package/server/src/Http/Resources/v1/ParentFleet.php +60 -0
  216. package/server/src/Http/Resources/v1/SubFleet.php +60 -0
  217. package/server/src/Http/Resources/v1/Vehicle.php +4 -2
  218. package/server/src/Integrations/Lalamove/Lalamove.php +6 -6
  219. package/server/src/Models/Contact.php +7 -0
  220. package/server/src/Models/Driver.php +1 -1
  221. package/server/src/Models/Fleet.php +35 -4
  222. package/server/src/Models/FuelReport.php +53 -3
  223. package/server/src/Models/Issue.php +106 -7
  224. package/server/src/Models/Vehicle.php +1 -1
  225. package/server/src/Models/VehicleDevice.php +3 -1
  226. package/server/src/Models/VehicleDeviceEvent.php +7 -3
  227. package/server/src/Notifications/OrderAssigned.php +0 -6
  228. package/server/src/Notifications/OrderCanceled.php +0 -6
  229. package/server/src/Notifications/OrderDispatchFailed.php +0 -6
  230. package/server/src/Notifications/OrderDispatched.php +0 -6
  231. package/server/src/Notifications/OrderPing.php +0 -6
  232. package/server/src/Notifications/OrderSplit.php +0 -6
  233. package/server/src/Providers/NotificationServiceProvider.php +1 -1
  234. package/server/src/routes.php +2 -2
@@ -0,0 +1,111 @@
1
+ import Controller from '@ember/controller';
2
+ import { inject as service } from '@ember/service';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { action } from '@ember/object';
5
+
6
+ export default class ManagementContactsIndexEditController extends Controller {
7
+ /**
8
+ * Inject the `hostRouter` service
9
+ *
10
+ * @memberof ManagementcontactsIndexEditController
11
+ */
12
+ @service hostRouter;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementcontactsIndexEditController
18
+ */
19
+ @service modalsManager;
20
+
21
+ /**
22
+ * The overlay component context.
23
+ *
24
+ * @memberof ManagementcontactsIndexEditController
25
+ */
26
+ @tracked overlay;
27
+
28
+ /**
29
+ * When exiting the overlay.
30
+ *
31
+ * @return {Transition}
32
+ * @memberof ManagementcontactsIndexEditController
33
+ */
34
+ @action transitionBack(contact) {
35
+ // check if contact record has been edited and prompt for confirmation
36
+ if (contact.hasDirtyAttributes) {
37
+ return this.confirmContinueWithUnsavedChanges(contact, {
38
+ confirm: () => {
39
+ contact.rollbackAttributes();
40
+ return this.transitionToRoute('management.contacts.index');
41
+ },
42
+ });
43
+ }
44
+
45
+ return this.transitionToRoute('management.contacts.index');
46
+ }
47
+
48
+ /**
49
+ * Set the overlay component context object.
50
+ *
51
+ * @param {OverlayContext} overlay
52
+ * @memberof ManagementcontactsIndexEditController
53
+ */
54
+ @action setOverlayContext(overlay) {
55
+ this.overlay = overlay;
56
+ }
57
+
58
+ /**
59
+ * When contact details button is clicked in overlay.
60
+ *
61
+ * @param {ContactModel} contact
62
+ * @return {Promise}
63
+ * @memberof ManagementcontactsIndexEditController
64
+ */
65
+ @action onViewDetails(contact) {
66
+ // check if contact record has been edited and prompt for confirmation
67
+ if (contact.hasDirtyAttributes) {
68
+ return this.confirmContinueWithUnsavedChanges(contact);
69
+ }
70
+
71
+ return this.transitionToRoute('management.contacts.index.details', contact);
72
+ }
73
+
74
+ /**
75
+ * Trigger a route refresh and focus the new contact created.
76
+ *
77
+ * @param {ContactModel} contact
78
+ * @return {Promise}
79
+ * @memberof ManagementcontactsIndexEditController
80
+ */
81
+ @action onAfterSave(contact) {
82
+ if (this.overlay) {
83
+ this.overlay.close();
84
+ }
85
+
86
+ this.hostRouter.refresh();
87
+ return this.transitionToRoute('management.contacts.index.details', contact);
88
+ }
89
+
90
+ /**
91
+ * Prompts the user to confirm if they wish to continue with unsaved changes.
92
+ *
93
+ * @method
94
+ * @param {ContactModel} contact - The contact object with unsaved changes.
95
+ * @param {Object} [options={}] - Additional options for configuring the modal.
96
+ * @returns {Promise} A promise that resolves when the user confirms, and transitions to a new route.
97
+ * @memberof ManagementcontactsIndexEditController
98
+ */
99
+ confirmContinueWithUnsavedChanges(contact, options = {}) {
100
+ return this.modalsManager.confirm({
101
+ title: 'Continue Without Saving?',
102
+ body: 'Unsaved changes to this contact will be lost. Click continue to proceed.',
103
+ acceptButtonText: 'Continue without saving',
104
+ confirm: () => {
105
+ contact.rollbackAttributes();
106
+ return this.transitionToRoute('management.contacts.index.details', contact);
107
+ },
108
+ ...options,
109
+ });
110
+ }
111
+ }
@@ -0,0 +1,88 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { inject as service } from '@ember/service';
4
+ import { action } from '@ember/object';
5
+
6
+ export default class ManagementContactsIndexNewController extends Controller {
7
+ /**
8
+ * Inject the `store` service
9
+ *
10
+ * @memberof ManagementcontactsIndexNewController
11
+ */
12
+ @service store;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementcontactsIndexNewController
18
+ */
19
+ @service hostRouter;
20
+
21
+ /**
22
+ * Inject the `hostRouter` service
23
+ *
24
+ * @memberof ManagementcontactsIndexNewController
25
+ */
26
+ @service modalsManager;
27
+
28
+ /**
29
+ * The overlay component context.
30
+ *
31
+ * @memberof ManagementcontactsIndexNewController
32
+ */
33
+ @tracked overlay;
34
+
35
+ /**
36
+ * The contact being created.
37
+ *
38
+ * @var {contactModel}
39
+ */
40
+ @tracked contact = this.store.createRecord('contact', { type: 'contact', status: 'active' });
41
+
42
+ /**
43
+ * Set the overlay component context object.
44
+ *
45
+ * @param {OverlayContext} overlay
46
+ * @memberof ManagementcontactsIndexNewController
47
+ */
48
+ @action setOverlayContext(overlay) {
49
+ this.overlay = overlay;
50
+ }
51
+
52
+ /**
53
+ * When exiting the overlay.
54
+ *
55
+ * @return {Transition}
56
+ * @memberof ManagementcontactsIndexNewController
57
+ */
58
+ @action transitionBack() {
59
+ return this.transitionToRoute('management.contacts.index');
60
+ }
61
+
62
+ /**
63
+ * Trigger a route refresh and focus the new contact created.
64
+ *
65
+ * @param {contactModel} contact
66
+ * @return {Promise}
67
+ * @memberof ManagementcontactsIndexNewController
68
+ */
69
+ @action onAfterSave(contact) {
70
+ if (this.overlay) {
71
+ this.overlay.close();
72
+ }
73
+
74
+ this.hostRouter.refresh();
75
+ return this.transitionToRoute('management.contacts.index.details', contact).then(() => {
76
+ this.resetForm();
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Resets the form with a new contact record
82
+ *
83
+ * @memberof ManagementcontactsIndexNewController
84
+ */
85
+ resetForm() {
86
+ this.contact = this.store.createRecord('contact', { type: 'contact', status: 'active' });
87
+ }
88
+ }
@@ -258,24 +258,6 @@ export default class ManagementContactsIndexController extends Controller {
258
258
  this.query = value;
259
259
  }
260
260
 
261
- /**
262
- * Bulk deletes selected `driver` via confirm prompt
263
- *
264
- * @param {Array} selected an array of selected models
265
- * @void
266
- */
267
- @action bulkDeleteContacts() {
268
- const selected = this.table.selectedRows;
269
-
270
- this.crud.bulkDelete(selected, {
271
- modelNamePath: `name`,
272
- acceptButtonText: 'Delete Contacts',
273
- onSuccess: () => {
274
- return this.hostRouter.refresh();
275
- },
276
- });
277
- }
278
-
279
261
  /**
280
262
  * Toggles dialog to export `contact`
281
263
  *
@@ -289,134 +271,29 @@ export default class ManagementContactsIndexController extends Controller {
289
271
  * View a `contact` details in modal
290
272
  *
291
273
  * @param {ContactModel} contact
292
- * @param {Object} options
293
274
  * @void
294
275
  */
295
- @action viewContact(contact, options) {
296
- this.modalsManager.show('modals/contact-details', {
297
- title: contact.name,
298
- titleComponent: 'modal/title-with-buttons',
299
- acceptButtonText: 'Done',
300
- acceptButtonIcon: 'check',
301
- acceptButtonIconPrefix: 'fas',
302
- hideDeclineButton: true,
303
- headerButtons: [
304
- {
305
- icon: 'cog',
306
- iconPrefix: 'fas',
307
- type: 'link',
308
- size: 'xs',
309
- options: [
310
- {
311
- title: 'Edit Contact',
312
- action: () => {
313
- this.modalsManager.done().then(() => {
314
- return this.editContact(contact, {
315
- onFinish: () => {
316
- this.viewContact(contact);
317
- },
318
- });
319
- });
320
- },
321
- },
322
- {
323
- title: 'Delete Contact',
324
- action: () => {
325
- this.modalsManager.done().then(() => {
326
- return this.deleteContact(contact, {
327
- onDecline: () => {
328
- this.viewContact(contact);
329
- },
330
- });
331
- });
332
- },
333
- },
334
- ],
335
- },
336
- ],
337
- contact,
338
- ...options,
339
- });
276
+ @action viewContact(contact) {
277
+ return this.transitionToRoute('management.contacts.index.details', contact);
340
278
  }
341
279
 
342
280
  /**
343
281
  * Create a new `contact` in modal
344
282
  *
345
- * @param {Object} options
346
283
  * @void
347
284
  */
348
285
  @action createContact() {
349
- const contact = this.store.createRecord('contact', {
350
- photo_url: `/images/no-avatar.png`,
351
- });
352
-
353
- return this.editContact(contact, {
354
- title: 'New Contact',
355
- acceptButtonText: 'Confirm & Create',
356
- acceptButtonIcon: 'check',
357
- acceptButtonIconPrefix: 'fas',
358
- successNotification: (contact) => `New contact (${contact.name}) created.`,
359
- onConfirm: () => {
360
- return this.hostRouter.refresh();
361
- },
362
- });
286
+ return this.transitionToRoute('management.contacts.index.new');
363
287
  }
364
288
 
365
289
  /**
366
290
  * Edit a `contact` details
367
291
  *
368
292
  * @param {ContactModel} contact
369
- * @param {Object} options
370
293
  * @void
371
294
  */
372
- @action editContact(contact, options = {}) {
373
- this.modalsManager.show('modals/contact-form', {
374
- title: 'Edit Contact',
375
- acceptButtonText: 'Save Changes',
376
- acceptButtonIcon: 'save',
377
- declineButtonIcon: 'times',
378
- declineButtonIconPrefix: 'fas',
379
- contactTypes: this.contactTypes,
380
- contact,
381
- uploadNewPhoto: (file) => {
382
- this.fetch.uploadFile.perform(
383
- file,
384
- {
385
- path: `uploads/${contact.company_uuid}/contacts/${contact.slug}`,
386
- subject_uuid: contact.id,
387
- subject_type: 'contact',
388
- type: 'contact_photo',
389
- },
390
- (uploadedFile) => {
391
- contact.setProperties({
392
- photo_uuid: uploadedFile.id,
393
- photo_url: uploadedFile.url,
394
- photo: uploadedFile,
395
- });
396
- }
397
- );
398
- },
399
- confirm: (modal, done) => {
400
- modal.startLoading();
401
-
402
- return contact
403
- .save()
404
- .then((contact) => {
405
- if (typeof options.successNotification === 'function') {
406
- this.notifications.success(options.successNotification(contact));
407
- } else {
408
- this.notifications.success(options.successNotification ?? `${contact.name} details updated.`);
409
- }
410
-
411
- done();
412
- })
413
- .catch((error) => {
414
- modal.stopLoading();
415
- this.notifications.serverError(error);
416
- });
417
- },
418
- ...options,
419
- });
295
+ @action editContact(contact) {
296
+ return this.transitionToRoute('management.contacts.index.edit', contact);
420
297
  }
421
298
 
422
299
  /**
@@ -435,4 +312,22 @@ export default class ManagementContactsIndexController extends Controller {
435
312
  ...options,
436
313
  });
437
314
  }
315
+
316
+ /**
317
+ * Bulk deletes selected `contacts` via confirm prompt
318
+ *
319
+ * @param {Array} selected an array of selected models
320
+ * @void
321
+ */
322
+ @action bulkDeleteContacts() {
323
+ const selected = this.table.selectedRows;
324
+
325
+ this.crud.bulkDelete(selected, {
326
+ modelNamePath: `name`,
327
+ acceptButtonText: 'Delete Contacts',
328
+ onSuccess: () => {
329
+ return this.hostRouter.refresh();
330
+ },
331
+ });
332
+ }
438
333
  }
@@ -37,7 +37,7 @@ export default class ManagementDriversIndexNewController extends Controller {
37
37
  *
38
38
  * @var {DriverModel}
39
39
  */
40
- @tracked driver = this.store.createRecord('driver');
40
+ @tracked driver = this.store.createRecord('driver', { status: 'active' });
41
41
 
42
42
  /**
43
43
  * Set the overlay component context object.
@@ -83,6 +83,6 @@ export default class ManagementDriversIndexNewController extends Controller {
83
83
  * @memberof ManagementDriversIndexNewController
84
84
  */
85
85
  resetForm() {
86
- this.driver = this.store.createRecord('driver');
86
+ this.driver = this.store.createRecord('driver', { status: 'active' });
87
87
  }
88
88
  }
@@ -1,4 +1,4 @@
1
- import Controller, { inject as controller } from '@ember/controller';
1
+ import Controller from '@ember/controller';
2
2
  import { inject as service } from '@ember/service';
3
3
  import { tracked } from '@glimmer/tracking';
4
4
  import { action } from '@ember/object';
@@ -8,30 +8,8 @@ import { timeout } from 'ember-concurrency';
8
8
  import { task } from 'ember-concurrency-decorators';
9
9
  import extractCoordinates from '@fleetbase/ember-core/utils/extract-coordinates';
10
10
  import leafletIcon from '@fleetbase/ember-core/utils/leaflet-icon';
11
- // import Point from '@fleetbase/fleetops-data/utils/geojson/point';
12
11
 
13
12
  export default class ManagementDriversIndexController extends Controller {
14
- /**
15
- * Inject the `management.vendors.index` controller
16
- *
17
- * @var {Controller}
18
- */
19
- @controller('management.vendors.index') vendors;
20
-
21
- /**
22
- * Inject the `management.vehicles.index` controller
23
- *
24
- * @var {Controller}
25
- */
26
- @controller('management.vehicles.index') vehicles;
27
-
28
- /**
29
- * Inject the `management.fleets.index` controller
30
- *
31
- * @var {Controller}
32
- */
33
- @controller('management.fleets.index') fleets;
34
-
35
13
  /**
36
14
  * Inject the `notifications` service
37
15
  *
@@ -224,7 +202,18 @@ export default class ManagementDriversIndexController extends Controller {
224
202
  */
225
203
  @tracked layout = 'table';
226
204
 
205
+ /**
206
+ * True if the current layout style is grid.
207
+ *
208
+ * @memberof ManagementDriversIndexController
209
+ */
227
210
  @equal('layout', 'grid') isGridLayout;
211
+
212
+ /**
213
+ *Ttrue if the current layour style is table.
214
+ *
215
+ * @memberof ManagementDriversIndexController
216
+ */
228
217
  @equal('layout', 'table') isTableLayout;
229
218
 
230
219
  /**
@@ -307,7 +296,7 @@ export default class ManagementDriversIndexController extends Controller {
307
296
  cellComponent: 'table/cell/link-list',
308
297
  cellComponentLabelPath: 'name',
309
298
  action: (fleet) => {
310
- this.fleets.viewFleet(fleet);
299
+ this.contextPanel.focus(fleet);
311
300
  },
312
301
  valuePath: 'fleets',
313
302
  width: '180px',
@@ -664,16 +653,13 @@ export default class ManagementDriversIndexController extends Controller {
664
653
  * View information about the driver vendor
665
654
  *
666
655
  * @param {DriverModel} driver
667
- * @param {Object} options
668
656
  * @void
669
657
  */
670
- @action async viewDriverVendor(driver, options = {}) {
671
- this.modalsManager.displayLoader();
658
+ @action async viewDriverVendor(driver) {
659
+ const vendor = await driver.loadVendor();
672
660
 
673
- const vendor = await this.store.findRecord('vendor', driver.vendor_uuid);
674
-
675
- this.modalsManager.done().then(() => {
676
- return this.vendors.viewVendor(vendor, options);
677
- });
661
+ if (vendor) {
662
+ this.contextPanel.focus(vendor);
663
+ }
678
664
  }
679
665
  }
@@ -1,8 +1,61 @@
1
1
  import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
2
3
  import { action } from '@ember/object';
3
4
 
5
+ /**
6
+ * Controller for managing the details view within the "Management -> Fleets -> Index" route.
7
+ *
8
+ * @class ManagementFleetsIndexDetailsController
9
+ * @extends Controller
10
+ */
4
11
  export default class ManagementFleetsIndexDetailsController extends Controller {
12
+ /**
13
+ * The currently active view tab ('details' by default).
14
+ *
15
+ * @type {String}
16
+ * @tracked
17
+ */
18
+ @tracked view = 'details';
19
+
20
+ /**
21
+ * An array of query parameters to be serialized in the URL.
22
+ *
23
+ * @type {String[]}
24
+ * @tracked
25
+ */
26
+ @tracked queryParams = ['view'];
27
+
28
+ /**
29
+ * Transitions back to the "management.fleets.index" route.
30
+ *
31
+ * @method
32
+ * @action
33
+ * @returns {Transition} The transition object representing the route change.
34
+ */
5
35
  @action transitionBack() {
6
36
  return this.transitionToRoute('management.fleets.index');
7
37
  }
38
+
39
+ /**
40
+ * Transitions to the edit view for a specific fleet.
41
+ *
42
+ * @method
43
+ * @param {FleetModel} fleet - The fleet to be edited.
44
+ * @action
45
+ * @returns {Transition} The transition object representing the route change.
46
+ */
47
+ @action onEdit(fleet) {
48
+ return this.transitionToRoute('management.fleets.index.edit', fleet);
49
+ }
50
+
51
+ /**
52
+ * Updates the active view tab.
53
+ *
54
+ * @method
55
+ * @param {String} tab - The name of the tab to activate.
56
+ * @action
57
+ */
58
+ @action onTabChanged(tab) {
59
+ this.view = tab;
60
+ }
8
61
  }