@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.
- package/addon/components/contact-form-panel.hbs +28 -6
- package/addon/components/driver-form-panel.hbs +10 -0
- package/addon/components/driver-form-panel.js +51 -0
- package/addon/components/driver-panel/details.hbs +1 -5
- package/addon/components/driver-panel.hbs +21 -3
- package/addon/components/fleet-form-panel.hbs +60 -6
- package/addon/components/fleet-panel/details.hbs +1 -1
- package/addon/components/fuel-report-form-panel.hbs +84 -8
- package/addon/components/fuel-report-form-panel.js +6 -0
- package/addon/components/fuel-report-panel/details.hbs +4 -0
- package/addon/components/issue-form-panel.hbs +99 -11
- package/addon/components/issue-form-panel.js +5 -13
- package/addon/components/layout/fleet-ops-sidebar.js +8 -0
- package/addon/components/live-map-drawer.hbs +1 -1
- package/addon/components/live-map.hbs +1 -1
- package/addon/components/modals/driver-assign-vehicle.hbs +2 -11
- package/addon/components/modals/driver-assign-vendor.hbs +1 -9
- package/addon/components/modals/fuel-report-details.hbs +4 -0
- package/addon/components/order/schedule-card.hbs +32 -4
- package/addon/components/order/schedule-card.js +155 -5
- package/addon/components/place-form-panel.hbs +14 -7
- package/addon/components/place-form-panel.js +71 -0
- package/addon/components/place-panel/details.hbs +9 -19
- package/addon/components/vehicle-form-panel.hbs +67 -7
- package/addon/components/vehicle-form-panel.js +37 -0
- package/addon/components/vehicle-panel/details.hbs +9 -5
- package/addon/components/vehicle-panel.hbs +18 -4
- package/addon/components/vendor-form-panel/create-form.hbs +72 -11
- package/addon/components/vendor-form-panel/edit-form.hbs +1 -1
- package/addon/components/vendor-form-panel.hbs +70 -30
- package/addon/components/vendor-form-panel.js +4 -40
- package/addon/components/vendor-panel/details.hbs +2 -2
- package/addon/components/vendor-panel.hbs +16 -2
- package/addon/controllers/management/contacts/index.js +42 -3
- package/addon/controllers/management/fleets/index.js +12 -23
- package/addon/controllers/management/fuel-reports/index/new.js +1 -1
- package/addon/controllers/management/fuel-reports/index.js +73 -20
- package/addon/controllers/management/issues/index/new.js +2 -2
- package/addon/controllers/management/issues/index.js +65 -45
- package/addon/controllers/management/places/index.js +59 -18
- package/addon/controllers/management/vehicles/index.js +67 -8
- package/addon/controllers/management/vendors/index.js +63 -8
- package/addon/controllers/operations/orders/index.js +42 -1
- package/addon/routes/management/contacts/index.js +8 -0
- package/addon/routes/management/fleets/index.js +8 -2
- package/addon/routes/management/fuel-reports/index.js +6 -0
- package/addon/routes/management/issues/index.js +9 -1
- package/addon/routes/management/places/index.js +11 -1
- package/addon/routes/management/vehicles/index.js +3 -3
- package/addon/routes/management/vendors/index.js +8 -0
- package/addon/routes/operations/scheduler/index.js +1 -1
- package/addon/templates/operations/orders/index.hbs +1 -1
- package/addon/utils/get-issue-categories.js +30 -0
- package/addon/utils/get-issue-types.js +3 -0
- package/addon/utils/get-vendor-status-options.js +3 -0
- package/addon/utils/get-vendor-type-options.js +41 -0
- package/app/utils/get-issue-categories.js +1 -0
- package/app/utils/get-issue-types.js +1 -0
- package/app/utils/get-vendor-categories.js +1 -0
- package/app/utils/get-vendor-status-options.js +1 -0
- package/app/utils/get-vendor-type-options.js +1 -0
- package/app/utils/get-vendor-types.js +1 -0
- package/composer.json +1 -1
- package/extension.json +1 -1
- package/package.json +4 -4
- package/server/migrations/2023_11_09_041807_add_status_column_to_fuel_reports_table.php +32 -0
- package/server/migrations/2023_11_15_062814_add_comments_column_and_resolved_at_column_to_vehicle_device_events_table.php +33 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +2 -2
- package/server/src/Http/Controllers/Api/v1/VehicleController.php +2 -2
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +5 -13
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +1 -3
- package/server/src/Http/Filter/ContactFilter.php +10 -0
- package/server/src/Http/Filter/FleetFilter.php +8 -6
- package/server/src/Http/Filter/FuelReportFilter.php +51 -0
- package/server/src/Http/Filter/IssueFilter.php +61 -5
- package/server/src/Http/Filter/PlaceFilter.php +48 -6
- package/server/src/Http/Filter/VehicleFilter.php +21 -6
- package/server/src/Http/Filter/VendorFilter.php +11 -8
- package/server/src/Http/Middleware/TransformLocationMiddleware.php +1 -1
- package/server/src/Http/Resources/Internal/v1/IntegratedVendorFacilitator.php +17 -18
- package/server/src/Http/Resources/v1/Contact.php +16 -19
- package/server/src/Http/Resources/v1/CurrentJob.php +13 -16
- package/server/src/Http/Resources/v1/Driver.php +59 -57
- package/server/src/Http/Resources/v1/Entity.php +30 -33
- package/server/src/Http/Resources/v1/FuelReport.php +16 -14
- package/server/src/Http/Resources/v1/Order.php +1 -1
- package/server/src/Http/Resources/v1/Payload.php +21 -24
- package/server/src/Http/Resources/v1/Place.php +27 -30
- package/server/src/Http/Resources/v1/Proof.php +13 -16
- package/server/src/Http/Resources/v1/PurchaseRate.php +14 -17
- package/server/src/Http/Resources/v1/ServiceArea.php +13 -16
- package/server/src/Http/Resources/v1/ServiceQuote.php +15 -18
- package/server/src/Http/Resources/v1/ServiceRate.php +33 -36
- package/server/src/Http/Resources/v1/ServiceRateFee.php +14 -17
- package/server/src/Http/Resources/v1/ServiceRateParcelFee.php +9 -12
- package/server/src/Http/Resources/v1/TrackingNumber.php +18 -21
- package/server/src/Http/Resources/v1/TrackingStatus.php +18 -21
- package/server/src/Http/Resources/v1/Vehicle.php +31 -34
- package/server/src/Http/Resources/v1/VehicleDevice.php +23 -25
- package/server/src/Http/Resources/v1/VehicleWithoutDriver.php +38 -32
- package/server/src/Http/Resources/v1/Vendor.php +31 -26
- package/server/src/Http/Resources/v1/Zone.php +14 -17
- package/server/src/Models/Driver.php +7 -1
- package/server/src/Models/FuelReport.php +1 -0
- package/server/src/Models/IntegratedVendor.php +6 -1
- package/server/src/Models/Order.php +2 -2
- package/server/src/Models/Place.php +2 -2
- package/server/src/Models/VehicleDeviceEvent.php +1 -0
- package/server/src/Models/Vendor.php +1 -1
- 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', '
|
|
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 `
|
|
94
|
+
* The filterable param `public_id`
|
|
95
95
|
*
|
|
96
96
|
* @var {String}
|
|
97
97
|
*/
|
|
98
|
-
@tracked
|
|
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 `
|
|
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
|
|
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: '
|
|
152
|
-
valuePath: '
|
|
153
|
-
|
|
154
|
-
|
|
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: '
|
|
162
|
-
valuePath: '
|
|
163
|
-
cellComponent: '
|
|
164
|
-
|
|
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
|
-
|
|
186
|
+
filterParam: 'city',
|
|
169
187
|
filterComponent: 'filter/string',
|
|
170
188
|
},
|
|
171
189
|
{
|
|
172
|
-
label: '
|
|
173
|
-
valuePath: '
|
|
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 = [
|
|
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 `
|
|
148
|
+
* The filterable param `make`.
|
|
132
149
|
*
|
|
133
150
|
* @var {String}
|
|
134
151
|
*/
|
|
135
|
-
@tracked
|
|
152
|
+
@tracked make;
|
|
136
153
|
|
|
137
154
|
/**
|
|
138
|
-
* The filterable param `
|
|
155
|
+
* The filterable param `model`.
|
|
139
156
|
*
|
|
140
157
|
* @var {String}
|
|
141
158
|
*/
|
|
142
|
-
@tracked
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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/
|
|
198
|
-
|
|
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: '
|
|
264
|
+
width: '120px',
|
|
210
265
|
resizable: true,
|
|
211
266
|
sortable: true,
|
|
212
|
-
hidden: true,
|
|
213
267
|
filterable: true,
|
|
214
|
-
filterComponent: 'filter/
|
|
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:
|
|
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
|
-
|
|
18
|
+
public_id: { refreshModel: true },
|
|
19
19
|
zone: { refreshModel: true },
|
|
20
20
|
service_area: { refreshModel: true },
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13
|
+
display_name: { refreshModel: true },
|
|
14
14
|
public_id: { refreshModel: true },
|
|
15
15
|
vin: { refreshModel: true },
|
|
16
16
|
plate_number: { refreshModel: true },
|
|
17
|
-
|
|
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
|
+
}
|