medusa-pos-plugin 0.0.5 → 0.0.6
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.
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const pos_order_list_1 = require("../../../../utils/pos-order-list");
|
|
6
|
+
const LIST_FIELDS = [
|
|
7
|
+
"id",
|
|
8
|
+
"display_id",
|
|
9
|
+
"created_at",
|
|
10
|
+
"updated_at",
|
|
11
|
+
"status",
|
|
12
|
+
"payment_status",
|
|
13
|
+
"fulfillment_status",
|
|
14
|
+
"email",
|
|
15
|
+
"currency_code",
|
|
16
|
+
"total",
|
|
17
|
+
"subtotal",
|
|
18
|
+
"item_total",
|
|
19
|
+
"discount_total",
|
|
20
|
+
"metadata",
|
|
21
|
+
"customer.id",
|
|
22
|
+
"customer.email",
|
|
23
|
+
"customer.phone",
|
|
24
|
+
"customer.first_name",
|
|
25
|
+
"customer.last_name",
|
|
26
|
+
"items.id",
|
|
27
|
+
"items.quantity",
|
|
28
|
+
"items.unit_price",
|
|
29
|
+
"items.total",
|
|
30
|
+
"items.subtotal",
|
|
31
|
+
"items.metadata",
|
|
32
|
+
"items.adjustments.code",
|
|
33
|
+
"items.adjustments.amount",
|
|
34
|
+
];
|
|
35
|
+
function orderByIds(orders, ids) {
|
|
36
|
+
const byId = new Map();
|
|
37
|
+
for (const order of orders) {
|
|
38
|
+
if (order && typeof order === "object" && "id" in order) {
|
|
39
|
+
const id = order.id;
|
|
40
|
+
if (typeof id === "string")
|
|
41
|
+
byId.set(id, order);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return ids.map((id) => byId.get(id)).filter(Boolean);
|
|
45
|
+
}
|
|
46
|
+
async function GET(req, res) {
|
|
47
|
+
const queryParams = (req.query || {});
|
|
48
|
+
const { limit, offset } = (0, pos_order_list_1.parseLimitOffset)(queryParams.limit, queryParams.offset);
|
|
49
|
+
const filters = (0, pos_order_list_1.buildPosOrderListFilters)(queryParams);
|
|
50
|
+
const includeSalesTotal = (0, pos_order_list_1.truthyFlag)(queryParams.include_sales_total);
|
|
51
|
+
const hasOccurredRange = !!(filters.from || filters.to);
|
|
52
|
+
try {
|
|
53
|
+
const knex = req.scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
54
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
55
|
+
let orders = [];
|
|
56
|
+
let count = 0;
|
|
57
|
+
if (hasOccurredRange) {
|
|
58
|
+
const page = await (0, pos_order_list_1.listOrderIdsByOccurredAt)(knex, filters, limit, offset);
|
|
59
|
+
count = page.count;
|
|
60
|
+
if (page.ids.length > 0) {
|
|
61
|
+
const { data = [] } = await query.graph({
|
|
62
|
+
entity: "order",
|
|
63
|
+
fields: LIST_FIELDS,
|
|
64
|
+
filters: { id: page.ids },
|
|
65
|
+
});
|
|
66
|
+
orders = orderByIds(Array.isArray(data) ? data : [], page.ids);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// No date range: page by created_at (Medusa default).
|
|
71
|
+
const graphFilters = {};
|
|
72
|
+
if (filters.statuses.length === 1)
|
|
73
|
+
graphFilters.status = filters.statuses[0];
|
|
74
|
+
else if (filters.statuses.length > 1)
|
|
75
|
+
graphFilters.status = filters.statuses;
|
|
76
|
+
if (filters.customerIds.length === 1)
|
|
77
|
+
graphFilters.customer_id = filters.customerIds[0];
|
|
78
|
+
else if (filters.customerIds.length > 1)
|
|
79
|
+
graphFilters.customer_id = filters.customerIds;
|
|
80
|
+
if (filters.q)
|
|
81
|
+
graphFilters.q = filters.q;
|
|
82
|
+
const { data = [], metadata } = await query.graph({
|
|
83
|
+
entity: "order",
|
|
84
|
+
fields: LIST_FIELDS,
|
|
85
|
+
filters: graphFilters,
|
|
86
|
+
pagination: {
|
|
87
|
+
skip: offset,
|
|
88
|
+
take: limit || 20,
|
|
89
|
+
order: { created_at: "DESC" },
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
orders = Array.isArray(data) ? data : [];
|
|
93
|
+
count = metadata?.count ?? orders.length;
|
|
94
|
+
}
|
|
95
|
+
const body = {
|
|
96
|
+
orders,
|
|
97
|
+
count,
|
|
98
|
+
limit,
|
|
99
|
+
offset,
|
|
100
|
+
};
|
|
101
|
+
if (includeSalesTotal) {
|
|
102
|
+
if (hasOccurredRange) {
|
|
103
|
+
body.sales_total = await (0, pos_order_list_1.aggregateSalesTotal)(knex, filters);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Avoid full-table scan when "All dates" is selected.
|
|
107
|
+
body.sales_total = { amount: 0, currency: "INR", sale_count: 0, skipped: true };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
res.json(body);
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
console.error("GET /admin/pos/orders error:", err);
|
|
114
|
+
res.status(500).json({
|
|
115
|
+
message: err instanceof Error ? err.message : "Failed to list POS orders",
|
|
116
|
+
type: "POS_ORDERS_LIST_FAILED",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Bvcy9vcmRlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5RUEsa0JBeUVDO0FBMUlELHFEQUFxRTtBQUNyRSxxRUFReUM7QUFlekMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsSUFBSTtJQUNKLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtJQUNaLFFBQVE7SUFDUixnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLE9BQU87SUFDUCxlQUFlO0lBQ2YsT0FBTztJQUNQLFVBQVU7SUFDVixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLFVBQVU7SUFDVixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLHdCQUF3QjtJQUN4QiwwQkFBMEI7Q0FDM0IsQ0FBQTtBQUVELFNBQVMsVUFBVSxDQUFDLE1BQWlCLEVBQUUsR0FBYTtJQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQTtJQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEQsTUFBTSxFQUFFLEdBQUksS0FBMEIsQ0FBQyxFQUFFLENBQUE7WUFDekMsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFF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
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Helpers for GET /admin/pos/orders — filter by sale time (pos_completed_at)
|
|
4
|
+
* instead of raw created_at so held drafts still land on the completion day.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.knexRows = knexRows;
|
|
8
|
+
exports.parseIsoDate = parseIsoDate;
|
|
9
|
+
exports.parseLimitOffset = parseLimitOffset;
|
|
10
|
+
exports.parseStringList = parseStringList;
|
|
11
|
+
exports.truthyFlag = truthyFlag;
|
|
12
|
+
exports.litePayableAmount = litePayableAmount;
|
|
13
|
+
exports.buildPosOrderListFilters = buildPosOrderListFilters;
|
|
14
|
+
exports.buildOrderWhere = buildOrderWhere;
|
|
15
|
+
exports.listOrderIdsByOccurredAt = listOrderIdsByOccurredAt;
|
|
16
|
+
exports.aggregateSalesTotal = aggregateSalesTotal;
|
|
17
|
+
const OCCURRED_AT_SQL = `COALESCE(
|
|
18
|
+
CASE
|
|
19
|
+
WHEN o.metadata->>'pos_completed_at' ~ '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
|
|
20
|
+
THEN (o.metadata->>'pos_completed_at')::timestamptz
|
|
21
|
+
ELSE NULL
|
|
22
|
+
END,
|
|
23
|
+
o.created_at
|
|
24
|
+
)`;
|
|
25
|
+
function isRecord(value) {
|
|
26
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
27
|
+
}
|
|
28
|
+
function knexRows(result) {
|
|
29
|
+
if (!result)
|
|
30
|
+
return [];
|
|
31
|
+
if (Array.isArray(result.rows))
|
|
32
|
+
return result.rows.filter(isRecord);
|
|
33
|
+
if (Array.isArray(result[0])) {
|
|
34
|
+
return result[0].filter(isRecord);
|
|
35
|
+
}
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
function parseIsoDate(value) {
|
|
39
|
+
if (!value || !String(value).trim())
|
|
40
|
+
return null;
|
|
41
|
+
const d = new Date(String(value).trim());
|
|
42
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
43
|
+
}
|
|
44
|
+
function parseLimitOffset(limitRaw, offsetRaw, defaults = { limit: 20, maxLimit: 100 }) {
|
|
45
|
+
const parsedLimit = limitRaw === undefined || limitRaw === ""
|
|
46
|
+
? defaults.limit
|
|
47
|
+
: Number(limitRaw);
|
|
48
|
+
const limit = Math.min(Math.max(Number.isFinite(parsedLimit) ? parsedLimit : defaults.limit, 0), defaults.maxLimit);
|
|
49
|
+
const parsedOffset = Number(offsetRaw);
|
|
50
|
+
const offset = Math.max(Number.isFinite(parsedOffset) ? parsedOffset : 0, 0);
|
|
51
|
+
return { limit, offset };
|
|
52
|
+
}
|
|
53
|
+
function parseStringList(value) {
|
|
54
|
+
if (!value)
|
|
55
|
+
return [];
|
|
56
|
+
const parts = Array.isArray(value) ? value : String(value).split(",");
|
|
57
|
+
return parts.map((p) => String(p).trim()).filter(Boolean);
|
|
58
|
+
}
|
|
59
|
+
function truthyFlag(value) {
|
|
60
|
+
if (!value)
|
|
61
|
+
return false;
|
|
62
|
+
const v = value.trim().toLowerCase();
|
|
63
|
+
return v === "1" || v === "true" || v === "yes";
|
|
64
|
+
}
|
|
65
|
+
function asAmount(value) {
|
|
66
|
+
if (typeof value === "number")
|
|
67
|
+
return Number.isFinite(value) ? value : 0;
|
|
68
|
+
if (typeof value === "string" && value.trim()) {
|
|
69
|
+
const n = Number(value);
|
|
70
|
+
return Number.isFinite(n) ? n : 0;
|
|
71
|
+
}
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
/** Prefer charged total from finalize metadata; else Medusa total. */
|
|
75
|
+
function litePayableAmount(row) {
|
|
76
|
+
const status = String(row.status || "").toLowerCase();
|
|
77
|
+
if (status === "canceled" || status === "cancelled" || status === "draft")
|
|
78
|
+
return 0;
|
|
79
|
+
const meta = isRecord(row.metadata) ? row.metadata : {};
|
|
80
|
+
const charged = asAmount(meta.pos_charged_total);
|
|
81
|
+
if (charged > 0)
|
|
82
|
+
return Math.round(charged * 100) / 100;
|
|
83
|
+
return Math.round(asAmount(row.total) * 100) / 100;
|
|
84
|
+
}
|
|
85
|
+
function buildPosOrderListFilters(query) {
|
|
86
|
+
return {
|
|
87
|
+
from: parseIsoDate(query.from),
|
|
88
|
+
to: parseIsoDate(query.to),
|
|
89
|
+
statuses: parseStringList(query.status),
|
|
90
|
+
customerIds: parseStringList(query.customer_id),
|
|
91
|
+
q: query.q?.trim() || null,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build WHERE clause + bindings for occurred-at (or created_at when no range).
|
|
96
|
+
* Alias the order table as `o`.
|
|
97
|
+
*/
|
|
98
|
+
function buildOrderWhere(filters) {
|
|
99
|
+
const clauses = ["o.deleted_at IS NULL"];
|
|
100
|
+
const bindings = [];
|
|
101
|
+
if (filters.from) {
|
|
102
|
+
clauses.push(`${OCCURRED_AT_SQL} >= ?::timestamptz`);
|
|
103
|
+
bindings.push(filters.from.toISOString());
|
|
104
|
+
}
|
|
105
|
+
if (filters.to) {
|
|
106
|
+
clauses.push(`${OCCURRED_AT_SQL} <= ?::timestamptz`);
|
|
107
|
+
bindings.push(filters.to.toISOString());
|
|
108
|
+
}
|
|
109
|
+
if (filters.statuses.length === 1) {
|
|
110
|
+
clauses.push(`o.status = ?`);
|
|
111
|
+
bindings.push(filters.statuses[0]);
|
|
112
|
+
}
|
|
113
|
+
else if (filters.statuses.length > 1) {
|
|
114
|
+
clauses.push(`o.status IN (${filters.statuses.map(() => "?").join(", ")})`);
|
|
115
|
+
bindings.push(...filters.statuses);
|
|
116
|
+
}
|
|
117
|
+
if (filters.customerIds.length === 1) {
|
|
118
|
+
clauses.push(`o.customer_id = ?`);
|
|
119
|
+
bindings.push(filters.customerIds[0]);
|
|
120
|
+
}
|
|
121
|
+
else if (filters.customerIds.length > 1) {
|
|
122
|
+
clauses.push(`o.customer_id IN (${filters.customerIds.map(() => "?").join(", ")})`);
|
|
123
|
+
bindings.push(...filters.customerIds);
|
|
124
|
+
}
|
|
125
|
+
if (filters.q) {
|
|
126
|
+
const like = `%${filters.q.replace(/[%_]/g, "\\$&")}%`;
|
|
127
|
+
// display_id is numeric; also match email / id substring
|
|
128
|
+
clauses.push(`(
|
|
129
|
+
o.email ILIKE ? OR
|
|
130
|
+
o.id ILIKE ? OR
|
|
131
|
+
CAST(o.display_id AS text) ILIKE ?
|
|
132
|
+
)`);
|
|
133
|
+
bindings.push(like, like, like);
|
|
134
|
+
}
|
|
135
|
+
return { whereSql: clauses.join(" AND "), bindings };
|
|
136
|
+
}
|
|
137
|
+
async function listOrderIdsByOccurredAt(knex, filters, limit, offset) {
|
|
138
|
+
const { whereSql, bindings } = buildOrderWhere(filters);
|
|
139
|
+
const countResult = await knex.raw(`SELECT COUNT(*)::int AS count FROM "order" o WHERE ${whereSql}`, bindings);
|
|
140
|
+
const countRow = knexRows(countResult)[0];
|
|
141
|
+
const count = Math.max(0, Number(countRow?.count ?? 0) || 0);
|
|
142
|
+
if (count === 0 || limit === 0) {
|
|
143
|
+
return { ids: [], count };
|
|
144
|
+
}
|
|
145
|
+
const pageResult = await knex.raw(`SELECT o.id
|
|
146
|
+
FROM "order" o
|
|
147
|
+
WHERE ${whereSql}
|
|
148
|
+
ORDER BY ${OCCURRED_AT_SQL} DESC, o.created_at DESC
|
|
149
|
+
LIMIT ? OFFSET ?`, [...bindings, limit, offset]);
|
|
150
|
+
const ids = knexRows(pageResult)
|
|
151
|
+
.map((row) => (typeof row.id === "string" ? row.id : null))
|
|
152
|
+
.filter((id) => !!id);
|
|
153
|
+
return { ids, count };
|
|
154
|
+
}
|
|
155
|
+
async function aggregateSalesTotal(knex, filters) {
|
|
156
|
+
const { whereSql, bindings } = buildOrderWhere(filters);
|
|
157
|
+
const result = await knex.raw(`SELECT
|
|
158
|
+
o.status,
|
|
159
|
+
o.total,
|
|
160
|
+
o.currency_code,
|
|
161
|
+
o.metadata
|
|
162
|
+
FROM "order" o
|
|
163
|
+
WHERE ${whereSql}`, bindings);
|
|
164
|
+
let amount = 0;
|
|
165
|
+
let saleCount = 0;
|
|
166
|
+
let currency = "INR";
|
|
167
|
+
for (const row of knexRows(result)) {
|
|
168
|
+
const payable = litePayableAmount(row);
|
|
169
|
+
if (payable <= 0)
|
|
170
|
+
continue;
|
|
171
|
+
const status = String(row.status || "").toLowerCase();
|
|
172
|
+
if (status === "canceled" || status === "cancelled" || status === "draft")
|
|
173
|
+
continue;
|
|
174
|
+
amount += payable;
|
|
175
|
+
saleCount += 1;
|
|
176
|
+
if (typeof row.currency_code === "string" && row.currency_code) {
|
|
177
|
+
currency = row.currency_code;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
amount: Math.round(amount * 100) / 100,
|
|
182
|
+
currency,
|
|
183
|
+
sale_count: saleCount,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zLW9yZGVyLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcG9zLW9yZGVyLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7QUFtQ0gsNEJBT0M7QUFFRCxvQ0FJQztBQUVELDRDQWdCQztBQUVELDBDQUlDO0FBRUQsZ0NBSUM7QUFZRCw4Q0FXQztBQVVELDREQVFDO0FBTUQsMENBMkNDO0FBRUQsNERBaUNDO0FBRUQsa0RBc0NDO0FBN05ELE1BQU0sZUFBZSxHQUFHOzs7Ozs7O0VBT3RCLENBQUE7QUFFRixTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQztBQUVELFNBQWdCLFFBQVEsQ0FBQyxNQUF3QztJQUMvRCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ3RCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFRLE1BQU0sQ0FBQyxDQUFDLENBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFtQyxDQUFBO0lBQ3BGLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsS0FBeUI7SUFDcEQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNoRCxN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
|
package/README.md
CHANGED
|
@@ -32,6 +32,12 @@ Razorpay credentials also fall back to `RAZORPAY_KEY_ID` / `RAZORPAY_KEY_SECRET`
|
|
|
32
32
|
|
|
33
33
|
All routes keep the `/admin/pos/*` paths used by the `medusa-pos` client.
|
|
34
34
|
|
|
35
|
+
| Method | Path | Purpose |
|
|
36
|
+
|--------|------|---------|
|
|
37
|
+
| GET | `/admin/pos/orders` | Orders tab list + optional sales total, filtered by sale time (`pos_completed_at`) |
|
|
38
|
+
| GET | `/admin/pos/draft-orders` | Held carts |
|
|
39
|
+
| … | `/admin/pos/*` | Finalize, payments, returns, catalog, etc. |
|
|
40
|
+
|
|
35
41
|
## Build
|
|
36
42
|
|
|
37
43
|
```bash
|
package/package.json
CHANGED