diff --git a/addon/components/activity-event-selector.js b/addon/components/activity-event-selector.js index b6a05fbe4..f41836448 100644 --- a/addon/components/activity-event-selector.js +++ b/addon/components/activity-event-selector.js @@ -45,6 +45,10 @@ export default class ActivityEventSelectorComponent extends Component { name: 'order.canceled', description: 'Triggers when an order is canceled by a user, driver, or system process.', }, + 'order.completed': { + name: 'order.completed', + description: 'Triggers when an order is completed by a driver, or system process.', + }, }; /** diff --git a/addon/components/display-place.hbs b/addon/components/display-place.hbs index 3b8d1912e..f6e3b6ecc 100644 --- a/addon/components/display-place.hbs +++ b/addon/components/display-place.hbs @@ -11,9 +11,33 @@ {{else}} - {{#if @eta}} - ETA: {{format-duration @eta}} - {{/if}} +
+ {{#if place.status_code}} + + {{/if}} + {{#if @eta}} + ETA: {{format-duration @eta}} + {{/if}} + {{#if @waypointActions}} + +
+
+
+ {{t "fleet-ops.operations.orders.index.view.waypoint-actions"}} +
+
+
+ {{#each-in @waypointActions as |actionId action|}} + + {{/each-in}} +
+
+ {{/if}} +
{{#if place.name}} {{place.name}}
diff --git a/addon/components/route-list.hbs b/addon/components/route-list.hbs index f2b99652b..23f6d41f9 100644 --- a/addon/components/route-list.hbs +++ b/addon/components/route-list.hbs @@ -6,7 +6,7 @@
1
- +
{{/if}} @@ -28,7 +28,7 @@
{{add index 2}}
- +
{{/each}} @@ -41,7 +41,7 @@
{{add @order.payload.middleWaypoints.length 2}}
- +
{{/if}} diff --git a/addon/controllers/operations/orders/index.js b/addon/controllers/operations/orders/index.js index 7921aa814..dd89163d0 100644 --- a/addon/controllers/operations/orders/index.js +++ b/addon/controllers/operations/orders/index.js @@ -1047,7 +1047,6 @@ export default class OperationsOrdersIndexController extends BaseController { selected = selected.length > 0 ? selected : this.table.selectedRows; this.crud.bulkDelete(selected, { - modelNamePath: `public_id`, acceptButtonText: 'Delete Orders', resolveModelName: (model) => `${model.get('tracking_number.tracking_number')} - ${model.get('public_id')}`, onSuccess: async () => { @@ -1075,7 +1074,6 @@ export default class OperationsOrdersIndexController extends BaseController { acceptButtonText: 'Cancel Orders', acceptButtonScheme: 'danger', acceptButtonIcon: 'ban', - modelNamePath: `public_id`, actionPath: `orders/bulk-cancel`, actionMethod: `PATCH`, resolveModelName: (model) => `${model.get('tracking_number.tracking_number')} - ${model.get('public_id')}`, @@ -1109,7 +1107,6 @@ export default class OperationsOrdersIndexController extends BaseController { acceptButtonText: 'Dispatch Orders', acceptButtonScheme: 'magic', acceptButtonIcon: 'rocket', - modelNamePath: 'public_id', actionPath: 'orders/bulk-dispatch', actionMethod: 'POST', resolveModelName: (model) => `${model.get('tracking_number.tracking_number')} - ${model.get('public_id')}`, @@ -1152,7 +1149,6 @@ export default class OperationsOrdersIndexController extends BaseController { acceptButtonScheme: 'magic', acceptButtonIcon: 'user-plus', acceptButtonDisabled: true, - modelNamePath: 'public_id', actionPath: 'orders/bulk-assign-driver', actionMethod: 'PATCH', driverAssigned: null, diff --git a/addon/routes/operations/orders/index/view.js b/addon/routes/operations/orders/index/view.js index e2fe9e30d..cb857efa2 100644 --- a/addon/routes/operations/orders/index/view.js +++ b/addon/routes/operations/orders/index/view.js @@ -1,6 +1,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; +import { debug } from '@ember/debug'; export default class OperationsOrdersIndexViewRoute extends Route { @service currentUser; @@ -66,7 +67,23 @@ export default class OperationsOrdersIndexViewRoute extends Route { // Listen for channel subscription (async () => { for await (let output of channel) { - this.refresh(); + const { event, data } = output; + + // debug output + debug(`Socket Event : ${event} : ${JSON.stringify(output)}`); + + // Only reload if the order has a status change stemming from an updated event OR + // if a waypoint has been completed which will trigger `order.completed` + const statusChanged = event === 'order.updated' && data.status !== model.status; + const shouldReload = ['order.completed', 'waypoint.activity', 'order.created'].includes(event); + if (statusChanged || shouldReload) { + this.refresh(); + + // reload the controller stuff as well + if (this.controller) { + this.controller.loadOrderRelations.perform(model); + } + } if (typeof this.onOrderEvent === 'function') { this.onOrderEvent(output); diff --git a/addon/services/movement-tracker.js b/addon/services/movement-tracker.js index b9ce4b2ea..d62d18f16 100644 --- a/addon/services/movement-tracker.js +++ b/addon/services/movement-tracker.js @@ -155,7 +155,7 @@ export default class MovementTrackerService extends Service { if (event === `${type}.location_changed` || event === `${type}.simulated_location_changed`) { eventBuffer.add(output); - debug(`Incoming socket event added to buffer: ${event}`); + debug(`Socket Event : ${event} : Added to EventBuffer : ${JSON.stringify(output)}`); } } })(); diff --git a/addon/styles/fleetops-engine.css b/addon/styles/fleetops-engine.css index 98d6bd650..1cba1841b 100644 --- a/addon/styles/fleetops-engine.css +++ b/addon/styles/fleetops-engine.css @@ -1623,3 +1623,10 @@ body[data-theme='dark'] .justify-end-i { justify-content: end !important; } + +button.fleetops-btn-xxs.btn, +button.fleetops-btn-xxs, +.fleetops-btn-xxs { + padding-top: 0.2rem !important; + padding-bottom: 0.2rem !important; +} diff --git a/addon/templates/operations/orders/index.hbs b/addon/templates/operations/orders/index.hbs index b00a08c3f..ad601e37b 100644 --- a/addon/templates/operations/orders/index.hbs +++ b/addon/templates/operations/orders/index.hbs @@ -72,7 +72,12 @@

Bulk Search

-