From bdc8d70c004a57c56ac9498a4c1ea33396140366 Mon Sep 17 00:00:00 2001 From: newsiberian Date: Mon, 2 May 2016 17:17:37 +0600 Subject: [PATCH] - refactored `orders/shipmentShipped` method. Now it has tow args to make it consistent with `fulfillment` object (not only order.shipping[0]). It returns results for all internally called methods. `workflow/pushOrderWorkflow` method called in sync way, because we need result to be returned. --- .../reaction-core/server/methods/orders.js | 49 +++++++++++-------- .../shippingTracking/shippingTracking.js | 2 +- 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/packages/reaction-core/server/methods/orders.js b/packages/reaction-core/server/methods/orders.js index 52a9cea1e14..d3f2343b976 100644 --- a/packages/reaction-core/server/methods/orders.js +++ b/packages/reaction-core/server/methods/orders.js @@ -160,35 +160,42 @@ Meteor.methods({ * * @summary trigger shipmentShipped status and workflow update * @param {Object} order - order object - * @return {Object} return workflow result + * @param {Object} shipment - shipment object + * @return {Object} return results of several operations */ - "orders/shipmentShipped": function (order) { + "orders/shipmentShipped": function (order, shipment) { check(order, Object); this.unblock(); - if (order) { - let shipment = order.shipping[0]; + let completedItemsResult; + let completedOrderResult; - // Attempt to sent email notification - Meteor.call("orders/sendNotification", order); + // Attempt to sent email notification + const notifyResult = Meteor.call("orders/sendNotification", order); - const itemIds = shipment.items.map((item) => { - return item._id; - }); + const itemIds = shipment.items.map((item) => { + return item._id; + }); - Meteor.call("workflow/pushItemWorkflow", "coreOrderItemWorkflow/shipped", order, itemIds, (error) => { - // Move to completed status for items - // TODO: In the future, this could be handled by shipping delivery status - if (!error) { - Meteor.call("workflow/pushItemWorkflow", "coreOrderItemWorkflow/completed", order, itemIds, (error2) => { - // Then try to mark order as completed. - if (!error2) { - Meteor.call("workflow/pushOrderWorkflow", "coreOrderWorkflow", "completed", order); - } - }); - } - }); + // TODO: In the future, this could be handled by shipping delivery status + const workflowResult = Meteor.call("workflow/pushItemWorkflow", "coreOrderItemWorkflow/shipped", order, itemIds); + + if (workflowResult === 1) { + // Move to completed status for items + completedItemsResult = Meteor.call("workflow/pushItemWorkflow", "coreOrderItemWorkflow/completed", order, itemIds); + + if (completedItemsResult === 1) { + // Then try to mark order as completed. + completedOrderResult = Meteor.call("workflow/pushOrderWorkflow", "coreOrderWorkflow", "completed", order); + } } + + return { + notify: notifyResult, + workflow: workflowResult, + completedItems: completedItemsResult, + completedOrder: completedOrderResult + }; }, /** diff --git a/packages/reaction-orders/client/templates/dashboard/orders/workflow/shippingTracking/shippingTracking.js b/packages/reaction-orders/client/templates/dashboard/orders/workflow/shippingTracking/shippingTracking.js index bb29c0f0596..b93d635ebb3 100644 --- a/packages/reaction-orders/client/templates/dashboard/orders/workflow/shippingTracking/shippingTracking.js +++ b/packages/reaction-orders/client/templates/dashboard/orders/workflow/shippingTracking/shippingTracking.js @@ -25,7 +25,7 @@ Template.coreOrderShippingTracking.onCreated(() => { Template.coreOrderShippingTracking.events({ "click [data-event-action=shipmentShipped]": function () { let template = Template.instance(); - Meteor.call("orders/shipmentShipped", template.order); + Meteor.call("orders/shipmentShipped", template.order, template.order.shipping[0]); // Meteor.call("workflow/pushOrderShipmentWorkflow", "coreOrderShipmentWorkflow", "orderShipped", this._id); },