@fleetbase/fleetops-engine 0.3.0 → 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 (235) 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 +2 -2
  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 +37 -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 +15 -0
  228. package/server/src/Notifications/OrderCanceled.php +15 -0
  229. package/server/src/Notifications/OrderDispatchFailed.php +15 -0
  230. package/server/src/Notifications/OrderDispatched.php +15 -0
  231. package/server/src/Notifications/OrderPing.php +15 -0
  232. package/server/src/Notifications/OrderSplit.php +26 -5
  233. package/server/src/Providers/FleetOpsServiceProvider.php +22 -0
  234. package/server/src/Providers/NotificationServiceProvider.php +43 -0
  235. package/server/src/routes.php +2 -2
@@ -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';
@@ -7,20 +7,6 @@ import { timeout } from 'ember-concurrency';
7
7
  import { task } from 'ember-concurrency-decorators';
8
8
 
9
9
  export default class ManagementFuelReportsIndexController extends Controller {
10
- /**
11
- * Inject the `management.drivers.index` controller
12
- *
13
- * @var {Controller}
14
- */
15
- @controller('management.drivers.index') drivers;
16
-
17
- /**
18
- * Inject the `management.vehicles.index` controller
19
- *
20
- * @var {Controller}
21
- */
22
- @controller('management.vehicles.index') vehicles;
23
-
24
10
  /**
25
11
  * Inject the `notifications` service
26
12
  *
@@ -56,6 +42,13 @@ export default class ManagementFuelReportsIndexController extends Controller {
56
42
  */
57
43
  @service hostRouter;
58
44
 
45
+ /**
46
+ * Inject the `contextPanel` service
47
+ *
48
+ * @var {Service}
49
+ */
50
+ @service contextPanel;
51
+
59
52
  /**
60
53
  * Inject the `filters` service
61
54
  *
@@ -140,19 +133,28 @@ export default class ManagementFuelReportsIndexController extends Controller {
140
133
  */
141
134
  @tracked columns = [
142
135
  {
143
- label: null,
144
- width: '20px',
136
+ label: 'ID',
137
+ valuePath: 'public_id',
138
+ width: '120px',
145
139
  cellComponent: 'table/cell/anchor',
146
- anchorIcon: 'eye',
147
- anchorSpanClass: 'hidden',
148
140
  action: this.viewFuelReport,
141
+ resizable: true,
142
+ sortable: true,
143
+ filterable: true,
144
+ filterComponent: 'filter/string',
149
145
  },
150
146
  {
151
147
  label: 'Driver',
152
148
  valuePath: 'driver_name',
153
149
  width: '120px',
154
150
  cellComponent: 'table/cell/anchor',
155
- action: this.viewDriver,
151
+ onClick: async (fuelReport) => {
152
+ let driver = await fuelReport.loadDriver();
153
+
154
+ if (driver) {
155
+ this.contextPanel.focus(driver);
156
+ }
157
+ },
156
158
  resizable: true,
157
159
  sortable: true,
158
160
  filterable: true,
@@ -166,7 +168,13 @@ export default class ManagementFuelReportsIndexController extends Controller {
166
168
  valuePath: 'vehicle_name',
167
169
  width: '120px',
168
170
  cellComponent: 'table/cell/anchor',
169
- action: this.viewVehicle,
171
+ onClick: async (fuelReport) => {
172
+ let vehicle = await fuelReport.loadVehicle();
173
+
174
+ if (vehicle) {
175
+ this.contextPanel.focus(vehicle);
176
+ }
177
+ },
170
178
  resizable: true,
171
179
  sortable: true,
172
180
  filterable: true,
@@ -175,17 +183,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
175
183
  filterParam: 'vehicle',
176
184
  model: 'vehicle',
177
185
  },
178
- {
179
- label: 'ID',
180
- valuePath: 'public_id',
181
- width: '120px',
182
- cellComponent: 'table/cell/anchor',
183
- action: this.viewFuelReport,
184
- resizable: true,
185
- sortable: true,
186
- filterable: true,
187
- filterComponent: 'filter/string',
188
- },
189
186
  {
190
187
  label: 'Country',
191
188
  valuePath: 'country',
@@ -263,24 +260,6 @@ export default class ManagementFuelReportsIndexController extends Controller {
263
260
  },
264
261
  ];
265
262
 
266
- /**
267
- * Bulk deletes selected `driver` via confirm prompt
268
- *
269
- * @param {Array} selected an array of selected models
270
- * @void
271
- */
272
- @action bulkDeleteFuelReports() {
273
- const selected = this.table.selectedRows;
274
-
275
- this.crud.bulkFuelReports(selected, {
276
- modelNamePath: `name`,
277
- acceptButtonText: 'Delete Fuel Reports',
278
- onSuccess: () => {
279
- return this.hostRouter.refresh();
280
- },
281
- });
282
- }
283
-
284
263
  /**
285
264
  * The search task.
286
265
  *
@@ -306,7 +285,7 @@ export default class ManagementFuelReportsIndexController extends Controller {
306
285
  }
307
286
 
308
287
  /**
309
- * Toggles dialog to export `fuel-report`
288
+ * Toggles dialog to export a fuel report
310
289
  *
311
290
  * @void
312
291
  */
@@ -314,105 +293,38 @@ export default class ManagementFuelReportsIndexController extends Controller {
314
293
  this.crud.export('fuel-report');
315
294
  }
316
295
 
317
- @action async viewDriver(fuelReport) {
318
- if (!fuelReport.driver_uuid) {
319
- return this.notifications.warning('No driver attributed to fuel report.');
320
- }
321
-
322
- this.loader.show({ loadingMessage: 'Loading...' });
323
- const driver = await this.store.findRecord('driver', fuelReport.driver_uuid);
324
- this.loader.removeLoader();
325
-
326
- // display driver details
327
- this.drivers.viewDriver(driver);
328
- }
329
-
330
- @action async viewVehicle(fuelReport) {
331
- if (!fuelReport.vehicle_uuid) {
332
- return this.notifications.warning('No vehicle attributed to fuel report.');
333
- }
334
-
335
- this.loader.show({ loadingMessage: 'Loading...' });
336
- const vehicle = await this.store.findRecord('vehicle', fuelReport.vehicle_uuid);
337
- this.loader.remove();
338
-
339
- // display vehicle details
340
- this.vehicles.viewVehicle(vehicle);
341
- }
342
-
343
296
  /**
344
- * View a `fuelReport` details in modal
297
+ * View the selected fuel report
345
298
  *
346
299
  * @param {FuelReportModel} fuelReport
347
300
  * @param {Object} options
348
301
  * @void
349
302
  */
350
- @action viewFuelReport(fuelReport, options = {}) {
351
- this.modalsManager.show('modals/fuel-report-details', {
352
- title: `Fuel Report - ${fuelReport.createdAt}`,
353
- hideDeclineButton: true,
354
- confirmButtonText: 'Done',
355
- fuelReport,
356
- ...options,
357
- });
303
+ @action viewFuelReport(fuelReport) {
304
+ this.transitionToRoute('management.fuel-reports.index.details', fuelReport);
358
305
  }
359
306
 
360
307
  /**
361
- * Create a new `fuelReport` in modal
308
+ * Create a new fuel report
362
309
  *
363
310
  * @void
364
311
  */
365
312
  @action createFuelReport() {
366
- const fuelReport = this.store.createRecord('fuel-report');
367
-
368
- return this.editFuelReport(fuelReport, {
369
- title: 'New Fuel Report',
370
- acceptButtonText: 'Confirm & Create',
371
- acceptButtonIcon: 'check',
372
- acceptButtonIconPrefix: 'fas',
373
- successNotification: 'New fuel report created.',
374
- onConfirm: () => {
375
- this.hostRouter.refresh();
376
- },
377
- });
313
+ this.transitionToRoute('management.fuel-reports.index.new');
378
314
  }
379
315
 
380
316
  /**
381
- * Edit a `fuelReport` details
317
+ * Edit a fuel report
382
318
  *
383
319
  * @param {FuelReportModel} fuelReport
384
- * @param {Object} options
385
320
  * @void
386
321
  */
387
- @action editFuelReport(fuelReport, options = {}) {
388
- this.modalsManager.show('modals/fuel-report-form', {
389
- title: 'Edit FuelReport',
390
- acceptButtonIcon: 'save',
391
- fuelReport,
392
- confirm: (modal, done) => {
393
- modal.startLoading();
394
-
395
- return fuelReport
396
- .save()
397
- .then((fuelReport) => {
398
- if (typeof options.successNotification === 'function') {
399
- this.notifications.success(options.successNotification(fuelReport));
400
- } else {
401
- this.notifications.success(options.successNotification ?? `Fuel report details updated.`);
402
- }
403
- return done();
404
- })
405
- .catch((error) => {
406
- this.notifications.serverError(error);
407
- modal.stopLoading();
408
- });
409
- },
410
- ...options,
411
- });
322
+ @action editFuelReport(fuelReport) {
323
+ this.transitionToRoute('management.fuel-reports.index.edit', fuelReport);
412
324
  }
413
325
 
414
326
  /**
415
- * Delete a `fuelReport` via confirm prompt
327
+ * Prompt to delete a fuel report
416
328
  *
417
329
  * @param {FuelReportModel} fuelReport
418
330
  * @param {Object} options
@@ -426,4 +338,22 @@ export default class ManagementFuelReportsIndexController extends Controller {
426
338
  ...options,
427
339
  });
428
340
  }
341
+
342
+ /**
343
+ * Bulk deletes selected fuel report's via confirm prompt
344
+ *
345
+ * @param {Array} selected an array of selected models
346
+ * @void
347
+ */
348
+ @action bulkDeleteFuelReports() {
349
+ const selected = this.table.selectedRows;
350
+
351
+ this.crud.bulkFuelReports(selected, {
352
+ modelNamePath: `name`,
353
+ acceptButtonText: 'Delete Fuel Reports',
354
+ onSuccess: () => {
355
+ return this.hostRouter.refresh();
356
+ },
357
+ });
358
+ }
429
359
  }
@@ -0,0 +1,54 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { action } from '@ember/object';
4
+ export default class ManagementIssuesIndexDetailsController extends Controller {
5
+ /**
6
+ * The currently active view tab ('details' by default).
7
+ *
8
+ * @type {String}
9
+ * @tracked
10
+ */
11
+ @tracked view = 'details';
12
+
13
+ /**
14
+ * An array of query parameters to be serialized in the URL.
15
+ *
16
+ * @type {String[]}
17
+ * @tracked
18
+ */
19
+ @tracked queryParams = ['view'];
20
+
21
+ /**
22
+ * Transitions back to the "management.issues.index" route.
23
+ *
24
+ * @method
25
+ * @action
26
+ * @returns {Transition} The transition object representing the route change.
27
+ */
28
+ @action transitionBack() {
29
+ return this.transitionToRoute('management.issues.index');
30
+ }
31
+
32
+ /**
33
+ * Transitions to the edit view for a specific issue.
34
+ *
35
+ * @method
36
+ * @param {issueModel} issue - The issue to be edited.
37
+ * @action
38
+ * @returns {Transition} The transition object representing the route change.
39
+ */
40
+ @action onEdit(issue) {
41
+ return this.transitionToRoute('management.issues.index.edit', issue);
42
+ }
43
+
44
+ /**
45
+ * Updates the active view tab.
46
+ *
47
+ * @method
48
+ * @param {String} tab - The name of the tab to activate.
49
+ * @action
50
+ */
51
+ @action onTabChanged(tab) {
52
+ this.view = tab;
53
+ }
54
+ }
@@ -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 ManagementIssuesIndexEditController extends Controller {
7
+ /**
8
+ * Inject the `hostRouter` service
9
+ *
10
+ * @memberof ManagementissuesIndexEditController
11
+ */
12
+ @service hostRouter;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementissuesIndexEditController
18
+ */
19
+ @service modalsManager;
20
+
21
+ /**
22
+ * The overlay component context.
23
+ *
24
+ * @memberof ManagementissuesIndexEditController
25
+ */
26
+ @tracked overlay;
27
+
28
+ /**
29
+ * When exiting the overlay.
30
+ *
31
+ * @return {Transition}
32
+ * @memberof ManagementissuesIndexEditController
33
+ */
34
+ @action transitionBack(issue) {
35
+ // check if issue record has been edited and prompt for confirmation
36
+ if (issue.hasDirtyAttributes) {
37
+ return this.confirmContinueWithUnsavedChanges(issue, {
38
+ confirm: () => {
39
+ issue.rollbackAttributes();
40
+ return this.transitionToRoute('management.issues.index');
41
+ },
42
+ });
43
+ }
44
+
45
+ return this.transitionToRoute('management.issues.index');
46
+ }
47
+
48
+ /**
49
+ * Set the overlay component context object.
50
+ *
51
+ * @param {OverlayContext} overlay
52
+ * @memberof ManagementissuesIndexEditController
53
+ */
54
+ @action setOverlayContext(overlay) {
55
+ this.overlay = overlay;
56
+ }
57
+
58
+ /**
59
+ * When issue details button is clicked in overlay.
60
+ *
61
+ * @param {IssueModel} issue
62
+ * @return {Promise}
63
+ * @memberof ManagementissuesIndexEditController
64
+ */
65
+ @action onViewDetails(issue) {
66
+ // check if issue record has been edited and prompt for confirmation
67
+ if (issue.hasDirtyAttributes) {
68
+ return this.confirmContinueWithUnsavedChanges(issue);
69
+ }
70
+
71
+ return this.transitionToRoute('management.issues.index.details', issue);
72
+ }
73
+
74
+ /**
75
+ * Trigger a route refresh and focus the new issue created.
76
+ *
77
+ * @param {IssueModel} issue
78
+ * @return {Promise}
79
+ * @memberof ManagementissuesIndexEditController
80
+ */
81
+ @action onAfterSave(issue) {
82
+ if (this.overlay) {
83
+ this.overlay.close();
84
+ }
85
+
86
+ this.hostRouter.refresh();
87
+ return this.transitionToRoute('management.issues.index.details', issue);
88
+ }
89
+
90
+ /**
91
+ * Prompts the user to confirm if they wish to continue with unsaved changes.
92
+ *
93
+ * @method
94
+ * @param {IssueModel} issue - The issue 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 ManagementissuesIndexEditController
98
+ */
99
+ confirmContinueWithUnsavedChanges(issue, options = {}) {
100
+ return this.modalsManager.confirm({
101
+ title: 'Continue Without Saving?',
102
+ body: 'Unsaved changes to this issue will be lost. Click continue to proceed.',
103
+ acceptButtonText: 'Continue without saving',
104
+ confirm: () => {
105
+ issue.rollbackAttributes();
106
+ return this.transitionToRoute('management.issues.index.details', issue);
107
+ },
108
+ ...options,
109
+ });
110
+ }
111
+ }
@@ -0,0 +1,94 @@
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
+ export default class ManagementIssuesIndexNewController extends Controller {
6
+ /**
7
+ * Inject the `store` service
8
+ *
9
+ * @memberof ManagementissuesIndexNewController
10
+ */
11
+ @service store;
12
+
13
+ /**
14
+ * Inject the `hostRouter` service
15
+ *
16
+ * @memberof ManagementissuesIndexNewController
17
+ */
18
+ @service hostRouter;
19
+
20
+ /**
21
+ * Inject the `currentUser` service
22
+ *
23
+ * @memberof ManagementissuesIndexNewController
24
+ */
25
+ @service currentUser;
26
+
27
+ /**
28
+ * Inject the `hostRouter` service
29
+ *
30
+ * @memberof ManagementissuesIndexNewController
31
+ */
32
+ @service modalsManager;
33
+
34
+ /**
35
+ * The overlay component context.
36
+ *
37
+ * @memberof ManagementissuesIndexNewController
38
+ */
39
+ @tracked overlay;
40
+
41
+ /**
42
+ * The issue being created.
43
+ *
44
+ * @var {issueModel}
45
+ */
46
+ @tracked issue = this.store.createRecord('issue', { reporter: this.currentUser.user, status: 'pending', priority: 'low' });
47
+
48
+ /**
49
+ * Set the overlay component context object.
50
+ *
51
+ * @param {OverlayContext} overlay
52
+ * @memberof ManagementissuesIndexNewController
53
+ */
54
+ @action setOverlayContext(overlay) {
55
+ this.overlay = overlay;
56
+ }
57
+
58
+ /**
59
+ * When exiting the overlay.
60
+ *
61
+ * @return {Transition}
62
+ * @memberof ManagementissuesIndexNewController
63
+ */
64
+ @action transitionBack() {
65
+ return this.transitionToRoute('management.issues.index');
66
+ }
67
+
68
+ /**
69
+ * Trigger a route refresh and focus the new issue created.
70
+ *
71
+ * @param {issueModel} issue
72
+ * @return {Promise}
73
+ * @memberof ManagementissuesIndexNewController
74
+ */
75
+ @action onAfterSave(issue) {
76
+ if (this.overlay) {
77
+ this.overlay.close();
78
+ }
79
+
80
+ this.hostRouter.refresh();
81
+ return this.transitionToRoute('management.issues.index.details', issue).then(() => {
82
+ this.resetForm();
83
+ });
84
+ }
85
+
86
+ /**
87
+ * Resets the form with a new issue record
88
+ *
89
+ * @memberof ManagementissuesIndexNewController
90
+ */
91
+ resetForm() {
92
+ this.issue = this.store.createRecord('issue', { reporter: this.currentUser.user, status: 'pending', priority: 'low' });
93
+ }
94
+ }