order-management 0.0.91 → 0.0.92
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 +525 -492
- package/.medusa/server/src/admin/index.mjs +526 -493
- package/.medusa/server/src/api/admin/orders/[order_id]/refund-context/route.js +71 -25
- package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/mark-refunded/route.js +38 -1
- package/.medusa/server/src/api/admin/return/[id]/route.js +11 -1
- package/.medusa/server/src/api/middlewares/block-refund-until-return-received.js +97 -0
- package/.medusa/server/src/api/middlewares.js +7 -1
- package/.medusa/server/src/helpers/detect-cod.js +81 -13
- package/.medusa/server/src/helpers/index.js +2 -1
- package/.medusa/server/src/helpers/refund-calculation.js +3 -2
- package/.medusa/server/src/helpers/refund-receive-guard.js +48 -0
- package/.medusa/server/src/modules/payment-detail/service.js +9 -1
- package/README.md +31 -8
- package/package.json +1 -1
|
@@ -6,10 +6,14 @@ const refund_payment_mapping_1 = require("../../../../../modules/refund-payment-
|
|
|
6
6
|
const payment_detail_1 = require("../../../../../modules/payment-detail");
|
|
7
7
|
const detect_cod_1 = require("../../../../../helpers/detect-cod");
|
|
8
8
|
const refund_calculation_1 = require("../../../../../helpers/refund-calculation");
|
|
9
|
+
const refund_receive_guard_1 = require("../../../../../helpers/refund-receive-guard");
|
|
9
10
|
/**
|
|
10
11
|
* GET /admin/orders/:order_id/refund-context
|
|
11
12
|
*
|
|
12
|
-
* Aggregated read: return (for order) + refund_payment_mapping + payment_detail
|
|
13
|
+
* Aggregated read: return (for order) + refund_payment_mapping + payment_detail
|
|
14
|
+
* + the checkout payment used on the order (needed for guest orders, which
|
|
15
|
+
* typically have no saved payment_detail).
|
|
16
|
+
* `can_process_refund` is true only when return status is `received` and the mapping is not already refunded.
|
|
13
17
|
*
|
|
14
18
|
* Payment detail resolution priority:
|
|
15
19
|
* 1. refund_mapping.payment_id (explicitly set on the mapping) → source = "specified"
|
|
@@ -26,11 +30,12 @@ async function GET(req, res) {
|
|
|
26
30
|
}
|
|
27
31
|
try {
|
|
28
32
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
29
|
-
const [
|
|
30
|
-
(0, detect_cod_1.
|
|
33
|
+
const [orderPayment, orderModuleServiceResolved] = await Promise.all([
|
|
34
|
+
(0, detect_cod_1.loadOrderPaymentMethod)(orderId, query),
|
|
31
35
|
Promise.resolve(req.scope.resolve(utils_1.Modules.ORDER)),
|
|
32
36
|
]);
|
|
33
37
|
const orderModuleService = orderModuleServiceResolved;
|
|
38
|
+
const isCod = orderPayment?.is_cod ?? false;
|
|
34
39
|
const order = await orderModuleService.retrieveOrder(orderId).catch(() => null);
|
|
35
40
|
if (!order) {
|
|
36
41
|
res.status(404).json({
|
|
@@ -45,7 +50,10 @@ async function GET(req, res) {
|
|
|
45
50
|
if (!firstReturn) {
|
|
46
51
|
const empty = {
|
|
47
52
|
is_cod: isCod,
|
|
53
|
+
order_payment: orderPayment,
|
|
48
54
|
return_id: null,
|
|
55
|
+
return_status: null,
|
|
56
|
+
can_process_refund: false,
|
|
49
57
|
refund_mapping: null,
|
|
50
58
|
payment_detail: null,
|
|
51
59
|
refund: null,
|
|
@@ -54,6 +62,7 @@ async function GET(req, res) {
|
|
|
54
62
|
return;
|
|
55
63
|
}
|
|
56
64
|
const returnId = firstReturn.id;
|
|
65
|
+
const returnStatus = firstReturn.status ?? null;
|
|
57
66
|
const orderCustomerId = order.customer_id;
|
|
58
67
|
let refundMappingService;
|
|
59
68
|
let paymentDetailService;
|
|
@@ -62,14 +71,24 @@ async function GET(req, res) {
|
|
|
62
71
|
paymentDetailService = req.scope.resolve(payment_detail_1.PAYMENT_DETAIL_MODULE);
|
|
63
72
|
}
|
|
64
73
|
catch {
|
|
65
|
-
const destLabel = (0, refund_calculation_1.resolveDestinationLabel)({
|
|
74
|
+
const destLabel = (0, refund_calculation_1.resolveDestinationLabel)({
|
|
75
|
+
is_cod: isCod,
|
|
76
|
+
original_method_label: orderPayment?.label,
|
|
77
|
+
});
|
|
66
78
|
const refund = await (0, refund_calculation_1.loadRefundCalculation)(orderId, req.scope, {
|
|
67
79
|
returnId,
|
|
68
80
|
destinationLabel: destLabel,
|
|
69
81
|
});
|
|
70
82
|
const partial = {
|
|
71
83
|
is_cod: isCod,
|
|
84
|
+
order_payment: orderPayment,
|
|
72
85
|
return_id: returnId,
|
|
86
|
+
return_status: returnStatus,
|
|
87
|
+
can_process_refund: (0, refund_receive_guard_1.canProcessRefundForReturn)({
|
|
88
|
+
status: returnStatus,
|
|
89
|
+
has_mapping: false,
|
|
90
|
+
is_refunded: false,
|
|
91
|
+
}),
|
|
73
92
|
refund_mapping: null,
|
|
74
93
|
payment_detail: null,
|
|
75
94
|
refund,
|
|
@@ -93,12 +112,15 @@ async function GET(req, res) {
|
|
|
93
112
|
let paymentDetailBlock = null;
|
|
94
113
|
// True when the customer explicitly chose a payment method (even if that detail was later deleted)
|
|
95
114
|
const customerSpecified = !!(refundMapping?.payment_id);
|
|
96
|
-
if (
|
|
97
|
-
if
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
if (customerSpecified) {
|
|
116
|
+
// Customer picked a specific payment detail — resolve it; if deleted/missing keep null
|
|
117
|
+
// so the widget shows a "payment method removed" warning instead of falling back to default
|
|
118
|
+
try {
|
|
119
|
+
const specifiedId = refundMapping.payment_id;
|
|
120
|
+
const detail = orderCustomerId
|
|
121
|
+
? await paymentDetailService.getPaymentDetail(specifiedId, orderCustomerId)
|
|
122
|
+
: await paymentDetailService.getPaymentDetailById(specifiedId);
|
|
123
|
+
if (detail) {
|
|
102
124
|
paymentDetailBlock = {
|
|
103
125
|
id: detail.id,
|
|
104
126
|
type: detail.type,
|
|
@@ -107,33 +129,50 @@ async function GET(req, res) {
|
|
|
107
129
|
source: "specified",
|
|
108
130
|
};
|
|
109
131
|
}
|
|
110
|
-
catch {
|
|
111
|
-
// payment detail was deleted or is inaccessible — paymentDetailBlock stays null
|
|
112
|
-
}
|
|
113
132
|
}
|
|
114
|
-
|
|
115
|
-
//
|
|
133
|
+
catch {
|
|
134
|
+
// customer-scoped lookup can fail for guest orders whose payment_detail
|
|
135
|
+
// is not owned by order.customer_id — try id-only admin lookup
|
|
116
136
|
try {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
if (defaultDetail) {
|
|
137
|
+
const detail = await paymentDetailService.getPaymentDetailById(refundMapping.payment_id);
|
|
138
|
+
if (detail) {
|
|
120
139
|
paymentDetailBlock = {
|
|
121
|
-
id:
|
|
122
|
-
type:
|
|
123
|
-
detail_json: (
|
|
124
|
-
is_default:
|
|
125
|
-
source: "
|
|
140
|
+
id: detail.id,
|
|
141
|
+
type: detail.type,
|
|
142
|
+
detail_json: (detail.detail_json ?? {}),
|
|
143
|
+
is_default: detail.is_default,
|
|
144
|
+
source: "specified",
|
|
126
145
|
};
|
|
127
146
|
}
|
|
128
147
|
}
|
|
129
148
|
catch {
|
|
130
|
-
//
|
|
149
|
+
// payment detail was deleted or is inaccessible — paymentDetailBlock stays null
|
|
131
150
|
}
|
|
132
151
|
}
|
|
133
152
|
}
|
|
153
|
+
else if (orderCustomerId) {
|
|
154
|
+
// No explicit choice — fall back to customer's default payment detail
|
|
155
|
+
try {
|
|
156
|
+
const [defaultDetails] = await paymentDetailService.listPaymentDetailsByCustomer(orderCustomerId, { take: 1 });
|
|
157
|
+
const defaultDetail = defaultDetails.find((d) => d.is_default) ?? defaultDetails[0];
|
|
158
|
+
if (defaultDetail) {
|
|
159
|
+
paymentDetailBlock = {
|
|
160
|
+
id: defaultDetail.id,
|
|
161
|
+
type: defaultDetail.type,
|
|
162
|
+
detail_json: (defaultDetail.detail_json ?? {}),
|
|
163
|
+
is_default: defaultDetail.is_default,
|
|
164
|
+
source: "default",
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// no default payment detail found
|
|
170
|
+
}
|
|
171
|
+
}
|
|
134
172
|
const destinationLabel = (0, refund_calculation_1.resolveDestinationLabel)({
|
|
135
173
|
is_cod: isCod,
|
|
136
174
|
payment_type: paymentDetailBlock?.type,
|
|
175
|
+
original_method_label: orderPayment?.label,
|
|
137
176
|
});
|
|
138
177
|
const refund = await (0, refund_calculation_1.loadRefundCalculation)(orderId, req.scope, {
|
|
139
178
|
returnId,
|
|
@@ -141,7 +180,14 @@ async function GET(req, res) {
|
|
|
141
180
|
});
|
|
142
181
|
const payload = {
|
|
143
182
|
is_cod: isCod,
|
|
183
|
+
order_payment: orderPayment,
|
|
144
184
|
return_id: returnId,
|
|
185
|
+
return_status: returnStatus,
|
|
186
|
+
can_process_refund: (0, refund_receive_guard_1.canProcessRefundForReturn)({
|
|
187
|
+
status: returnStatus,
|
|
188
|
+
has_mapping: !!refundMappingBlock,
|
|
189
|
+
is_refunded: Boolean(refundMappingBlock?.is_refunded),
|
|
190
|
+
}),
|
|
145
191
|
refund_mapping: refundMappingBlock,
|
|
146
192
|
payment_detail: paymentDetailBlock,
|
|
147
193
|
refund,
|
|
@@ -157,4 +203,4 @@ async function GET(req, res) {
|
|
|
157
203
|
});
|
|
158
204
|
}
|
|
159
205
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVycy9bb3JkZXJfaWRdL3JlZnVuZC1jb250ZXh0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOERBLGtCQXlNQztBQXRRRCxxREFBOEU7QUFFOUUsMEZBQTZGO0FBRTdGLDBFQUE2RTtBQUU3RSxrRUFHMEM7QUFDMUMsa0ZBSWtEO0FBQ2xELHNGQUF1RjtBQWtDdkY7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQWtCLENBQUE7SUFFN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixJQUFJLEVBQUUsY0FBYztTQUNyQixDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFhLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsMEJBQTBCLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDbkUsSUFBQSxtQ0FBc0IsRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXNCLGVBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2RSxDQUFDLENBQUE7UUFDRixNQUFNLGtCQUFrQixHQUFHLDBCQUEwQixDQUFBO1FBQ3JELE1BQU0sS0FBSyxHQUFHLFlBQVksRUFB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
|
package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/mark-refunded/route.js
CHANGED
|
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const refund_payment_mapping_1 = require("../../../../../modules/refund-payment-mapping");
|
|
6
|
+
const refund_receive_guard_1 = require("../../../../../helpers/refund-receive-guard");
|
|
6
7
|
/**
|
|
7
8
|
* POST /admin/refund-payment-mapping/:return_id/mark-refunded
|
|
8
9
|
* Admin-only: set is_refunded = true for the mapping. Idempotent.
|
|
10
|
+
* Rejected with 400 NOT_ALLOWED while the return is still unreceived.
|
|
9
11
|
*/
|
|
10
12
|
async function POST(req, res) {
|
|
11
13
|
const returnId = req.params.return_id;
|
|
@@ -18,6 +20,34 @@ async function POST(req, res) {
|
|
|
18
20
|
}
|
|
19
21
|
try {
|
|
20
22
|
const mappingService = req.scope.resolve(refund_payment_mapping_1.REFUND_PAYMENT_MAPPING_MODULE);
|
|
23
|
+
const existing = await mappingService.getByReturnId(returnId);
|
|
24
|
+
if (!existing) {
|
|
25
|
+
res.status(404).json({
|
|
26
|
+
message: "Refund payment mapping not found for this return",
|
|
27
|
+
type: "NOT_FOUND",
|
|
28
|
+
});
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (existing.is_refunded) {
|
|
32
|
+
res.status(200).json({
|
|
33
|
+
refund_payment_mapping: existing,
|
|
34
|
+
is_refunded: existing.is_refunded,
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
39
|
+
const ret = await orderModule.retrieveReturn(returnId).catch(() => null);
|
|
40
|
+
if (!ret) {
|
|
41
|
+
res.status(404).json({
|
|
42
|
+
message: "Return not found",
|
|
43
|
+
type: "NOT_FOUND",
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
(0, refund_receive_guard_1.assertReturnReceivedForRefund)({
|
|
48
|
+
id: ret.id,
|
|
49
|
+
status: ret.status,
|
|
50
|
+
});
|
|
21
51
|
const updated = await mappingService.markRefunded(returnId);
|
|
22
52
|
res.status(200).json({
|
|
23
53
|
refund_payment_mapping: updated,
|
|
@@ -34,6 +64,13 @@ async function POST(req, res) {
|
|
|
34
64
|
});
|
|
35
65
|
return;
|
|
36
66
|
}
|
|
67
|
+
if (type === utils_1.MedusaError.Types.NOT_ALLOWED) {
|
|
68
|
+
res.status(400).json({
|
|
69
|
+
message: msg,
|
|
70
|
+
type: "NOT_ALLOWED",
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
37
74
|
res.status(500).json({
|
|
38
75
|
message: "Failed to mark refund payment mapping as refunded",
|
|
39
76
|
error: msg,
|
|
@@ -41,4 +78,4 @@ async function POST(req, res) {
|
|
|
41
78
|
});
|
|
42
79
|
}
|
|
43
80
|
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JlZnVuZC1wYXltZW50LW1hcHBpbmcvW3JldHVybl9pZF0vbWFyay1yZWZ1bmRlZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLG9CQTZFQztBQXZGRCxxREFBZ0U7QUFDaEUsMEZBQTZGO0FBRTdGLHNGQUEyRjtBQUUzRjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFtQixDQUFBO0lBRS9DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsSUFBSSxFQUFFLGNBQWM7U0FDckIsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBb0Msc0RBQTZCLENBQUMsQ0FBQTtRQUMxRyxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxrREFBa0Q7Z0JBQzNELElBQUksRUFBRSxXQUFXO2FBQ2xCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLHNCQUFzQixFQUFFLFFBQVE7Z0JBQ2hDLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVzthQUNsQyxDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFzQixlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekUsTUFBTSxHQUFHLEdBQUcsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsSUFBSSxFQUFFLFdBQVc7YUFDbEIsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFBLG9EQUE2QixFQUFDO1lBQzVCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNWLE1BQU0sRUFBRyxHQUEyQixDQUFDLE1BQU07U0FDNUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzNELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLHNCQUFzQixFQUFFLE9BQU87WUFDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1NBQ2pDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQTtRQUNoRSxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFFLEdBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFekcsSUFBSSxJQUFJLEtBQUssbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxrREFBa0Q7Z0JBQzNELElBQUksRUFBRSxXQUFXO2FBQ2xCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxHQUFHO2dCQUNaLElBQUksRUFBRSxhQUFhO2FBQ3BCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxFQUFFLG1EQUFtRDtZQUM1RCxLQUFLLEVBQUUsR0FBRztZQUNWLElBQUksRUFBRSxnQkFBZ0I7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -4,6 +4,7 @@ exports.GET = void 0;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const returns_1 = require("../../../../helpers/returns");
|
|
6
6
|
const refund_calculation_1 = require("../../../../helpers/refund-calculation");
|
|
7
|
+
const detect_cod_1 = require("../../../../helpers/detect-cod");
|
|
7
8
|
const GET = async (req, res) => {
|
|
8
9
|
const { id } = req.params;
|
|
9
10
|
if (!id) {
|
|
@@ -24,6 +25,7 @@ const GET = async (req, res) => {
|
|
|
24
25
|
const returnData = returnOrder;
|
|
25
26
|
const orderId = returnData.order_id;
|
|
26
27
|
let order = null;
|
|
28
|
+
let orderPayment = null;
|
|
27
29
|
if (orderId) {
|
|
28
30
|
try {
|
|
29
31
|
order = await orderModuleService.retrieveOrder(orderId, {
|
|
@@ -33,6 +35,13 @@ const GET = async (req, res) => {
|
|
|
33
35
|
catch {
|
|
34
36
|
// Order may be deleted or from another tenant/DB
|
|
35
37
|
}
|
|
38
|
+
try {
|
|
39
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
40
|
+
orderPayment = await (0, detect_cod_1.loadOrderPaymentMethod)(orderId, query);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
orderPayment = null;
|
|
44
|
+
}
|
|
36
45
|
}
|
|
37
46
|
const orderData = order;
|
|
38
47
|
const items = (0, returns_1.normalizeReturnItemsForDashboard)(returnData.return_items ?? returnData.items);
|
|
@@ -63,6 +72,7 @@ const GET = async (req, res) => {
|
|
|
63
72
|
shipping_address: orderData.shipping_address,
|
|
64
73
|
billing_address: orderData.billing_address,
|
|
65
74
|
items: orderData.items,
|
|
75
|
+
order_payment: orderPayment,
|
|
66
76
|
}
|
|
67
77
|
: null,
|
|
68
78
|
},
|
|
@@ -78,4 +88,4 @@ const GET = async (req, res) => {
|
|
|
78
88
|
}
|
|
79
89
|
};
|
|
80
90
|
exports.GET = GET;
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldHVybi9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUE4RTtBQUU5RSx5REFBNkc7QUFDN0csK0VBQThFO0FBQzlFLCtEQUF1RTtBQUVoRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFekIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFBO1FBQzFELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBc0IsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWhGLE1BQU0sV0FBVyxHQUFHLE1BQU0sa0JBQWtCO2FBQ3pDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2FBQ2hFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0I7YUFDL0MsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxXQWNsQixDQUFBO1FBRUQsTUFBTSxPQUFPLEdBQUcsVUFB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
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blockRefundUntilReturnReceived = blockRefundUntilReturnReceived;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const refund_receive_guard_1 = require("../../helpers/refund-receive-guard");
|
|
6
|
+
function paymentIdFromRequest(req) {
|
|
7
|
+
const raw = req.params?.id;
|
|
8
|
+
const id = typeof raw === "string" ? raw.trim() : "";
|
|
9
|
+
return id || undefined;
|
|
10
|
+
}
|
|
11
|
+
async function resolveOrderIdForPayment(paymentId, req) {
|
|
12
|
+
const paymentModule = req.scope.resolve(utils_1.Modules.PAYMENT);
|
|
13
|
+
const payments = await paymentModule.listPayments({ id: [paymentId] }, { relations: ["payment_session"], take: 1 });
|
|
14
|
+
const paymentList = Array.isArray(payments) ? payments : [];
|
|
15
|
+
const paymentRow = paymentList[0];
|
|
16
|
+
if (!paymentRow) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const sessionObj = paymentRow.payment_session;
|
|
20
|
+
let collectionId = paymentRow.payment_collection_id?.trim() ||
|
|
21
|
+
sessionObj?.payment_collection_id?.trim() ||
|
|
22
|
+
null;
|
|
23
|
+
if (!collectionId && typeof paymentRow.payment_session_id === "string") {
|
|
24
|
+
const sessionId = paymentRow.payment_session_id.trim();
|
|
25
|
+
if (sessionId) {
|
|
26
|
+
const sessions = await paymentModule.listPaymentSessions({ id: [sessionId] }).catch(() => []);
|
|
27
|
+
const sessionList = Array.isArray(sessions) ? sessions : [];
|
|
28
|
+
const session = sessionList[0];
|
|
29
|
+
if (session?.payment_collection_id) {
|
|
30
|
+
collectionId = session.payment_collection_id;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (!collectionId) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const remoteQuery = req.scope.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
38
|
+
const pcQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
39
|
+
entryPoint: "payment_collection",
|
|
40
|
+
fields: ["id", "order.id"],
|
|
41
|
+
filters: { id: [collectionId] },
|
|
42
|
+
});
|
|
43
|
+
const pcRows = await remoteQuery(pcQuery);
|
|
44
|
+
const pcList = Array.isArray(pcRows) ? pcRows : pcRows ? [pcRows] : [];
|
|
45
|
+
const firstPc = pcList[0];
|
|
46
|
+
let orderId = firstPc?.order?.id ?? null;
|
|
47
|
+
if (!orderId) {
|
|
48
|
+
const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
49
|
+
entryPoint: "order",
|
|
50
|
+
fields: ["id", "payment_collections.id"],
|
|
51
|
+
filters: { payment_collections: { id: [collectionId] } },
|
|
52
|
+
});
|
|
53
|
+
const orderRows = await remoteQuery(orderQuery).catch(() => []);
|
|
54
|
+
const orderList = Array.isArray(orderRows) ? orderRows : orderRows ? [orderRows] : [];
|
|
55
|
+
const firstOrder = orderList[0];
|
|
56
|
+
orderId = firstOrder?.id ?? null;
|
|
57
|
+
}
|
|
58
|
+
return orderId;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Block Medusa core POST /admin/payments/:id/refund while any return on the order
|
|
62
|
+
* is still unreceived. Receive-and-refund inside core workflows is not HTTP and is unaffected.
|
|
63
|
+
*/
|
|
64
|
+
async function blockRefundUntilReturnReceived(req, res, next) {
|
|
65
|
+
const paymentId = paymentIdFromRequest(req);
|
|
66
|
+
if (!paymentId) {
|
|
67
|
+
return next();
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const orderId = await resolveOrderIdForPayment(paymentId, req);
|
|
71
|
+
if (!orderId) {
|
|
72
|
+
return next();
|
|
73
|
+
}
|
|
74
|
+
const orderModule = req.scope.resolve(utils_1.Modules.ORDER);
|
|
75
|
+
const returns = await orderModule.listReturns({ order_id: orderId }, { take: 100 });
|
|
76
|
+
const returnList = Array.isArray(returns) ? returns : [];
|
|
77
|
+
const blocking = (0, refund_receive_guard_1.getUnreceivedReturnBlockingRefund)(returnList.map((row) => ({
|
|
78
|
+
id: row.id,
|
|
79
|
+
status: row.status,
|
|
80
|
+
})));
|
|
81
|
+
if (!blocking) {
|
|
82
|
+
return next();
|
|
83
|
+
}
|
|
84
|
+
res.status(400).json({
|
|
85
|
+
message: (0, refund_receive_guard_1.refundBlockedByReturnMessage)(blocking.status ?? "requested"),
|
|
86
|
+
type: "NOT_ALLOWED",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
const message = err instanceof Error ? err.message : "Failed to validate refund against return status";
|
|
91
|
+
res.status(500).json({
|
|
92
|
+
message,
|
|
93
|
+
type: "INTERNAL_ERROR",
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stcmVmdW5kLXVudGlsLXJldHVybi1yZWNlaXZlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZXMvYmxvY2stcmVmdW5kLXVudGlsLXJldHVybi1yZWNlaXZlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJGQSx3RUE0Q0M7QUE3SEQscURBQTJHO0FBQzNHLDZFQUcyQztBQUUzQyxTQUFTLG9CQUFvQixDQUFDLEdBQWtCO0lBQzlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFBO0lBQzFCLE1BQU0sRUFBRSxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDcEQsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxLQUFLLFVBQVUsd0JBQXdCLENBQ3JDLFNBQWlCLEVBQ2pCLEdBQWtCO0lBRWxCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUF3QixlQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsWUFBWSxDQUMvQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQ25CLEVBQUUsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQzVDLENBQUE7SUFDRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFtRCxDQUFBO0lBQ25GLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FB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
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
const block_refund_until_return_received_1 = require("./middlewares/block-refund-until-return-received");
|
|
4
5
|
const validators_1 = require("./store/returns/validators");
|
|
5
6
|
const cancel_order_1 = require("./store/validators/cancel-order");
|
|
6
7
|
exports.default = (0, http_1.defineMiddlewares)({
|
|
7
8
|
routes: [
|
|
9
|
+
{
|
|
10
|
+
matcher: "/admin/payments/:id/refund",
|
|
11
|
+
method: "POST",
|
|
12
|
+
middlewares: [block_refund_until_return_received_1.blockRefundUntilReturnReceived],
|
|
13
|
+
},
|
|
8
14
|
{
|
|
9
15
|
matcher: "/store/returns",
|
|
10
16
|
method: "POST",
|
|
@@ -22,4 +28,4 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
22
28
|
},
|
|
23
29
|
],
|
|
24
30
|
});
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBR2lDO0FBQ2pDLHlHQUFpRztBQUNqRywyREFBb0U7QUFDcEUsa0VBQTRFO0FBRTVFLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsNEJBQTRCO1lBQ3JDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLENBQUMsbUVBQThCLENBQUM7U0FDOUM7UUFDRDtZQUNFLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLG9DQUF1QixDQUFDLENBQUM7U0FDakU7UUFDRDtZQUNFLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHlDQUEwQixDQUFDLENBQUM7U0FDcEU7UUFDRDtZQUNFLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLCtCQUF3QixFQUFDLHlDQUEwQixDQUFDLENBQUM7U0FDcEU7S0FDRjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -1,13 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCodProviderId = isCodProviderId;
|
|
4
|
+
exports.formatPaymentProviderLabel = formatPaymentProviderLabel;
|
|
5
|
+
exports.loadOrderPaymentMethod = loadOrderPaymentMethod;
|
|
3
6
|
exports.detectCodOrder = detectCodOrder;
|
|
4
7
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* provider_id lives on the `payment` table. We first fetch the order's
|
|
8
|
-
* payment_collection IDs, then query the payment entity directly.
|
|
8
|
+
* True when the Medusa payment provider is cash-on-delivery.
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
function isCodProviderId(providerId) {
|
|
11
|
+
const id = providerId.toLowerCase();
|
|
12
|
+
return id === "pp_system_default" || id.includes("cod") || id.includes("cash");
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Human-readable label for a Medusa payment provider_id (e.g. pp_razorpay_razorpay).
|
|
16
|
+
*/
|
|
17
|
+
function formatPaymentProviderLabel(providerId) {
|
|
18
|
+
const raw = providerId.trim();
|
|
19
|
+
if (!raw) {
|
|
20
|
+
return "Unknown";
|
|
21
|
+
}
|
|
22
|
+
if (isCodProviderId(raw)) {
|
|
23
|
+
return "Cash on Delivery";
|
|
24
|
+
}
|
|
25
|
+
const withoutPrefix = raw.replace(/^pp_/i, "");
|
|
26
|
+
const parts = withoutPrefix.split(/[_-]+/).filter(Boolean);
|
|
27
|
+
const unique = [];
|
|
28
|
+
for (const part of parts) {
|
|
29
|
+
const lower = part.toLowerCase();
|
|
30
|
+
if (!unique.includes(lower)) {
|
|
31
|
+
unique.push(lower);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const pretty = unique
|
|
35
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
36
|
+
.join(" ");
|
|
37
|
+
if (pretty.toLowerCase() === "paypal") {
|
|
38
|
+
return "PayPal";
|
|
39
|
+
}
|
|
40
|
+
return pretty || raw;
|
|
41
|
+
}
|
|
42
|
+
function toProviderRows(rows) {
|
|
43
|
+
return Array.isArray(rows) ? rows : [];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Load the checkout payment used on an order (payment row, then payment_session).
|
|
47
|
+
*/
|
|
48
|
+
async function loadOrderPaymentMethod(orderId, query) {
|
|
11
49
|
try {
|
|
12
50
|
const { data: orderData } = await query.graph({
|
|
13
51
|
entity: "order",
|
|
@@ -16,20 +54,50 @@ async function detectCodOrder(orderId, query) {
|
|
|
16
54
|
});
|
|
17
55
|
const collections = (orderData?.[0]?.payment_collections ?? []);
|
|
18
56
|
const collectionIds = collections.map((pc) => pc.id).filter(Boolean);
|
|
19
|
-
if (!collectionIds.length)
|
|
20
|
-
return
|
|
57
|
+
if (!collectionIds.length) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
21
60
|
const { data: payments } = await query.graph({
|
|
22
61
|
entity: "payment",
|
|
23
62
|
fields: ["id", "provider_id"],
|
|
24
63
|
filters: { payment_collection_id: collectionIds },
|
|
25
64
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
65
|
+
let rows = toProviderRows(payments).filter((row) => (row.provider_id ?? "").trim().length > 0);
|
|
66
|
+
if (!rows.length) {
|
|
67
|
+
const { data: sessions } = await query.graph({
|
|
68
|
+
entity: "payment_session",
|
|
69
|
+
fields: ["id", "provider_id"],
|
|
70
|
+
filters: { payment_collection_id: collectionIds },
|
|
71
|
+
});
|
|
72
|
+
rows = toProviderRows(sessions).filter((row) => (row.provider_id ?? "").trim().length > 0);
|
|
73
|
+
}
|
|
74
|
+
if (!rows.length) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const primary = rows.find((row) => !isCodProviderId(row.provider_id ?? "")) ?? rows[0];
|
|
78
|
+
const providerId = (primary?.provider_id ?? "").trim();
|
|
79
|
+
if (!providerId) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
payment_id: typeof primary?.id === "string" ? primary.id : null,
|
|
84
|
+
provider_id: providerId,
|
|
85
|
+
label: formatPaymentProviderLabel(providerId),
|
|
86
|
+
is_cod: isCodProviderId(providerId),
|
|
87
|
+
};
|
|
30
88
|
}
|
|
31
89
|
catch {
|
|
32
|
-
return
|
|
90
|
+
return null;
|
|
33
91
|
}
|
|
34
92
|
}
|
|
35
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Returns true if the order was placed using a cash-on-delivery payment provider.
|
|
95
|
+
*
|
|
96
|
+
* provider_id lives on the `payment` table. We first fetch the order's
|
|
97
|
+
* payment_collection IDs, then query the payment entity directly.
|
|
98
|
+
*/
|
|
99
|
+
async function detectCodOrder(orderId, query) {
|
|
100
|
+
const method = await loadOrderPaymentMethod(orderId, query);
|
|
101
|
+
return method?.is_cod ?? false;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWNvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oZWxwZXJzL2RldGVjdC1jb2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsMENBR0M7QUFLRCxnRUF3QkM7QUFTRCx3REFzREM7QUFRRCx3Q0FHQztBQTdHRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxVQUFrQjtJQUNoRCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDbkMsT0FBTyxFQUFFLEtBQUssbUJBQW1CLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2hGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLFVBQWtCO0lBQzNELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMxRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUE7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FB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
|
|
@@ -19,4 +19,5 @@ __exportStar(require("./order-exchange-data"), exports);
|
|
|
19
19
|
__exportStar(require("./return-exchange-guard"), exports);
|
|
20
20
|
__exportStar(require("./order-line-presentation"), exports);
|
|
21
21
|
__exportStar(require("./refund-calculation"), exports);
|
|
22
|
-
|
|
22
|
+
__exportStar(require("./refund-receive-guard"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXVCO0FBQ3ZCLHdEQUFxQztBQUNyQywwREFBdUM7QUFDdkMsNERBQXlDO0FBQ3pDLHVEQUFvQztBQUNwQyx5REFBc0MifQ==
|