@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
@@ -1,26 +1,11 @@
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';
5
5
  import { isBlank } from '@ember/utils';
6
6
  import { task, timeout } from 'ember-concurrency';
7
- import Point from '@fleetbase/fleetops-data/utils/geojson/point';
8
7
 
9
8
  export default class ManagementPlacesIndexController extends Controller {
10
- /**
11
- * Inject the `operations.zones.index` controller
12
- *
13
- * @var {Controller}
14
- */
15
- @controller('operations.zones.index') zonesController;
16
-
17
- /**
18
- * Inject the `management.vendors.index` controller
19
- *
20
- * @var {Controller}
21
- */
22
- @controller('management.vendors.index') vendorsController;
23
-
24
9
  /**
25
10
  * Inject the `notifications` service
26
11
  *
@@ -313,178 +298,35 @@ export default class ManagementPlacesIndexController extends Controller {
313
298
  }
314
299
 
315
300
  /**
316
- * View a `place` details in modal
301
+ * View a place details
317
302
  *
318
303
  * @param {PlaceModel} place
319
- * @param {Object} options
320
- * @void
304
+ * @return {Promise}
305
+ * @memberof ManagementPlacesIndexController
321
306
  */
322
- @action viewPlace(place, options) {
323
- const viewPlaceOnMap = () => {
324
- this.modalsManager.done().then(() => {
325
- return this.viewOnMap(place, {
326
- onFinish: () => {
327
- this.viewPlace(place);
328
- },
329
- });
330
- });
331
- };
332
-
333
- this.modalsManager.show('modals/place-details', {
334
- title: place.name,
335
- place,
336
- titleComponent: 'modal/title-with-buttons',
337
- acceptButtonText: 'Done',
338
- headerButtons: [
339
- {
340
- icon: 'cog',
341
- type: 'link',
342
- size: 'xs',
343
- options: [
344
- {
345
- title: 'Edit Place',
346
- action: () => {
347
- this.modalsManager.done().then(() => {
348
- return this.editPlace(place, {
349
- onFinish: () => {
350
- this.viewDriver(place);
351
- },
352
- });
353
- });
354
- },
355
- },
356
- {
357
- title: 'View Place on Map',
358
- action: viewPlaceOnMap,
359
- },
360
- {
361
- title: 'Assign to Vendor',
362
- action: () => {
363
- this.modalsManager.done().then(() => {
364
- return this.assignVendor(place, {
365
- onFinish: () => {
366
- this.viewPlace(place);
367
- },
368
- });
369
- });
370
- },
371
- },
372
- {
373
- title: 'Delete Place',
374
- action: () => {
375
- this.modalsManager.done().then(() => {
376
- return this.deletePlace(place, {
377
- onDecline: () => {
378
- this.viewPlace(place);
379
- },
380
- });
381
- });
382
- },
383
- },
384
- ],
385
- },
386
- ],
387
- viewVendor: () =>
388
- this.viewPlaceVendor(place, {
389
- onFinish: () => {
390
- this.viewPlace(place);
391
- },
392
- }),
393
- viewPlaceOnMap,
394
- ...options,
395
- });
307
+ @action viewPlace(place) {
308
+ return this.transitionToRoute('management.places.index.details', place);
396
309
  }
397
310
 
398
311
  /**
399
- * Create a new `place` in modal
312
+ * Create a new place
400
313
  *
401
- * @param {Object} options
402
- * @void
314
+ * @return {Promise}
315
+ * @memberof ManagementPlacesIndexController
403
316
  */
404
- @action createPlace(options = {}) {
405
- const place = this.store.createRecord('place');
406
-
407
- return this.editPlace(place, {
408
- title: 'New Place',
409
- acceptButtonText: 'Confirm & Create',
410
- acceptButtonIcon: 'check',
411
- acceptButtonIconPrefix: 'fas',
412
- successNotification: (place) => `New place (${place.get('name') || place.get('street1')}) created.`,
413
- onConfirm: () => {
414
- if (place.get('isNew')) {
415
- return;
416
- }
417
-
418
- return this.hostRouter.refresh();
419
- },
420
- ...options,
421
- });
317
+ @action createPlace() {
318
+ return this.transitionToRoute('management.places.index.new');
422
319
  }
423
320
 
424
321
  /**
425
- * Edit a `place` details
322
+ *Edit place details
426
323
  *
427
324
  * @param {PlaceModel} place
428
- * @param {Object} options
429
- * @void
325
+ * @return {Promise}
326
+ * @memberof ManagementPlacesIndexController
430
327
  */
431
- @action async editPlace(place, options = {}) {
432
- place = await place;
433
-
434
- this.modalsManager.show('modals/place-form', {
435
- title: 'Edit Place',
436
- acceptButtonText: 'Save Changes',
437
- acceptButtonIcon: 'save',
438
- declineButtonIcon: 'times',
439
- declineButtonIconPrefix: 'fas',
440
- place,
441
- autocomplete: (selected) => {
442
- const coordinatesInputComponent = this.modalsManager.getOption('coordinatesInputComponent');
443
-
444
- place.setProperties({ ...selected });
445
-
446
- if (coordinatesInputComponent) {
447
- coordinatesInputComponent.updateCoordinates(selected.location);
448
- }
449
- },
450
- reverseGeocode: ({ latitude, longitude }) => {
451
- return this.fetch.get('geocoder/reverse', { coordinates: [latitude, longitude].join(','), single: true }).then((result) => {
452
- if (isBlank(result)) {
453
- return;
454
- }
455
-
456
- place.setProperties({ ...result });
457
- });
458
- },
459
- setCoordinatesInput: (coordinatesInputComponent) => {
460
- this.modalsManager.setOption('coordinatesInputComponent', coordinatesInputComponent);
461
- },
462
- updatePlaceCoordinates: ({ latitude, longitude }) => {
463
- const location = new Point(longitude, latitude);
464
-
465
- place.setProperties({ location });
466
- },
467
- confirm: (modal) => {
468
- modal.startLoading();
469
-
470
- return place
471
- .save()
472
- .then((place) => {
473
- if (typeof options.successNotification === 'function') {
474
- this.notifications.success(options.successNotification(place));
475
- } else {
476
- this.notifications.success(options.successNotification ?? `${place.name} details updated.`);
477
- }
478
-
479
- return this.hostRouter.refresh();
480
- })
481
- .catch((error) => {
482
- modal.stopLoading();
483
- this.notifications.serverError(error);
484
- });
485
- },
486
- ...options,
487
- });
328
+ @action editPlace(place) {
329
+ return this.transitionToRoute('management.places.index.edit', place);
488
330
  }
489
331
 
490
332
  /**
@@ -566,19 +408,16 @@ export default class ManagementPlacesIndexController extends Controller {
566
408
  }
567
409
 
568
410
  /**
569
- * View information about the driver vendor
411
+ * View information about a place vendor
570
412
  *
571
413
  * @param {PlaceModel} place
572
- * @param {Object} options
573
414
  * @void
574
415
  */
575
- @action async viewPlaceVendor(place, options = {}) {
576
- this.modalsManager.displayLoader();
577
-
416
+ @action async viewPlaceVendor(place) {
578
417
  const vendor = await this.store.findRecord('vendor', place.vendor_uuid);
579
418
 
580
- this.modalsManager.done().then(() => {
581
- return this.vendorsController.viewVendor(vendor, options);
582
- });
419
+ if (vendor) {
420
+ this.contextPanel.focus(vendor);
421
+ }
583
422
  }
584
423
  }
@@ -37,9 +37,7 @@ export default class ManagementVehiclesIndexNewController extends Controller {
37
37
  *
38
38
  * @var {VehicleModel}
39
39
  */
40
- @tracked vehicle = this.store.createRecord('vehicle', {
41
- status: `active`,
42
- });
40
+ @tracked vehicle = this.store.createRecord('vehicle', { status: 'active' });
43
41
 
44
42
  /**
45
43
  * Set the overlay component context object.
@@ -85,8 +83,6 @@ export default class ManagementVehiclesIndexNewController extends Controller {
85
83
  * @memberof ManagementVehiclesIndexNewController
86
84
  */
87
85
  resetForm() {
88
- this.vehicle = this.store.createRecord('vehicle', {
89
- status: `active`,
90
- });
86
+ this.vehicle = this.store.createRecord('vehicle', { status: 'active' });
91
87
  }
92
88
  }
@@ -0,0 +1,55 @@
1
+ import Controller from '@ember/controller';
2
+ import { tracked } from '@glimmer/tracking';
3
+ import { action } from '@ember/object';
4
+
5
+ export default class ManagementVendorsIndexDetailsController extends Controller {
6
+ /**
7
+ * The currently active view tab ('details' by default).
8
+ *
9
+ * @type {String}
10
+ * @tracked
11
+ */
12
+ @tracked view = 'details';
13
+
14
+ /**
15
+ * An array of query parameters to be serialized in the URL.
16
+ *
17
+ * @type {String[]}
18
+ * @tracked
19
+ */
20
+ @tracked queryParams = ['view'];
21
+
22
+ /**
23
+ * Transitions back to the "management.vendors.index" route.
24
+ *
25
+ * @method
26
+ * @action
27
+ * @returns {Transition} The transition object representing the route change.
28
+ */
29
+ @action transitionBack() {
30
+ return this.transitionToRoute('management.vendors.index');
31
+ }
32
+
33
+ /**
34
+ * Transitions to the edit view for a specific vendor.
35
+ *
36
+ * @method
37
+ * @param {VendorModel} vendor - The vendor to be edited.
38
+ * @action
39
+ * @returns {Transition} The transition object representing the route change.
40
+ */
41
+ @action onEdit(vendor) {
42
+ return this.transitionToRoute('management.vendors.index.edit', vendor);
43
+ }
44
+
45
+ /**
46
+ * Updates the active view tab.
47
+ *
48
+ * @method
49
+ * @param {String} tab - The name of the tab to activate.
50
+ * @action
51
+ */
52
+ @action onTabChanged(tab) {
53
+ this.view = tab;
54
+ }
55
+ }
@@ -0,0 +1,111 @@
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 ManagementVendorsIndexEditController extends Controller {
7
+ /**
8
+ * Inject the `hostRouter` service
9
+ *
10
+ * @memberof ManagementVendorsIndexEditController
11
+ */
12
+ @service hostRouter;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementVendorsIndexEditController
18
+ */
19
+ @service modalsManager;
20
+
21
+ /**
22
+ * The overlay component context.
23
+ *
24
+ * @memberof ManagementVendorsIndexEditController
25
+ */
26
+ @tracked overlay;
27
+
28
+ /**
29
+ * When exiting the overlay.
30
+ *
31
+ * @return {Transition}
32
+ * @memberof ManagementVendorsIndexEditController
33
+ */
34
+ @action transitionBack(vendor) {
35
+ // check if vendor record has been edited and prompt for confirmation
36
+ if (vendor.hasDirtyAttributes) {
37
+ return this.confirmContinueWithUnsavedChanges(vendor, {
38
+ confirm: () => {
39
+ vendor.rollbackAttributes();
40
+ return this.transitionToRoute('management.vendors.index');
41
+ },
42
+ });
43
+ }
44
+
45
+ return this.transitionToRoute('management.vendors.index');
46
+ }
47
+
48
+ /**
49
+ * Set the overlay component context object.
50
+ *
51
+ * @param {OverlayContext} overlay
52
+ * @memberof ManagementVendorsIndexEditController
53
+ */
54
+ @action setOverlayContext(overlay) {
55
+ this.overlay = overlay;
56
+ }
57
+
58
+ /**
59
+ * When vendor details button is clicked in overlay.
60
+ *
61
+ * @param {VendorModel} vendor
62
+ * @return {Promise}
63
+ * @memberof ManagementVendorsIndexEditController
64
+ */
65
+ @action onViewDetails(vendor) {
66
+ // check if vendor record has been edited and prompt for confirmation
67
+ if (vendor.hasDirtyAttributes) {
68
+ return this.confirmContinueWithUnsavedChanges(vendor);
69
+ }
70
+
71
+ return this.transitionToRoute('management.vendors.index.details', vendor);
72
+ }
73
+
74
+ /**
75
+ * Trigger a route refresh and focus the new vendor created.
76
+ *
77
+ * @param {VendorModel} vendor
78
+ * @return {Promise}
79
+ * @memberof ManagementVendorsIndexEditController
80
+ */
81
+ @action onAfterSave(vendor) {
82
+ if (this.overlay) {
83
+ this.overlay.close();
84
+ }
85
+
86
+ this.hostRouter.refresh();
87
+ return this.transitionToRoute('management.vendors.index.details', vendor);
88
+ }
89
+
90
+ /**
91
+ * Prompts the user to confirm if they wish to continue with unsaved changes.
92
+ *
93
+ * @method
94
+ * @param {VendorModel} vendor - The vendor 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 ManagementVendorsIndexEditController
98
+ */
99
+ confirmContinueWithUnsavedChanges(vendor, options = {}) {
100
+ return this.modalsManager.confirm({
101
+ title: 'Continue Without Saving?',
102
+ body: 'Unsaved changes to this vendor will be lost. Click continue to proceed.',
103
+ acceptButtonText: 'Continue without saving',
104
+ confirm: () => {
105
+ vendor.rollbackAttributes();
106
+ return this.transitionToRoute('management.vendors.index.details', vendor);
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 ManagementVendorsIndexNewController extends Controller {
7
+ /**
8
+ * Inject the `store` service
9
+ *
10
+ * @memberof ManagementVendorIndexNewController
11
+ */
12
+ @service store;
13
+
14
+ /**
15
+ * Inject the `hostRouter` service
16
+ *
17
+ * @memberof ManagementVendorIndexNewController
18
+ */
19
+ @service hostRouter;
20
+
21
+ /**
22
+ * Inject the `hostRouter` service
23
+ *
24
+ * @memberof ManagementVendorIndexNewController
25
+ */
26
+ @service modalsManager;
27
+
28
+ /**
29
+ * The overlay component context.
30
+ *
31
+ * @memberof ManagementVendorIndexNewController
32
+ */
33
+ @tracked overlay;
34
+
35
+ /**
36
+ * The vendor being created.
37
+ *
38
+ * @var {VendorModel}
39
+ */
40
+ @tracked vendor = this.store.createRecord('vendor', { status: 'active' });
41
+
42
+ /**
43
+ * Set the overlay component context object.
44
+ *
45
+ * @param {OverlayContext} overlay
46
+ * @memberof ManagementVendorsIndexNewController
47
+ */
48
+ @action setOverlayContext(overlay) {
49
+ this.overlay = overlay;
50
+ }
51
+
52
+ /**
53
+ * When exiting the overlay.
54
+ *
55
+ * @return {Transition}
56
+ * @memberof ManagementVendorIndexNewController
57
+ */
58
+ @action transitionBack() {
59
+ return this.transitionToRoute('management.vendors.index');
60
+ }
61
+
62
+ /**
63
+ * Trigger a route refresh and focus the new vendor created.
64
+ *
65
+ * @param {VendorModel} vendor
66
+ * @return {Promise}
67
+ * @memberof ManagementVendorsIndexNewController
68
+ */
69
+ @action onAfterSave(vendor) {
70
+ if (this.overlay) {
71
+ this.overlay.close();
72
+ }
73
+
74
+ this.hostRouter.refresh();
75
+ return this.transitionToRoute('management.vendors.index.details', vendor).then(() => {
76
+ this.resetForm();
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Resets the form with a new vendor record
82
+ *
83
+ * @memberof ManagementVendorIndexNewController
84
+ */
85
+ resetForm() {
86
+ this.vendor = this.store.createRecord('vendor', { status: 'active' });
87
+ }
88
+ }