@fleetbase/fleetops-engine 0.3.3 → 0.3.4

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 (110) hide show
  1. package/addon/components/contact-form-panel.hbs +28 -6
  2. package/addon/components/driver-form-panel.hbs +10 -0
  3. package/addon/components/driver-form-panel.js +51 -0
  4. package/addon/components/driver-panel/details.hbs +1 -5
  5. package/addon/components/driver-panel.hbs +21 -3
  6. package/addon/components/fleet-form-panel.hbs +60 -6
  7. package/addon/components/fleet-panel/details.hbs +1 -1
  8. package/addon/components/fuel-report-form-panel.hbs +84 -8
  9. package/addon/components/fuel-report-form-panel.js +6 -0
  10. package/addon/components/fuel-report-panel/details.hbs +4 -0
  11. package/addon/components/issue-form-panel.hbs +99 -11
  12. package/addon/components/issue-form-panel.js +5 -13
  13. package/addon/components/layout/fleet-ops-sidebar.js +8 -0
  14. package/addon/components/live-map-drawer.hbs +1 -1
  15. package/addon/components/live-map.hbs +1 -1
  16. package/addon/components/modals/driver-assign-vehicle.hbs +2 -11
  17. package/addon/components/modals/driver-assign-vendor.hbs +1 -9
  18. package/addon/components/modals/fuel-report-details.hbs +4 -0
  19. package/addon/components/order/schedule-card.hbs +32 -4
  20. package/addon/components/order/schedule-card.js +155 -5
  21. package/addon/components/place-form-panel.hbs +14 -7
  22. package/addon/components/place-form-panel.js +71 -0
  23. package/addon/components/place-panel/details.hbs +9 -19
  24. package/addon/components/vehicle-form-panel.hbs +67 -7
  25. package/addon/components/vehicle-form-panel.js +37 -0
  26. package/addon/components/vehicle-panel/details.hbs +9 -5
  27. package/addon/components/vehicle-panel.hbs +18 -4
  28. package/addon/components/vendor-form-panel/create-form.hbs +72 -11
  29. package/addon/components/vendor-form-panel/edit-form.hbs +1 -1
  30. package/addon/components/vendor-form-panel.hbs +70 -30
  31. package/addon/components/vendor-form-panel.js +4 -40
  32. package/addon/components/vendor-panel/details.hbs +2 -2
  33. package/addon/components/vendor-panel.hbs +16 -2
  34. package/addon/controllers/management/contacts/index.js +42 -3
  35. package/addon/controllers/management/fleets/index.js +12 -23
  36. package/addon/controllers/management/fuel-reports/index/new.js +1 -1
  37. package/addon/controllers/management/fuel-reports/index.js +73 -20
  38. package/addon/controllers/management/issues/index/new.js +2 -2
  39. package/addon/controllers/management/issues/index.js +65 -45
  40. package/addon/controllers/management/places/index.js +59 -18
  41. package/addon/controllers/management/vehicles/index.js +67 -8
  42. package/addon/controllers/management/vendors/index.js +63 -8
  43. package/addon/controllers/operations/orders/index.js +42 -1
  44. package/addon/routes/management/contacts/index.js +8 -0
  45. package/addon/routes/management/fleets/index.js +8 -2
  46. package/addon/routes/management/fuel-reports/index.js +6 -0
  47. package/addon/routes/management/issues/index.js +9 -1
  48. package/addon/routes/management/places/index.js +11 -1
  49. package/addon/routes/management/vehicles/index.js +3 -3
  50. package/addon/routes/management/vendors/index.js +8 -0
  51. package/addon/routes/operations/scheduler/index.js +1 -1
  52. package/addon/templates/operations/orders/index.hbs +1 -1
  53. package/addon/utils/get-issue-categories.js +30 -0
  54. package/addon/utils/get-issue-types.js +3 -0
  55. package/addon/utils/get-vendor-status-options.js +3 -0
  56. package/addon/utils/get-vendor-type-options.js +41 -0
  57. package/app/utils/get-issue-categories.js +1 -0
  58. package/app/utils/get-issue-types.js +1 -0
  59. package/app/utils/get-vendor-categories.js +1 -0
  60. package/app/utils/get-vendor-status-options.js +1 -0
  61. package/app/utils/get-vendor-type-options.js +1 -0
  62. package/app/utils/get-vendor-types.js +1 -0
  63. package/composer.json +1 -1
  64. package/extension.json +1 -1
  65. package/package.json +4 -4
  66. package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +32 -0
  67. package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +33 -0
  68. package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
  69. package/server/src/Http/Controllers/Api/v1/VehicleController.php +2 -2
  70. package/server/src/Http/Controllers/Internal/v1/DriverController.php +5 -13
  71. package/server/src/Http/Controllers/Internal/v1/OrderController.php +1 -3
  72. package/server/src/Http/Filter/ContactFilter.php +10 -0
  73. package/server/src/Http/Filter/FleetFilter.php +8 -6
  74. package/server/src/Http/Filter/FuelReportFilter.php +51 -0
  75. package/server/src/Http/Filter/IssueFilter.php +61 -5
  76. package/server/src/Http/Filter/PlaceFilter.php +48 -6
  77. package/server/src/Http/Filter/VehicleFilter.php +21 -6
  78. package/server/src/Http/Filter/VendorFilter.php +11 -8
  79. package/server/src/Http/Middleware/TransformLocationMiddleware.php +1 -1
  80. package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +17 -18
  81. package/server/src/Http/Resources/v1/Contact.php +16 -19
  82. package/server/src/Http/Resources/v1/CurrentJob.php +13 -16
  83. package/server/src/Http/Resources/v1/Driver.php +59 -57
  84. package/server/src/Http/Resources/v1/Entity.php +30 -33
  85. package/server/src/Http/Resources/v1/FuelReport.php +16 -14
  86. package/server/src/Http/Resources/v1/Order.php +1 -1
  87. package/server/src/Http/Resources/v1/Payload.php +21 -24
  88. package/server/src/Http/Resources/v1/Place.php +27 -30
  89. package/server/src/Http/Resources/v1/Proof.php +13 -16
  90. package/server/src/Http/Resources/v1/PurchaseRate.php +14 -17
  91. package/server/src/Http/Resources/v1/ServiceArea.php +13 -16
  92. package/server/src/Http/Resources/v1/ServiceQuote.php +15 -18
  93. package/server/src/Http/Resources/v1/ServiceRate.php +33 -36
  94. package/server/src/Http/Resources/v1/ServiceRateFee.php +14 -17
  95. package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +9 -12
  96. package/server/src/Http/Resources/v1/TrackingNumber.php +18 -21
  97. package/server/src/Http/Resources/v1/TrackingStatus.php +18 -21
  98. package/server/src/Http/Resources/v1/Vehicle.php +31 -34
  99. package/server/src/Http/Resources/v1/VehicleDevice.php +23 -25
  100. package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +38 -32
  101. package/server/src/Http/Resources/v1/Vendor.php +31 -26
  102. package/server/src/Http/Resources/v1/Zone.php +14 -17
  103. package/server/src/Models/Driver.php +7 -1
  104. package/server/src/Models/FuelReport.php +1 -0
  105. package/server/src/Models/IntegratedVendor.php +6 -1
  106. package/server/src/Models/Order.php +2 -2
  107. package/server/src/Models/Place.php +2 -2
  108. package/server/src/Models/VehicleDeviceEvent.php +1 -0
  109. package/server/src/Models/Vendor.php +1 -1
  110. package/server/src/Observers/DriverObserver.php +15 -0
@@ -60,7 +60,7 @@ export default class ManagementPlacesIndexController extends Controller {
60
60
  *
61
61
  * @var {Array}
62
62
  */
63
- queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'country', 'phone', 'email', 'created_at', 'updated_at'];
63
+ queryParams = ['name', 'page', 'limit', 'sort', 'query', 'public_id', 'country', 'phone', 'created_at', 'updated_at', 'city', 'neighborhood', 'state'];
64
64
 
65
65
  /**
66
66
  * The current page of data being viewed
@@ -91,11 +91,11 @@ export default class ManagementPlacesIndexController extends Controller {
91
91
  @tracked public_id;
92
92
 
93
93
  /**
94
- * The filterable param `internal_id`
94
+ * The filterable param `public_id`
95
95
  *
96
96
  * @var {String}
97
97
  */
98
- @tracked internal_id;
98
+ @tracked postal_code;
99
99
 
100
100
  /**
101
101
  * The filterable param `phone`
@@ -105,11 +105,18 @@ export default class ManagementPlacesIndexController extends Controller {
105
105
  @tracked phone;
106
106
 
107
107
  /**
108
- * The filterable param `email`
108
+ * The filterable param `city`
109
+ *
110
+ * @var {String}
111
+ */
112
+ @tracked city;
113
+
114
+ /**
115
+ * The filterable param `name`
109
116
  *
110
117
  * @var {String}
111
118
  */
112
- @tracked email;
119
+ @tracked name;
113
120
 
114
121
  /**
115
122
  * The filterable param `country`
@@ -118,6 +125,13 @@ export default class ManagementPlacesIndexController extends Controller {
118
125
  */
119
126
  @tracked country;
120
127
 
128
+ /**
129
+ * The filterable param `country`
130
+ *
131
+ * @var {String}
132
+ */
133
+ @tracked neighborhood;
134
+
121
135
  /**
122
136
  * All columns applicable for orders
123
137
  *
@@ -133,6 +147,7 @@ export default class ManagementPlacesIndexController extends Controller {
133
147
  resizable: true,
134
148
  sortable: true,
135
149
  filterable: true,
150
+ filterParam: 'name',
136
151
  filterComponent: 'filter/string',
137
152
  },
138
153
  {
@@ -148,34 +163,36 @@ export default class ManagementPlacesIndexController extends Controller {
148
163
  filterComponent: 'filter/string',
149
164
  },
150
165
  {
151
- label: 'ID',
152
- valuePath: 'public_id',
153
- width: '120px',
154
- cellComponent: 'click-to-copy',
166
+ label: 'State',
167
+ valuePath: 'state',
168
+ cellComponent: 'table/cell/anchor',
169
+ action: this.viewPlace,
170
+ width: '100px',
155
171
  resizable: true,
156
172
  sortable: true,
157
173
  filterable: true,
174
+ filterParam: 'state',
158
175
  filterComponent: 'filter/string',
159
176
  },
160
177
  {
161
- label: 'Internal ID',
162
- valuePath: 'internal_id',
163
- cellComponent: 'click-to-copy',
164
- width: '120px',
178
+ label: 'City',
179
+ valuePath: 'city',
180
+ cellComponent: 'table/cell/anchor',
181
+ action: this.viewPlace,
182
+ width: '100px',
165
183
  resizable: true,
166
184
  sortable: true,
167
185
  filterable: true,
168
- hidden: true,
186
+ filterParam: 'city',
169
187
  filterComponent: 'filter/string',
170
188
  },
171
189
  {
172
- label: 'Email',
173
- valuePath: 'email',
174
- cellComponent: 'table/cell/base',
190
+ label: 'ID',
191
+ valuePath: 'public_id',
175
192
  width: '120px',
193
+ cellComponent: 'click-to-copy',
176
194
  resizable: true,
177
195
  sortable: true,
178
- hidden: true,
179
196
  filterable: true,
180
197
  filterComponent: 'filter/string',
181
198
  },
@@ -202,6 +219,29 @@ export default class ManagementPlacesIndexController extends Controller {
202
219
  filterComponent: 'filter/country',
203
220
  filterParam: 'country',
204
221
  },
222
+ {
223
+ label: 'Neighborhood',
224
+ valuePath: 'neighborhood',
225
+ cellComponent: 'table/cell/anchor',
226
+ action: this.viewPlace,
227
+ width: '100px',
228
+ resizable: true,
229
+ sortable: true,
230
+ filterable: true,
231
+ filterParam: 'neighborhood',
232
+ filterComponent: 'filter/string',
233
+ },
234
+ {
235
+ label: 'Postal Code',
236
+ valuePath: 'postal_code',
237
+ cellComponent: 'table/cell/anchor',
238
+ action: this.viewPlace,
239
+ width: '100px',
240
+ resizable: true,
241
+ sortable: true,
242
+ filterable: true,
243
+ filterComponent: 'filter/string',
244
+ },
205
245
  {
206
246
  label: 'Created At',
207
247
  valuePath: 'createdAt',
@@ -223,6 +263,7 @@ export default class ManagementPlacesIndexController extends Controller {
223
263
  filterable: true,
224
264
  filterComponent: 'filter/date',
225
265
  },
266
+
226
267
  {
227
268
  label: '',
228
269
  cellComponent: 'table/cell/dropdown',
@@ -69,7 +69,24 @@ export default class ManagementVehiclesIndexController extends ManagementControl
69
69
  *
70
70
  * @var {Array}
71
71
  */
72
- queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'status', 'created_at', 'updated_at', 'created_by', 'updated_by'];
72
+ queryParams = [
73
+ 'page',
74
+ 'limit',
75
+ 'sort',
76
+ 'query',
77
+ 'public_id',
78
+ 'status',
79
+ 'created_at',
80
+ 'updated_at',
81
+ 'created_by',
82
+ 'updated_by',
83
+ 'name',
84
+ 'plate_number',
85
+ 'year',
86
+ 'make',
87
+ 'model',
88
+ 'display_name',
89
+ ];
73
90
 
74
91
  /**
75
92
  * The search query.
@@ -128,18 +145,18 @@ export default class ManagementVehiclesIndexController extends ManagementControl
128
145
  @tracked plate_number;
129
146
 
130
147
  /**
131
- * The filterable param `vehicle_make`.
148
+ * The filterable param `make`.
132
149
  *
133
150
  * @var {String}
134
151
  */
135
- @tracked vehicle_make;
152
+ @tracked make;
136
153
 
137
154
  /**
138
- * The filterable param `vehicle_model`.
155
+ * The filterable param `model`.
139
156
  *
140
157
  * @var {String}
141
158
  */
142
- @tracked vehicle_model;
159
+ @tracked model;
143
160
 
144
161
  /**
145
162
  * The filterable param `year`.
@@ -148,6 +165,20 @@ export default class ManagementVehiclesIndexController extends ManagementControl
148
165
  */
149
166
  @tracked year;
150
167
 
168
+ /**
169
+ * The filterable param `make`.
170
+ *
171
+ * @var {String}
172
+ */
173
+ @tracked make;
174
+
175
+ /**
176
+ * The filterable param `model`.
177
+ *
178
+ * @var {String}
179
+ */
180
+ @tracked model;
181
+
151
182
  /**
152
183
  * The filterable param `country`.
153
184
  *
@@ -176,6 +207,13 @@ export default class ManagementVehiclesIndexController extends ManagementControl
176
207
  */
177
208
  @tracked driver;
178
209
 
210
+ /**
211
+ * The filterable param `display_name`.
212
+ *
213
+ * @var {String}
214
+ */
215
+ @tracked display_name;
216
+
179
217
  /**
180
218
  * TableComponent instance.
181
219
  *
@@ -214,7 +252,7 @@ export default class ManagementVehiclesIndexController extends ManagementControl
214
252
  sortable: true,
215
253
  filterable: true,
216
254
  filterComponent: 'filter/string',
217
- filterParam: 'name',
255
+ filterParam: 'display_name',
218
256
  showOnlineIndicator: true,
219
257
  },
220
258
  {
@@ -264,7 +302,7 @@ export default class ManagementVehiclesIndexController extends ManagementControl
264
302
  sortable: true,
265
303
  hidden: true,
266
304
  filterable: true,
267
- filterParam: 'vehicle_make',
305
+ filterParam: 'make',
268
306
  filterComponent: 'filter/string',
269
307
  },
270
308
  {
@@ -276,7 +314,7 @@ export default class ManagementVehiclesIndexController extends ManagementControl
276
314
  sortable: true,
277
315
  hidden: true,
278
316
  filterable: true,
279
- filterParam: 'vehicle_model',
317
+ filterParam: 'model',
280
318
  filterComponent: 'filter/string',
281
319
  },
282
320
  {
@@ -490,4 +528,25 @@ export default class ManagementVehiclesIndexController extends ManagementControl
490
528
  * @void
491
529
  */
492
530
  @action assignDriver() {}
531
+
532
+ /**
533
+ * View a place location on map
534
+ *
535
+ * @param {PlaceModel} place
536
+ * @param {Object} options
537
+ * @void
538
+ */
539
+ @action viewOnMap(place, options = {}) {
540
+ const { latitude, longitude } = place;
541
+
542
+ this.modalsManager.show('modals/point-map', {
543
+ title: `Location of ${place.name}`,
544
+ acceptButtonText: 'Done',
545
+ hideDeclineButton: true,
546
+ latitude,
547
+ longitude,
548
+ location: [latitude, longitude],
549
+ ...options,
550
+ });
551
+ }
493
552
  }
@@ -5,7 +5,7 @@ import { action } from '@ember/object';
5
5
  import { isBlank } from '@ember/utils';
6
6
  import { timeout } from 'ember-concurrency';
7
7
  import { task } from 'ember-concurrency-decorators';
8
-
8
+ import getVendorStatusOptions from '../../../utils/get-vendor-status-options';
9
9
  export default class ManagementVendorsIndexController extends Controller {
10
10
  /**
11
11
  * Inject the `management.places.index` controller
@@ -68,7 +68,7 @@ export default class ManagementVendorsIndexController extends Controller {
68
68
  *
69
69
  * @var {Array}
70
70
  */
71
- queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'created_by', 'updated_by', 'status'];
71
+ queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'created_by', 'updated_by', 'status', 'name', 'email', 'phone', 'type', 'country', 'address', 'website_url'];
72
72
 
73
73
  /**
74
74
  * The current page of data being viewed
@@ -112,6 +112,48 @@ export default class ManagementVendorsIndexController extends Controller {
112
112
  */
113
113
  @tracked status;
114
114
 
115
+ /**
116
+ * The filterable param `type`
117
+ *
118
+ * @var {Array|String}
119
+ */
120
+ @tracked type;
121
+
122
+ /**
123
+ * The filterable param `name`
124
+ *
125
+ * @var {String}
126
+ */
127
+ @tracked name;
128
+
129
+ /**
130
+ * The filterable param `website_url`
131
+ *
132
+ * @var {String}
133
+ */
134
+ @tracked website_url;
135
+
136
+ /**
137
+ * The filterable param `phone`
138
+ *
139
+ * @var {String}
140
+ */
141
+ @tracked phone;
142
+
143
+ /**
144
+ * The filterable param `email`
145
+ *
146
+ * @var {String}
147
+ */
148
+ @tracked email;
149
+
150
+ /**
151
+ * The filterable param `country`
152
+ *
153
+ * @var {String}
154
+ */
155
+ @tracked country;
156
+
115
157
  /**
116
158
  * Rows for the table
117
159
  *
@@ -168,6 +210,17 @@ export default class ManagementVendorsIndexController extends Controller {
168
210
  filterable: true,
169
211
  filterComponent: 'filter/string',
170
212
  },
213
+ {
214
+ label: 'Website URL',
215
+ valuePath: 'website_url',
216
+ cellComponent: 'click-to-copy',
217
+ width: '80px',
218
+ resizable: true,
219
+ sortable: true,
220
+ hidden: true,
221
+ filterable: true,
222
+ filterComponent: 'filter/string',
223
+ },
171
224
  {
172
225
  label: 'Phone',
173
226
  valuePath: 'phone',
@@ -194,11 +247,13 @@ export default class ManagementVendorsIndexController extends Controller {
194
247
  {
195
248
  label: 'Type',
196
249
  valuePath: 'type',
197
- cellComponent: 'table/cell/status',
198
- width: '120px',
250
+ cellComponent: 'table/cell/anchor',
251
+ action: this.viewVendorPlace,
252
+ width: '150px',
199
253
  resizable: true,
200
254
  sortable: true,
201
255
  filterable: true,
256
+ filterParam: 'type',
202
257
  filterComponent: 'filter/string',
203
258
  },
204
259
  {
@@ -206,12 +261,12 @@ export default class ManagementVendorsIndexController extends Controller {
206
261
  valuePath: 'country',
207
262
  cellComponent: 'table/cell/base',
208
263
  cellClassNames: 'uppercase',
209
- width: '130px',
264
+ width: '120px',
210
265
  resizable: true,
211
266
  sortable: true,
212
- hidden: true,
213
267
  filterable: true,
214
- filterComponent: 'filter/string',
268
+ filterComponent: 'filter/country',
269
+ filterParam: 'country',
215
270
  },
216
271
  {
217
272
  label: 'Created At',
@@ -243,7 +298,7 @@ export default class ManagementVendorsIndexController extends Controller {
243
298
  sortable: true,
244
299
  filterable: true,
245
300
  filterComponent: 'filter/multi-option',
246
- filterOptions: this.statusOptions,
301
+ filterOptions: getVendorStatusOptions(),
247
302
  },
248
303
  {
249
304
  label: '',
@@ -96,6 +96,8 @@ export default class OperationsOrdersIndexController extends Controller {
96
96
  'status',
97
97
  'type',
98
98
  'layout',
99
+ 'drawerOpen',
100
+ 'drawerTab',
99
101
  ];
100
102
 
101
103
  /**
@@ -266,6 +268,20 @@ export default class OperationsOrdersIndexController extends Controller {
266
268
  */
267
269
  @tracked layout = 'map';
268
270
 
271
+ /**
272
+ * Decides if scope drawer is open.
273
+ *
274
+ * @type {Boolean}
275
+ */
276
+ @tracked drawerOpen = 0;
277
+
278
+ /**
279
+ * The drawer tab that is active.
280
+ *
281
+ * @type {Boolean}
282
+ */
283
+ @tracked drawerTab;
284
+
269
285
  /**
270
286
  * Flag to determine if the layout is 'map'
271
287
  *
@@ -732,10 +748,35 @@ export default class OperationsOrdersIndexController extends Controller {
732
748
  */
733
749
  @action onPressLiveMapDrawerToggle() {
734
750
  if (this.drawer) {
735
- this.drawer.toggleMinimize();
751
+ this.drawer.toggleMinimize({
752
+ onToggle: (drawerApi) => {
753
+ this.drawerOpen = drawerApi.isMinimized ? 0 : 1;
754
+ },
755
+ });
736
756
  }
737
757
  }
738
758
 
759
+ /**
760
+ * Handles the resize end event for the `<LiveMapDrawer />` component.
761
+ *
762
+ * @params {Object} event
763
+ * @params {Object.drawerPanelNode|HTMLElement}
764
+ * @memberof OperationsOrdersIndexController
765
+ */
766
+ @action onDrawerResizeEnd({ drawerPanelNode }) {
767
+ const rect = drawerPanelNode.getBoundingClientRect();
768
+
769
+ if (rect.height === 0) {
770
+ this.drawerOpen = 0;
771
+ } else if (rect.height > 1) {
772
+ this.drawerOpen = 1;
773
+ }
774
+ }
775
+
776
+ @action onDrawerTabChanged(tabName) {
777
+ this.drawerTab = tabName;
778
+ }
779
+
739
780
  /**
740
781
  * Exports all orders.
741
782
  * @action
@@ -15,6 +15,14 @@ export default class ManagementContactsIndexRoute extends Route {
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
17
  status: { refreshModel: true },
18
+ name: { refreshModel: true },
19
+ title: { refreshModel: true },
20
+ phone: { refreshModel: true },
21
+ email: { refreshModel: true },
22
+ type: { refreshModel: true },
23
+ internal_id: { refreshModel: true },
24
+ createdAt: { refreshModel: true },
25
+ updatedAt: { refreshModel: true },
18
26
  };
19
27
 
20
28
  model(params) {
@@ -15,11 +15,17 @@ export default class ManagementFleetsIndexRoute extends Route {
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
17
  status: { refreshModel: true },
18
- internal_id: { refreshModel: true },
18
+ public_id: { refreshModel: true },
19
19
  zone: { refreshModel: true },
20
20
  service_area: { refreshModel: true },
21
- parent_fleet: { refreshModel: true },
21
+ parent_fleet_uuid: { refreshModel: true },
22
22
  task: { refreshModel: true },
23
+ name: { refreshModel: true },
24
+ vendor: { refreshModel: true },
25
+ drivers_count: { refreshModel: true },
26
+ drivers_online_count: { refreshModel: true },
27
+ createdAt: { refreshModel: true },
28
+ updatedAt: { refreshModel: true },
23
29
  };
24
30
 
25
31
  model(params) {
@@ -15,8 +15,14 @@ export default class ManagementFuelReportsIndexRoute extends Route {
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
17
  vehicle: { refreshModel: true },
18
+ reporter: { refreshModel: true },
18
19
  driver: { refreshModel: true },
19
20
  status: { refreshModel: true },
21
+ createdAt: { refreshModel: true },
22
+ updatedAt: { refreshModel: true },
23
+ public_id: { refreshModel: true },
24
+ volume: { refreshModel: true },
25
+ odometer: { refreshModel: true },
20
26
  };
21
27
 
22
28
  model(params) {
@@ -14,8 +14,16 @@ export default class ManagementIssuesIndexRoute extends Route {
14
14
  limit: { refreshModel: true },
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
- country: { refreshModel: true },
17
+ priority: { refreshModel: true },
18
18
  status: { refreshModel: true },
19
+ vehicle: { refreshModel: true },
20
+ driver: { refreshModel: true },
21
+ assignee: { refreshModel: true },
22
+ reporter: { refreshModel: true },
23
+ type: { refreshModel: true },
24
+ category: { refreshModel: true },
25
+ updatedAt: { refreshModel: true },
26
+ createdAt: { refreshModel: true },
19
27
  };
20
28
 
21
29
  model(params) {
@@ -15,9 +15,19 @@ export default class ManagementPlacesIndexRoute extends Route {
15
15
  sort: { refreshModel: true },
16
16
  query: { refreshModel: true },
17
17
  country: { refreshModel: true },
18
+ name: { refreshModel: true },
19
+ address: { refreshModel: true },
20
+ public_id: { refreshModel: true },
21
+ city: { refreshModel: true },
22
+ phone: { refreshModel: true },
23
+ neighborhood: { refreshModel: true },
24
+ postal_code: { refreshModel: true },
25
+ state: { refreshModel: true },
26
+ createdAt: { refreshModel: true },
27
+ updatedAt: { refreshModel: true },
18
28
  };
19
29
 
20
30
  model(params) {
21
- return this.store.query('place', { params });
31
+ return this.store.query('place', { ...params });
22
32
  }
23
33
  }
@@ -10,14 +10,14 @@ export default class ManagementVehiclesIndexRoute extends Route {
10
10
  sort: { refreshModel: true },
11
11
  query: { refreshModel: true },
12
12
  status: { refreshModel: true },
13
- name: { refreshModel: true },
13
+ display_name: { refreshModel: true },
14
14
  public_id: { refreshModel: true },
15
15
  vin: { refreshModel: true },
16
16
  plate_number: { refreshModel: true },
17
- vehicle_make: { refreshModel: true },
18
- vehicle_model: { refreshModel: true },
17
+ model: { refreshModel: true },
19
18
  year: { refreshModel: true },
20
19
  country: { refreshModel: true },
20
+ make: { refreshModel: true },
21
21
  fleet: { refreshModel: true },
22
22
  vendor: { refreshModel: true },
23
23
  driver: { refreshModel: true },
@@ -16,6 +16,14 @@ export default class ManagementVendorsIndexRoute extends Route {
16
16
  query: { refreshModel: true },
17
17
  country: { refreshModel: true },
18
18
  status: { refreshModel: true },
19
+ name: { refreshModel: true },
20
+ email: { refreshModel: true },
21
+ address: { refreshModel: true },
22
+ phone: { refreshModel: true },
23
+ type: { refreshModel: true },
24
+ createdAt: { refreshModel: true },
25
+ updatedAt: { refreshModel: true },
26
+ website_url: { refreshModel: true },
19
27
  };
20
28
 
21
29
  model(params) {
@@ -16,7 +16,7 @@ export default class OperationsSchedulerIndexRoute extends Route {
16
16
  @service store;
17
17
 
18
18
  model() {
19
- return this.store.query('order', { status: 'created', with: ['payload'] });
19
+ return this.store.query('order', { status: 'created', with: ['payload', 'driverAssigned.vehicle'] });
20
20
  }
21
21
 
22
22
  setupController(controller, model) {
@@ -15,7 +15,7 @@
15
15
  <GlobalSearch @visible={{this.isSearchVisible}} @onPressOrder={{this.viewOrder}} />
16
16
  <MapContainer::Toolbar @activeOrdersCount={{this.activeOrdersCount}} @liveMap={{this.liveMap}} @map={{this.leafletMap}} @onPressViewOrders={{this.toggleOrdersPanel}} @onPressSearch={{this.toggleSearch}} @onPressCreateOrder={{this.createOrder}} @onPressLiveMapDrawerToggle={{this.onPressLiveMapDrawerToggle}} />
17
17
  <OrderListOverlay @noBackdrop={{true}} @fullHeight={{true}} @outView={{not this.isOrdersPanelVisible}} @width={{if (media 'isMobile') "100%" "338px"}} @onPressCancel={{this.hideOrdersPanel}} @onPressCreateOrder={{this.createOrder}} @onPressViewOrder={{this.viewOrder}} @onPressCreateFleet={{this.fleetController.createFleet}} @onPressManageFleet={{this.fleetController.viewFleet}} @onPressCancelOrders={{this.bulkCancelOrders}} @onPressDeleteOrders={{this.bulkDeleteOrders}} />
18
- <LiveMap id="leafletMap" class="next-leaflet-container-map" @lat={{1.3521}} @lng={{103.8198}} @zoom={{12}} @zoomControl={{false}} @onLoad={{this.setMapReference}} @onDrawerReady={{this.setDrawerContext}} {{set-container-dimensions}} />
18
+ <LiveMap id="leafletMap" class="next-leaflet-container-map" @lat={{1.3521}} @lng={{103.8198}} @zoom={{12}} @zoomControl={{false}} @onLoad={{this.setMapReference}} @onDrawerReady={{this.setDrawerContext}} @isDrawerMinimized={{not this.drawerOpen}} @onDrawerResizeEnd={{this.onDrawerResizeEnd}} @onDrawerTabChanged={{this.onDrawerTabChanged}} @drawerTab={{this.drawerTab}} {{set-container-dimensions}} />
19
19
  </MapContainer>
20
20
  {{/if}}
21
21
 
@@ -0,0 +1,30 @@
1
+ import { isNone } from '@ember/utils';
2
+
3
+ export default function getIssueCategories(type = null, options) {
4
+ const issueCategories = {
5
+ vehicle: ['Mechanical Problems', 'Cosmetic Damages', 'Tire Issues', 'Electronics and Instruments', 'Maintenance Alerts', 'Fuel Efficiency Issues'],
6
+ driver: ['Behavior Concerns', 'Documentation', 'Time Management', 'Communication', 'Training Needs', 'Health and Safety Violations'],
7
+ route: ['Inefficient Routes', 'Safety Concerns', 'Blocked Routes', 'Environmental Considerations', 'Unfavorable Weather Conditions'],
8
+ 'payload-cargo': ['Damaged Goods', 'Misplaced Goods', 'Documentation Issues', 'Temperature-Sensitive Goods', 'Incorrect Cargo Loading'],
9
+ 'software-technical': ['Bugs', 'UI/UX Concerns', 'Integration Failures', 'Performance', 'Feature Requests', 'Security Vulnerabilities'],
10
+ operational: ['Compliance', 'Resource Allocation', 'Cost Overruns', 'Communication', 'Vendor Management Issues'],
11
+ customer: ['Service Quality', 'Billing Discrepancies', 'Communication Breakdown', 'Feedback and Suggestions', 'Order Errors'],
12
+ security: ['Unauthorized Access', 'Data Concerns', 'Physical Security', 'Data Integrity Issues'],
13
+ 'environmental-sustainability': ['Fuel Consumption', 'Carbon Footprint', 'Waste Management', 'Green Initiatives Opportunities'],
14
+ };
15
+
16
+ if (!isNone(type) && typeof type === 'object' && options === undefined) {
17
+ options = type;
18
+ }
19
+
20
+ if (!isNone(options) && typeof options === 'object' && options.fullObject === true) {
21
+ return issueCategories;
22
+ }
23
+
24
+ if (type) {
25
+ return issueCategories[type] || [];
26
+ }
27
+
28
+ const allIssueCategories = Object.values(issueCategories).flat();
29
+ return allIssueCategories;
30
+ }
@@ -0,0 +1,3 @@
1
+ export default function getIssueTypes() {
2
+ return ['vehicle', 'driver', 'route', 'payload-cargo', 'software-technical', 'operational', 'customer', 'security', 'environmental-sustainability'];
3
+ }
@@ -0,0 +1,3 @@
1
+ export default function getVendorStatusOptions() {
2
+ return ['pending', 'active', 'do-not-contact', 'prospective', 'archived'];
3
+ }