Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion addon/components/admin/navigator-app.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class NavigatorAppControlsComponent extends Component {
@service fetch;
Expand Down
2 changes: 1 addition & 1 deletion addon/components/custom-field-form-panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { dasherize, camelize } from '@ember/string';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import isObject from '@fleetbase/ember-core/utils/is-object';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';
import applyContextComponentArguments from '@fleetbase/ember-core/utils/apply-context-component-arguments';
Expand Down
2 changes: 1 addition & 1 deletion addon/components/driver-onboard-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class DriverOnboardSettingsComponent extends Component {
@service fetch;
Expand Down
2 changes: 1 addition & 1 deletion addon/components/driver-panel/orders.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action, computed } from '@ember/object';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class CustomerOrderHistoryComponent extends Component {
@service store;
Expand Down
2 changes: 1 addition & 1 deletion addon/components/edit-order-route-panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { isArray } from '@ember/array';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';
import applyContextComponentArguments from '@fleetbase/ember-core/utils/apply-context-component-arguments';
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
Expand Down
2 changes: 1 addition & 1 deletion addon/components/entity-field-editing-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { isNone } from '@ember/utils';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class EntityFieldEditingSettingsComponent extends Component {
@service notifications;
Expand Down
3 changes: 1 addition & 2 deletions addon/components/fleet-driver-listing.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import { inject as service } from '@ember/service';
import { action, computed } from '@ember/object';
import { isArray } from '@ember/array';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class FleetDriverListingComponent extends Component {
@service store;
Expand Down
3 changes: 1 addition & 2 deletions addon/components/fleet-panel/driver-listing.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { isBlank } from '@ember/utils';
import { action, set } from '@ember/object';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';

export default class FleetPanelDriverListingComponent extends Component {
Expand Down
3 changes: 1 addition & 2 deletions addon/components/fleet-panel/vehicle-listing.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { isBlank } from '@ember/utils';
import { action, set } from '@ember/object';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';

export default class FleetPanelVehicleListingComponent extends Component {
Expand Down
3 changes: 1 addition & 2 deletions addon/components/fleet-vehicle-listing.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import { inject as service } from '@ember/service';
import { action, computed } from '@ember/object';
import { isArray } from '@ember/array';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class FleetVehicleListingComponent extends Component {
@service store;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { later } from '@ember/runloop';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class LayoutFleetOpsSidebarDriverListingComponent extends Component {
@service store;
Expand Down
2 changes: 1 addition & 1 deletion addon/components/layout/fleet-ops-sidebar/fleet-listing.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { later } from '@ember/runloop';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class LayoutFleetOpsSidebarFleetListingComponent extends Component {
@service store;
Expand Down
2 changes: 1 addition & 1 deletion addon/components/live-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { singularize } from 'ember-inflector';
import { later } from '@ember/runloop';
import { debug } from '@ember/debug';
import { allSettled } from 'rsvp';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import { OSRMv1, Control as RoutingControl } from '@fleetbase/leaflet-routing-machine';
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
Expand Down
2 changes: 1 addition & 1 deletion addon/components/map-container/toolbar/zones-panel.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { action } from '@ember/object';
import { later } from '@ember/runloop';
import { classify } from '@ember/string';
import { calculateInPlacePosition } from 'ember-basic-dropdown/utils/calculate-position';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

/**
* @class MapContainerToolbarZonesPanelComponent
Expand Down
2 changes: 1 addition & 1 deletion addon/components/order-config-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { dasherize } from '@ember/string';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import isModel from '@fleetbase/ember-core/utils/is-model';
import getModelName from '@fleetbase/ember-core/utils/get-model-name';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';
Expand Down
2 changes: 1 addition & 1 deletion addon/components/order-config-manager/activity-flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { later } from '@ember/runloop';
import { debug } from '@ember/debug';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import generateUUID from '@fleetbase/ember-core/utils/generate-uuid';
import createFlowActivity from '../../utils/create-flow-activity';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';
Expand Down
2 changes: 1 addition & 1 deletion addon/components/order-config-manager/custom-fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { later } from '@ember/runloop';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import isObject from '@fleetbase/ember-core/utils/is-object';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';

Expand Down
2 changes: 1 addition & 1 deletion addon/components/order-config-manager/entities.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { inject as service } from '@ember/service';
import { action } from '@ember/object';
import { isArray } from '@ember/array';
import { later } from '@ember/runloop';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
import ObjectProxy from '@ember/object/proxy';
import createCustomEntity from '../../utils/create-custom-entity';
Expand Down
3 changes: 1 addition & 2 deletions addon/components/vendor-panel/drivers.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { isBlank } from '@ember/utils';
import { action, set } from '@ember/object';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';
import contextComponentCallback from '@fleetbase/ember-core/utils/context-component-callback';

export default class VendorPanelDriversComponent extends Component {
Expand Down
2 changes: 1 addition & 1 deletion addon/components/widget/fleet-ops-key-metrics.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';

export default class WidgetFleetOpsKeyMetricsComponent extends Component {
/**
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/contacts/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class ManagementContactsIndexController extends BaseController {
@service store;
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/drivers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { equal } from '@ember/object/computed';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class ManagementDriversIndexController extends BaseController {
@service notifications;
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/fleets/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class ManagementFleetsIndexController extends BaseController {
@service notifications;
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/fuel-reports/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class ManagementFuelReportsIndexController extends BaseController {
@service notifications;
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/issues/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/object';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';
import getIssueTypes from '../../../utils/get-issue-types';
import getIssueCategories from '../../../utils/get-issue-categories';

Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/vehicles/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class ManagementVehiclesIndexController extends BaseController {
@service contextPanel;
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/management/vendors/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';
import getVendorStatusOptions from '../../../utils/get-vendor-status-options';

export default class ManagementVendorsIndexController extends BaseController {
Expand Down
3 changes: 1 addition & 2 deletions addon/controllers/operations/orders/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import { equal } from '@ember/object/computed';
import { debug } from '@ember/debug';
import { isArray } from '@ember/array';
import { isBlank } from '@ember/utils';
import { timeout } from 'ember-concurrency';
import { task } from 'ember-concurrency-decorators';
import { timeout, task } from 'ember-concurrency';

export default class OperationsOrdersIndexController extends BaseController {
@service currentUser;
Expand Down
88 changes: 40 additions & 48 deletions addon/controllers/operations/orders/index/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ import { isArray } from '@ember/array';
import { isBlank } from '@ember/utils';
import { dasherize } from '@ember/string';
import { next } from '@ember/runloop';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import { OSRMv1, Control as RoutingControl } from '@fleetbase/leaflet-routing-machine';
import { debug } from '@ember/debug';
import polyline from '@fleetbase/ember-core/utils/polyline';
import findClosestWaypoint from '@fleetbase/ember-core/utils/find-closest-waypoint';
import isNotEmpty from '@fleetbase/ember-core/utils/is-not-empty';
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';
import getWithDefault from '@fleetbase/ember-core/utils/get-with-default';
Expand Down Expand Up @@ -939,66 +938,59 @@ export default class OperationsOrdersIndexNewController extends BaseController {
@task *optimizeRoute() {
this.isOptimizingRoute = true;

// Build the coordinate list we’ll send to OSRM
const driverAssigned = this.order.driver_assigned;
const driverPosition = driverAssigned ? driverAssigned.location.coordinates : null;
const leafletMap = this.leafletMap;
const driverPosition = driverAssigned?.location?.coordinates; // [lon,lat] | undefined
const originalCoords = this.getCoordinatesFromPayload(); // [[lon,lat], …]
const coordinates = driverPosition ? [driverPosition, ...originalCoords] : [...originalCoords];
const hasDriverStart = Boolean(driverPosition);
const source = hasDriverStart ? 'first' : 'any';
const destination = 'any';
const roundtrip = false; // don’t loop back
const routingHost = getRoutingHost(this.payload, this.waypoints);

let originalCoordinates = this.getCoordinatesFromPayload();
let coordinates = [...originalCoordinates]; // clone

let source = 'any';
let destination = 'any';
let hasDriverStart = false;

// Inject driver location as starting point if available
if (driverPosition && Array.isArray(driverPosition) && driverPosition.length === 2) {
coordinates.unshift([driverPosition[0], driverPosition[1]]);
source = 'first';
hasDriverStart = true;
}

// Call the OSRM /trip service
try {
const response = yield this.fetch.routing(coordinates, { source, destination, annotations: true }, { host: routingHost });
const response = yield this.fetch.routing(coordinates, { source, destination, roundtrip, annotations: true }, { host: routingHost });

if (response?.code === 'Ok') {
this.removeRoutingControlPreview();
this.removeOptimizedRoute(leafletMap);
this.clearLayers();
if (response?.code !== 'Ok') {
throw new Error(`OSRM error: ${response?.code}`);
}

const trip = response.trips?.firstObject;
const route = polyline.decode(trip.geometry);
const responseWaypoints = response.waypoints || [];
// Pair each OSRM waypoint with its Waypoint model
const modelsByInputIndex = hasDriverStart ? [null, ...this.waypoints] : this.waypoints;

let sortedWaypoints = [];
const pairs = response.waypoints.map((wp, idx) => ({
model: modelsByInputIndex[idx], // Ember model or null (driver)
wp,
}));

for (let i = 0; i < responseWaypoints.length; i++) {
// Skip driver position (first coordinate) if it was included
if (hasDriverStart && i === 0) {
continue;
}
// Drop the driver start if present
const payloadPairs = hasDriverStart ? pairs.slice(1) : pairs;

const wp = responseWaypoints[i];
const lat = wp.location[1];
const lng = wp.location[0];
// Sort by the optimised order
payloadPairs.sort((a, b) => a.wp.waypoint_index - b.wp.waypoint_index);

const model = findClosestWaypoint(lat, lng, this.waypoints);
// Extract the Ember models (null-safe)
const sortedWaypoints = payloadPairs.map((p) => p.model).filter(Boolean);

if (model) {
sortedWaypoints.pushObject(model);
}
}
// Update map layers & UI
this.removeRoutingControlPreview();
this.removeOptimizedRoute(this.leafletMap);
this.clearLayers();

this.waypoints = sortedWaypoints;
this.setOptimizedRoute(route, trip, responseWaypoints);
this.previewDraftOrderRoute(this.payload, this.waypoints, this.isMultipleDropoffOrder);
this.updatePayloadCoordinates();
const trip = response.trips?.[0];
const route = polyline.decode(trip.geometry); // [[lat,lon], …]

this.order.set('is_route_optimized', true);
this.waypoints = sortedWaypoints;
this.setOptimizedRoute(route, trip, response.waypoints);
this.previewDraftOrderRoute(this.payload, this.waypoints, this.isMultipleDropoffOrder);
this.updatePayloadCoordinates();

if (this.isUsingIntegratedVendor) {
this.getQuotes();
}
this.order.set('is_route_optimized', true);

if (this.isUsingIntegratedVendor) {
this.getQuotes();
}
} catch (err) {
debug('Error optimizing route', err);
Expand Down
2 changes: 1 addition & 1 deletion addon/controllers/operations/orders/index/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { tracked } from '@glimmer/tracking';
import { action, computed } from '@ember/object';
import { later } from '@ember/runloop';
import { not, notEmpty, alias } from '@ember/object/computed';
import { task } from 'ember-concurrency-decorators';
import { task } from 'ember-concurrency';
import { OSRMv1, Control as RoutingControl } from '@fleetbase/leaflet-routing-machine';
import getRoutingHost from '@fleetbase/ember-core/utils/get-routing-host';

Expand Down
Loading
Loading