@flowselections/floriday-verkoop-module 1.0.17 → 1.0.19

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 (57) hide show
  1. package/dist-lib/components/verkoop/CreateOrderPage.d.ts.map +1 -1
  2. package/dist-lib/components/verkoop/CreateOrderPage.js +6 -4
  3. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts +6 -0
  4. package/dist-lib/components/verkoop/EditLocalOrderDialog.d.ts.map +1 -0
  5. package/dist-lib/components/verkoop/EditLocalOrderDialog.js +102 -0
  6. package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
  7. package/dist-lib/components/verkoop/OrderKarindelingCard.js +26 -28
  8. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts +5 -0
  9. package/dist-lib/components/verkoop/OrderShipmentsCard.d.ts.map +1 -0
  10. package/dist-lib/components/verkoop/OrderShipmentsCard.js +137 -0
  11. package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
  12. package/dist-lib/components/verkoop/SalesOrderDetailPage.js +8 -2
  13. package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
  14. package/dist-lib/components/verkoop/SalesOrderDetailView.js +2 -1
  15. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +4 -1
  16. package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
  17. package/dist-lib/components/verkoop/SalesOrdersTable.js +2 -2
  18. package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
  19. package/dist-lib/components/verkoop/VerkoopOrdersPage.js +43 -1
  20. package/dist-lib/integrations/supabase/auth-middleware.d.ts +436 -149
  21. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  22. package/dist-lib/integrations/supabase/client.d.ts +436 -149
  23. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  24. package/dist-lib/integrations/supabase/client.server.d.ts +436 -149
  25. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  26. package/dist-lib/integrations/supabase/types.d.ts +452 -153
  27. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  28. package/dist-lib/lib/cart-lock.functions.d.ts +436 -149
  29. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  30. package/dist-lib/lib/cart-replan.functions.d.ts +884 -310
  31. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/create-order.functions.d.ts +39491 -1379
  33. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  34. package/dist-lib/lib/create-order.functions.js +814 -64
  35. package/dist-lib/lib/expand-group-order-items.d.ts +13 -0
  36. package/dist-lib/lib/expand-group-order-items.d.ts.map +1 -0
  37. package/dist-lib/lib/expand-group-order-items.js +216 -0
  38. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +1321 -460
  39. package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
  40. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +436 -149
  41. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  42. package/dist-lib/lib/floriday-public.functions.d.ts +3052 -1043
  43. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  44. package/dist-lib/lib/floriday-writes.functions.d.ts +2180 -745
  45. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  46. package/dist-lib/lib/order-shipments.functions.d.ts +47382 -0
  47. package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -0
  48. package/dist-lib/lib/order-shipments.functions.js +178 -0
  49. package/dist-lib/lib/salesorders-mapping.d.ts +1 -0
  50. package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
  51. package/dist-lib/lib/salesorders.functions.d.ts +1321 -460
  52. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  53. package/dist-lib/lib/tradeitems.functions.d.ts +436 -149
  54. package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
  55. package/dist-lib/lib/useSalesOrdersQuery.d.ts.map +1 -1
  56. package/dist-lib/lib/useSalesOrdersQuery.js +39 -2
  57. package/package.json +2 -2
@@ -0,0 +1,178 @@
1
+ // Bezorgmomenten / deelleveringen voor bestellingen (m.n. reserveringen).
2
+ // - listOrderShipments : haalt shipments + items + totalen per order-item op
3
+ // - createShipment : maakt een nieuw bezorgmoment aan
4
+ // - updateShipmentItem : wijzigt aantallen van een geplande levering
5
+ // - deleteShipment : annuleert een geplande levering
6
+ // - markShipmentShipped : boekt voorraad af via RPC (fysiek + gereserveerd)
7
+ import { createServerFn } from "@tanstack/react-start";
8
+ import { z } from "zod";
9
+ import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
10
+ const ShipmentItemInput = z.object({
11
+ orderItemId: z.string().uuid(),
12
+ productId: z.string().uuid().nullable().optional(),
13
+ productName: z.string().min(1),
14
+ quantity: z.number().positive(),
15
+ });
16
+ const CreateShipmentInput = z.object({
17
+ orderId: z.string().uuid(),
18
+ deliveryDate: z.string().min(1).nullable().optional(),
19
+ carrierId: z.string().uuid().nullable().optional(),
20
+ deliveryLocationId: z.string().uuid().nullable().optional(),
21
+ notes: z.string().max(2000).nullable().optional(),
22
+ items: z.array(ShipmentItemInput).min(1),
23
+ });
24
+ async function assertRemainingCapacity(supabase, orderId, incoming, ignoreShipmentId) {
25
+ const { data: items } = await supabase
26
+ .from("order_items")
27
+ .select("id, product_name, quantity")
28
+ .eq("order_id", orderId);
29
+ const orderMap = new Map();
30
+ for (const it of items ?? []) {
31
+ orderMap.set(String(it.id), {
32
+ name: String(it.product_name ?? ""),
33
+ qty: Number(it.quantity ?? 0),
34
+ });
35
+ }
36
+ const orderItemIds = Array.from(orderMap.keys());
37
+ if (orderItemIds.length === 0)
38
+ throw new Error("Bestelling heeft geen regels.");
39
+ const { data: existing } = await supabase
40
+ .from("order_shipment_items")
41
+ .select("order_item_id, quantity, shipment_id, order_shipments!inner(id, status)")
42
+ .in("order_item_id", orderItemIds);
43
+ const already = new Map();
44
+ for (const row of existing ?? []) {
45
+ const st = row.order_shipments?.status;
46
+ if (st === "cancelled")
47
+ continue;
48
+ if (ignoreShipmentId && row.shipment_id === ignoreShipmentId)
49
+ continue;
50
+ const k = String(row.order_item_id);
51
+ already.set(k, (already.get(k) ?? 0) + Number(row.quantity ?? 0));
52
+ }
53
+ for (const inc of incoming) {
54
+ const meta = orderMap.get(inc.orderItemId);
55
+ if (!meta)
56
+ throw new Error(`Order-regel ${inc.orderItemId} niet gevonden.`);
57
+ const used = already.get(inc.orderItemId) ?? 0;
58
+ const remaining = Math.max(0, meta.qty - used);
59
+ if (inc.quantity > remaining + 1e-6) {
60
+ throw new Error(`Te leveren aantal voor "${meta.name}" (${inc.quantity}) overschrijdt het openstaande aantal (${remaining}).`);
61
+ }
62
+ }
63
+ }
64
+ export const listOrderShipments = createServerFn({ method: "GET" })
65
+ .middleware([requireSupabaseAuth])
66
+ .inputValidator((input) => z.object({ orderId: z.string().uuid() }).parse(input))
67
+ .handler(async ({ data, context }) => {
68
+ const { data: shipments } = await context.supabase
69
+ .from("order_shipments")
70
+ .select("id, order_id, shipment_number, delivery_date, carrier_id, delivery_location_id, status, shipped_at, notes, created_at, order_shipment_items(id, order_item_id, product_id, product_name, quantity)")
71
+ .eq("order_id", data.orderId)
72
+ .order("shipment_number");
73
+ const { data: items } = await context.supabase
74
+ .from("order_items")
75
+ .select("id, product_id, product_name, quantity, unit, products(plants_per_crate)")
76
+ .eq("order_id", data.orderId);
77
+ // Totalen per order-item: besteld, geleverd (shipped), gepland (planned).
78
+ const shipped = new Map();
79
+ const planned = new Map();
80
+ for (const s of shipments ?? []) {
81
+ const status = s.status;
82
+ const rows = s.order_shipment_items ?? [];
83
+ for (const r of rows) {
84
+ const k = String(r.order_item_id);
85
+ const q = Number(r.quantity ?? 0);
86
+ if (status === "shipped")
87
+ shipped.set(k, (shipped.get(k) ?? 0) + q);
88
+ else if (status === "planned")
89
+ planned.set(k, (planned.get(k) ?? 0) + q);
90
+ }
91
+ }
92
+ const totals = (items ?? []).map((it) => {
93
+ const id = String(it.id);
94
+ const ordered = Number(it.quantity ?? 0);
95
+ const del = shipped.get(id) ?? 0;
96
+ const pln = planned.get(id) ?? 0;
97
+ const ppc = Math.max(1, Number(it.products?.plants_per_crate ?? 1));
98
+ return {
99
+ order_item_id: id,
100
+ product_id: it.product_id,
101
+ product_name: String(it.product_name ?? ""),
102
+ unit: String(it.unit ?? "stuks"),
103
+ plants_per_crate: ppc,
104
+ ordered,
105
+ shipped: del,
106
+ planned: pln,
107
+ remaining: Math.max(0, ordered - del - pln),
108
+ outstanding: Math.max(0, ordered - del),
109
+ };
110
+ });
111
+ return { shipments: shipments ?? [], totals };
112
+ });
113
+ export const createShipment = createServerFn({ method: "POST" })
114
+ .middleware([requireSupabaseAuth])
115
+ .inputValidator((input) => CreateShipmentInput.parse(input))
116
+ .handler(async ({ data, context }) => {
117
+ await assertRemainingCapacity(context.supabase, data.orderId, data.items.map((i) => ({ orderItemId: i.orderItemId, quantity: i.quantity })));
118
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
119
+ const { data: shipment, error } = await supabaseAdmin.from("order_shipments")
120
+ .insert({
121
+ order_id: data.orderId,
122
+ delivery_date: data.deliveryDate ?? null,
123
+ carrier_id: data.carrierId ?? null,
124
+ delivery_location_id: data.deliveryLocationId ?? null,
125
+ notes: data.notes ?? null,
126
+ status: "planned",
127
+ })
128
+ .select("id")
129
+ .single();
130
+ if (error)
131
+ throw new Error(error.message);
132
+ const rows = data.items.map((i) => ({
133
+ shipment_id: shipment.id,
134
+ order_item_id: i.orderItemId,
135
+ product_id: i.productId ?? null,
136
+ product_name: i.productName,
137
+ quantity: i.quantity,
138
+ }));
139
+ const { error: itemsErr } = await supabaseAdmin.from("order_shipment_items").insert(rows);
140
+ if (itemsErr) {
141
+ await supabaseAdmin.from("order_shipments").delete().eq("id", shipment.id);
142
+ throw new Error(itemsErr.message);
143
+ }
144
+ return { ok: true, shipmentId: shipment.id };
145
+ });
146
+ export const markShipmentShipped = createServerFn({ method: "POST" })
147
+ .middleware([requireSupabaseAuth])
148
+ .inputValidator((input) => z.object({ shipmentId: z.string().uuid() }).parse(input))
149
+ .handler(async ({ data }) => {
150
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
151
+ const { error } = await supabaseAdmin.rpc("mark_shipment_shipped", {
152
+ p_shipment_id: data.shipmentId,
153
+ });
154
+ if (error)
155
+ throw new Error(error.message);
156
+ return { ok: true };
157
+ });
158
+ export const cancelShipment = createServerFn({ method: "POST" })
159
+ .middleware([requireSupabaseAuth])
160
+ .inputValidator((input) => z.object({ shipmentId: z.string().uuid() }).parse(input))
161
+ .handler(async ({ data, context }) => {
162
+ // Alleen planned mag geannuleerd / verwijderd worden — shipped is definitief.
163
+ const { data: s } = await context.supabase
164
+ .from("order_shipments")
165
+ .select("status")
166
+ .eq("id", data.shipmentId)
167
+ .maybeSingle();
168
+ if (!s)
169
+ throw new Error("Bezorgmoment niet gevonden.");
170
+ if (s.status === "shipped") {
171
+ throw new Error("Reeds verzonden bezorgmomenten kunnen niet worden geannuleerd.");
172
+ }
173
+ const { supabaseAdmin } = await import("../integrations/supabase/client.server");
174
+ const { error } = await supabaseAdmin.from("order_shipments").delete().eq("id", data.shipmentId);
175
+ if (error)
176
+ throw new Error(error.message);
177
+ return { ok: true };
178
+ });
@@ -16,6 +16,7 @@ export interface SalesOrderDTO {
16
16
  karCount: number;
17
17
  totalPieces: number;
18
18
  isLocal?: boolean;
19
+ isReservation?: boolean;
19
20
  customer: {
20
21
  name: string;
21
22
  postalCode: string;
@@ -1 +1 @@
1
- {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}