@medusajs/core-flows
Version:
Set of workflow definitions for Medusa
164 lines • 6.92 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.confirmDraftOrderEditWorkflow = exports.confirmDraftOrderEditWorkflowId = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const cart_1 = require("../../cart");
const prepare_confirm_inventory_input_1 = require("../../cart/utils/prepare-confirm-inventory-input");
const common_1 = require("../../common");
const order_1 = require("../../order");
const confirm_order_changes_1 = require("../../order/steps/confirm-order-changes");
const reservation_1 = require("../../reservation");
const validate_draft_order_change_1 = require("../steps/validate-draft-order-change");
exports.confirmDraftOrderEditWorkflowId = "confirm-draft-order-edit";
/**
* This workflow confirms a draft order edit. It's used by the
* [Confirm Draft Order Edit Admin API Route](https://docs.medusajs.com/api/admin#draft-orders_postdraftordersideditconfirm).
*
* You can use this workflow within your customizations or your own custom workflows, allowing you to wrap custom logic around
* confirming a draft order edit.
*
* @example
* const { result } = await confirmDraftOrderEditWorkflow(container)
* .run({
* input: {
* order_id: "order_123",
* confirmed_by: "user_123",
* }
* })
*
* @summary
*
* Confirm a draft order edit.
*/
exports.confirmDraftOrderEditWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.confirmDraftOrderEditWorkflowId, function (input) {
const order = (0, common_1.useRemoteQueryStep)({
entry_point: "orders",
fields: [
"id",
"status",
"is_draft_order",
"version",
"canceled_at",
"items.id",
"items.title",
"items.variant_title",
"items.variant_sku",
"items.variant_barcode",
"shipping_address.*",
],
variables: { id: input.order_id },
list: false,
throw_if_key_not_found: true,
}).config({ name: "order-query" });
const orderChange = (0, common_1.useRemoteQueryStep)({
entry_point: "order_change",
fields: [
"id",
"status",
"actions.id",
"actions.order_id",
"actions.return_id",
"actions.action",
"actions.details",
"actions.reference",
"actions.reference_id",
"actions.internal_note",
],
variables: {
filters: {
order_id: input.order_id,
status: [utils_1.OrderChangeStatus.PENDING, utils_1.OrderChangeStatus.REQUESTED],
},
},
list: false,
}).config({ name: "order-change-query" });
(0, validate_draft_order_change_1.validateDraftOrderChangeStep)({
order,
orderChange,
});
const orderPreview = (0, order_1.previewOrderChangeStep)(order.id);
(0, confirm_order_changes_1.confirmOrderChanges)({
changes: [orderChange],
orderId: order.id,
confirmed_by: input.confirmed_by,
});
const orderItems = (0, common_1.useRemoteQueryStep)({
entry_point: "order",
fields: [
"id",
"version",
"canceled_at",
"sales_channel_id",
"items.*",
"items.variant.manage_inventory",
"items.variant.allow_backorder",
"items.variant.inventory_items.inventory_item_id",
"items.variant.inventory_items.required_quantity",
"items.variant.inventory_items.inventory.location_levels.stock_locations.id",
"items.variant.inventory_items.inventory.location_levels.stock_locations.name",
"items.variant.inventory_items.inventory.location_levels.stock_locations.sales_channels.id",
"items.variant.inventory_items.inventory.location_levels.stock_locations.sales_channels.name",
],
variables: { id: input.order_id },
list: false,
throw_if_key_not_found: true,
}).config({ name: "order-items-query" });
const { variants, items, toRemoveReservationLineItemIds } = (0, workflows_sdk_1.transform)({ orderItems, previousOrderItems: order.items, orderPreview }, ({ orderItems, previousOrderItems, orderPreview }) => {
const allItems = [];
const allVariants = [];
const previousItemIds = (previousOrderItems || []).map(({ id }) => id);
const currentItemIds = orderItems.items.map(({ id }) => id);
const removedItemIds = previousItemIds.filter((id) => !currentItemIds.includes(id));
const updatedItemIds = [];
orderItems.items.forEach((ordItem) => {
const itemAction = orderPreview.items?.find((item) => item.id === ordItem.id &&
item.actions?.find((a) => a.action === utils_1.ChangeActionType.ITEM_ADD ||
a.action === utils_1.ChangeActionType.ITEM_UPDATE));
if (!itemAction) {
return;
}
const unitPrice = itemAction.raw_unit_price ?? itemAction.unit_price;
const compareAtUnitPrice = itemAction.raw_compare_at_unit_price ??
itemAction.compare_at_unit_price;
const updateAction = itemAction.actions.find((a) => a.action === utils_1.ChangeActionType.ITEM_UPDATE);
if (updateAction) {
updatedItemIds.push(ordItem.id);
}
const newQuantity = itemAction.raw_quantity ?? itemAction.quantity;
const reservationQuantity = utils_1.MathBN.sub(newQuantity, ordItem.raw_fulfilled_quantity);
allItems.push({
id: ordItem.id,
variant_id: ordItem.variant_id,
quantity: reservationQuantity,
unit_price: unitPrice,
compare_at_unit_price: compareAtUnitPrice,
});
allVariants.push(ordItem.variant);
});
return {
variants: allVariants,
items: allItems,
toRemoveReservationLineItemIds: [
...removedItemIds,
...updatedItemIds,
],
};
});
const formatedInventoryItems = (0, workflows_sdk_1.transform)({
input: {
sales_channel_id: orderItems.sales_channel_id,
variants,
items,
},
}, prepare_confirm_inventory_input_1.prepareConfirmInventoryInput);
(0, reservation_1.deleteReservationsByLineItemsStep)(toRemoveReservationLineItemIds);
(0, cart_1.reserveInventoryStep)(formatedInventoryItems);
order_1.createOrUpdateOrderPaymentCollectionWorkflow.runAsStep({
input: {
order_id: order.id,
},
});
return new workflows_sdk_1.WorkflowResponse(orderPreview);
});
//# sourceMappingURL=confirm-draft-order-edit.js.map
;