@fleetbase/fleetops-engine 0.2.2 → 0.2.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/driver-form-panel.hbs +131 -0
- package/addon/components/driver-form-panel.js +39 -0
- package/addon/components/driver-panel/details.hbs +48 -0
- package/addon/components/driver-panel.hbs +60 -0
- package/addon/components/driver-panel.js +57 -0
- package/addon/components/fleet-form-panel.hbs +46 -0
- package/addon/components/fleet-form-panel.js +3 -0
- package/addon/components/fleet-panel.hbs +70 -0
- package/addon/components/fleet-panel.js +43 -0
- package/addon/components/fleet-vehicle-listing.hbs +73 -0
- package/addon/components/fleet-vehicle-listing.js +117 -0
- package/addon/components/leaflet-drift-marker.js +53 -0
- package/addon/components/live-map.hbs +4 -4
- package/addon/components/live-map.js +104 -34
- package/addon/components/modals/fleet-details.hbs +1 -0
- package/addon/components/settings-window.hbs +1 -1
- package/addon/components/vehicle-form-panel.hbs +131 -0
- package/addon/components/vehicle-form-panel.js +39 -0
- package/addon/components/vehicle-panel/details.hbs +34 -0
- package/addon/components/vehicle-panel/tracking.hbs +1 -0
- package/addon/components/vehicle-panel.hbs +60 -0
- package/addon/components/vehicle-panel.js +57 -0
- package/addon/controllers/management/drivers/index/details.js +8 -0
- package/addon/controllers/management/drivers/index/edit.js +80 -0
- package/addon/controllers/management/drivers/index/new.js +128 -0
- package/addon/controllers/management/drivers/index.js +212 -202
- package/addon/controllers/management/fleets/index/details.js +8 -0
- package/addon/controllers/management/fleets/index/edit.js +77 -0
- package/addon/controllers/management/fleets/index/new.js +103 -0
- package/addon/controllers/management/fleets/index.js +49 -77
- package/addon/controllers/management/vehicles/index/details.js +12 -0
- package/addon/controllers/management/vehicles/index/edit.js +8 -0
- package/addon/controllers/management/vehicles/index/new.js +21 -0
- package/addon/controllers/management/vehicles/index.js +6 -129
- package/addon/controllers/operations/orders/index/new.js +67 -20
- package/addon/controllers/operations/orders/index/view.js +15 -4
- package/addon/controllers/operations/orders/index.js +58 -7
- package/addon/controllers/operations/service-rates/index/edit.js +1 -1
- package/addon/controllers/operations/service-rates/index/new.js +10 -11
- package/addon/controllers/operations/service-rates/index.js +7 -0
- package/addon/engine.js +6 -0
- package/addon/initializers/load-leaflet-assets.js +6 -1
- package/addon/instance-initializers/register-leaflet-drift-marker.js +17 -0
- package/addon/routes/management/drivers/index/details.js +9 -0
- package/addon/routes/management/drivers/index/edit.js +13 -0
- package/addon/routes/management/drivers/index/new.js +3 -0
- package/addon/routes/management/fleets/index/details.js +9 -0
- package/addon/routes/management/fleets/index/edit.js +9 -0
- package/addon/routes/management/fleets/index/new.js +3 -0
- package/addon/routes/management/fleets/index.js +1 -0
- package/addon/routes/management/vehicles/index/details.js +18 -0
- package/addon/routes/management/vehicles/index/edit.js +14 -0
- package/addon/routes/management/vehicles/index/new.js +3 -0
- package/addon/routes/operations/orders/index/new.js +3 -1
- package/addon/routes/operations/orders/index/view.js +50 -0
- package/addon/routes/operations/service-rates/index/edit.js +7 -0
- package/addon/routes.js +15 -3
- package/addon/templates/management/drivers/index/details.hbs +1 -0
- package/addon/templates/management/drivers/index/edit.hbs +1 -0
- package/addon/templates/management/drivers/index/new.hbs +1 -0
- package/addon/templates/management/drivers/index.hbs +3 -1
- package/addon/templates/management/fleets/index/details.hbs +1 -0
- package/addon/templates/management/fleets/index/edit.hbs +1 -0
- package/addon/templates/management/fleets/index/new.hbs +1 -0
- package/addon/templates/management/vehicles/index/details.hbs +1 -0
- package/addon/templates/management/vehicles/index/edit.hbs +1 -0
- package/addon/templates/management/vehicles/index/new.hbs +1 -0
- package/addon/templates/operations/orders/index/new.hbs +1 -1
- package/addon/templates/operations/service-rates/index/new.hbs +4 -4
- package/app/components/driver-form-panel.js +1 -0
- package/app/components/driver-panel/details.js +1 -0
- package/app/components/driver-panel.js +1 -0
- package/app/components/fleet-form-panel.js +1 -0
- package/app/components/fleet-panel.js +1 -0
- package/app/components/fleet-vehicle-listing.js +1 -0
- package/app/components/leaflet-drift-marker.js +1 -0
- package/app/components/vehicle-form-panel.js +1 -0
- package/app/components/vehicle-panel/details.js +1 -0
- package/app/components/vehicle-panel/tracking.js +1 -0
- package/app/components/vehicle-panel.js +1 -0
- package/app/controllers/management/drivers/index/new.js +1 -0
- package/app/controllers/management/vehicles/index/details.js +1 -0
- package/app/controllers/management/vehicles/index/new.js +1 -0
- package/app/routes/management/drivers/index/details.js +1 -0
- package/app/routes/management/drivers/index/edit.js +1 -0
- package/app/routes/management/drivers/index/new.js +1 -0
- package/app/routes/management/vehicles/index/details.js +1 -0
- package/app/routes/management/vehicles/index/edit.js +1 -0
- package/app/routes/management/vehicles/index/new.js +1 -0
- package/app/templates/management/drivers/index/details.js +1 -0
- package/app/templates/management/drivers/index/edit.js +1 -0
- package/app/templates/management/drivers/index/new.js +1 -0
- package/app/templates/management/vehicles/index/details.js +1 -0
- package/app/templates/management/vehicles/index/edit.js +1 -0
- package/app/templates/management/vehicles/index/new.js +1 -0
- package/assets/images/boxes/large.png +0 -0
- package/assets/images/boxes/medium.png +0 -0
- package/assets/images/boxes/small.png +0 -0
- package/assets/images/boxes/x-large.png +0 -0
- package/index.js +16 -0
- package/package.json +6 -5
|
@@ -75,7 +75,7 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
75
75
|
*
|
|
76
76
|
* @var {Array}
|
|
77
77
|
*/
|
|
78
|
-
queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'zone', 'service_area', 'created_by', 'updated_by', 'status'];
|
|
78
|
+
queryParams = ['page', 'limit', 'sort', 'query', 'public_id', 'internal_id', 'zone', 'service_area', 'parent_fleet', 'vendor', 'created_by', 'updated_by', 'status'];
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
81
|
* The current page of data being viewed
|
|
@@ -118,6 +118,18 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
118
118
|
* @var {String}
|
|
119
119
|
*/
|
|
120
120
|
@tracked service_area;
|
|
121
|
+
/**
|
|
122
|
+
* The filterable param `parent_fleet`
|
|
123
|
+
*
|
|
124
|
+
* @var {String}
|
|
125
|
+
*/
|
|
126
|
+
@tracked parent_fleet;
|
|
127
|
+
/**
|
|
128
|
+
* The filterable param `vendor`
|
|
129
|
+
*
|
|
130
|
+
* @var {String}
|
|
131
|
+
*/
|
|
132
|
+
@tracked vendor;
|
|
121
133
|
|
|
122
134
|
/**
|
|
123
135
|
* The filterable param `zone`
|
|
@@ -184,6 +196,32 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
184
196
|
filterParam: 'service_area',
|
|
185
197
|
model: 'service-area',
|
|
186
198
|
},
|
|
199
|
+
{
|
|
200
|
+
label: 'Parent Fleet',
|
|
201
|
+
cellComponent: 'table/cell/anchor',
|
|
202
|
+
// action: this.viewServiceArea.bind(this),
|
|
203
|
+
valuePath: 'parent_fleet.name',
|
|
204
|
+
resizable: true,
|
|
205
|
+
width: '130px',
|
|
206
|
+
filterable: true,
|
|
207
|
+
filterComponent: 'filter/model',
|
|
208
|
+
filterComponentPlaceholder: 'Select fleet',
|
|
209
|
+
filterParam: 'parent_fleet',
|
|
210
|
+
model: 'fleet',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
label: 'Vendor',
|
|
214
|
+
cellComponent: 'table/cell/anchor',
|
|
215
|
+
action: this.viewServiceArea.bind(this),
|
|
216
|
+
valuePath: 'vendor.name',
|
|
217
|
+
resizable: true,
|
|
218
|
+
width: '130px',
|
|
219
|
+
filterable: true,
|
|
220
|
+
filterComponent: 'filter/model',
|
|
221
|
+
filterComponentPlaceholder: 'Select vendor',
|
|
222
|
+
filterParam: 'vendor',
|
|
223
|
+
model: 'vendor',
|
|
224
|
+
},
|
|
187
225
|
{
|
|
188
226
|
label: 'Zone',
|
|
189
227
|
cellComponent: 'table/cell/anchor',
|
|
@@ -293,6 +331,10 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
293
331
|
label: 'View fleet details...',
|
|
294
332
|
fn: this.viewFleet,
|
|
295
333
|
},
|
|
334
|
+
{
|
|
335
|
+
label: 'Edit fleet details...',
|
|
336
|
+
fn: this.editFleet,
|
|
337
|
+
},
|
|
296
338
|
{
|
|
297
339
|
label: 'Assign driver to fleet...',
|
|
298
340
|
fn: () => {},
|
|
@@ -370,47 +412,8 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
370
412
|
* @param {Object} options
|
|
371
413
|
* @void
|
|
372
414
|
*/
|
|
373
|
-
@action viewFleet(fleet
|
|
374
|
-
this.
|
|
375
|
-
title: fleet.name,
|
|
376
|
-
titleComponent: 'modal/title-with-buttons',
|
|
377
|
-
headerStatus: fleet.status,
|
|
378
|
-
headerButtons: [
|
|
379
|
-
{
|
|
380
|
-
icon: 'cog',
|
|
381
|
-
iconPrefix: 'fas',
|
|
382
|
-
type: 'link',
|
|
383
|
-
size: 'xs',
|
|
384
|
-
ddMenuLabel: 'Fleet Actions',
|
|
385
|
-
options: [
|
|
386
|
-
{
|
|
387
|
-
title: 'Edit fleet details...',
|
|
388
|
-
action: () => {
|
|
389
|
-
this.modalsManager.done().then(() => {
|
|
390
|
-
return this.editFleet(fleet, {
|
|
391
|
-
onFinish: () => {
|
|
392
|
-
this.viewFleet(fleet);
|
|
393
|
-
},
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
},
|
|
397
|
-
},
|
|
398
|
-
],
|
|
399
|
-
},
|
|
400
|
-
],
|
|
401
|
-
acceptButtonText: 'Done',
|
|
402
|
-
acceptButtonIcon: 'check',
|
|
403
|
-
acceptButtonIconPrefix: 'fas',
|
|
404
|
-
hideDeclineButton: true,
|
|
405
|
-
fleet,
|
|
406
|
-
addDriver: (driver) => {
|
|
407
|
-
this.fetch.post('fleets/add', { driver: driver.id, fleet: fleet.id });
|
|
408
|
-
},
|
|
409
|
-
removeDriver: (driver) => {
|
|
410
|
-
this.fetch.post('fleets/remove', { driver: driver.id, fleet: fleet.id });
|
|
411
|
-
},
|
|
412
|
-
...options,
|
|
413
|
-
});
|
|
415
|
+
@action viewFleet(fleet) {
|
|
416
|
+
return this.transitionToRoute('management.fleets.index.details', fleet);
|
|
414
417
|
}
|
|
415
418
|
|
|
416
419
|
/**
|
|
@@ -420,15 +423,7 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
420
423
|
* @void
|
|
421
424
|
*/
|
|
422
425
|
@action createFleet() {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
return this.editFleet(fleet, {
|
|
426
|
-
title: 'New Fleet',
|
|
427
|
-
acceptButtonText: 'Confirm & Create',
|
|
428
|
-
acceptButtonIcon: 'check',
|
|
429
|
-
acceptButtonIconPrefix: 'fas',
|
|
430
|
-
successNotification: (fleet) => `New fleet (${fleet.name}) created.`,
|
|
431
|
-
});
|
|
426
|
+
return this.transitionToRoute('management.fleets.index.new');
|
|
432
427
|
}
|
|
433
428
|
|
|
434
429
|
/**
|
|
@@ -438,32 +433,9 @@ export default class ManagementFleetsIndexController extends Controller {
|
|
|
438
433
|
* @param {Object} options
|
|
439
434
|
* @void
|
|
440
435
|
*/
|
|
441
|
-
@action editFleet(fleet
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
acceptButtonText: 'Save Changes',
|
|
445
|
-
acceptButtonIcon: 'save',
|
|
446
|
-
declineButtonIcon: 'times',
|
|
447
|
-
declineButtonIconPrefix: 'fas',
|
|
448
|
-
statusOptions: this.statusOptions,
|
|
449
|
-
fleet,
|
|
450
|
-
confirm: (modal) => {
|
|
451
|
-
modal.startLoading();
|
|
452
|
-
|
|
453
|
-
return fleet
|
|
454
|
-
.save()
|
|
455
|
-
.then((fleet) => {
|
|
456
|
-
this.notifications.invoke('success', options.successNotification ?? `${fleet.name} details updated.`, fleet);
|
|
457
|
-
|
|
458
|
-
return this.hostRouter.refresh();
|
|
459
|
-
})
|
|
460
|
-
.catch((error) => {
|
|
461
|
-
modal.stopLoading();
|
|
462
|
-
this.notifications.serverError(error);
|
|
463
|
-
});
|
|
464
|
-
},
|
|
465
|
-
...options,
|
|
466
|
-
});
|
|
436
|
+
@action editFleet(fleet) {
|
|
437
|
+
console.log('xxx', fleet);
|
|
438
|
+
return this.transitionToRoute('management.fleets.index.edit', fleet);
|
|
467
439
|
}
|
|
468
440
|
|
|
469
441
|
/**
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
|
|
5
|
+
export default class ManagementVehiclesIndexDetailsController extends Controller {
|
|
6
|
+
@tracked view = 'details';
|
|
7
|
+
@tracked queryParams = ['view'];
|
|
8
|
+
|
|
9
|
+
@action transitionBack() {
|
|
10
|
+
return this.transitionToRoute('management.vehicles.index');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
|
|
4
|
+
export default class ManagementVehiclesIndexEditController extends Controller {
|
|
5
|
+
@action transitionBack() {
|
|
6
|
+
return this.transitionToRoute('management.vehicles.index');
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Controller from '@ember/controller';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { inject as service } from '@ember/service';
|
|
4
|
+
import { action } from '@ember/object';
|
|
5
|
+
|
|
6
|
+
export default class ManagementVehiclesIndexNewController extends Controller {
|
|
7
|
+
@service store;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The vehicle being created.
|
|
11
|
+
*
|
|
12
|
+
* @var {VehicleModel}
|
|
13
|
+
*/
|
|
14
|
+
@tracked vehicle = this.store.createRecord('vehicle', {
|
|
15
|
+
status: `active`,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
@action transitionBack() {
|
|
19
|
+
return this.transitionToRoute('management.vehicles.index');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -6,8 +6,6 @@ import { action } from '@ember/object';
|
|
|
6
6
|
import { isBlank } from '@ember/utils';
|
|
7
7
|
import { timeout } from 'ember-concurrency';
|
|
8
8
|
import { task } from 'ember-concurrency-decorators';
|
|
9
|
-
import withDefaultValue from '@fleetbase/ember-core/utils/with-default-value';
|
|
10
|
-
import generateSlug from '@fleetbase/ember-core/utils/generate-slug';
|
|
11
9
|
|
|
12
10
|
export default class ManagementVehiclesIndexController extends ManagementController {
|
|
13
11
|
/**
|
|
@@ -217,6 +215,7 @@ export default class ManagementVehiclesIndexController extends ManagementControl
|
|
|
217
215
|
filterable: true,
|
|
218
216
|
filterComponent: 'filter/string',
|
|
219
217
|
filterParam: 'name',
|
|
218
|
+
showOnlineIndicator: true,
|
|
220
219
|
},
|
|
221
220
|
{
|
|
222
221
|
label: 'Plate Number',
|
|
@@ -441,73 +440,8 @@ export default class ManagementVehiclesIndexController extends ManagementControl
|
|
|
441
440
|
* @param {Object} options
|
|
442
441
|
* @void
|
|
443
442
|
*/
|
|
444
|
-
@action
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
this.modalsManager.show('modals/vehicle-details', {
|
|
448
|
-
title: withDefaultValue(vehicle.display_name),
|
|
449
|
-
titleComponent: 'modal/title-with-buttons',
|
|
450
|
-
modalClass: 'modal-lg',
|
|
451
|
-
acceptButtonText: 'Done',
|
|
452
|
-
headerButtons: [
|
|
453
|
-
{
|
|
454
|
-
icon: 'cog',
|
|
455
|
-
iconPrefix: 'fas',
|
|
456
|
-
type: 'link',
|
|
457
|
-
size: 'xs',
|
|
458
|
-
ddMenuLabel: 'Vehicle Actions',
|
|
459
|
-
options: [
|
|
460
|
-
{
|
|
461
|
-
title: 'Edit vehicle details...',
|
|
462
|
-
action: () => {
|
|
463
|
-
this.modalsManager.done().then(() => {
|
|
464
|
-
return this.editVehicle(vehicle, {
|
|
465
|
-
onFinish: () => {
|
|
466
|
-
this.viewVehicle(vehicle);
|
|
467
|
-
},
|
|
468
|
-
});
|
|
469
|
-
});
|
|
470
|
-
},
|
|
471
|
-
},
|
|
472
|
-
{
|
|
473
|
-
title: 'Assign driver to vehicle...',
|
|
474
|
-
action: () => {
|
|
475
|
-
this.modalsManager.done().then(() => {
|
|
476
|
-
return this.assignDriver(vehicle, {
|
|
477
|
-
onFinish: () => {
|
|
478
|
-
this.viewVehicle(vehicle);
|
|
479
|
-
},
|
|
480
|
-
});
|
|
481
|
-
});
|
|
482
|
-
},
|
|
483
|
-
},
|
|
484
|
-
{
|
|
485
|
-
title: 'Delete vehicle...',
|
|
486
|
-
action: () => {
|
|
487
|
-
this.modalsManager.done().then(() => {
|
|
488
|
-
return this.deleteVehicle(vehicle, {
|
|
489
|
-
onDecline: () => {
|
|
490
|
-
this.viewVehicle(vehicle);
|
|
491
|
-
},
|
|
492
|
-
});
|
|
493
|
-
});
|
|
494
|
-
},
|
|
495
|
-
},
|
|
496
|
-
],
|
|
497
|
-
},
|
|
498
|
-
],
|
|
499
|
-
viewDriver: (driver) => {
|
|
500
|
-
this.modalsManager.done().then(() => {
|
|
501
|
-
return this.drivers.viewDriver(driver, {
|
|
502
|
-
onFinish: () => {
|
|
503
|
-
this.viewVehicle(vehicle);
|
|
504
|
-
},
|
|
505
|
-
});
|
|
506
|
-
});
|
|
507
|
-
},
|
|
508
|
-
vehicle,
|
|
509
|
-
...options,
|
|
510
|
-
});
|
|
443
|
+
@action viewVehicle(vehicle) {
|
|
444
|
+
return this.transitionToRoute('management.vehicles.index.details', vehicle);
|
|
511
445
|
}
|
|
512
446
|
|
|
513
447
|
/**
|
|
@@ -517,21 +451,7 @@ export default class ManagementVehiclesIndexController extends ManagementControl
|
|
|
517
451
|
* @void
|
|
518
452
|
*/
|
|
519
453
|
@action createVehicle() {
|
|
520
|
-
|
|
521
|
-
status: 'active',
|
|
522
|
-
slug: generateSlug(),
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
return this.editVehicle(vehicle, {
|
|
526
|
-
title: 'New Vehicle',
|
|
527
|
-
acceptButtonText: 'Confirm & Create',
|
|
528
|
-
acceptButtonIcon: 'check',
|
|
529
|
-
acceptButtonIconPrefix: 'fas',
|
|
530
|
-
// successNotification: `New vehicle (${vehicle.name}) created.`,
|
|
531
|
-
onConfirm: () => {
|
|
532
|
-
return this.hostRouter.refresh();
|
|
533
|
-
},
|
|
534
|
-
});
|
|
454
|
+
return this.transitionToRoute('management.vehicles.index.new');
|
|
535
455
|
}
|
|
536
456
|
|
|
537
457
|
/**
|
|
@@ -541,51 +461,8 @@ export default class ManagementVehiclesIndexController extends ManagementControl
|
|
|
541
461
|
* @param {Object} options
|
|
542
462
|
* @void
|
|
543
463
|
*/
|
|
544
|
-
@action
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
this.modalsManager.show('modals/vehicle-form', {
|
|
548
|
-
title: 'Edit Vehicle',
|
|
549
|
-
acceptButtonText: 'Save Changes',
|
|
550
|
-
acceptButtonIcon: 'save',
|
|
551
|
-
modalClass: 'modal-lg',
|
|
552
|
-
vehicle,
|
|
553
|
-
uploadNewPhoto: (file) => {
|
|
554
|
-
this.fetch.uploadFile.perform(
|
|
555
|
-
file,
|
|
556
|
-
{
|
|
557
|
-
path: `uploads/${this.currentUser.companyId}/vehicles/${vehicle.slug}`,
|
|
558
|
-
subject_uuid: vehicle.id,
|
|
559
|
-
subject_type: `vehicle`,
|
|
560
|
-
type: `vehicle_photo`,
|
|
561
|
-
},
|
|
562
|
-
(uploadedFile) => {
|
|
563
|
-
vehicle.setProperties({
|
|
564
|
-
photo_uuid: uploadedFile.id,
|
|
565
|
-
photo_url: uploadedFile.url,
|
|
566
|
-
photo: uploadedFile,
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
);
|
|
570
|
-
},
|
|
571
|
-
confirm: (modal, done) => {
|
|
572
|
-
modal.startLoading();
|
|
573
|
-
|
|
574
|
-
vehicle
|
|
575
|
-
.save()
|
|
576
|
-
.then((vehicle) => {
|
|
577
|
-
this.notifications.success(options.successNotification ?? `${vehicle.name} details updated.`);
|
|
578
|
-
})
|
|
579
|
-
.catch((error) => {
|
|
580
|
-
modal.stopLoading();
|
|
581
|
-
this.notifications.serverError(error);
|
|
582
|
-
})
|
|
583
|
-
.finally(() => {
|
|
584
|
-
done();
|
|
585
|
-
});
|
|
586
|
-
},
|
|
587
|
-
...options,
|
|
588
|
-
});
|
|
464
|
+
@action editVehicle(vehicle) {
|
|
465
|
+
return this.transitionToRoute('management.vehicles.index.edit', vehicle);
|
|
589
466
|
}
|
|
590
467
|
|
|
591
468
|
/**
|
|
@@ -5,7 +5,7 @@ import { action, computed, setProperties, set, get } from '@ember/object';
|
|
|
5
5
|
import { not, equal, alias } from '@ember/object/computed';
|
|
6
6
|
import { isArray } from '@ember/array';
|
|
7
7
|
import { dasherize } from '@ember/string';
|
|
8
|
-
import { later } from '@ember/runloop';
|
|
8
|
+
import { later, next } from '@ember/runloop';
|
|
9
9
|
import { OSRMv1, Control as RoutingControl } from '@fleetbase/leaflet-routing-machine';
|
|
10
10
|
import polyline from '@fleetbase/ember-core/utils/polyline';
|
|
11
11
|
import findClosestWaypoint from '@fleetbase/ember-core/utils/find-closest-waypoint';
|
|
@@ -494,7 +494,9 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
494
494
|
}
|
|
495
495
|
|
|
496
496
|
@action newPlace() {
|
|
497
|
-
this.placesController
|
|
497
|
+
if (this.placesController) {
|
|
498
|
+
return this.placesController.createPlace();
|
|
499
|
+
}
|
|
498
500
|
}
|
|
499
501
|
|
|
500
502
|
@action async getQuotes(service) {
|
|
@@ -564,26 +566,39 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
564
566
|
}
|
|
565
567
|
|
|
566
568
|
@action setupInterface() {
|
|
567
|
-
this.leafletMap
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
569
|
+
if (this.leafletMap && this.leafletMap.liveMap) {
|
|
570
|
+
this.leafletMap.liveMap.hideDrivers();
|
|
571
|
+
this.leafletMap.liveMap.hideRoutes();
|
|
572
|
+
|
|
573
|
+
// track all layers added from this view
|
|
574
|
+
this.leafletMap.on('layeradd', ({ layer }) => {
|
|
575
|
+
// disable dragging of layer
|
|
576
|
+
if (layer.dragging && typeof layer.dragging.disable === 'function') {
|
|
577
|
+
layer.dragging.disable();
|
|
578
|
+
}
|
|
574
579
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
580
|
+
next(this, function () {
|
|
581
|
+
if (isArray(this.leafletLayers) && !this.leafletLayers.includes(layer)) {
|
|
582
|
+
this.leafletLayers.pushObject(layer);
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
});
|
|
586
|
+
} else {
|
|
587
|
+
// setup interface when livemap is ready
|
|
588
|
+
this.universe.on('livemap.ready', () => {
|
|
589
|
+
this.setupInterface();
|
|
590
|
+
});
|
|
591
|
+
}
|
|
579
592
|
|
|
580
593
|
// switch to map mode
|
|
581
594
|
this.ordersController.setLayoutMode('map');
|
|
582
595
|
}
|
|
583
596
|
|
|
584
597
|
@action resetInterface() {
|
|
585
|
-
this.leafletMap
|
|
586
|
-
|
|
598
|
+
if (this.leafletMap && this.leafletMap.liveMap) {
|
|
599
|
+
this.leafletMap.liveMap.showDrivers();
|
|
600
|
+
this.leafletMap.liveMap.showRoutes();
|
|
601
|
+
}
|
|
587
602
|
}
|
|
588
603
|
|
|
589
604
|
@action getRoute() {
|
|
@@ -674,15 +689,47 @@ export default class OperationsOrdersIndexNewController extends Controller {
|
|
|
674
689
|
}
|
|
675
690
|
|
|
676
691
|
@action clearLayers() {
|
|
677
|
-
|
|
692
|
+
if (this.leafletMap) {
|
|
693
|
+
try {
|
|
694
|
+
this.leafletMap.eachLayer((layer) => {
|
|
695
|
+
if (isArray(this.leafletLayers) && this.leafletLayers.includes(layer)) {
|
|
696
|
+
this.leafletMap.removeLayer(layer);
|
|
697
|
+
}
|
|
698
|
+
});
|
|
699
|
+
} catch (error) {
|
|
700
|
+
// fallback method with tracked layers
|
|
701
|
+
if (isArray(this.leafletLayers)) {
|
|
702
|
+
this.leafletLayers.forEach((layer) => {
|
|
703
|
+
try {
|
|
704
|
+
this.leafletMap.removeLayer(layer);
|
|
705
|
+
} catch (error) {
|
|
706
|
+
// silent error just continue with order processing if any
|
|
707
|
+
}
|
|
708
|
+
});
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
678
713
|
|
|
679
|
-
|
|
714
|
+
@action clearAllLayers() {
|
|
715
|
+
if (this.leafletMap) {
|
|
680
716
|
try {
|
|
681
|
-
leafletMap.
|
|
717
|
+
this.leafletMap.eachLayer((layer) => {
|
|
718
|
+
this.leafletMap.removeLayer(layer);
|
|
719
|
+
});
|
|
682
720
|
} catch (error) {
|
|
683
|
-
//
|
|
721
|
+
// fallback method with tracked layers
|
|
722
|
+
if (isArray(this.leafletLayers)) {
|
|
723
|
+
this.leafletLayers.forEach((layer) => {
|
|
724
|
+
try {
|
|
725
|
+
this.leafletMap.removeLayer(layer);
|
|
726
|
+
} catch (error) {
|
|
727
|
+
// silent error just continue with order processing if any
|
|
728
|
+
}
|
|
729
|
+
});
|
|
730
|
+
}
|
|
684
731
|
}
|
|
685
|
-
}
|
|
732
|
+
}
|
|
686
733
|
}
|
|
687
734
|
|
|
688
735
|
@action createPlaceArrayFromPayload(payload, waypoints, isMultipleDropoffOrder = false) {
|
|
@@ -81,6 +81,13 @@ export default class OperationsOrdersIndexViewController extends Controller {
|
|
|
81
81
|
*/
|
|
82
82
|
@service hostRouter;
|
|
83
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Inject the `socket` service
|
|
86
|
+
*
|
|
87
|
+
* @var {Service}
|
|
88
|
+
*/
|
|
89
|
+
@service socket;
|
|
90
|
+
|
|
84
91
|
/**
|
|
85
92
|
* Inject the `universe` service
|
|
86
93
|
*
|
|
@@ -162,8 +169,10 @@ export default class OperationsOrdersIndexViewController extends Controller {
|
|
|
162
169
|
}
|
|
163
170
|
|
|
164
171
|
@action resetInterface() {
|
|
165
|
-
this.leafletMap
|
|
166
|
-
|
|
172
|
+
if (this.leafletMap && this.leafletMap.liveMap) {
|
|
173
|
+
this.leafletMap.liveMap.showDrivers();
|
|
174
|
+
this.leafletMap.liveMap.showRoutes();
|
|
175
|
+
}
|
|
167
176
|
}
|
|
168
177
|
|
|
169
178
|
@action removeRoutingControlPreview() {
|
|
@@ -209,8 +218,10 @@ export default class OperationsOrdersIndexViewController extends Controller {
|
|
|
209
218
|
return later(
|
|
210
219
|
this,
|
|
211
220
|
() => {
|
|
212
|
-
this.leafletMap
|
|
213
|
-
|
|
221
|
+
if (this.leafletMap && this.leafletMap.liveMap) {
|
|
222
|
+
this.leafletMap.liveMap.hideDrivers();
|
|
223
|
+
this.leafletMap.liveMap.hideRoutes();
|
|
224
|
+
}
|
|
214
225
|
|
|
215
226
|
// display order route on map
|
|
216
227
|
this.displayOrderRoute();
|
|
@@ -80,6 +80,13 @@ export default class OperationsOrdersIndexController extends Controller {
|
|
|
80
80
|
*/
|
|
81
81
|
@service universe;
|
|
82
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Inject the `socket` service
|
|
85
|
+
*
|
|
86
|
+
* @var {Service}
|
|
87
|
+
*/
|
|
88
|
+
@service socket;
|
|
89
|
+
|
|
83
90
|
/**
|
|
84
91
|
* Queryable parameters for this controller's model
|
|
85
92
|
*
|
|
@@ -537,6 +544,54 @@ export default class OperationsOrdersIndexController extends Controller {
|
|
|
537
544
|
},
|
|
538
545
|
];
|
|
539
546
|
|
|
547
|
+
/**
|
|
548
|
+
* Creates an instance of OperationsOrdersIndexController.
|
|
549
|
+
* @memberof OperationsOrdersIndexController
|
|
550
|
+
*/
|
|
551
|
+
constructor() {
|
|
552
|
+
super(...arguments);
|
|
553
|
+
this.listenForOrderEvents();
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Listen for incoming order events to refresh listing.
|
|
558
|
+
*
|
|
559
|
+
* @memberof OperationsOrdersIndexController
|
|
560
|
+
*/
|
|
561
|
+
@action async listenForOrderEvents() {
|
|
562
|
+
// wait for user to be loaded into service
|
|
563
|
+
this.currentUser.on('user.loaded', () => {
|
|
564
|
+
// Get socket instance
|
|
565
|
+
const socket = this.socket.instance();
|
|
566
|
+
|
|
567
|
+
// The channel ID to listen on
|
|
568
|
+
const channelId = `company.${this.currentUser.companyId}`;
|
|
569
|
+
|
|
570
|
+
// Listed on company channel
|
|
571
|
+
const channel = socket.subscribe(channelId);
|
|
572
|
+
|
|
573
|
+
// Events which should trigger refresh
|
|
574
|
+
const listening = ['order.ready', 'order.driver_assigned'];
|
|
575
|
+
|
|
576
|
+
// Listen for channel subscription
|
|
577
|
+
(async () => {
|
|
578
|
+
for await (let output of channel) {
|
|
579
|
+
const { event } = output;
|
|
580
|
+
|
|
581
|
+
// if an order event refresh orders
|
|
582
|
+
if (typeof event === 'string' && listening.includes(event)) {
|
|
583
|
+
this.hostRouter.refresh();
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
})();
|
|
587
|
+
|
|
588
|
+
// disconnect when transitioning
|
|
589
|
+
this.hostRouter.on('routeWillChange', () => {
|
|
590
|
+
channel.close();
|
|
591
|
+
});
|
|
592
|
+
});
|
|
593
|
+
}
|
|
594
|
+
|
|
540
595
|
/**
|
|
541
596
|
* The search task.
|
|
542
597
|
*
|
|
@@ -572,13 +627,9 @@ export default class OperationsOrdersIndexController extends Controller {
|
|
|
572
627
|
}
|
|
573
628
|
|
|
574
629
|
@action resetView() {
|
|
575
|
-
|
|
576
|
-
leafletMap
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
if (liveMap) {
|
|
580
|
-
liveMap.hideDrivers();
|
|
581
|
-
liveMap.hideRoutes();
|
|
630
|
+
if (this.leafletMap && this.leafletMap.liveMap) {
|
|
631
|
+
this.leafletMap.liveMap.hideDrivers();
|
|
632
|
+
this.leafletMap.liveMap.hideRoutes();
|
|
582
633
|
}
|
|
583
634
|
}
|
|
584
635
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import OperationsServiceRatesIndexNewController from './new';
|
|
2
2
|
import { tracked } from '@glimmer/tracking';
|
|
3
3
|
import { action } from '@ember/object';
|
|
4
|
-
// import { alias } from '@ember/object/computed';
|
|
5
4
|
|
|
6
5
|
export default class OperationsServiceRatesIndexEditController extends OperationsServiceRatesIndexNewController {
|
|
7
6
|
/**
|
|
@@ -44,6 +43,7 @@ export default class OperationsServiceRatesIndexEditController extends Operation
|
|
|
44
43
|
return this.transitionToRoute('operations.service-rates.index').then(() => {
|
|
45
44
|
this.notifications.success(`Service rate '${serviceRate.service_name}' updated`);
|
|
46
45
|
this.resetForm();
|
|
46
|
+
this.hostRouter.refresh();
|
|
47
47
|
});
|
|
48
48
|
})
|
|
49
49
|
.catch(this.notifications.serverError)
|