@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
@@ -3,11 +3,8 @@ 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
- import { isArray } from '@ember/array';
7
- import { capitalize } from '@ember/string';
8
6
  import { timeout } from 'ember-concurrency';
9
7
  import { task } from 'ember-concurrency-decorators';
10
- import apiUrl from '@fleetbase/ember-core/utils/api-url';
11
8
 
12
9
  export default class ManagementVendorsIndexController extends Controller {
13
10
  /**
@@ -133,6 +130,7 @@ export default class ManagementVendorsIndexController extends Controller {
133
130
  valuePath: 'name',
134
131
  width: '180px',
135
132
  cellComponent: 'table/cell/media-name',
133
+ mediaPath: 'logo_url',
136
134
  action: this.viewVendor,
137
135
  resizable: true,
138
136
  sortable: true,
@@ -305,24 +303,6 @@ export default class ManagementVendorsIndexController extends Controller {
305
303
  this.query = value;
306
304
  }
307
305
 
308
- /**
309
- * Bulk deletes selected `driver` via confirm prompt
310
- *
311
- * @param {Array} selected an array of selected models
312
- * @void
313
- */
314
- @action bulkDeleteVendors() {
315
- const selected = this.table.selectedRows;
316
-
317
- this.crud.bulkDelete(selected, {
318
- modelNamePath: `name`,
319
- acceptButtonText: 'Delete Vendors',
320
- onSuccess: () => {
321
- return this.hostRouter.refresh();
322
- },
323
- });
324
- }
325
-
326
306
  /**
327
307
  * Toggles dialog to export `vendor`
328
308
  *
@@ -336,225 +316,29 @@ export default class ManagementVendorsIndexController extends Controller {
336
316
  * View a `vendor` details in modal
337
317
  *
338
318
  * @param {VendorModel} vendor
339
- * @param {Object} options
340
319
  * @void
341
320
  */
342
- @action viewVendor(vendor, options) {
343
- const isIntegratedVendor = vendor.get('type') === 'integrated-vendor';
344
-
345
- this.modalsManager.show('modals/vendor-details', {
346
- title: vendor.name,
347
- titleComponent: 'modal/title-with-buttons',
348
- acceptButtonText: 'Done',
349
- hideDeclineButton: true,
350
- headerButtons: [
351
- {
352
- icon: 'cog',
353
- iconPrefix: 'fas',
354
- type: 'link',
355
- size: 'xs',
356
- options: [
357
- {
358
- title: 'Edit Vendor',
359
- action: () => {
360
- this.modalsManager.done().then(() => {
361
- return this.editVendor(vendor, {
362
- onFinish: () => {
363
- this.viewVendor(vendor);
364
- },
365
- });
366
- });
367
- },
368
- },
369
- {
370
- title: 'Delete Vendor',
371
- action: () => {
372
- this.modalsManager.done().then(() => {
373
- return this.deleteVendor(vendor, {
374
- onDecline: () => {
375
- this.viewVendor(vendor);
376
- },
377
- });
378
- });
379
- },
380
- },
381
- ],
382
- },
383
- ],
384
- isIntegratedVendor,
385
- vendor,
386
- ...options,
387
- });
321
+ @action viewVendor(vendor) {
322
+ return this.transitionToRoute('management.vendors.index.details', vendor);
388
323
  }
389
324
 
390
325
  /**
391
326
  * Create a new `vendor` in modal
392
327
  *
393
- * @param {Object} options
394
328
  * @void
395
329
  */
396
330
  @action async createVendor() {
397
- const vendor = this.store.createRecord('vendor', { status: 'active' });
398
- const supportedIntegratedVendors = await this.fetch.get('integrated-vendors/supported');
399
-
400
- return this.editVendor(vendor, {
401
- title: 'New Vendor',
402
- acceptButtonText: 'Confirm & Create',
403
- acceptButtonIcon: 'check',
404
- acceptButtonIconPrefix: 'fas',
405
- action: 'select',
406
- supportedIntegratedVendors,
407
- selectedIntegratedVendor: null,
408
- integratedVendor: null,
409
- selectIntegratedVendor: (integratedVendor) => {
410
- this.modalsManager.setOption('selectedIntegratedVendor', integratedVendor);
411
-
412
- const { credential_params, option_params } = integratedVendor;
413
-
414
- // create credentials object
415
- const credentials = {};
416
- if (isArray(integratedVendor.credential_params)) {
417
- for (let i = 0; i < integratedVendor.credential_params.length; i++) {
418
- const param = integratedVendor.credential_params.objectAt(i);
419
- credentials[param] = null;
420
- }
421
- }
422
-
423
- // create options object
424
- const options = {};
425
- if (isArray(integratedVendor.option_params)) {
426
- for (let i = 0; i < integratedVendor.option_params.length; i++) {
427
- const param = integratedVendor.option_params.objectAt(i);
428
- options[param.key] = null;
429
- }
430
- }
431
-
432
- const vendor = this.store.createRecord('integrated-vendor', {
433
- provider: integratedVendor.code,
434
- webhook_url: apiUrl(`listeners/${integratedVendor.code}`),
435
- credentials: {},
436
- options: {},
437
- credential_params,
438
- option_params,
439
- });
440
-
441
- this.modalsManager.setOption('integratedVendor', vendor);
442
- },
443
- successNotification: (vendor) => `New vendor '${vendor.name}' successfully created.`,
444
- });
331
+ return this.transitionToRoute('management.vendors.index.new');
445
332
  }
446
333
 
447
334
  /**
448
335
  * Edit a `vendor` details
449
336
  *
450
337
  * @param {VendorModel} vendor
451
- * @param {Object} options
452
338
  * @void
453
339
  */
454
- @action editVendor(vendor, options = {}) {
455
- const editVendorOptions = options;
456
- const isIntegratedVendor = vendor.get('type') === 'integrated-vendor';
457
-
458
- this.modalsManager.show('modals/vendor-form', {
459
- title: isIntegratedVendor ? 'Integrated Vendor Settings' : 'Edit Vendor',
460
- acceptButtonText: 'Save Changes',
461
- acceptButtonIcon: 'save',
462
- declineButtonIcon: 'times',
463
- declineButtonIconPrefix: 'fas',
464
- isIntegratedVendor,
465
- vendor,
466
- showAdvancedOptions: false,
467
- isEditingCredentials: false,
468
- toggleCredentialsReset: () => {
469
- const isEditingCredentials = this.modalsManager.getOption('isEditingCredentials');
470
-
471
- if (isEditingCredentials) {
472
- this.modalsManager.setOption('isEditingCredentials', false);
473
- } else {
474
- this.modalsManager.setOption('isEditingCredentials', true);
475
- }
476
- },
477
- toggleAdvancedOptions: () => {
478
- const showAdvancedOptions = this.modalsManager.getOption('showAdvancedOptions');
479
-
480
- if (showAdvancedOptions) {
481
- this.modalsManager.setOption('showAdvancedOptions', false);
482
- } else {
483
- this.modalsManager.setOption('showAdvancedOptions', true);
484
- }
485
- },
486
- selectAddress: (place) => {
487
- vendor.setProperties({
488
- place_uuid: place.id,
489
- place: place,
490
- country: place.country,
491
- });
492
- },
493
- editAddress: () => {
494
- return this.editVendorPlace(vendor, {
495
- onFinish: () => {
496
- this.editVendor(vendor, editVendorOptions);
497
- },
498
- });
499
- },
500
- newAddress: () => {
501
- return this.createVendorPlace(vendor, {
502
- onConfirm: (place) => {
503
- vendor.set('place_uuid', place.id);
504
- vendor.save();
505
- },
506
- onFinish: () => {
507
- this.modalsManager.done().then(() => {
508
- this.editVendor(vendor, editVendorOptions);
509
- });
510
- },
511
- });
512
- },
513
- confirm: (modal) => {
514
- modal.startLoading();
515
-
516
- const isAddingIntegratedVendor = modal.getOption('action') !== undefined && modal.getOption('integratedVendor')?.isNew;
517
-
518
- if (isAddingIntegratedVendor) {
519
- const integratedVendor = modal.getOption('integratedVendor');
520
-
521
- return integratedVendor
522
- .save()
523
- .then((integratedVendor) => {
524
- this.notifications.success(`Successfully added ${capitalize(integratedVendor.provider)} new integrated vendor`);
525
-
526
- return this.hostRouter.refresh();
527
- })
528
- .catch((error) => {
529
- this.notifications.serverError(error, {
530
- clearDuration: 600 * 6,
531
- });
532
- })
533
- .finally(() => {
534
- modal.stopLoading();
535
- });
536
- }
537
-
538
- return vendor
539
- .save()
540
- .then((vendor) => {
541
- if (typeof options.successNotification === 'function') {
542
- this.notifications.success(options.successNotification(vendor));
543
- } else {
544
- this.notifications.success(options.successNotification || `${vendor.name} details updated.`);
545
- }
546
-
547
- return this.hostRouter.refresh();
548
- })
549
- .catch((error) => {
550
- this.notifications.serverError(error);
551
- })
552
- .finally(() => {
553
- modal.stopLoading();
554
- });
555
- },
556
- ...options,
557
- });
340
+ @action editVendor(vendor) {
341
+ return this.transitionToRoute('management.vendors.index.edit', vendor);
558
342
  }
559
343
 
560
344
  /**
@@ -575,19 +359,20 @@ export default class ManagementVendorsIndexController extends Controller {
575
359
  }
576
360
 
577
361
  /**
578
- * View information about the vendors place
362
+ * Bulk deletes selected `vendor` via confirm prompt
579
363
  *
580
- * @param {VendorModel} vendor
581
- * @param {Object} options
364
+ * @param {Array} selected an array of selected models
582
365
  * @void
583
366
  */
584
- @action async viewVendorPlace(vendor, options = {}) {
585
- this.modalsManager.displayLoader();
586
-
587
- const place = await this.store.findRecord('place', vendor.place_uuid);
367
+ @action bulkDeleteVendors() {
368
+ const selected = this.table.selectedRows;
588
369
 
589
- this.modalsManager.done().then(() => {
590
- return this.places.viewPlace(place, options);
370
+ this.crud.bulkDelete(selected, {
371
+ modelNamePath: `name`,
372
+ acceptButtonText: 'Delete Vendors',
373
+ onSuccess: () => {
374
+ return this.hostRouter.refresh();
375
+ },
591
376
  });
592
377
  }
593
378
 
@@ -595,33 +380,44 @@ export default class ManagementVendorsIndexController extends Controller {
595
380
  * View information about the vendors place
596
381
  *
597
382
  * @param {VendorModel} vendor
598
- * @param {Object} options
599
383
  * @void
600
384
  */
601
- @action async editVendorPlace(vendor, options = {}) {
602
- this.modalsManager.displayLoader();
385
+ @action async viewVendorPlace(vendor) {
386
+ const place = await this.store.findRecord('place', vendor.place_uuid);
603
387
 
604
- const place = await this.store.findRecord('place', vendor.get('place_uuid'));
605
- await this.modalsManager.done({ skipCallbacks: true });
388
+ if (place) {
389
+ this.contextPanel.focus(place);
390
+ }
391
+ }
606
392
 
607
- this.modalsManager.done({ skipCallbacks: true }).then(() => {
608
- return this.places.editPlace(place, options);
609
- });
393
+ /**
394
+ * Edit a vendor's current place
395
+ *
396
+ * @param {VendorModel} vendor
397
+ * @void
398
+ */
399
+ @action async editVendorPlace(vendor) {
400
+ const place = await this.store.findRecord('place', vendor.place_uuid);
401
+
402
+ if (place) {
403
+ this.contextPanel.focus(place, 'editing');
404
+ }
610
405
  }
611
406
 
612
407
  /**
613
- * View information about the vendors place
408
+ * Create a new place for a vendor.
614
409
  *
615
- * @param {DriverModel} driver
616
- * @param {Object} options
410
+ * @param {VendorModel} vendor
617
411
  * @void
618
412
  */
619
- @action async createVendorPlace(vendor, options = {}) {
620
- this.modalsManager.displayLoader();
621
- await this.modalsManager.done();
413
+ @action async createVendorPlace(vendor) {
414
+ const place = this.store.createRecord('place');
622
415
 
623
- this.modalsManager.done().then(() => {
624
- return this.places.createPlace(options);
416
+ this.contextPanel.focus(place, 'editing', {
417
+ onAfterSave: (place) => {
418
+ vendor.set('place_uuid', place.id);
419
+ vendor.save();
420
+ },
625
421
  });
626
422
  }
627
423
  }
@@ -0,0 +1,14 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementContactsIndexDetailsRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ view: { refreshModel: false },
9
+ };
10
+
11
+ model({ public_id }) {
12
+ return this.store.findRecord('contact', public_id);
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementContactsIndexEditRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ return this.store.findRecord('contact', public_id);
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ManagementContactsIndexNewRoute extends Route {}
@@ -18,6 +18,6 @@ export default class ManagementContactsIndexRoute extends Route {
18
18
  };
19
19
 
20
20
  model(params) {
21
- return this.store.query('contact', { ...params });
21
+ return this.store.query('contact', params);
22
22
  }
23
23
  }
@@ -4,6 +4,6 @@ export default class ManagementFleetsIndexDetailsRoute extends Route {
4
4
  @service store;
5
5
 
6
6
  model({ public_id }) {
7
- return this.store.findRecord('fleet', public_id);
7
+ return this.store.queryRecord('fleet', { public_id, single: true, with: ['parent_fleet', 'service_area', 'zone'] });
8
8
  }
9
9
  }
@@ -4,6 +4,6 @@ export default class ManagementFleetsIndexEditRoute extends Route {
4
4
  @service store;
5
5
 
6
6
  model({ public_id }) {
7
- return this.store.findRecord('fleet', public_id);
7
+ return this.store.queryRecord('fleet', { public_id, single: true, with: ['parent_fleet', 'service_area', 'zone'] });
8
8
  }
9
9
  }
@@ -23,6 +23,6 @@ export default class ManagementFleetsIndexRoute extends Route {
23
23
  };
24
24
 
25
25
  model(params) {
26
- return this.store.query('fleet', { ...params });
26
+ return this.store.query('fleet', { ...params, with: ['parent_fleet', 'service_area', 'zone'] });
27
27
  }
28
28
  }
@@ -0,0 +1,14 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementFuelReportsIndexDetailsRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ view: { refreshModel: false },
9
+ };
10
+
11
+ model({ public_id }) {
12
+ return this.store.queryRecord('fuel-report', { public_id, single: true, with: ['driver', 'vehicle', 'reporter'] });
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementFuelReportsIndexEditRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ return this.store.queryRecord('fuel-report', { public_id, single: true, with: ['driver', 'vehicle', 'reporter'] });
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ManagementFuelReportsIndexNewRoute extends Route {}
@@ -14,10 +14,12 @@ export default class ManagementFuelReportsIndexRoute extends Route {
14
14
  limit: { refreshModel: true },
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
+ vehicle: { refreshModel: true },
18
+ driver: { refreshModel: true },
17
19
  status: { refreshModel: true },
18
20
  };
19
21
 
20
22
  model(params) {
21
- return this.store.query('fuel-report', { ...params });
23
+ return this.store.query('fuel-report', { ...params, with: ['driver', 'vehicle', 'reporter'] });
22
24
  }
23
25
  }
@@ -0,0 +1,14 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementIssuesIndexDetailsRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ view: { refreshModel: false },
9
+ };
10
+
11
+ model({ public_id }) {
12
+ return this.store.queryRecord('issue', { public_id, single: true, with: ['driver', 'vehicle', 'assignee', 'reporter'] });
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementIssuesIndexEditRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ return this.store.queryRecord('issue', { public_id, single: true, with: ['driver', 'vehicle', 'assignee', 'reporter'] });
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ManagementIssuesIndexNewRoute extends Route {}
@@ -19,6 +19,6 @@ export default class ManagementIssuesIndexRoute extends Route {
19
19
  };
20
20
 
21
21
  model(params) {
22
- return this.store.query('issue', { ...params });
22
+ return this.store.query('issue', { ...params, with: ['driver', 'vehicle', 'assignee', 'reporter'] });
23
23
  }
24
24
  }
@@ -0,0 +1,14 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementPlacesIndexDetailsRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ view: { refreshModel: false },
9
+ };
10
+
11
+ model({ public_id }) {
12
+ return this.store.findRecord('place', public_id);
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementPlacesIndexEditRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ return this.store.findRecord('place', public_id);
9
+ }
10
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ManagementPlacesIndexNewRoute extends Route {}
@@ -4,6 +4,11 @@ import { inject as service } from '@ember/service';
4
4
  export default class ManagementPlacesIndexRoute extends Route {
5
5
  @service store;
6
6
 
7
+ /**
8
+ * Queryable parameters
9
+ *
10
+ * @var {Object}
11
+ */
7
12
  queryParams = {
8
13
  page: { refreshModel: true },
9
14
  limit: { refreshModel: true },
@@ -13,6 +18,6 @@ export default class ManagementPlacesIndexRoute extends Route {
13
18
  };
14
19
 
15
20
  model(params) {
16
- return this.store.query('place', { ...params });
21
+ return this.store.query('place', { params });
17
22
  }
18
23
  }
@@ -0,0 +1,15 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementVendorsIndexDetailsRoute extends Route {
5
+ @service store;
6
+
7
+ queryParams = {
8
+ view: { refreshModel: false },
9
+ };
10
+
11
+ model({ public_id }) {
12
+ const isIntegratedVendor = typeof public_id === 'string' && public_id.startsWith('integrated_vendor_');
13
+ return this.store.findRecord(isIntegratedVendor ? 'integrated-vendor' : 'vendor', public_id);
14
+ }
15
+ }
@@ -0,0 +1,11 @@
1
+ import Route from '@ember/routing/route';
2
+ import { inject as service } from '@ember/service';
3
+
4
+ export default class ManagementVendorsIndexEditRoute extends Route {
5
+ @service store;
6
+
7
+ model({ public_id }) {
8
+ const isIntegratedVendor = typeof public_id === 'string' && public_id.startsWith('integrated_vendor_');
9
+ return this.store.findRecord(isIntegratedVendor ? 'integrated-vendor' : 'vendor', public_id);
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ import Route from '@ember/routing/route';
2
+
3
+ export default class ManagementVendorsIndexNewRoute extends Route {}
@@ -23,6 +23,7 @@ export default class ManagementVendorsIndexRoute extends Route {
23
23
  }
24
24
 
25
25
  async setupController(controller, model) {
26
+ console.log('setupController action called');
26
27
  super.setupController(...arguments);
27
28
 
28
29
  // load integrated vendors