@fleetbase/fleetops-engine 0.3.4 → 0.3.6
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/README.md +4 -4
- package/addon/components/admin/navigator-app.hbs +5 -0
- package/addon/components/admin/navigator-app.js +27 -0
- package/addon/components/driver-form-panel.js +13 -19
- package/addon/components/fleet-listing-panel.hbs +2 -2
- package/addon/components/layout/fleet-ops-sidebar/fleet-listing.hbs +1 -0
- package/addon/components/layout/fleet-ops-sidebar/fleet-listing.js +3 -0
- package/addon/components/layout/fleet-ops-sidebar.hbs +4 -4
- package/addon/components/layout/fleet-ops-sidebar.js +2 -0
- package/addon/components/leaflet-draw-control.js +2 -3
- package/addon/components/live-map.js +7 -4
- package/addon/components/modals/driver-assign-order.hbs +2 -2
- package/addon/components/modals/order-import.hbs +5 -5
- package/addon/components/modals/order-new-activity.hbs +1 -1
- package/addon/components/order-config/entities-editor.js +3 -5
- package/addon/components/route-list.hbs +2 -2
- package/addon/components/vendor-form-panel.js +1 -1
- package/addon/controllers/application.js +2 -2
- package/addon/controllers/base-controller.js +31 -0
- package/addon/controllers/management/contacts/index/details.js +2 -2
- package/addon/controllers/management/contacts/index/edit.js +2 -2
- package/addon/controllers/management/contacts/index/new.js +2 -2
- package/addon/controllers/management/contacts/index.js +9 -2
- package/addon/controllers/management/drivers/index/details.js +2 -2
- package/addon/controllers/management/drivers/index/edit.js +28 -2
- package/addon/controllers/management/drivers/index/new.js +2 -2
- package/addon/controllers/management/drivers/index.js +18 -24
- package/addon/controllers/management/fleets/index/details.js +2 -2
- package/addon/controllers/management/fleets/index/edit.js +2 -2
- package/addon/controllers/management/fleets/index/new.js +2 -2
- package/addon/controllers/management/fleets/index.js +16 -9
- package/addon/controllers/management/fuel-reports/index/details.js +2 -2
- package/addon/controllers/management/fuel-reports/index/edit.js +2 -2
- package/addon/controllers/management/fuel-reports/index/new.js +2 -2
- package/addon/controllers/management/fuel-reports/index.js +9 -2
- package/addon/controllers/management/issues/index/details.js +2 -2
- package/addon/controllers/management/issues/index/edit.js +2 -2
- package/addon/controllers/management/issues/index/new.js +2 -2
- package/addon/controllers/management/issues/index.js +9 -9
- package/addon/controllers/management/places/index/details.js +2 -2
- package/addon/controllers/management/places/index/edit.js +2 -2
- package/addon/controllers/management/places/index/new.js +2 -2
- package/addon/controllers/management/places/index.js +8 -2
- package/addon/controllers/management/vehicles/index/details.js +2 -2
- package/addon/controllers/management/vehicles/index/edit.js +2 -2
- package/addon/controllers/management/vehicles/index/new.js +2 -2
- package/addon/controllers/management/vehicles/index.js +24 -32
- package/addon/controllers/management/vendors/index/details.js +2 -2
- package/addon/controllers/management/vendors/index/edit.js +2 -2
- package/addon/controllers/management/vendors/index/new.js +2 -2
- package/addon/controllers/management/vendors/index.js +9 -8
- package/addon/controllers/management.js +2 -2
- package/addon/controllers/operations/orders/index/config/types.js +2 -2
- package/addon/controllers/operations/orders/index/config.js +2 -2
- package/addon/controllers/operations/orders/index/new.js +64 -44
- package/addon/controllers/operations/orders/index/view.js +11 -4
- package/addon/controllers/operations/orders/index.js +2 -2
- package/addon/controllers/operations/scheduler/index.js +2 -2
- package/addon/controllers/operations/service-rates/index/edit.js +12 -18
- package/addon/controllers/operations/service-rates/index/new.js +16 -22
- package/addon/controllers/operations/service-rates/index.js +9 -2
- package/addon/engine.js +6 -0
- package/addon/helpers/waypoint-label.js +6 -1
- package/addon/routes/application.js +4 -15
- package/addon/routes/management/contacts/index.js +9 -5
- package/addon/routes/management/drivers/index.js +7 -3
- package/addon/routes/management/fleets/index.js +9 -5
- package/addon/routes/management/fuel-reports/index.js +9 -5
- package/addon/routes/management/issues/index.js +9 -5
- package/addon/routes/management/places/index.js +9 -5
- package/addon/routes/management/vehicles/index/details.js +2 -2
- package/addon/routes/management/vehicles/index.js +11 -2
- package/addon/routes/management/vendors/index.js +9 -6
- package/addon/routes/operations/orders/index/view.js +6 -2
- package/addon/routes/operations/orders/index.js +7 -1
- package/addon/routes/operations/orders.js +0 -1
- package/addon/routes/operations/service-rates/index.js +9 -27
- package/addon/routes/operations/service-rates.js +1 -8
- package/addon/styles/fleetops-engine.css +14 -7
- package/addon/templates/management/contacts/index.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +2 -1
- package/addon/templates/management/fleets/index.hbs +23 -3
- package/addon/templates/management/fuel-reports/index.hbs +1 -0
- package/addon/templates/management/issues/index.hbs +22 -2
- package/addon/templates/management/places/index.hbs +9 -1
- package/addon/templates/management/vehicles/index.hbs +22 -2
- package/addon/templates/management/vendors/index.hbs +22 -2
- package/addon/templates/operations/orders/index/new.hbs +7 -7
- package/addon/templates/operations/orders/index/view.hbs +17 -16
- package/addon/templates/operations/service-rates/index.hbs +11 -3
- package/addon/utils/waypoint-label.js +3 -0
- package/app/components/layout/fleet-ops-sidebar/fleet-listing.js +1 -0
- package/app/controllers/{operations/zones/index.js → base-controller.js} +1 -1
- package/app/utils/waypoint-label.js +1 -0
- package/composer.json +1 -1
- package/config/environment.js +11 -1
- package/extension.json +1 -1
- package/index.js +1 -0
- package/package.json +47 -41
- package/server/migrations/2023_04_27_053456_create_contacts_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_drivers_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_entities_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_fleet_drivers_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_fleets_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_fuel_reports_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_issues_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_orders_table.php +8 -8
- package/server/migrations/2023_04_27_053456_create_payloads_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_places_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_purchase_rates_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_service_areas_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_service_quote_items_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_quotes_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_service_rate_fees_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_rate_parcel_fees_table.php +1 -1
- package/server/migrations/2023_04_27_053456_create_service_rates_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_tracking_numbers_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_tracking_statuses_table.php +2 -2
- package/server/migrations/2023_04_27_053456_create_vehicles_table.php +3 -3
- package/server/migrations/2023_04_27_053456_create_vendors_table.php +5 -5
- package/server/migrations/2023_04_27_053456_create_waypoints_table.php +4 -4
- package/server/migrations/2023_04_27_053456_create_zones_table.php +2 -2
- package/server/migrations/2023_11_17_053001_add_category_uuid_to_entities_table.php +33 -0
- package/server/migrations/2023_11_28_074244_add_supplier_uuid_column_to_entities_table.php +33 -0
- package/server/migrations/2023_12_14_100209_add_meta_column_on_driver_table.php +30 -0
- package/server/src/Http/Controllers/Api/v1/DriverController.php +7 -4
- package/server/src/Http/Controllers/Api/v1/EntityController.php +2 -0
- package/server/src/Http/Controllers/Api/v1/OrderController.php +118 -42
- package/server/src/Http/Controllers/Api/v1/PayloadController.php +41 -43
- package/server/src/Http/Controllers/Api/v1/TrackingStatusController.php +43 -2
- package/server/src/Http/Controllers/Internal/v1/DriverController.php +0 -1
- package/server/src/Http/Controllers/Internal/v1/MorphController.php +48 -16
- package/server/src/Http/Controllers/Internal/v1/NavigatorController.php +41 -0
- package/server/src/Http/Controllers/Internal/v1/OrderController.php +3 -2
- package/server/src/Http/Controllers/Internal/v1/PlaceController.php +2 -2
- package/server/src/Http/Requests/CreateDriverRequest.php +2 -0
- package/server/src/Http/Requests/CreateOrderRequest.php +18 -4
- package/server/src/Http/Requests/CreatePayloadRequest.php +23 -7
- package/server/src/Http/Requests/CreatePlaceRequest.php +9 -5
- package/server/src/Http/Requests/CreateTrackingStatusRequest.php +69 -12
- package/server/src/Http/Requests/CreateVehicleRequest.php +5 -3
- package/server/src/Http/Resources/v1/Entity.php +3 -0
- package/server/src/Http/Resources/v1/Fleet.php +19 -17
- package/server/src/Http/Resources/v1/Order.php +3 -2
- package/server/src/Models/Driver.php +21 -2
- package/server/src/Models/Entity.php +18 -23
- package/server/src/Models/Order.php +2 -2
- package/server/src/Models/Payload.php +27 -9
- package/server/src/Models/Place.php +28 -5
- package/server/src/Models/TrackingStatus.php +9 -3
- package/server/src/Models/Vehicle.php +4 -2
- package/server/src/Models/VehicleDevice.php +28 -0
- package/server/src/Models/VehicleDeviceEvent.php +1 -1
- package/server/src/Models/Vendor.php +16 -0
- package/server/src/Observers/DriverObserver.php +1 -1
- package/server/src/routes.php +8 -0
- package/tsconfig.declarations.json +10 -0
- package/addon/components/file-icon.js +0 -1
- package/addon/controllers/operations/zones/index.js +0 -475
- package/addon/routes/operations/dispatch.js +0 -3
- package/addon/routes/operations/zones/index.js +0 -25
- package/addon/routes/operations/zones.js +0 -7
- package/addon/templates/operations/dispatch.hbs +0 -1
- package/addon/templates/operations/zones/index.hbs +0 -72
- package/addon/templates/operations/zones.hbs +0 -1
- package/app/components/file-icon.js +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
|
+
import { inject as controller } from '@ember/controller';
|
|
2
3
|
import { inject as service } from '@ember/service';
|
|
3
4
|
import { tracked } from '@glimmer/tracking';
|
|
4
5
|
import { action, computed, setProperties, set, get } from '@ember/object';
|
|
@@ -13,6 +14,7 @@ import isNotEmpty from '@fleetbase/ember-core/utils/is-not-empty';
|
|
|
13
14
|
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
|
|
14
15
|
import groupBy from '@fleetbase/ember-core/utils/macros/group-by';
|
|
15
16
|
import extractCoordinates from '@fleetbase/ember-core/utils/extract-coordinates';
|
|
17
|
+
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
|
|
16
18
|
|
|
17
19
|
L.Bounds.prototype.intersects = function (bounds) {
|
|
18
20
|
var min = this.min,
|
|
@@ -25,10 +27,7 @@ L.Bounds.prototype.intersects = function (bounds) {
|
|
|
25
27
|
return xIntersects && yIntersects;
|
|
26
28
|
};
|
|
27
29
|
|
|
28
|
-
export default class OperationsOrdersIndexNewController extends
|
|
29
|
-
@controller('management.places.index') placesController;
|
|
30
|
-
@controller('management.contacts.index') contactsController;
|
|
31
|
-
@controller('management.vendors.index') vendorsController;
|
|
30
|
+
export default class OperationsOrdersIndexNewController extends BaseController {
|
|
32
31
|
@controller('operations.orders.index') ordersController;
|
|
33
32
|
|
|
34
33
|
/**
|
|
@@ -87,6 +86,13 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
87
86
|
*/
|
|
88
87
|
@service store;
|
|
89
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Inject the `contextPanel` service
|
|
91
|
+
*
|
|
92
|
+
* @var {Service}
|
|
93
|
+
*/
|
|
94
|
+
@service contextPanel;
|
|
95
|
+
|
|
90
96
|
/**
|
|
91
97
|
* Inject the `universe` service
|
|
92
98
|
*
|
|
@@ -132,7 +138,6 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
132
138
|
@tracked routeProfile = 'driving';
|
|
133
139
|
@tracked routeProfileOptions = ['driving', 'bycicle', 'walking'];
|
|
134
140
|
@tracked podOptions = ['scan', 'signature'];
|
|
135
|
-
@tracked isViewingRoutePreview = false;
|
|
136
141
|
@tracked isCsvImportedOrder = false;
|
|
137
142
|
@tracked routePreviewArray = [];
|
|
138
143
|
@tracked previewRouteControl;
|
|
@@ -229,11 +234,6 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
229
234
|
|
|
230
235
|
if (importId) {
|
|
231
236
|
const entities = this.entities.filter((entity) => entity._import_id === importId);
|
|
232
|
-
|
|
233
|
-
// if (entities.length === 0) {
|
|
234
|
-
// return;
|
|
235
|
-
// }
|
|
236
|
-
|
|
237
237
|
const group = {
|
|
238
238
|
importId,
|
|
239
239
|
waypoint,
|
|
@@ -289,8 +289,15 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
289
289
|
// trigger event that fleet-ops created an order
|
|
290
290
|
this.universe.trigger('fleet-ops.order.created', order);
|
|
291
291
|
|
|
292
|
+
// get engine route prefix
|
|
293
|
+
let engineMountPoint = this.universe.getEngineMountPoint('@fleetbase/fleetops-engine');
|
|
294
|
+
|
|
295
|
+
if (!engineMountPoint.endsWith('.')) {
|
|
296
|
+
engineMountPoint = engineMountPoint + '.';
|
|
297
|
+
}
|
|
298
|
+
|
|
292
299
|
// transition to order view
|
|
293
|
-
return this.
|
|
300
|
+
return this.hostRouter.transitionTo(`${engineMountPoint}operations.orders.index.view`, order).then(() => {
|
|
294
301
|
this.notifications.success(`New Order ${order.public_id} Created`);
|
|
295
302
|
this.loader.removeLoader();
|
|
296
303
|
this.resetForm();
|
|
@@ -337,11 +344,7 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
337
344
|
{ name: 'Type', valuePath: 'extension', key: 'type' },
|
|
338
345
|
{ name: 'File Name', valuePath: 'name', key: 'fileName' },
|
|
339
346
|
{ name: 'File Size', valuePath: 'size', key: 'fileSize' },
|
|
340
|
-
{
|
|
341
|
-
name: 'Upload Date',
|
|
342
|
-
valuePath: 'blob.lastModifiedDate',
|
|
343
|
-
key: 'uploadDate',
|
|
344
|
-
},
|
|
347
|
+
{ name: 'Upload Date', valuePath: 'file.lastModifiedDate', key: 'uploadDate' },
|
|
345
348
|
{ name: '', valuePath: '', key: 'delete' },
|
|
346
349
|
],
|
|
347
350
|
acceptedFileTypes: ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/csv'],
|
|
@@ -367,7 +370,7 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
367
370
|
this.fetch.uploadFile.perform(
|
|
368
371
|
file,
|
|
369
372
|
{
|
|
370
|
-
path: `uploads/order-imports/${this.currentUser.companyId}`,
|
|
373
|
+
path: `uploads/fleet-ops/order-imports/${this.currentUser.companyId}`,
|
|
371
374
|
type: `order_import`,
|
|
372
375
|
},
|
|
373
376
|
(uploadedFile) => {
|
|
@@ -396,7 +399,6 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
396
399
|
this.modalsManager.setOption('isProcessing', true);
|
|
397
400
|
|
|
398
401
|
const files = uploadedFiles.map((file) => file.id);
|
|
399
|
-
|
|
400
402
|
let results;
|
|
401
403
|
|
|
402
404
|
try {
|
|
@@ -405,28 +407,21 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
405
407
|
return this.notifications.serverError(error);
|
|
406
408
|
}
|
|
407
409
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
this.isMultipleDropoffOrder = true;
|
|
410
|
+
const places = get(results, 'places');
|
|
411
|
+
const entities = get(results, 'entities');
|
|
411
412
|
|
|
412
|
-
|
|
413
|
-
|
|
413
|
+
if (isArray(places)) {
|
|
414
|
+
this.isMultipleDropoffOrder = true;
|
|
415
|
+
this.waypoints = places.map((_place) => {
|
|
414
416
|
const place = this.store.createRecord('place', _place);
|
|
415
|
-
|
|
416
417
|
return this.store.createRecord('waypoint', { place });
|
|
417
418
|
});
|
|
418
|
-
|
|
419
|
-
this.waypoints = waypoints;
|
|
420
419
|
}
|
|
421
420
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
// map into entity models
|
|
425
|
-
const entities = results.entities.map((entity) => {
|
|
421
|
+
if (isArray(entities)) {
|
|
422
|
+
this.entities = entities.map((entity) => {
|
|
426
423
|
return this.store.createRecord('entity', entity);
|
|
427
424
|
});
|
|
428
|
-
|
|
429
|
-
this.entities = entities;
|
|
430
425
|
}
|
|
431
426
|
|
|
432
427
|
this.notifications.success('Import completed.');
|
|
@@ -436,8 +431,6 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
436
431
|
},
|
|
437
432
|
decline: (modal) => {
|
|
438
433
|
this.modalsManager.setOption('uploadQueue', []);
|
|
439
|
-
this.fileQueue.flush();
|
|
440
|
-
|
|
441
434
|
modal.done();
|
|
442
435
|
},
|
|
443
436
|
});
|
|
@@ -448,7 +441,7 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
448
441
|
|
|
449
442
|
if (on) {
|
|
450
443
|
const company = this.store.peekRecord('company', this.currentUser.companyId);
|
|
451
|
-
this.order.adhoc_distance = company
|
|
444
|
+
this.order.adhoc_distance = getWithDefault(company, 'options.fleetops.adhoc_distance', defaultDistanceInMeters);
|
|
452
445
|
} else {
|
|
453
446
|
this.order.adhoc_distance = defaultDistanceInMeters;
|
|
454
447
|
}
|
|
@@ -493,10 +486,13 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
493
486
|
}
|
|
494
487
|
}
|
|
495
488
|
|
|
496
|
-
@action
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
489
|
+
@action createPlace() {
|
|
490
|
+
const place = this.store.createRecord('place');
|
|
491
|
+
this.contextPanel.focus(place, 'editing');
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
@action editPlace(place) {
|
|
495
|
+
this.contextPanel.focus(place, 'editing');
|
|
500
496
|
}
|
|
501
497
|
|
|
502
498
|
@action async getQuotes(service) {
|
|
@@ -1293,11 +1289,23 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
1293
1289
|
const type = await this.modalsManager.userSelectOption('Select facilitator type', ['contact', 'vendor']);
|
|
1294
1290
|
|
|
1295
1291
|
if (type === 'vendor') {
|
|
1296
|
-
|
|
1292
|
+
const vendor = this.store.createRecord('vendor', { type: 'facilitator', status: 'active' });
|
|
1293
|
+
return this.contextPanel.focus(vendor, 'editing', {
|
|
1294
|
+
onAfterSave: (vendor) => {
|
|
1295
|
+
this.setOrderFacilitator(vendor);
|
|
1296
|
+
this.contextPanel.clear();
|
|
1297
|
+
},
|
|
1298
|
+
});
|
|
1297
1299
|
}
|
|
1298
1300
|
|
|
1299
1301
|
if (type === 'contact') {
|
|
1300
|
-
|
|
1302
|
+
const contact = this.store.createRecord('contact', { type: 'facilitator', status: 'active' });
|
|
1303
|
+
return this.contextPanel.focus(contact, 'editing', {
|
|
1304
|
+
onAfterSave: (contact) => {
|
|
1305
|
+
this.setOrderFacilitator(contact);
|
|
1306
|
+
this.contextPanel.clear();
|
|
1307
|
+
},
|
|
1308
|
+
});
|
|
1301
1309
|
}
|
|
1302
1310
|
}
|
|
1303
1311
|
|
|
@@ -1305,11 +1313,23 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
1305
1313
|
const type = await this.modalsManager.userSelectOption('Select customer type', ['contact', 'vendor']);
|
|
1306
1314
|
|
|
1307
1315
|
if (type === 'vendor') {
|
|
1308
|
-
|
|
1316
|
+
const vendor = this.store.createRecord('vendor', { type: 'customer', status: 'active' });
|
|
1317
|
+
return this.contextPanel.focus(vendor, 'editing', {
|
|
1318
|
+
onAfterSave: (vendor) => {
|
|
1319
|
+
this.setOrderCustomer(vendor);
|
|
1320
|
+
this.contextPanel.clear();
|
|
1321
|
+
},
|
|
1322
|
+
});
|
|
1309
1323
|
}
|
|
1310
1324
|
|
|
1311
1325
|
if (type === 'contact') {
|
|
1312
|
-
|
|
1326
|
+
const contact = this.store.createRecord('contact', { type: 'customer', status: 'active' });
|
|
1327
|
+
return this.contextPanel.focus(contact, 'editing', {
|
|
1328
|
+
onAfterSave: (contact) => {
|
|
1329
|
+
this.setOrderCustomer(contact);
|
|
1330
|
+
this.contextPanel.clear();
|
|
1331
|
+
},
|
|
1332
|
+
});
|
|
1313
1333
|
}
|
|
1314
1334
|
}
|
|
1315
1335
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
|
+
import { inject as controller } from '@ember/controller';
|
|
2
3
|
import { inject as service } from '@ember/service';
|
|
3
4
|
import { tracked } from '@glimmer/tracking';
|
|
4
5
|
import { action, computed } from '@ember/object';
|
|
@@ -10,7 +11,7 @@ import groupBy from '@fleetbase/ember-core/utils/macros/group-by';
|
|
|
10
11
|
import findClosestWaypoint from '@fleetbase/ember-core/utils/find-closest-waypoint';
|
|
11
12
|
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
|
|
12
13
|
|
|
13
|
-
export default class OperationsOrdersIndexViewController extends
|
|
14
|
+
export default class OperationsOrdersIndexViewController extends BaseController {
|
|
14
15
|
/**
|
|
15
16
|
* Inject the `operations.orders.index` controller
|
|
16
17
|
*
|
|
@@ -220,7 +221,7 @@ export default class OperationsOrdersIndexViewController extends Controller {
|
|
|
220
221
|
this.ordersController.setLayoutMode('map');
|
|
221
222
|
|
|
222
223
|
// create initial setup function which runs 600ms after invoked
|
|
223
|
-
const setup = (ms =
|
|
224
|
+
const setup = (ms = 600) => {
|
|
224
225
|
return later(
|
|
225
226
|
this,
|
|
226
227
|
() => {
|
|
@@ -237,7 +238,13 @@ export default class OperationsOrdersIndexViewController extends Controller {
|
|
|
237
238
|
|
|
238
239
|
// create a display order route only function
|
|
239
240
|
const displayOrderRoute = () => {
|
|
240
|
-
return
|
|
241
|
+
return later(
|
|
242
|
+
this,
|
|
243
|
+
() => {
|
|
244
|
+
return this.displayOrderRoute();
|
|
245
|
+
},
|
|
246
|
+
300
|
|
247
|
+
);
|
|
241
248
|
};
|
|
242
249
|
|
|
243
250
|
// re-display order routes when livemap has coordinates
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
3
|
import { tracked } from '@glimmer/tracking';
|
|
4
4
|
import { action } from '@ember/object';
|
|
@@ -8,7 +8,7 @@ import { isBlank } from '@ember/utils';
|
|
|
8
8
|
import { timeout } from 'ember-concurrency';
|
|
9
9
|
import { task } from 'ember-concurrency-decorators';
|
|
10
10
|
|
|
11
|
-
export default class OperationsOrdersIndexController extends
|
|
11
|
+
export default class OperationsOrdersIndexController extends BaseController {
|
|
12
12
|
/**
|
|
13
13
|
* Inject the `currentUser` service
|
|
14
14
|
*
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
2
|
import { tracked } from '@glimmer/tracking';
|
|
3
3
|
import { inject as service } from '@ember/service';
|
|
4
4
|
import { action } from '@ember/object';
|
|
5
5
|
import { format, isValid as isValidDate } from 'date-fns';
|
|
6
6
|
import createFullCalendarEventFromOrder from '../../../utils/create-full-calendar-event-from-order';
|
|
7
7
|
|
|
8
|
-
export default class OperationsSchedulerIndexController extends
|
|
8
|
+
export default class OperationsSchedulerIndexController extends BaseController {
|
|
9
9
|
@service modalsManager;
|
|
10
10
|
@service notifications;
|
|
11
11
|
@service store;
|
|
@@ -36,24 +36,18 @@ export default class OperationsServiceRatesIndexEditController extends Operation
|
|
|
36
36
|
this.isUpdatingServiceRate = true;
|
|
37
37
|
this.loader.showLoader('.overlay-inner-content', { loadingMessage: 'Updating service rate...' });
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.then((
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.resetForm();
|
|
46
|
-
this.hostRouter.refresh();
|
|
47
|
-
});
|
|
48
|
-
})
|
|
49
|
-
.catch(this.notifications.serverError)
|
|
50
|
-
.finally(() => {
|
|
51
|
-
this.isUpdatingServiceRate = false;
|
|
52
|
-
this.loader.removeLoader();
|
|
39
|
+
return serviceRate
|
|
40
|
+
.save()
|
|
41
|
+
.then((serviceRate) => {
|
|
42
|
+
return this.transitionToRoute('operations.service-rates.index').then(() => {
|
|
43
|
+
this.notifications.success(`Service rate '${serviceRate.service_name}' updated`);
|
|
44
|
+
this.resetForm();
|
|
53
45
|
});
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
})
|
|
47
|
+
.catch(this.notifications.serverError)
|
|
48
|
+
.finally(() => {
|
|
49
|
+
this.isUpdatingServiceRate = false;
|
|
50
|
+
this.loader.removeLoader();
|
|
51
|
+
});
|
|
58
52
|
}
|
|
59
53
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
3
|
import { tracked } from '@glimmer/tracking';
|
|
4
4
|
import { action, computed } from '@ember/object';
|
|
5
5
|
import { isBlank } from '@ember/utils';
|
|
6
6
|
|
|
7
|
-
export default class OperationsServiceRatesIndexNewController extends
|
|
7
|
+
export default class OperationsServiceRatesIndexNewController extends BaseController {
|
|
8
8
|
/**
|
|
9
9
|
* Inject the `currentUser` service
|
|
10
10
|
*
|
|
@@ -296,27 +296,21 @@ export default class OperationsServiceRatesIndexNewController extends Controller
|
|
|
296
296
|
this.isCreatingServiceRate = true;
|
|
297
297
|
this.loader.showLoader('.overlay-inner-content', { loadingMessage: 'Creating service rate...' });
|
|
298
298
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
.then((
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
this.resetForm();
|
|
306
|
-
this.hostRouter.refresh();
|
|
307
|
-
});
|
|
308
|
-
})
|
|
309
|
-
.catch((error) => {
|
|
310
|
-
this.notifications.serverError(error);
|
|
311
|
-
})
|
|
312
|
-
.finally(() => {
|
|
313
|
-
this.isCreatingServiceRate = false;
|
|
314
|
-
this.loader.removeLoader();
|
|
299
|
+
return serviceRate
|
|
300
|
+
.save()
|
|
301
|
+
.then((serviceRate) => {
|
|
302
|
+
return this.transitionToRoute('operations.service-rates.index').then(() => {
|
|
303
|
+
this.notifications.success(`New Service Rate ${serviceRate.service_name} Created`);
|
|
304
|
+
this.resetForm();
|
|
315
305
|
});
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
306
|
+
})
|
|
307
|
+
.catch((error) => {
|
|
308
|
+
this.notifications.serverError(error);
|
|
309
|
+
})
|
|
310
|
+
.finally(() => {
|
|
311
|
+
this.isCreatingServiceRate = false;
|
|
312
|
+
this.loader.removeLoader();
|
|
313
|
+
});
|
|
320
314
|
}
|
|
321
315
|
|
|
322
316
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseController from '@fleetbase/fleetops-engine/controllers/base-controller';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
3
|
import { tracked } from '@glimmer/tracking';
|
|
4
4
|
import { action } from '@ember/object';
|
|
@@ -6,7 +6,7 @@ import { isBlank } from '@ember/utils';
|
|
|
6
6
|
import { timeout } from 'ember-concurrency';
|
|
7
7
|
import { task } from 'ember-concurrency-decorators';
|
|
8
8
|
|
|
9
|
-
export default class OperationsServiceRatesIndexController extends
|
|
9
|
+
export default class OperationsServiceRatesIndexController extends BaseController {
|
|
10
10
|
/**
|
|
11
11
|
* Inject the `currentUser` service
|
|
12
12
|
*
|
|
@@ -228,6 +228,13 @@ export default class OperationsServiceRatesIndexController extends Controller {
|
|
|
228
228
|
this.query = value;
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
/**
|
|
232
|
+
* Reload layout view.
|
|
233
|
+
*/
|
|
234
|
+
@action reload() {
|
|
235
|
+
return this.hostRouter.refresh();
|
|
236
|
+
}
|
|
237
|
+
|
|
231
238
|
/**
|
|
232
239
|
* Toggles dialog to export `service-rate`
|
|
233
240
|
*
|
package/addon/engine.js
CHANGED
|
@@ -4,6 +4,7 @@ import Resolver from 'ember-resolver';
|
|
|
4
4
|
import config from './config/environment';
|
|
5
5
|
import services from '@fleetbase/ember-core/exports/services';
|
|
6
6
|
import AdminVisibilityControlsComponent from './components/admin/visibility-controls';
|
|
7
|
+
import NavigatorAppControlsComponent from './components/admin/navigator-app';
|
|
7
8
|
|
|
8
9
|
const { modulePrefix } = config;
|
|
9
10
|
const externalRoutes = ['console', 'extensions'];
|
|
@@ -28,6 +29,11 @@ export default class FleetOpsEngine extends Engine {
|
|
|
28
29
|
icon: 'eye',
|
|
29
30
|
component: AdminVisibilityControlsComponent,
|
|
30
31
|
},
|
|
32
|
+
{
|
|
33
|
+
title: 'Navigator Apps',
|
|
34
|
+
icon: 'key',
|
|
35
|
+
component: NavigatorAppControlsComponent,
|
|
36
|
+
},
|
|
31
37
|
],
|
|
32
38
|
{
|
|
33
39
|
slug: 'fleet-ops',
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { helper } from '@ember/component/helper';
|
|
2
|
+
import waypointLabelUtil from '../utils/waypoint-label';
|
|
3
|
+
|
|
4
|
+
export default helper(function waypointLabel([index]) {
|
|
5
|
+
return waypointLabelUtil(index);
|
|
6
|
+
});
|
|
@@ -1,29 +1,18 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import getResourceNameFromTransition from '@fleetbase/ember-core/utils/get-resource-name-from-transition';
|
|
3
5
|
|
|
4
6
|
export default class ApplicationRoute extends Route {
|
|
5
7
|
@service loader;
|
|
6
8
|
@service fetch;
|
|
7
9
|
|
|
8
|
-
loading(transition) {
|
|
9
|
-
const resourceName =
|
|
10
|
+
@action loading(transition) {
|
|
11
|
+
const resourceName = getResourceNameFromTransition(transition);
|
|
10
12
|
this.loader.showOnInitialTransition(transition, 'section.next-view-section', { loadingMessage: resourceName ? `Loading ${resourceName}...` : `Loading...` });
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
model() {
|
|
14
16
|
return this.fetch.get('fleet-ops/settings/visibility');
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
getResouceName(transition) {
|
|
18
|
-
const { to } = transition;
|
|
19
|
-
|
|
20
|
-
if (typeof to.name === 'string') {
|
|
21
|
-
let routePathSegments = to.name.split('.');
|
|
22
|
-
let resourceName = routePathSegments[3];
|
|
23
|
-
|
|
24
|
-
return resourceName;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
18
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action, set } from '@ember/object';
|
|
4
|
+
import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
|
|
3
5
|
|
|
4
6
|
export default class ManagementContactsIndexRoute extends Route {
|
|
5
7
|
@service store;
|
|
6
8
|
|
|
7
|
-
/**
|
|
8
|
-
* Queryable parameters
|
|
9
|
-
*
|
|
10
|
-
* @var {Object}
|
|
11
|
-
*/
|
|
12
9
|
queryParams = {
|
|
13
10
|
page: { refreshModel: true },
|
|
14
11
|
limit: { refreshModel: true },
|
|
@@ -25,6 +22,13 @@ export default class ManagementContactsIndexRoute extends Route {
|
|
|
25
22
|
updatedAt: { refreshModel: true },
|
|
26
23
|
};
|
|
27
24
|
|
|
25
|
+
@action willTransition(transition) {
|
|
26
|
+
if (isNestedRouteTransition(transition)) {
|
|
27
|
+
set(this.queryParams, 'page.refreshModel', false);
|
|
28
|
+
set(this.queryParams, 'sort.refreshModel', false);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
28
32
|
model(params) {
|
|
29
33
|
return this.store.query('contact', params);
|
|
30
34
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action, set } from '@ember/object';
|
|
4
|
+
import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
|
|
3
5
|
|
|
4
6
|
export default class ManagementDriversIndexRoute extends Route {
|
|
5
7
|
@service store;
|
|
6
|
-
@service intl;
|
|
7
8
|
|
|
8
9
|
queryParams = {
|
|
9
10
|
page: { refreshModel: true },
|
|
@@ -28,8 +29,11 @@ export default class ManagementDriversIndexRoute extends Route {
|
|
|
28
29
|
'within[where]': { refreshModel: true, replace: true },
|
|
29
30
|
};
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
@action willTransition(transition) {
|
|
33
|
+
if (isNestedRouteTransition(transition)) {
|
|
34
|
+
set(this.queryParams, 'page.refreshModel', false);
|
|
35
|
+
set(this.queryParams, 'sort.refreshModel', false);
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
model(params) {
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action, set } from '@ember/object';
|
|
4
|
+
import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
|
|
3
5
|
|
|
4
6
|
export default class ManagementFleetsIndexRoute extends Route {
|
|
5
7
|
@service store;
|
|
6
8
|
|
|
7
|
-
/**
|
|
8
|
-
* Queryable parameters
|
|
9
|
-
*
|
|
10
|
-
* @var {Object}
|
|
11
|
-
*/
|
|
12
9
|
queryParams = {
|
|
13
10
|
page: { refreshModel: true },
|
|
14
11
|
limit: { refreshModel: true },
|
|
@@ -28,6 +25,13 @@ export default class ManagementFleetsIndexRoute extends Route {
|
|
|
28
25
|
updatedAt: { refreshModel: true },
|
|
29
26
|
};
|
|
30
27
|
|
|
28
|
+
@action willTransition(transition) {
|
|
29
|
+
if (isNestedRouteTransition(transition)) {
|
|
30
|
+
set(this.queryParams, 'page.refreshModel', false);
|
|
31
|
+
set(this.queryParams, 'sort.refreshModel', false);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
31
35
|
model(params) {
|
|
32
36
|
return this.store.query('fleet', { ...params, with: ['parent_fleet', 'service_area', 'zone'] });
|
|
33
37
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action, set } from '@ember/object';
|
|
4
|
+
import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
|
|
3
5
|
|
|
4
6
|
export default class ManagementFuelReportsIndexRoute extends Route {
|
|
5
7
|
@service store;
|
|
6
8
|
|
|
7
|
-
/**
|
|
8
|
-
* Queryable parameters
|
|
9
|
-
*
|
|
10
|
-
* @var {Object}
|
|
11
|
-
*/
|
|
12
9
|
queryParams = {
|
|
13
10
|
page: { refreshModel: true },
|
|
14
11
|
limit: { refreshModel: true },
|
|
@@ -25,6 +22,13 @@ export default class ManagementFuelReportsIndexRoute extends Route {
|
|
|
25
22
|
odometer: { refreshModel: true },
|
|
26
23
|
};
|
|
27
24
|
|
|
25
|
+
@action willTransition(transition) {
|
|
26
|
+
if (isNestedRouteTransition(transition)) {
|
|
27
|
+
set(this.queryParams, 'page.refreshModel', false);
|
|
28
|
+
set(this.queryParams, 'sort.refreshModel', false);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
28
32
|
model(params) {
|
|
29
33
|
return this.store.query('fuel-report', { ...params, with: ['driver', 'vehicle', 'reporter'] });
|
|
30
34
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import Route from '@ember/routing/route';
|
|
2
2
|
import { inject as service } from '@ember/service';
|
|
3
|
+
import { action, set } from '@ember/object';
|
|
4
|
+
import isNestedRouteTransition from '@fleetbase/ember-core/utils/is-nested-route-transition';
|
|
3
5
|
|
|
4
6
|
export default class ManagementIssuesIndexRoute extends Route {
|
|
5
7
|
@service store;
|
|
6
8
|
|
|
7
|
-
/**
|
|
8
|
-
* Queryable parameters
|
|
9
|
-
*
|
|
10
|
-
* @var {Object}
|
|
11
|
-
*/
|
|
12
9
|
queryParams = {
|
|
13
10
|
page: { refreshModel: true },
|
|
14
11
|
limit: { refreshModel: true },
|
|
@@ -26,6 +23,13 @@ export default class ManagementIssuesIndexRoute extends Route {
|
|
|
26
23
|
createdAt: { refreshModel: true },
|
|
27
24
|
};
|
|
28
25
|
|
|
26
|
+
@action willTransition(transition) {
|
|
27
|
+
if (isNestedRouteTransition(transition)) {
|
|
28
|
+
set(this.queryParams, 'page.refreshModel', false);
|
|
29
|
+
set(this.queryParams, 'sort.refreshModel', false);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
model(params) {
|
|
30
34
|
return this.store.query('issue', { ...params, with: ['driver', 'vehicle', 'assignee', 'reporter'] });
|
|
31
35
|
}
|