@devlider001/washlab-backend 1.0.3 → 1.0.5

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.
Files changed (83) hide show
  1. package/convex/_generated/api.d.ts +6 -0
  2. package/convex/admin.d.ts +129 -4
  3. package/convex/analytics.d.ts +87 -0
  4. package/convex/attendants.d.ts +40 -0
  5. package/convex/audit.d.ts +39 -0
  6. package/convex/customers.d.ts +69 -1
  7. package/convex/lib/auth.d.ts +4 -0
  8. package/convex/loyalty.d.ts +1 -1
  9. package/convex/notifications.d.ts +170 -0
  10. package/convex/orders.d.ts +80 -4
  11. package/convex/payments.d.ts +47 -2
  12. package/convex/resources.d.ts +31 -0
  13. package/convex/schema.d.ts +141 -9
  14. package/convex/vouchers.d.ts +187 -0
  15. package/dist/convex/admin.d.ts +377 -0
  16. package/dist/convex/admin.d.ts.map +1 -0
  17. package/dist/convex/admin.js +959 -0
  18. package/dist/convex/admin.js.map +1 -0
  19. package/dist/convex/analytics.d.ts +87 -0
  20. package/dist/convex/analytics.d.ts.map +1 -0
  21. package/dist/convex/analytics.js +361 -0
  22. package/dist/convex/analytics.js.map +1 -0
  23. package/dist/convex/attendants.d.ts +140 -0
  24. package/dist/convex/attendants.d.ts.map +1 -0
  25. package/dist/convex/attendants.js +337 -0
  26. package/dist/convex/attendants.js.map +1 -0
  27. package/dist/convex/audit.d.ts +158 -0
  28. package/dist/convex/audit.d.ts.map +1 -0
  29. package/dist/convex/audit.js +184 -0
  30. package/dist/convex/audit.js.map +1 -0
  31. package/dist/convex/clerk.d.ts +53 -0
  32. package/dist/convex/clerk.d.ts.map +1 -0
  33. package/dist/convex/clerk.js +316 -0
  34. package/dist/convex/clerk.js.map +1 -0
  35. package/dist/convex/customers.d.ts +224 -0
  36. package/dist/convex/customers.d.ts.map +1 -0
  37. package/dist/convex/customers.js +504 -0
  38. package/dist/convex/customers.js.map +1 -0
  39. package/dist/convex/http.d.ts +3 -0
  40. package/dist/convex/http.d.ts.map +1 -0
  41. package/dist/convex/http.js +115 -0
  42. package/dist/convex/http.js.map +1 -0
  43. package/dist/convex/lib/audit.d.ts +36 -0
  44. package/dist/convex/lib/audit.d.ts.map +1 -0
  45. package/dist/convex/lib/audit.js +59 -0
  46. package/dist/convex/lib/audit.js.map +1 -0
  47. package/dist/convex/lib/auth.d.ts +96 -0
  48. package/dist/convex/lib/auth.d.ts.map +1 -0
  49. package/dist/convex/lib/auth.js +94 -0
  50. package/dist/convex/lib/auth.js.map +1 -0
  51. package/dist/convex/lib/utils.d.ts +38 -0
  52. package/dist/convex/lib/utils.d.ts.map +1 -0
  53. package/dist/convex/lib/utils.js +71 -0
  54. package/dist/convex/lib/utils.js.map +1 -0
  55. package/dist/convex/loyalty.d.ts +82 -0
  56. package/dist/convex/loyalty.d.ts.map +1 -0
  57. package/dist/convex/loyalty.js +286 -0
  58. package/dist/convex/loyalty.js.map +1 -0
  59. package/dist/convex/orders.d.ts +326 -0
  60. package/dist/convex/orders.d.ts.map +1 -0
  61. package/dist/convex/orders.js +570 -0
  62. package/dist/convex/orders.js.map +1 -0
  63. package/dist/convex/payments.d.ts +134 -0
  64. package/dist/convex/payments.d.ts.map +1 -0
  65. package/dist/convex/payments.js +360 -0
  66. package/dist/convex/payments.js.map +1 -0
  67. package/dist/convex/resources.d.ts +119 -0
  68. package/dist/convex/resources.d.ts.map +1 -0
  69. package/dist/convex/resources.js +283 -0
  70. package/dist/convex/resources.js.map +1 -0
  71. package/dist/convex/schema.d.ts +450 -0
  72. package/dist/convex/schema.d.ts.map +1 -0
  73. package/dist/convex/schema.js +347 -0
  74. package/dist/convex/schema.js.map +1 -0
  75. package/dist/convex/vouchers.d.ts +187 -0
  76. package/dist/convex/vouchers.d.ts.map +1 -0
  77. package/dist/convex/vouchers.js +464 -0
  78. package/dist/convex/vouchers.js.map +1 -0
  79. package/dist/src/index.d.ts +9 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +9 -0
  82. package/dist/src/index.js.map +1 -0
  83. package/package.json +4 -3
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Payment Functions
3
+ *
4
+ * Handles payment creation, confirmation, and refunds.
5
+ */
6
+ /**
7
+ * Get payment by order ID
8
+ */
9
+ export declare const getByOrder: import("convex/server").RegisteredQuery<"public", {
10
+ orderId: import("convex/values").GenericId<"orders">;
11
+ }, Promise<{
12
+ _id: import("convex/values").GenericId<"payments">;
13
+ _creationTime: number;
14
+ gatewayTransactionId?: string | undefined;
15
+ gatewayResponse?: string | undefined;
16
+ completedAt?: number | undefined;
17
+ processedBy?: import("convex/values").GenericId<"attendants"> | undefined;
18
+ status: "pending" | "completed" | "failed" | "refunded" | "processing";
19
+ createdAt: number;
20
+ isDeleted: boolean;
21
+ customerId: import("convex/values").GenericId<"users">;
22
+ paymentMethod: "mobile_money" | "card" | "cash";
23
+ orderId: import("convex/values").GenericId<"orders">;
24
+ amount: number;
25
+ currency: string;
26
+ } | null>>;
27
+ /**
28
+ * Get payment history by customer
29
+ */
30
+ export declare const getByCustomer: import("convex/server").RegisteredQuery<"public", {
31
+ limit?: number | undefined;
32
+ }, Promise<{
33
+ _id: import("convex/values").GenericId<"payments">;
34
+ _creationTime: number;
35
+ gatewayTransactionId?: string | undefined;
36
+ gatewayResponse?: string | undefined;
37
+ completedAt?: number | undefined;
38
+ processedBy?: import("convex/values").GenericId<"attendants"> | undefined;
39
+ status: "pending" | "completed" | "failed" | "refunded" | "processing";
40
+ createdAt: number;
41
+ isDeleted: boolean;
42
+ customerId: import("convex/values").GenericId<"users">;
43
+ paymentMethod: "mobile_money" | "card" | "cash";
44
+ orderId: import("convex/values").GenericId<"orders">;
45
+ amount: number;
46
+ currency: string;
47
+ }[]>>;
48
+ /**
49
+ * Create payment record
50
+ */
51
+ export declare const create: import("convex/server").RegisteredMutation<"public", {
52
+ currency?: string | undefined;
53
+ paymentMethod: "mobile_money" | "card" | "cash";
54
+ orderId: import("convex/values").GenericId<"orders">;
55
+ amount: number;
56
+ }, Promise<import("convex/values").GenericId<"payments">>>;
57
+ /**
58
+ * Initiate payment (for gateway integration)
59
+ * This would typically call an external payment gateway API
60
+ */
61
+ export declare const initiate: import("convex/server").RegisteredMutation<"public", {
62
+ paymentId: import("convex/values").GenericId<"payments">;
63
+ }, Promise<{
64
+ paymentId: import("convex/values").GenericId<"payments">;
65
+ status: string;
66
+ }>>;
67
+ /**
68
+ * Confirm payment completion
69
+ */
70
+ export declare const confirm: import("convex/server").RegisteredMutation<"public", {
71
+ gatewayTransactionId?: string | undefined;
72
+ gatewayResponse?: string | undefined;
73
+ paymentId: import("convex/values").GenericId<"payments">;
74
+ }, Promise<import("convex/values").GenericId<"payments">>>;
75
+ /**
76
+ * Mark payment as failed
77
+ */
78
+ export declare const fail: import("convex/server").RegisteredMutation<"public", {
79
+ reason?: string | undefined;
80
+ paymentId: import("convex/values").GenericId<"payments">;
81
+ }, Promise<import("convex/values").GenericId<"payments">>>;
82
+ /**
83
+ * Process refund
84
+ */
85
+ export declare const refund: import("convex/server").RegisteredMutation<"public", {
86
+ reason?: string | undefined;
87
+ paymentId: import("convex/values").GenericId<"payments">;
88
+ }, Promise<import("convex/values").GenericId<"payments">>>;
89
+ /**
90
+ * Get transaction history - Paginated
91
+ * Supports usePaginatedQuery for infinite scroll
92
+ */
93
+ export declare const getTransactionHistory: import("convex/server").RegisteredQuery<"public", {
94
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
95
+ paymentMethod?: "mobile_money" | "card" | "cash" | undefined;
96
+ cursor?: string | undefined;
97
+ numItems?: number | undefined;
98
+ startDate?: number | undefined;
99
+ endDate?: number | undefined;
100
+ }, Promise<{
101
+ page: {
102
+ _id: import("convex/values").GenericId<"payments">;
103
+ _creationTime: number;
104
+ gatewayTransactionId?: string | undefined;
105
+ gatewayResponse?: string | undefined;
106
+ completedAt?: number | undefined;
107
+ processedBy?: import("convex/values").GenericId<"attendants"> | undefined;
108
+ status: "pending" | "completed" | "failed" | "refunded" | "processing";
109
+ createdAt: number;
110
+ isDeleted: boolean;
111
+ customerId: import("convex/values").GenericId<"users">;
112
+ paymentMethod: "mobile_money" | "card" | "cash";
113
+ orderId: import("convex/values").GenericId<"orders">;
114
+ amount: number;
115
+ currency: string;
116
+ }[];
117
+ isDone: boolean;
118
+ continueCursor: string;
119
+ }>>;
120
+ /**
121
+ * Get transaction summary statistics
122
+ */
123
+ export declare const getTransactionSummary: import("convex/server").RegisteredQuery<"public", {
124
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
125
+ startDate?: number | undefined;
126
+ endDate?: number | undefined;
127
+ }, Promise<{
128
+ totalTransactions: number;
129
+ totalAmount: number;
130
+ averageTransaction: number;
131
+ byMethod: Record<string, number>;
132
+ byStatus: Record<string, number>;
133
+ }>>;
134
+ //# sourceMappingURL=payments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.d.ts","sourceRoot":"","sources":["../../convex/payments.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;UAgBrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;KAgBxB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;0DAmEjB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;GA8BnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO;;;;0DAmDlB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,IAAI;;;0DA6Cf,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,MAAM;;;0DAoDjB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;GAwEhC,CAAC"}
@@ -0,0 +1,360 @@
1
+ import { query, mutation } from "./_generated/server";
2
+ import { v } from "convex/values";
3
+ import { getCurrentCustomer, getCurrentAttendant } from "./lib/auth";
4
+ import { logPayment } from "./lib/audit";
5
+ import { getCurrentTimestamp } from "./lib/utils";
6
+ /**
7
+ * Payment Functions
8
+ *
9
+ * Handles payment creation, confirmation, and refunds.
10
+ */
11
+ /**
12
+ * Get payment by order ID
13
+ */
14
+ export const getByOrder = query({
15
+ args: {
16
+ orderId: v.id("orders"),
17
+ },
18
+ handler: async (ctx, args) => {
19
+ const payment = await ctx.db
20
+ .query("payments")
21
+ .withIndex("by_order", (q) => q.eq("orderId", args.orderId))
22
+ .first();
23
+ if (!payment || payment.isDeleted) {
24
+ return null;
25
+ }
26
+ return payment;
27
+ },
28
+ });
29
+ /**
30
+ * Get payment history by customer
31
+ */
32
+ export const getByCustomer = query({
33
+ args: {
34
+ limit: v.optional(v.number()),
35
+ },
36
+ handler: async (ctx, args) => {
37
+ const customer = await getCurrentCustomer(ctx);
38
+ const limit = args.limit ?? 50;
39
+ const payments = await ctx.db
40
+ .query("payments")
41
+ .withIndex("by_customer", (q) => q.eq("customerId", customer._id))
42
+ .order("desc")
43
+ .take(limit);
44
+ return payments.filter((p) => !p.isDeleted);
45
+ },
46
+ });
47
+ /**
48
+ * Create payment record
49
+ */
50
+ export const create = mutation({
51
+ args: {
52
+ orderId: v.id("orders"),
53
+ amount: v.number(),
54
+ paymentMethod: v.union(v.literal("mobile_money"), v.literal("card"), v.literal("cash")),
55
+ currency: v.optional(v.string()), // Defaults to "GHS"
56
+ },
57
+ handler: async (ctx, args) => {
58
+ // Get order
59
+ const order = await ctx.db.get(args.orderId);
60
+ if (!order || order.isDeleted) {
61
+ throw new Error("Order not found");
62
+ }
63
+ // Verify amount matches order total
64
+ if (Math.abs(args.amount - order.finalPrice) > 0.01) {
65
+ throw new Error("Payment amount does not match order total");
66
+ }
67
+ // Check if payment already exists
68
+ const existing = await ctx.db
69
+ .query("payments")
70
+ .withIndex("by_order", (q) => q.eq("orderId", args.orderId))
71
+ .first();
72
+ if (existing && !existing.isDeleted) {
73
+ throw new Error("Payment already exists for this order");
74
+ }
75
+ const currency = args.currency ?? "GHS";
76
+ const now = getCurrentTimestamp();
77
+ // Create payment record
78
+ const paymentId = await ctx.db.insert("payments", {
79
+ orderId: args.orderId,
80
+ customerId: order.customerId,
81
+ amount: args.amount,
82
+ currency,
83
+ paymentMethod: args.paymentMethod,
84
+ status: "pending",
85
+ createdAt: now,
86
+ isDeleted: false,
87
+ });
88
+ // Update order with payment reference
89
+ await ctx.db.patch(args.orderId, {
90
+ paymentId,
91
+ paymentMethod: args.paymentMethod,
92
+ });
93
+ // Get branch for audit log
94
+ const branch = await ctx.db.get(order.branchId);
95
+ const branchId = branch?._id;
96
+ await logPayment(ctx, paymentId, args.orderId, order.customerId, "payment.created", args.amount, args.paymentMethod, branchId);
97
+ return paymentId;
98
+ },
99
+ });
100
+ /**
101
+ * Initiate payment (for gateway integration)
102
+ * This would typically call an external payment gateway API
103
+ */
104
+ export const initiate = mutation({
105
+ args: {
106
+ paymentId: v.id("payments"),
107
+ },
108
+ handler: async (ctx, args) => {
109
+ const payment = await ctx.db.get(args.paymentId);
110
+ if (!payment || payment.isDeleted) {
111
+ throw new Error("Payment not found");
112
+ }
113
+ if (payment.status !== "pending") {
114
+ throw new Error("Payment already processed");
115
+ }
116
+ // Update payment status to processing
117
+ await ctx.db.patch(args.paymentId, {
118
+ status: "processing",
119
+ });
120
+ // In a real implementation, this would:
121
+ // 1. Call payment gateway API
122
+ // 2. Store gateway transaction ID
123
+ // 3. Return payment URL or instructions
124
+ return {
125
+ paymentId: args.paymentId,
126
+ status: "processing",
127
+ // gatewayUrl: "...", // URL to redirect user for payment
128
+ };
129
+ },
130
+ });
131
+ /**
132
+ * Confirm payment completion
133
+ */
134
+ export const confirm = mutation({
135
+ args: {
136
+ paymentId: v.id("payments"),
137
+ gatewayTransactionId: v.optional(v.string()),
138
+ gatewayResponse: v.optional(v.string()),
139
+ },
140
+ handler: async (ctx, args) => {
141
+ const payment = await ctx.db.get(args.paymentId);
142
+ if (!payment || payment.isDeleted) {
143
+ throw new Error("Payment not found");
144
+ }
145
+ if (payment.status === "completed") {
146
+ throw new Error("Payment already completed");
147
+ }
148
+ const now = getCurrentTimestamp();
149
+ // Update payment
150
+ await ctx.db.patch(args.paymentId, {
151
+ status: "completed",
152
+ completedAt: now,
153
+ gatewayTransactionId: args.gatewayTransactionId,
154
+ gatewayResponse: args.gatewayResponse,
155
+ });
156
+ // Update order payment status
157
+ const order = await ctx.db.get(payment.orderId);
158
+ if (order && !order.isDeleted) {
159
+ await ctx.db.patch(payment.orderId, {
160
+ paymentStatus: "paid",
161
+ });
162
+ }
163
+ // Get branch for audit log
164
+ const orderForAudit = await ctx.db.get(payment.orderId);
165
+ const branchId = orderForAudit?.branchId;
166
+ await logPayment(ctx, args.paymentId, payment.orderId, payment.customerId, "payment.completed", payment.amount, payment.paymentMethod, branchId);
167
+ return args.paymentId;
168
+ },
169
+ });
170
+ /**
171
+ * Mark payment as failed
172
+ */
173
+ export const fail = mutation({
174
+ args: {
175
+ paymentId: v.id("payments"),
176
+ reason: v.optional(v.string()),
177
+ },
178
+ handler: async (ctx, args) => {
179
+ const payment = await ctx.db.get(args.paymentId);
180
+ if (!payment || payment.isDeleted) {
181
+ throw new Error("Payment not found");
182
+ }
183
+ if (payment.status === "completed") {
184
+ throw new Error("Cannot fail completed payment");
185
+ }
186
+ // Update payment
187
+ await ctx.db.patch(args.paymentId, {
188
+ status: "failed",
189
+ });
190
+ // Update order payment status
191
+ const order = await ctx.db.get(payment.orderId);
192
+ if (order && !order.isDeleted) {
193
+ await ctx.db.patch(payment.orderId, {
194
+ paymentStatus: "failed",
195
+ });
196
+ }
197
+ // Get branch for audit log
198
+ const branchId = order?.branchId;
199
+ await logPayment(ctx, args.paymentId, payment.orderId, payment.customerId, "payment.failed", payment.amount, payment.paymentMethod, branchId, undefined);
200
+ return args.paymentId;
201
+ },
202
+ });
203
+ /**
204
+ * Process refund
205
+ */
206
+ export const refund = mutation({
207
+ args: {
208
+ paymentId: v.id("payments"),
209
+ reason: v.optional(v.string()),
210
+ },
211
+ handler: async (ctx, args) => {
212
+ const payment = await ctx.db.get(args.paymentId);
213
+ if (!payment || payment.isDeleted) {
214
+ throw new Error("Payment not found");
215
+ }
216
+ if (payment.status !== "completed") {
217
+ throw new Error("Can only refund completed payments");
218
+ }
219
+ const now = getCurrentTimestamp();
220
+ // Update payment
221
+ await ctx.db.patch(args.paymentId, {
222
+ status: "refunded",
223
+ });
224
+ // Update order payment status
225
+ const order = await ctx.db.get(payment.orderId);
226
+ if (order && !order.isDeleted) {
227
+ await ctx.db.patch(payment.orderId, {
228
+ paymentStatus: "refunded",
229
+ });
230
+ }
231
+ // Get branch for audit log
232
+ const branchId = order?.branchId;
233
+ await logPayment(ctx, args.paymentId, payment.orderId, payment.customerId, "payment.refunded", payment.amount, payment.paymentMethod, branchId, undefined, args.reason);
234
+ // In a real implementation, this would:
235
+ // 1. Call payment gateway refund API
236
+ // 2. Store refund transaction ID
237
+ return args.paymentId;
238
+ },
239
+ });
240
+ /**
241
+ * Get transaction history - Paginated
242
+ * Supports usePaginatedQuery for infinite scroll
243
+ */
244
+ export const getTransactionHistory = query({
245
+ args: {
246
+ branchId: v.optional(v.id("branches")),
247
+ startDate: v.optional(v.number()),
248
+ endDate: v.optional(v.number()),
249
+ paymentMethod: v.optional(v.union(v.literal("mobile_money"), v.literal("card"), v.literal("cash"))),
250
+ cursor: v.optional(v.string()),
251
+ numItems: v.optional(v.number()),
252
+ },
253
+ handler: async (ctx, args) => {
254
+ // Allow both attendants and admins
255
+ try {
256
+ await getCurrentAttendant(ctx);
257
+ }
258
+ catch {
259
+ const { getCurrentAdmin } = await import("./lib/auth");
260
+ await getCurrentAdmin(ctx);
261
+ }
262
+ const numItems = args.numItems ?? 20;
263
+ // Get all payments
264
+ const result = await ctx.db
265
+ .query("payments")
266
+ .withIndex("by_created")
267
+ .order("desc")
268
+ .filter((q) => q.eq(q.field("isDeleted"), false))
269
+ .paginate({
270
+ cursor: args.cursor ?? null,
271
+ numItems,
272
+ });
273
+ let filtered = result.page;
274
+ // Apply filters
275
+ if (args.startDate) {
276
+ filtered = filtered.filter((p) => p.createdAt >= args.startDate);
277
+ }
278
+ if (args.endDate) {
279
+ filtered = filtered.filter((p) => p.createdAt <= args.endDate);
280
+ }
281
+ if (args.paymentMethod) {
282
+ filtered = filtered.filter((p) => p.paymentMethod === args.paymentMethod);
283
+ }
284
+ // Filter by branch if specified
285
+ if (args.branchId) {
286
+ const filteredWithOrders = await Promise.all(filtered.map(async (payment) => {
287
+ const order = await ctx.db.get(payment.orderId);
288
+ return { payment, order };
289
+ }));
290
+ filtered = filteredWithOrders
291
+ .filter(({ order }) => order && !order.isDeleted && order.branchId === args.branchId)
292
+ .map(({ payment }) => payment);
293
+ }
294
+ return {
295
+ page: filtered,
296
+ isDone: result.isDone,
297
+ continueCursor: result.continueCursor,
298
+ };
299
+ },
300
+ });
301
+ /**
302
+ * Get transaction summary statistics
303
+ */
304
+ export const getTransactionSummary = query({
305
+ args: {
306
+ branchId: v.optional(v.id("branches")),
307
+ startDate: v.optional(v.number()),
308
+ endDate: v.optional(v.number()),
309
+ },
310
+ handler: async (ctx, args) => {
311
+ // Allow both attendants and admins
312
+ try {
313
+ await getCurrentAttendant(ctx);
314
+ }
315
+ catch {
316
+ const { getCurrentAdmin } = await import("./lib/auth");
317
+ await getCurrentAdmin(ctx);
318
+ }
319
+ const now = Date.now();
320
+ const startDate = args.startDate || (now - 30 * 24 * 60 * 60 * 1000);
321
+ const endDate = args.endDate || now;
322
+ // Get all payments
323
+ let payments = await ctx.db
324
+ .query("payments")
325
+ .withIndex("by_created")
326
+ .filter((q) => q.and(q.eq(q.field("isDeleted"), false), q.eq(q.field("status"), "completed")))
327
+ .collect();
328
+ // Filter by date
329
+ payments = payments.filter((p) => p.createdAt >= startDate && p.createdAt <= endDate);
330
+ // Filter by branch if specified
331
+ if (args.branchId) {
332
+ const paymentsWithOrders = await Promise.all(payments.map(async (payment) => {
333
+ const order = await ctx.db.get(payment.orderId);
334
+ return { payment, order };
335
+ }));
336
+ payments = paymentsWithOrders
337
+ .filter(({ order }) => order && !order.isDeleted && order.branchId === args.branchId)
338
+ .map(({ payment }) => payment);
339
+ }
340
+ const totalAmount = payments.reduce((sum, p) => sum + p.amount, 0);
341
+ const byMethod = payments.reduce((acc, p) => {
342
+ acc[p.paymentMethod] = (acc[p.paymentMethod] || 0) + p.amount;
343
+ return acc;
344
+ }, {});
345
+ const byStatus = payments.reduce((acc, p) => {
346
+ acc[p.status] = (acc[p.status] || 0) + 1;
347
+ return acc;
348
+ }, {});
349
+ return {
350
+ totalTransactions: payments.length,
351
+ totalAmount: Math.round(totalAmount * 100) / 100,
352
+ averageTransaction: payments.length > 0
353
+ ? Math.round((totalAmount / payments.length) * 100) / 100
354
+ : 0,
355
+ byMethod,
356
+ byStatus,
357
+ };
358
+ },
359
+ });
360
+ //# sourceMappingURL=payments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments.js","sourceRoot":"","sources":["../../convex/payments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { Id } from "./_generated/dataModel";
2
+ /**
3
+ * Resource Usage Functions
4
+ *
5
+ * Handles daily resource consumption tracking (detergent, tokens, water cycles).
6
+ * Used by attendants to log daily resource usage at branches.
7
+ */
8
+ /**
9
+ * Get resource usage by branch
10
+ */
11
+ export declare const getByBranch: import("convex/server").RegisteredQuery<"public", {
12
+ startDate?: string | undefined;
13
+ endDate?: string | undefined;
14
+ limit?: number | undefined;
15
+ branchId: import("convex/values").GenericId<"branches">;
16
+ }, Promise<{
17
+ _id: import("convex/values").GenericId<"resourceUsageLogs">;
18
+ _creationTime: number;
19
+ notes?: string | undefined;
20
+ waterCycles?: number | undefined;
21
+ isDeleted: boolean;
22
+ branchId: import("convex/values").GenericId<"branches">;
23
+ attendantId: import("convex/values").GenericId<"attendants">;
24
+ date: string;
25
+ detergentUnits: number;
26
+ tokensUsed: number;
27
+ loggedAt: number;
28
+ }[]>>;
29
+ /**
30
+ * Get resource usage by date
31
+ */
32
+ export declare const getByDate: import("convex/server").RegisteredQuery<"public", {
33
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
34
+ date: string;
35
+ }, Promise<{
36
+ _id: import("convex/values").GenericId<"resourceUsageLogs">;
37
+ _creationTime: number;
38
+ notes?: string | undefined;
39
+ waterCycles?: number | undefined;
40
+ isDeleted: boolean;
41
+ branchId: import("convex/values").GenericId<"branches">;
42
+ attendantId: import("convex/values").GenericId<"attendants">;
43
+ date: string;
44
+ detergentUnits: number;
45
+ tokensUsed: number;
46
+ loggedAt: number;
47
+ }[]>>;
48
+ /**
49
+ * Get daily resource report for a branch
50
+ */
51
+ export declare const getDailyReport: import("convex/server").RegisteredQuery<"public", {
52
+ branchId: import("convex/values").GenericId<"branches">;
53
+ date: string;
54
+ }, Promise<{
55
+ date: string;
56
+ branchId: import("convex/values").GenericId<"branches">;
57
+ logs: {
58
+ _id: import("convex/values").GenericId<"resourceUsageLogs">;
59
+ _creationTime: number;
60
+ notes?: string | undefined;
61
+ waterCycles?: number | undefined;
62
+ isDeleted: boolean;
63
+ branchId: import("convex/values").GenericId<"branches">;
64
+ attendantId: import("convex/values").GenericId<"attendants">;
65
+ date: string;
66
+ detergentUnits: number;
67
+ tokensUsed: number;
68
+ loggedAt: number;
69
+ }[];
70
+ totals: {
71
+ detergentUnits: number;
72
+ tokensUsed: number;
73
+ waterCycles: number;
74
+ };
75
+ logCount: number;
76
+ }>>;
77
+ /**
78
+ * Log daily resource usage
79
+ */
80
+ export declare const logUsage: import("convex/server").RegisteredMutation<"public", {
81
+ notes?: string | undefined;
82
+ date?: string | undefined;
83
+ waterCycles?: number | undefined;
84
+ branchId: import("convex/values").GenericId<"branches">;
85
+ detergentUnits: number;
86
+ tokensUsed: number;
87
+ }, Promise<Id<"resourceUsageLogs">>>;
88
+ /**
89
+ * Get resource usage summary for date range
90
+ */
91
+ export declare const getUsageSummary: import("convex/server").RegisteredQuery<"public", {
92
+ branchId?: import("convex/values").GenericId<"branches"> | undefined;
93
+ startDate?: string | undefined;
94
+ endDate?: string | undefined;
95
+ }, Promise<{
96
+ totals: {
97
+ detergentUnits: number;
98
+ tokensUsed: number;
99
+ waterCycles: number;
100
+ };
101
+ averagePerDay: {
102
+ detergentUnits: number;
103
+ tokensUsed: number;
104
+ waterCycles: number;
105
+ };
106
+ usageByDay: Record<string, {
107
+ detergentUnits: number;
108
+ tokensUsed: number;
109
+ waterCycles: number;
110
+ logCount: number;
111
+ }>;
112
+ totalLogs: number;
113
+ uniqueDays: number;
114
+ dateRange: {
115
+ start: string | undefined;
116
+ end: string | undefined;
117
+ };
118
+ }>>;
119
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../convex/resources.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAE5C;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;KAsCtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;KAqCpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;GA2CzB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;oCAuEnB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;wBAkEkB,MAAM;oBAAc,MAAM;qBAAe,MAAM;kBAAY,MAAM;;;;;;;;GAwB7G,CAAC"}