order-management 0.0.22 → 0.0.24
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/.medusa/server/src/admin/index.js +602 -491
- package/.medusa/server/src/admin/index.mjs +602 -491
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +45 -12
- package/.medusa/server/src/api/admin/swaps/[id]/confirm-exchange/route.js +145 -0
- package/.medusa/server/src/api/admin/swaps/[id]/route.js +10 -1
- package/.medusa/server/src/helpers/index.js +2 -1
- package/.medusa/server/src/helpers/order-exchange-data.js +59 -0
- package/.medusa/server/src/subscribers/exchange-created.js +43 -7
- package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +22 -7
- package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +48 -32
- package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +5 -3
- package/.medusa/server/src/workflows/swaps/confirm-exchange-workflow.js +51 -0
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
6
6
|
const utils_2 = require("@medusajs/framework/utils");
|
|
7
7
|
const swap_1 = require("../../../modules/swap");
|
|
8
8
|
exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-return", async (input, { container }) => {
|
|
9
|
-
const { swap_id, return_location_id, return_shipping_method_id } = input;
|
|
9
|
+
const { swap_id, return_location_id, return_shipping_method_id, return_items: inputReturnItems } = input;
|
|
10
10
|
if (!swap_id) {
|
|
11
11
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
|
|
12
12
|
}
|
|
@@ -23,33 +23,46 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
|
|
|
23
23
|
swap,
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
if
|
|
27
|
-
|
|
26
|
+
// Allow creating return if status is "approved" OR "requested" with pending_exchange_creation flag
|
|
27
|
+
const swapMetadata = swapData.metadata || {};
|
|
28
|
+
const pendingExchangeCreation = swapMetadata.pending_exchange_creation === true;
|
|
29
|
+
if (swapData.status !== "approved" && !(swapData.status === "requested" && pendingExchangeCreation)) {
|
|
30
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Swap must be approved or pending exchange creation before creating Medusa return. Current status: ${swapData.status}`);
|
|
28
31
|
}
|
|
29
|
-
//
|
|
30
|
-
// return_items is stored as JSONB and may be an array or JSON string
|
|
32
|
+
// Use return_items from input if provided, otherwise parse from swap model
|
|
31
33
|
let returnItems = [];
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
34
|
+
if (inputReturnItems && inputReturnItems.length > 0) {
|
|
35
|
+
// Use items from input (from exchange form)
|
|
36
|
+
returnItems = inputReturnItems.map((item) => ({
|
|
37
|
+
id: item.item_id,
|
|
38
|
+
quantity: item.quantity,
|
|
39
|
+
reason: item.reason_id,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Parse return_items from JSONB format in swap model
|
|
44
|
+
if (swapData.return_items) {
|
|
45
|
+
if (Array.isArray(swapData.return_items)) {
|
|
46
|
+
returnItems = swapData.return_items.map((item) => ({
|
|
47
|
+
id: String(item.id || item.item_id || ""),
|
|
48
|
+
quantity: Number(item.quantity || 0),
|
|
49
|
+
reason: item.reason,
|
|
50
|
+
}));
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
else if (typeof swapData.return_items === "string") {
|
|
53
|
+
try {
|
|
54
|
+
const parsed = JSON.parse(swapData.return_items);
|
|
55
|
+
if (Array.isArray(parsed)) {
|
|
56
|
+
returnItems = parsed.map((item) => ({
|
|
57
|
+
id: String(item.id || item.item_id || ""),
|
|
58
|
+
quantity: Number(item.quantity || 0),
|
|
59
|
+
reason: item.reason,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Invalid JSON, will throw error below
|
|
65
|
+
}
|
|
53
66
|
}
|
|
54
67
|
}
|
|
55
68
|
}
|
|
@@ -70,23 +83,27 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
|
|
|
70
83
|
quantity: item.quantity,
|
|
71
84
|
reason_id: item.reason, // Assuming reason is the reason_id
|
|
72
85
|
}));
|
|
86
|
+
// Use swap's location_id as fallback if not provided in input
|
|
87
|
+
const finalLocationId = return_location_id || swapData.return_location_id;
|
|
73
88
|
const medusaReturn = await orderService.createReturn({
|
|
74
89
|
order_id: swapData.order_id,
|
|
75
90
|
items: returnItemsForMedusa,
|
|
76
|
-
location_id:
|
|
91
|
+
location_id: finalLocationId,
|
|
77
92
|
});
|
|
78
93
|
returnId = medusaReturn.id;
|
|
94
|
+
// Use swap's return_shipping_method_id as fallback if not provided in input
|
|
95
|
+
const finalReturnShippingMethodId = return_shipping_method_id || swapData.return_shipping_method_id;
|
|
79
96
|
// Add return shipping method if provided
|
|
80
97
|
// Note: This may need to be done via Medusa's return API after creation
|
|
81
98
|
// depending on Medusa v2 API structure
|
|
82
|
-
if (
|
|
99
|
+
if (finalReturnShippingMethodId) {
|
|
83
100
|
// Try to resolve return service to add shipping method
|
|
84
101
|
try {
|
|
85
102
|
const returnService = container.resolve("return");
|
|
86
103
|
if (returnService?.addShippingMethod) {
|
|
87
104
|
await returnService.addShippingMethod({
|
|
88
105
|
return_id: returnId,
|
|
89
|
-
shipping_method_id:
|
|
106
|
+
shipping_method_id: finalReturnShippingMethodId,
|
|
90
107
|
});
|
|
91
108
|
}
|
|
92
109
|
}
|
|
@@ -106,7 +123,6 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
|
|
|
106
123
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, "Return creation via Order Module is not directly available. Please use Medusa's return workflow.");
|
|
107
124
|
}
|
|
108
125
|
// Update swap with return_id and exchange details
|
|
109
|
-
const swapMetadata = swapData.metadata || {};
|
|
110
126
|
const medusaIntegration = swapMetadata.medusa_integration || {};
|
|
111
127
|
const updatedSwap = await swapService.updateSwaps({
|
|
112
128
|
selector: { id: swap_id },
|
|
@@ -120,8 +136,8 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
|
|
|
120
136
|
...medusaIntegration,
|
|
121
137
|
return_id: returnId,
|
|
122
138
|
return_created_at: new Date().toISOString(),
|
|
123
|
-
return_location_id,
|
|
124
|
-
return_shipping_method_id,
|
|
139
|
+
return_location_id: return_location_id || null,
|
|
140
|
+
return_shipping_method_id: return_shipping_method_id || null,
|
|
125
141
|
},
|
|
126
142
|
},
|
|
127
143
|
},
|
|
@@ -132,4 +148,4 @@ exports.createMedusaReturnStep = (0, workflows_sdk_1.createStep)("create-medusa-
|
|
|
132
148
|
swap: finalSwap || swap,
|
|
133
149
|
});
|
|
134
150
|
});
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1yZXR1cm4tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC9jcmVhdGUtbWVkdXNhLXJldHVybi1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBRWxHLGdEQUFtRDtBQWdCdEMsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDBCQUFVLEVBQzlDLHNCQUFzQixFQUN0QixLQUFLLEVBQ0gsS0FBa0MsRUFDbEMsRUFBRSxTQUFTLEVBQUUsRUFDd0MsRUFBRTtJQUN2RCxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV4RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFPaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNEJBQTRCLENBQzdCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkIseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSw0QkFBWSxDQUErQjtZQUNwRCxTQUFT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
|
|
@@ -5,14 +5,16 @@ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
|
5
5
|
const swap_1 = require("../steps/swap");
|
|
6
6
|
exports.approveSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("approve-swap", (input) => {
|
|
7
7
|
const { swap_id, admin_id, return_location_id, return_shipping_method_id, outbound_shipping_method_id, send_notification, } = input;
|
|
8
|
-
//
|
|
8
|
+
// Approve the swap and store exchange details
|
|
9
|
+
// Status changes to "approved" when admin approves
|
|
9
10
|
// Store exchange details in metadata for audit trail
|
|
10
11
|
const { swap: approvedSwap } = (0, swap_1.updateSwapStatusStep)({
|
|
11
12
|
swap_id,
|
|
12
|
-
status: "approved",
|
|
13
|
+
status: "approved", // Change status to approved
|
|
13
14
|
metadata: {
|
|
14
15
|
approved_at: new Date().toISOString(),
|
|
15
16
|
approved_by: admin_id,
|
|
17
|
+
pending_exchange_creation: true,
|
|
16
18
|
exchange_details: {
|
|
17
19
|
return_location_id,
|
|
18
20
|
return_shipping_method_id,
|
|
@@ -35,4 +37,4 @@ exports.approveSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("approve-swap"
|
|
|
35
37
|
});
|
|
36
38
|
});
|
|
37
39
|
exports.default = exports.approveSwapWorkflow;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9hcHByb3ZlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUdzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEdBQ2xCLEdBQUcsS0FBSyxDQUFBO0lBRVQsOENBQThDO0lBQzlDLG1EQUFtRDtJQUNuRCxxREFBcUQ7SUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFBLDJCQUFvQixFQUFDO1FBQ2xELE9BQU87UUFDUCxNQUFNLEVBQUUsVUFBVSxFQUFFLDRCQUE0QjtRQUNoRCxRQUFRLEVBQUU7WUFDUixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDckMsV0FBVyxFQUFFLFFBQVE7WUFDckIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixnQkFBZ0IsRUFBRTtnQkFDaEIsa0JBQWtCO2dCQUNsQix5QkFBeUI7Z0JBQ3pCLDJCQUEyQjtnQkFDM0IsaUJBQWlCO2dCQUNqQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLHVEQUF1RDtJQUN2RCxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQztRQUN0RSxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBNEI7UUFDckQsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.confirmExchangeWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const swap_1 = require("../steps/swap");
|
|
6
|
+
exports.confirmExchangeWorkflow = (0, workflows_sdk_1.createWorkflow)("confirm-exchange", (input) => {
|
|
7
|
+
const { swap_id, admin_id, return_items, new_items, return_location_id, return_shipping_method_id, outbound_shipping_method_id, send_notification, } = input;
|
|
8
|
+
// Step 1: Retrieve swap to validate it's in requested status
|
|
9
|
+
const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
|
|
10
|
+
swap_id,
|
|
11
|
+
});
|
|
12
|
+
// Step 2: Create Medusa Return
|
|
13
|
+
// Use return_items from input if provided, otherwise step will use swap data
|
|
14
|
+
const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
|
|
15
|
+
swap_id,
|
|
16
|
+
return_location_id,
|
|
17
|
+
return_shipping_method_id,
|
|
18
|
+
return_items: return_items, // Optional - step will fallback to swap data
|
|
19
|
+
});
|
|
20
|
+
// Step 3: Create Medusa Exchange linked to return
|
|
21
|
+
// Use new_items from input if provided, otherwise step will use swap data
|
|
22
|
+
// This will trigger Medusa's native exchange workflow which handles:
|
|
23
|
+
// - Fulfillment creation for new items
|
|
24
|
+
// - Payment Collection creation if difference_due > 0 (customer owes)
|
|
25
|
+
// - Refund processing if difference_due < 0 (customer gets refund)
|
|
26
|
+
// - Status transitions (requested → received → shipped → delivered)
|
|
27
|
+
const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
|
|
28
|
+
swap_id,
|
|
29
|
+
return_id,
|
|
30
|
+
outbound_shipping_method_id,
|
|
31
|
+
send_notification,
|
|
32
|
+
new_items: new_items, // Optional - step will fallback to swap data
|
|
33
|
+
});
|
|
34
|
+
// Step 4: Update swap status to "approved" after successful exchange creation
|
|
35
|
+
const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
|
|
36
|
+
swap_id,
|
|
37
|
+
status: "approved",
|
|
38
|
+
metadata: {
|
|
39
|
+
exchange_confirmed_at: new Date().toISOString(),
|
|
40
|
+
exchange_confirmed_by: admin_id,
|
|
41
|
+
pending_exchange_creation: false,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
return new workflows_sdk_1.WorkflowResponse({
|
|
45
|
+
swap: finalSwap,
|
|
46
|
+
return_id,
|
|
47
|
+
exchange_id,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
exports.default = exports.confirmExchangeWorkflow;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1leGNoYW5nZS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3dhcHMvY29uZmlybS1leGNoYW5nZS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFHMEM7QUFDMUMsd0NBS3NCO0FBTVQsUUFBQSx1QkFBdUIsR0FBRyxJQUFBLDhCQUFjLEVBQ25ELGtCQUFrQixFQUNsQixDQUNFLEtBQW1DLEVBQ2MsRUFBRTtJQUNuRCxNQUFNLEVBQ0osT0FBTyxFQUNQLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxFQUNULGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGlCQUFpQixHQUNsQixHQUFHLEtBQUssQ0FBQTtJQUVULDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUEsdUJBQWdCLEVBQUM7UUFDL0MsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLCtCQUErQjtJQUMvQiw2RUFBNkU7SUFDN0UsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBQSw2QkFBc0IsRUFBQztRQUNqRSxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QixZQUFZLEVBQUUsWUFBWSxFQUFFLDZDQUE2QztLQUMxRSxDQUFDLENBQUE7SUFFRixrREFBa0Q7SUFDbEQsMEVBQTBFO0lBQzFFLHFFQUFxRTtJQUNyRSx1Q0FBdUM7SUFDdkMsc0VBQXNFO0lBQ3RFLG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFDcEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFBLCtCQUF3QixFQUFDO1FBQ3ZFLE9BQU87UUFDUCxTQUFTO1FBQ1QsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixTQUFTLEVBQUUsU0FBUyxFQUFFLDZDQUE2QztLQUNwRSxDQUFDLENBQUE7SUFFRiw4RUFBOEU7SUFDOUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFBLDJCQUFvQixFQUFDO1FBQy9DLE9BQU87UUFDUCxNQUFNLEVBQUUsVUFBVTtRQUNsQixRQUFRLEVBQUU7WUFDUixxQkFBcUIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUMvQyxxQkFBcUIsRUFBRSxRQUFRO1lBQy9CLHlCQUF5QixFQUFFLEtBQUs7U0FDakM7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQWdDO1FBQ3pELElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUztRQUNULFdBQVc7S0FDWixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLCtCQUF1QixDQUFBIn0=
|