@flowselections/floriday-verkoop-module 1.0.17 → 1.0.18

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 +381 -150
  21. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  22. package/dist-lib/integrations/supabase/client.d.ts +381 -150
  23. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  24. package/dist-lib/integrations/supabase/client.server.d.ts +381 -150
  25. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  26. package/dist-lib/integrations/supabase/types.d.ts +397 -154
  27. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  28. package/dist-lib/lib/cart-lock.functions.d.ts +381 -150
  29. package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
  30. package/dist-lib/lib/cart-replan.functions.d.ts +789 -327
  31. package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/create-order.functions.d.ts +38897 -1457
  33. package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
  34. package/dist-lib/lib/create-order.functions.js +792 -52
  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 +1174 -481
  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 +381 -150
  41. package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
  42. package/dist-lib/lib/floriday-public.functions.d.ts +2701 -1084
  43. package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
  44. package/dist-lib/lib/floriday-writes.functions.d.ts +1939 -784
  45. package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
  46. package/dist-lib/lib/order-shipments.functions.d.ts +47158 -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 +1174 -481
  52. package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
  53. package/dist-lib/lib/tradeitems.functions.d.ts +381 -150
  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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"}