@devx-retailos/cms 0.1.0 → 0.2.0

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.
@@ -37,12 +37,20 @@ const GET = async (req, res) => {
37
37
  if (q[key] !== undefined && q[key] !== "")
38
38
  filters[key] = q[key];
39
39
  }
40
- if (q.handover_id)
41
- filters.handover_id = q.handover_id;
42
- // q: full-text search on handover_id
43
- if (q.q) {
40
+ // handover_id / invoice_number filtering (invoice_number ilike takes highest precedence)
41
+ if (q.invoice_number) {
42
+ filters.handover_id = { $ilike: `%${q.invoice_number}%` };
43
+ }
44
+ else if (q.q) {
44
45
  filters.handover_id = { $ilike: `%${q.q}%` };
45
46
  }
47
+ else if (q.handover_id) {
48
+ filters.handover_id = q.handover_id;
49
+ }
50
+ // customer_id: stored in metadata JSONB field
51
+ if (q.customer_id) {
52
+ filters.metadata = { customer_id: q.customer_id };
53
+ }
46
54
  // Date range filters
47
55
  if (q.created_at) {
48
56
  filters.created_at = typeof q.created_at === "object" ? q.created_at : { $gte: new Date(q.created_at) };
@@ -140,4 +148,4 @@ const POST = async (req, res) => {
140
148
  }
141
149
  };
142
150
  exports.POST = POST;
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldGFpbG9zL2Ntcy9oYW5kb3ZlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXFFO0FBQ3JFLDZCQUF1QjtBQUN2QixvRUFBaUU7QUFHakUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdDLGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFO0lBQ3pDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVDLElBQUksRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hELFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEUsQ0FBQyxDQUFB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
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldGFpbG9zL2Ntcy9oYW5kb3ZlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEscURBQXFFO0FBQ3JFLDZCQUF1QjtBQUN2QixvRUFBaUU7QUFHakUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdDLGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFO0lBQ3pDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVDLElBQUksRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hELFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEUsQ0FBQyxDQUFB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
@@ -20,10 +20,66 @@ const GET = async (req, res) => {
20
20
  const q = req.query;
21
21
  const filters = {};
22
22
  if (q.store_id)
23
- filters.store_id = [q.store_id];
24
- const limit = q.limit ? Math.min(parseInt(q.limit, 10), 500) : 100;
23
+ filters.store_id = q.store_id;
24
+ if (q.entry_type)
25
+ filters.entry_type = q.entry_type;
26
+ // employee_name: resolve IDs by splitting on spaces and querying first/last name separately
27
+ // (MedusaService does not support $or at the filter top-level)
28
+ if (q.employee_name) {
29
+ try {
30
+ const employeeService = req.scope.resolve(EMPLOYEE_MODULE);
31
+ const words = q.employee_name.trim().toLowerCase().split(/\s+/).filter(Boolean);
32
+ let matchedIds = null;
33
+ for (const word of words) {
34
+ const nameQ = `%${word}%`;
35
+ const [byFirst, byLast] = await Promise.all([
36
+ employeeService.listEmployees({ first_name: { $ilike: nameQ } }, { select: ["id"] }).catch(() => []),
37
+ employeeService.listEmployees({ last_name: { $ilike: nameQ } }, { select: ["id"] }).catch(() => []),
38
+ ]);
39
+ const wordIds = [...new Set([...byFirst, ...byLast].map((e) => e.id))];
40
+ matchedIds = matchedIds === null ? wordIds : matchedIds.filter((id) => new Set(wordIds).has(id));
41
+ }
42
+ const finalIds = matchedIds ?? [];
43
+ filters.employee_id = { $in: finalIds.length > 0 ? finalIds : [""] };
44
+ }
45
+ catch {
46
+ // employee module unavailable — skip filter
47
+ }
48
+ }
49
+ else if (q.employee_id) {
50
+ filters.employee_id = q.employee_id;
51
+ }
52
+ // transaction_type: defaults to all; pass "petty_cash" to filter to only expense entries
53
+ filters.transaction_type = q.transaction_type
54
+ ? q.transaction_type
55
+ : ["open", "close", "petty_cash"];
56
+ // q: full-text search on reason
57
+ if (q.q)
58
+ filters.reason = { $ilike: `%${q.q}%` };
59
+ if (q.category)
60
+ filters.category = { $ilike: `%${q.category}%` };
61
+ // Amount range
62
+ if (q.amount_gte || q.amount_lte) {
63
+ const range = {};
64
+ if (q.amount_gte)
65
+ range.$gte = Number(q.amount_gte);
66
+ if (q.amount_lte)
67
+ range.$lte = Number(q.amount_lte);
68
+ filters.amount = range;
69
+ }
70
+ const limit = q.limit ? Math.min(parseInt(q.limit, 10), 500) : 20;
25
71
  const offset = q.offset ? parseInt(q.offset, 10) : 0;
26
- const [transactions, count] = await service.listAndCountRetailosPettyCashTransactions({ ...filters, transaction_type: ["open", "close", "petty_cash"] }, { take: limit, skip: offset, order: { created_at: "DESC" } });
72
+ // Ordering: "field" = ASC, "-field" = DESC
73
+ const SORTABLE = new Set(["created_at", "updated_at", "amount"]);
74
+ let order = { created_at: "DESC" };
75
+ if (q.order) {
76
+ const raw = q.order;
77
+ const isDesc = raw.startsWith("-");
78
+ const field = isDesc ? raw.slice(1) : raw;
79
+ if (SORTABLE.has(field))
80
+ order = { [field]: isDesc ? "DESC" : "ASC" };
81
+ }
82
+ const [transactions, count] = await service.listAndCountRetailosPettyCashTransactions(filters, { take: limit, skip: offset, order });
27
83
  // Enrich with employee data via bulk lookup
28
84
  const employeeIds = [...new Set(transactions.map((t) => t.employee_id).filter(Boolean))];
29
85
  let employeeMap = new Map();
@@ -59,4 +115,4 @@ const GET = async (req, res) => {
59
115
  }
60
116
  };
61
117
  exports.GET = GET;
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldGFpbG9zL2Ntcy9wZXR0eS1jYXNoL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLG9FQUFpRTtBQUdqRSxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUE7QUFFbEMsU0FBUyxVQUFVLENBQUMsR0FBK0I7SUFDakQsT0FBUSxHQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQkFBVSxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQStCO0lBQ2hELElBQUksQ0FBQztRQUNILE9BQVEsR0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUE7SUFDN0UsQ0FBQztBQUNILENBQUM7QUFFTSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBK0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDaEYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUE0QixDQUFBO1FBRTFDLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUE7UUFDM0MsSUFBSSxDQUFDLENBQUMsUUFBUTtZQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFL0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxD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
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3JldGFpbG9zL2Ntcy9wZXR0eS1jYXNoL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLG9FQUFpRTtBQUdqRSxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUE7QUFFbEMsU0FBUyxVQUFVLENBQUMsR0FBK0I7SUFDakQsT0FBUSxHQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQkFBVSxDQUFDLENBQUE7QUFDL0MsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQStCO0lBQ2hELElBQUksQ0FBQztRQUNILE9BQVEsR0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUE7SUFDN0UsQ0FBQztBQUNILENBQUM7QUFFTSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBK0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDaEYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUE0QixDQUFBO1FBRTFDLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUE7UUFFM0MsSUFBSSxDQUFDLENBQUMsUUFBUTtZQUFJLE9BQU8sQ0FBQyxRQUFRLEdBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUNqRCxJQUFJLENBQUMsQ0FBQyxVQUFVO1lBQUUsT0FBTyxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devx-retailos/cms",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Cash Management System for retailOS: shift ops, handovers, petty cash, accumulation.",
5
5
  "license": "MIT",
6
6
  "main": "./.medusa/server/src/modules/cms/index.js",
@@ -25,9 +25,9 @@
25
25
  "src"
26
26
  ],
27
27
  "dependencies": {
28
- "@devx-retailos/rbac": "0.0.2",
28
+ "@devx-retailos/core": "0.0.2",
29
29
  "@devx-retailos/employee": "0.0.3",
30
- "@devx-retailos/core": "0.0.2"
30
+ "@devx-retailos/rbac": "0.0.2"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@medusajs/framework": "^2.15.0",
@@ -43,11 +43,18 @@ export const GET = async (req: AuthenticatedMedusaRequest, res: MedusaResponse)
43
43
  for (const key of DIRECT) {
44
44
  if (q[key] !== undefined && q[key] !== "") filters[key] = q[key]
45
45
  }
46
- if (q.handover_id) filters.handover_id = q.handover_id
47
-
48
- // q: full-text search on handover_id
49
- if (q.q) {
46
+ // handover_id / invoice_number filtering (invoice_number ilike takes highest precedence)
47
+ if (q.invoice_number) {
48
+ filters.handover_id = { $ilike: `%${q.invoice_number}%` }
49
+ } else if (q.q) {
50
50
  filters.handover_id = { $ilike: `%${q.q}%` }
51
+ } else if (q.handover_id) {
52
+ filters.handover_id = q.handover_id
53
+ }
54
+
55
+ // customer_id: stored in metadata JSONB field
56
+ if (q.customer_id) {
57
+ filters.metadata = { customer_id: q.customer_id }
51
58
  }
52
59
 
53
60
  // Date range filters
@@ -39,7 +39,7 @@ describe("GET /petty-cash", () => {
39
39
 
40
40
  expect(service.listAndCountRetailosPettyCashTransactions).toHaveBeenCalledWith(
41
41
  expect.objectContaining({ transaction_type: ["open", "close", "petty_cash"] }),
42
- expect.objectContaining({ take: 100 })
42
+ expect.objectContaining({ take: 20 })
43
43
  )
44
44
  expect(res.status).toHaveBeenCalledWith(200)
45
45
  expect(res.json).toHaveBeenCalledWith({
@@ -60,7 +60,7 @@ describe("GET /petty-cash", () => {
60
60
  await GET(req as any, res as any)
61
61
 
62
62
  expect(service.listAndCountRetailosPettyCashTransactions).toHaveBeenCalledWith(
63
- expect.objectContaining({ store_id: ["s1"], transaction_type: ["open", "close", "petty_cash"] }),
63
+ expect.objectContaining({ store_id: "s1", transaction_type: ["open", "close", "petty_cash"] }),
64
64
  expect.any(Object)
65
65
  )
66
66
  })
@@ -25,14 +25,69 @@ export const GET = async (req: AuthenticatedMedusaRequest, res: MedusaResponse)
25
25
  const q = req.query as Record<string, any>
26
26
 
27
27
  const filters: Record<string, unknown> = {}
28
- if (q.store_id) filters.store_id = [q.store_id]
29
28
 
30
- const limit = q.limit ? Math.min(parseInt(q.limit as string, 10), 500) : 100
29
+ if (q.store_id) filters.store_id = q.store_id
30
+ if (q.entry_type) filters.entry_type = q.entry_type
31
+
32
+ // employee_name: resolve IDs by splitting on spaces and querying first/last name separately
33
+ // (MedusaService does not support $or at the filter top-level)
34
+ if (q.employee_name) {
35
+ try {
36
+ const employeeService = (req as any).scope.resolve(EMPLOYEE_MODULE)
37
+ const words = (q.employee_name as string).trim().toLowerCase().split(/\s+/).filter(Boolean)
38
+ let matchedIds: string[] | null = null
39
+ for (const word of words) {
40
+ const nameQ = `%${word}%`
41
+ const [byFirst, byLast] = await Promise.all([
42
+ (employeeService.listEmployees({ first_name: { $ilike: nameQ } }, { select: ["id"] }) as Promise<any[]>).catch(() => [] as any[]),
43
+ (employeeService.listEmployees({ last_name: { $ilike: nameQ } }, { select: ["id"] }) as Promise<any[]>).catch(() => [] as any[]),
44
+ ])
45
+ const wordIds = [...new Set([...byFirst, ...byLast].map((e: any) => e.id))]
46
+ matchedIds = matchedIds === null ? wordIds : matchedIds.filter((id) => new Set(wordIds).has(id))
47
+ }
48
+ const finalIds = matchedIds ?? []
49
+ filters.employee_id = { $in: finalIds.length > 0 ? finalIds : [""] }
50
+ } catch {
51
+ // employee module unavailable — skip filter
52
+ }
53
+ } else if (q.employee_id) {
54
+ filters.employee_id = q.employee_id
55
+ }
56
+
57
+ // transaction_type: defaults to all; pass "petty_cash" to filter to only expense entries
58
+ filters.transaction_type = q.transaction_type
59
+ ? q.transaction_type
60
+ : ["open", "close", "petty_cash"]
61
+
62
+ // q: full-text search on reason
63
+ if (q.q) filters.reason = { $ilike: `%${q.q}%` }
64
+
65
+ if (q.category) filters.category = { $ilike: `%${q.category}%` }
66
+
67
+ // Amount range
68
+ if (q.amount_gte || q.amount_lte) {
69
+ const range: Record<string, number> = {}
70
+ if (q.amount_gte) range.$gte = Number(q.amount_gte)
71
+ if (q.amount_lte) range.$lte = Number(q.amount_lte)
72
+ filters.amount = range
73
+ }
74
+
75
+ const limit = q.limit ? Math.min(parseInt(q.limit as string, 10), 500) : 20
31
76
  const offset = q.offset ? parseInt(q.offset as string, 10) : 0
32
77
 
78
+ // Ordering: "field" = ASC, "-field" = DESC
79
+ const SORTABLE = new Set(["created_at", "updated_at", "amount"])
80
+ let order: Record<string, "ASC" | "DESC"> = { created_at: "DESC" }
81
+ if (q.order) {
82
+ const raw = q.order as string
83
+ const isDesc = raw.startsWith("-")
84
+ const field = isDesc ? raw.slice(1) : raw
85
+ if (SORTABLE.has(field)) order = { [field]: isDesc ? "DESC" : "ASC" }
86
+ }
87
+
33
88
  const [transactions, count] = await service.listAndCountRetailosPettyCashTransactions(
34
- { ...filters, transaction_type: ["open", "close", "petty_cash"] },
35
- { take: limit, skip: offset, order: { created_at: "DESC" } } as any
89
+ filters,
90
+ { take: limit, skip: offset, order } as any
36
91
  )
37
92
 
38
93
  // Enrich with employee data via bulk lookup