medusa-pos-plugin 0.0.1
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 +23 -0
- package/.medusa/server/src/admin/index.mjs +24 -0
- package/.medusa/server/src/api/admin/pos/catalog/route.js +139 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/confirm-lite/route.js +41 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/customer/route.js +68 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/finalize/route.js +424 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/route.js +452 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/items/update/route.js +137 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/manual-discount/route.js +386 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/promotions/route.js +59 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/route.js +178 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/[id]/wallet-debit/route.js +220 -0
- package/.medusa/server/src/api/admin/pos/draft-orders/route.js +193 -0
- package/.medusa/server/src/api/admin/pos/manual-discounts/route.js +76 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/fulfill/route.js +103 -0
- package/.medusa/server/src/api/admin/pos/orders/[id]/returns/route.js +512 -0
- package/.medusa/server/src/api/admin/pos/orders/fulfill-pos-items.js +63 -0
- package/.medusa/server/src/api/admin/pos/orders/validators.js +62 -0
- package/.medusa/server/src/api/admin/pos/payments/config/route.js +15 -0
- package/.medusa/server/src/api/admin/pos/payments/device/[orderId]/route.js +39 -0
- package/.medusa/server/src/api/admin/pos/payments/device/cancel/route.js +27 -0
- package/.medusa/server/src/api/admin/pos/payments/device/route.js +107 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/close/route.js +36 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/[qrId]/route.js +42 -0
- package/.medusa/server/src/api/admin/pos/payments/qr/route.js +78 -0
- package/.medusa/server/src/index.js +8 -0
- package/.medusa/server/src/types.js +3 -0
- package/.medusa/server/src/utils/pos-draft-edit.js +178 -0
- package/.medusa/server/src/utils/pos-finalize.js +166 -0
- package/.medusa/server/src/utils/pos-inventory.js +265 -0
- package/.medusa/server/src/utils/pos-returns.js +339 -0
- package/.medusa/server/src/utils/razorpay-pos-device.js +122 -0
- package/.medusa/server/src/utils/razorpay-pos.js +134 -0
- package/README.md +39 -0
- package/index.js +9 -0
- package/package.json +82 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.regionFallbackCountry = regionFallbackCountry;
|
|
4
|
+
exports.buildStoreShippingAddress = buildStoreShippingAddress;
|
|
5
|
+
exports.pickCustomerBillingAddress = pickCustomerBillingAddress;
|
|
6
|
+
exports.buildPosPaymentMetadata = buildPosPaymentMetadata;
|
|
7
|
+
exports.resolvePosPayableTotal = resolvePosPayableTotal;
|
|
8
|
+
exports.paymentCollectionNeedsMarkPaid = paymentCollectionNeedsMarkPaid;
|
|
9
|
+
exports.shouldApplyAutoPromotions = shouldApplyAutoPromotions;
|
|
10
|
+
exports.orderIsDraft = orderIsDraft;
|
|
11
|
+
exports.readAddress1 = readAddress1;
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
14
|
+
}
|
|
15
|
+
function regionFallbackCountry(region) {
|
|
16
|
+
const iso = region?.countries?.find((c) => typeof c?.iso_2 === "string" && c.iso_2.trim())
|
|
17
|
+
?.iso_2;
|
|
18
|
+
return (iso || "in").toLowerCase();
|
|
19
|
+
}
|
|
20
|
+
function buildStoreShippingAddress(stockLocation, region) {
|
|
21
|
+
if (!stockLocation)
|
|
22
|
+
return null;
|
|
23
|
+
const addr = stockLocation.address;
|
|
24
|
+
const storeName = (stockLocation.name || "Store").trim() || "Store";
|
|
25
|
+
const address1 = (addr?.address_1 || "").trim() || storeName;
|
|
26
|
+
const country = ((addr?.country_code || "").trim() || regionFallbackCountry(region)).toLowerCase();
|
|
27
|
+
return {
|
|
28
|
+
first_name: "POS",
|
|
29
|
+
last_name: "Pickup",
|
|
30
|
+
company: storeName,
|
|
31
|
+
address_1: address1,
|
|
32
|
+
address_2: addr?.address_2?.trim() || undefined,
|
|
33
|
+
city: addr?.city?.trim() || undefined,
|
|
34
|
+
province: addr?.province?.trim() || undefined,
|
|
35
|
+
postal_code: addr?.postal_code?.trim() || undefined,
|
|
36
|
+
country_code: country,
|
|
37
|
+
phone: addr?.phone?.trim() || undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function pickCustomerBillingAddress(customer, storeAddress) {
|
|
41
|
+
const addresses = Array.isArray(customer?.addresses) ? customer.addresses : [];
|
|
42
|
+
const chosen = addresses.find((address) => address.is_default_billing || address.id === customer?.default_billing_address_id) || addresses[0];
|
|
43
|
+
if (!chosen)
|
|
44
|
+
return storeAddress ?? undefined;
|
|
45
|
+
return {
|
|
46
|
+
first_name: chosen.first_name ?? undefined,
|
|
47
|
+
last_name: chosen.last_name ?? undefined,
|
|
48
|
+
company: chosen.company ?? undefined,
|
|
49
|
+
address_1: chosen.address_1 || storeAddress?.address_1 || "Store",
|
|
50
|
+
address_2: chosen.address_2 ?? undefined,
|
|
51
|
+
postal_code: chosen.postal_code ?? undefined,
|
|
52
|
+
city: chosen.city ?? undefined,
|
|
53
|
+
province: chosen.province ?? undefined,
|
|
54
|
+
country_code: (chosen.country_code ||
|
|
55
|
+
storeAddress?.country_code ||
|
|
56
|
+
"in").toLowerCase(),
|
|
57
|
+
phone: chosen.phone ?? undefined,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function buildPosPaymentMetadata(input) {
|
|
61
|
+
const itemCount = typeof input.item_count === "number" && Number.isFinite(input.item_count)
|
|
62
|
+
? Math.max(0, Math.floor(input.item_count))
|
|
63
|
+
: undefined;
|
|
64
|
+
const durationMs = typeof input.checkout_duration_ms === "number" && Number.isFinite(input.checkout_duration_ms)
|
|
65
|
+
? Math.max(0, Math.round(input.checkout_duration_ms))
|
|
66
|
+
: undefined;
|
|
67
|
+
return {
|
|
68
|
+
source: "pos",
|
|
69
|
+
pos_payment_method: input.payment_method,
|
|
70
|
+
...(typeof input.wallet_amount === "number" && input.wallet_amount > 0
|
|
71
|
+
? { pos_wallet_amount: input.wallet_amount }
|
|
72
|
+
: {}),
|
|
73
|
+
...(typeof input.charged_total === "number" && input.charged_total > 0
|
|
74
|
+
? { pos_charged_total: Math.round(input.charged_total * 100) / 100 }
|
|
75
|
+
: {}),
|
|
76
|
+
pos_completed_at: new Date().toISOString(),
|
|
77
|
+
...(input.razorpay_qr_id ? { razorpay_qr_id: input.razorpay_qr_id } : {}),
|
|
78
|
+
...(input.razorpay_payment_id ? { razorpay_payment_id: input.razorpay_payment_id } : {}),
|
|
79
|
+
...(input.cashier_id ? { pos_cashier_id: input.cashier_id } : {}),
|
|
80
|
+
...(input.location_id ? { pos_location_id: input.location_id } : {}),
|
|
81
|
+
...(input.sales_channel_id ? { pos_sales_channel_id: input.sales_channel_id } : {}),
|
|
82
|
+
...(input.cart_opened_at ? { pos_cart_opened_at: input.cart_opened_at } : {}),
|
|
83
|
+
...(itemCount != null ? { pos_item_count: itemCount } : {}),
|
|
84
|
+
...(durationMs != null ? { pos_checkout_duration_ms: durationMs } : {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function asAmount(value) {
|
|
88
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
89
|
+
return Number.isFinite(n) ? n : 0;
|
|
90
|
+
}
|
|
91
|
+
/** Payable after POSMAN — Medusa `total` is often still the pre-discount list. */
|
|
92
|
+
function resolvePosPayableTotal(order) {
|
|
93
|
+
if (!order)
|
|
94
|
+
return 0;
|
|
95
|
+
const total = asAmount(order.total);
|
|
96
|
+
const meta = isRecord(order.metadata) ? order.metadata : {};
|
|
97
|
+
const charged = asAmount(meta.pos_charged_total);
|
|
98
|
+
if (charged > 0)
|
|
99
|
+
return Math.round(charged * 100) / 100;
|
|
100
|
+
const discount = asAmount(order.discount_total);
|
|
101
|
+
const subtotal = asAmount(order.subtotal) || asAmount(order.item_total);
|
|
102
|
+
const items = Array.isArray(order.items) ? order.items : [];
|
|
103
|
+
const lineGross = items.reduce((sum, item) => {
|
|
104
|
+
if (!isRecord(item))
|
|
105
|
+
return sum;
|
|
106
|
+
const qty = asAmount(item.quantity) || 1;
|
|
107
|
+
const itemMeta = isRecord(item.metadata) ? item.metadata : {};
|
|
108
|
+
const original = asAmount(itemMeta.original_price);
|
|
109
|
+
const unit = original > 0 ? original : asAmount(item.unit_price);
|
|
110
|
+
return sum + unit * qty;
|
|
111
|
+
}, 0);
|
|
112
|
+
const gross = subtotal > 0 ? subtotal : lineGross > 0 ? lineGross : total;
|
|
113
|
+
let posmanAdj = 0;
|
|
114
|
+
for (const item of items) {
|
|
115
|
+
if (!isRecord(item) || !Array.isArray(item.adjustments))
|
|
116
|
+
continue;
|
|
117
|
+
for (const adj of item.adjustments) {
|
|
118
|
+
if (!isRecord(adj))
|
|
119
|
+
continue;
|
|
120
|
+
const code = typeof adj.code === "string" ? adj.code : "";
|
|
121
|
+
if (!code.startsWith("POSMAN-"))
|
|
122
|
+
continue;
|
|
123
|
+
posmanAdj += Math.abs(asAmount(adj.amount));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
let metaOff = 0;
|
|
127
|
+
const posMan = meta.pos_manual_discount;
|
|
128
|
+
if (isRecord(posMan)) {
|
|
129
|
+
if (posMan.discount_type === "percentage") {
|
|
130
|
+
const pct = asAmount(posMan.discount_value);
|
|
131
|
+
if (pct > 0 && pct <= 100 && gross > 0) {
|
|
132
|
+
metaOff = Math.round(((gross * pct) / 100) * 100) / 100;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
metaOff = asAmount(posMan.discount_value ?? posMan.amount);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const off = Math.max(discount, posmanAdj, metaOff);
|
|
140
|
+
if (off <= 0)
|
|
141
|
+
return total;
|
|
142
|
+
if (gross > 0 && total + 0.05 < gross)
|
|
143
|
+
return total;
|
|
144
|
+
return Math.round(Math.max(0, (gross || total) - off) * 100) / 100;
|
|
145
|
+
}
|
|
146
|
+
function paymentCollectionNeedsMarkPaid(status) {
|
|
147
|
+
const normalized = String(status || "").toLowerCase();
|
|
148
|
+
return normalized !== "completed" && normalized !== "authorized" && normalized !== "captured";
|
|
149
|
+
}
|
|
150
|
+
/** Apply autos only when an open edit was just confirmed (items may have changed). */
|
|
151
|
+
function shouldApplyAutoPromotions(confirmedOpenEdit) {
|
|
152
|
+
return confirmedOpenEdit;
|
|
153
|
+
}
|
|
154
|
+
function orderIsDraft(order) {
|
|
155
|
+
if (!order)
|
|
156
|
+
return false;
|
|
157
|
+
if (order.is_draft_order === true)
|
|
158
|
+
return true;
|
|
159
|
+
return String(order.status || "").toLowerCase() === "draft";
|
|
160
|
+
}
|
|
161
|
+
function readAddress1(value) {
|
|
162
|
+
if (!isRecord(value))
|
|
163
|
+
return "";
|
|
164
|
+
return typeof value.address_1 === "string" ? value.address_1.trim() : "";
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zLWZpbmFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Bvcy1maW5hbGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdDQSxzREFNQztBQUVELDhEQWtDQztBQUVELGdFQW1DQztBQUVELDBEQXlDQztBQVFELHdEQWdEQztBQUVELHdFQUdDO0FBR0QsOERBRUM7QUFFRCxvQ0FJQztBQUVELG9DQUdDO0FBM01ELFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RSxDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQ25DLE1BQXVFO0lBRXZFLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEYsRUFBRSxLQUFLLENBQUE7SUFDVCxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ3BDLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FDdkMsYUFXb0IsRUFDcEIsTUFBdUU7SUFFdkUsSUFBSSxDQUFDLGFBQWE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUUvQixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFBO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUE7SUFDbkUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FB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
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.capPosInventoryAdd = capPosInventoryAdd;
|
|
4
|
+
exports.availabilityFromVariantRow = availabilityFromVariantRow;
|
|
5
|
+
exports.loadPosVariantAvailability = loadPosVariantAvailability;
|
|
6
|
+
exports.findPosInventoryShortage = findPosInventoryShortage;
|
|
7
|
+
exports.stampCartInventory = stampCartInventory;
|
|
8
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
9
|
+
const pos_draft_edit_1 = require("./pos-draft-edit");
|
|
10
|
+
function isRecord(value) {
|
|
11
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
12
|
+
}
|
|
13
|
+
function asBool(value, fallback) {
|
|
14
|
+
if (typeof value === "boolean")
|
|
15
|
+
return value;
|
|
16
|
+
if (value === "true" || value === "t" || value === 1)
|
|
17
|
+
return true;
|
|
18
|
+
if (value === "false" || value === "f" || value === 0)
|
|
19
|
+
return false;
|
|
20
|
+
return fallback;
|
|
21
|
+
}
|
|
22
|
+
function levelsFromUnknown(value) {
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
return value.filter(isRecord);
|
|
25
|
+
}
|
|
26
|
+
if (isRecord(value) && Array.isArray(value.location_levels)) {
|
|
27
|
+
return value.location_levels.filter(isRecord);
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
function availableFromLevel(level) {
|
|
32
|
+
if (!level)
|
|
33
|
+
return 0;
|
|
34
|
+
if (level.available_quantity != null)
|
|
35
|
+
return Math.max(0, Math.floor((0, pos_draft_edit_1.toAmount)(level.available_quantity)));
|
|
36
|
+
const stocked = (0, pos_draft_edit_1.toAmount)(level.stocked_quantity);
|
|
37
|
+
const reserved = (0, pos_draft_edit_1.toAmount)(level.reserved_quantity);
|
|
38
|
+
return Math.max(0, Math.floor(stocked - reserved));
|
|
39
|
+
}
|
|
40
|
+
function capPosInventoryAdd(input) {
|
|
41
|
+
const existingQty = Math.max(0, Math.floor(input.existingQty || 0));
|
|
42
|
+
const requestedAdd = Math.max(0, Math.floor(input.requestedAdd || 0));
|
|
43
|
+
if (requestedAdd <= 0) {
|
|
44
|
+
return {
|
|
45
|
+
allowedAdd: 0,
|
|
46
|
+
targetQty: existingQty,
|
|
47
|
+
capped: false,
|
|
48
|
+
blocked: false,
|
|
49
|
+
available: input.available,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (!input.manageInventory || input.allowBackorder || input.available == null) {
|
|
53
|
+
return {
|
|
54
|
+
allowedAdd: requestedAdd,
|
|
55
|
+
targetQty: existingQty + requestedAdd,
|
|
56
|
+
capped: false,
|
|
57
|
+
blocked: false,
|
|
58
|
+
available: input.available,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const available = Math.max(0, Math.floor(input.available));
|
|
62
|
+
const remaining = Math.max(0, available - existingQty);
|
|
63
|
+
const allowedAdd = Math.min(requestedAdd, remaining);
|
|
64
|
+
return {
|
|
65
|
+
allowedAdd,
|
|
66
|
+
targetQty: existingQty + allowedAdd,
|
|
67
|
+
capped: allowedAdd < requestedAdd,
|
|
68
|
+
blocked: allowedAdd === 0,
|
|
69
|
+
available,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function availabilityFromVariantRow(row, locationId) {
|
|
73
|
+
const manageInventory = asBool(row.manage_inventory, true);
|
|
74
|
+
const allowBackorder = asBool(row.allow_backorder, false);
|
|
75
|
+
const links = Array.isArray(row.inventory_items) ? row.inventory_items.filter(isRecord) : [];
|
|
76
|
+
const levels = links.flatMap((link) => {
|
|
77
|
+
const inventory = isRecord(link.inventory) ? link.inventory : link;
|
|
78
|
+
return levelsFromUnknown(inventory.location_levels ?? inventory);
|
|
79
|
+
});
|
|
80
|
+
const atLocation = locationId
|
|
81
|
+
? levels.find((level) => String(level.location_id || "") === locationId)
|
|
82
|
+
: undefined;
|
|
83
|
+
let available = null;
|
|
84
|
+
if (atLocation) {
|
|
85
|
+
available = availableFromLevel(atLocation);
|
|
86
|
+
}
|
|
87
|
+
else if (locationId && levels.length > 0) {
|
|
88
|
+
available = 0;
|
|
89
|
+
}
|
|
90
|
+
else if (levels.length > 0) {
|
|
91
|
+
available = levels.reduce((sum, level) => sum + availableFromLevel(level), 0);
|
|
92
|
+
}
|
|
93
|
+
else if (row.inventory_quantity != null) {
|
|
94
|
+
available = Math.max(0, Math.floor((0, pos_draft_edit_1.toAmount)(row.inventory_quantity)));
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
manage_inventory: manageInventory,
|
|
98
|
+
allow_backorder: allowBackorder,
|
|
99
|
+
available,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async function loadPosVariantAvailability(scope, variantIds, locationId) {
|
|
103
|
+
const result = new Map();
|
|
104
|
+
const ids = Array.from(new Set(variantIds.filter(Boolean)));
|
|
105
|
+
if (!ids.length)
|
|
106
|
+
return result;
|
|
107
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
108
|
+
try {
|
|
109
|
+
const { data = [] } = await query.graph({
|
|
110
|
+
entity: "product_variant",
|
|
111
|
+
fields: [
|
|
112
|
+
"id",
|
|
113
|
+
"manage_inventory",
|
|
114
|
+
"allow_backorder",
|
|
115
|
+
"inventory_quantity",
|
|
116
|
+
"inventory_items.inventory_item_id",
|
|
117
|
+
"inventory_items.inventory.id",
|
|
118
|
+
"inventory_items.inventory.location_levels.location_id",
|
|
119
|
+
"inventory_items.inventory.location_levels.available_quantity",
|
|
120
|
+
"inventory_items.inventory.location_levels.stocked_quantity",
|
|
121
|
+
"inventory_items.inventory.location_levels.reserved_quantity",
|
|
122
|
+
],
|
|
123
|
+
filters: { id: ids },
|
|
124
|
+
});
|
|
125
|
+
for (const row of Array.isArray(data) ? data : []) {
|
|
126
|
+
if (!isRecord(row) || typeof row.id !== "string")
|
|
127
|
+
continue;
|
|
128
|
+
result.set(row.id, availabilityFromVariantRow(row, locationId));
|
|
129
|
+
}
|
|
130
|
+
const unresolved = ids.filter((id) => {
|
|
131
|
+
const stock = result.get(id);
|
|
132
|
+
return stock?.manage_inventory !== false && stock?.available == null;
|
|
133
|
+
});
|
|
134
|
+
if (locationId && unresolved.length) {
|
|
135
|
+
const itemIds = (Array.isArray(data) ? data : [])
|
|
136
|
+
.filter((row) => isRecord(row) && unresolved.includes(String(row.id)))
|
|
137
|
+
.flatMap((row) => {
|
|
138
|
+
const links = Array.isArray(row.inventory_items)
|
|
139
|
+
? row.inventory_items
|
|
140
|
+
: [];
|
|
141
|
+
return links
|
|
142
|
+
.filter(isRecord)
|
|
143
|
+
.map((link) => typeof link.inventory_item_id === "string"
|
|
144
|
+
? link.inventory_item_id
|
|
145
|
+
: isRecord(link.inventory) && typeof link.inventory.id === "string"
|
|
146
|
+
? link.inventory.id
|
|
147
|
+
: "")
|
|
148
|
+
.filter(Boolean);
|
|
149
|
+
});
|
|
150
|
+
if (itemIds.length) {
|
|
151
|
+
try {
|
|
152
|
+
const levels = await query.graph({
|
|
153
|
+
entity: "inventory_level",
|
|
154
|
+
fields: [
|
|
155
|
+
"inventory_item_id",
|
|
156
|
+
"location_id",
|
|
157
|
+
"available_quantity",
|
|
158
|
+
"stocked_quantity",
|
|
159
|
+
"reserved_quantity",
|
|
160
|
+
],
|
|
161
|
+
filters: {
|
|
162
|
+
location_id: locationId,
|
|
163
|
+
inventory_item_id: itemIds,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const byItem = new Map();
|
|
167
|
+
for (const level of Array.isArray(levels.data) ? levels.data : []) {
|
|
168
|
+
if (!isRecord(level) || typeof level.inventory_item_id !== "string")
|
|
169
|
+
continue;
|
|
170
|
+
if (String(level.location_id || "") !== locationId)
|
|
171
|
+
continue;
|
|
172
|
+
const available = level.available_quantity != null
|
|
173
|
+
? Math.max(0, Math.floor((0, pos_draft_edit_1.toAmount)(level.available_quantity)))
|
|
174
|
+
: Math.max(0, Math.floor((0, pos_draft_edit_1.toAmount)(level.stocked_quantity) - (0, pos_draft_edit_1.toAmount)(level.reserved_quantity)));
|
|
175
|
+
byItem.set(level.inventory_item_id, available);
|
|
176
|
+
}
|
|
177
|
+
for (const row of Array.isArray(data) ? data : []) {
|
|
178
|
+
if (!isRecord(row) || typeof row.id !== "string")
|
|
179
|
+
continue;
|
|
180
|
+
const current = result.get(row.id);
|
|
181
|
+
if (!current || current.available != null)
|
|
182
|
+
continue;
|
|
183
|
+
const links = Array.isArray(row.inventory_items) ? row.inventory_items.filter(isRecord) : [];
|
|
184
|
+
let available = null;
|
|
185
|
+
for (const link of links) {
|
|
186
|
+
const itemId = typeof link.inventory_item_id === "string"
|
|
187
|
+
? link.inventory_item_id
|
|
188
|
+
: isRecord(link.inventory) && typeof link.inventory.id === "string"
|
|
189
|
+
? link.inventory.id
|
|
190
|
+
: "";
|
|
191
|
+
if (itemId && byItem.has(itemId)) {
|
|
192
|
+
available = (available || 0) + (byItem.get(itemId) || 0);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (available != null) {
|
|
196
|
+
result.set(row.id, { ...current, available });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
console.warn("[pos inventory] inventory_level fallback failed", error);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
console.warn("[pos inventory] variant availability query failed", error);
|
|
208
|
+
}
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
function findPosInventoryShortage(items, availability) {
|
|
212
|
+
for (const item of items) {
|
|
213
|
+
const variantId = typeof item.variant_id === "string"
|
|
214
|
+
? item.variant_id
|
|
215
|
+
: typeof item.variant?.id === "string"
|
|
216
|
+
? item.variant.id
|
|
217
|
+
: "";
|
|
218
|
+
if (!variantId)
|
|
219
|
+
continue;
|
|
220
|
+
const stock = availability.get(variantId);
|
|
221
|
+
if (!stock || stock.manage_inventory === false || stock.allow_backorder)
|
|
222
|
+
continue;
|
|
223
|
+
const requested = Math.max(0, Math.floor((0, pos_draft_edit_1.toAmount)(item.quantity)));
|
|
224
|
+
const cap = capPosInventoryAdd({
|
|
225
|
+
existingQty: 0,
|
|
226
|
+
requestedAdd: requested,
|
|
227
|
+
manageInventory: true,
|
|
228
|
+
allowBackorder: false,
|
|
229
|
+
available: stock.available,
|
|
230
|
+
});
|
|
231
|
+
if (requested > 0 && cap.allowedAdd < requested) {
|
|
232
|
+
return {
|
|
233
|
+
variant_id: variantId,
|
|
234
|
+
requested_qty: requested,
|
|
235
|
+
allowed_qty: cap.allowedAdd,
|
|
236
|
+
available: cap.available,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
function stampCartInventory(order, availability) {
|
|
243
|
+
if (!order || !Array.isArray(order.items))
|
|
244
|
+
return order;
|
|
245
|
+
return {
|
|
246
|
+
...order,
|
|
247
|
+
items: order.items.map((item) => {
|
|
248
|
+
const variantId = typeof item.variant_id === "string" ? item.variant_id : item.variant?.id;
|
|
249
|
+
const stock = variantId ? availability.get(variantId) : undefined;
|
|
250
|
+
if (!stock)
|
|
251
|
+
return item;
|
|
252
|
+
return {
|
|
253
|
+
...item,
|
|
254
|
+
variant: {
|
|
255
|
+
...(item.variant || {}),
|
|
256
|
+
id: item.variant?.id || variantId,
|
|
257
|
+
manage_inventory: stock.manage_inventory,
|
|
258
|
+
allow_backorder: stock.allow_backorder,
|
|
259
|
+
...(stock.available != null ? { inventory_quantity: stock.available } : {}),
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zLWludmVudG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wb3MtaW52ZW50b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOERBLGdEQWtDQztBQUVELGdFQWdDQztBQUVELGdFQThHQztBQUVELDREQWdDQztBQUVELGdEQXVCQztBQTVTRCxxREFBcUU7QUFDckUscURBQTJDO0FBK0IzQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtJQUMvQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUM1QyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQ2pFLElBQUksS0FBSyxLQUFLLE9BQU8sSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDbkUsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUN2QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDNUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFD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
|