@flowselections/floriday-verkoop-module 1.0.53 → 1.0.55
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.
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.js +68 -183
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +42 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +42 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +42 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +42 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/cart-lock.functions.d.ts +42 -0
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +462 -0
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +141 -23
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.js +111 -15
- package/dist-lib/lib/create-order.functions.d.ts +714 -0
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +126 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +42 -0
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts +42 -0
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-public.functions.d.ts +294 -0
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +210 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.d.ts +168 -0
- package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.js +12 -6
- package/dist-lib/lib/load-carriers.functions.d.ts +42 -0
- package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +210 -0
- package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.js +10 -5
- package/dist-lib/lib/logistics-stock.functions.d.ts +84 -0
- package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.d.ts +42 -0
- package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.js +15 -9
- package/dist-lib/lib/order-buffers.functions.d.ts +126 -0
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.js +10 -10
- package/dist-lib/lib/order-carrier.functions.d.ts +84 -0
- package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-carrier.functions.js +20 -11
- package/dist-lib/lib/order-pickup.functions.d.ts +84 -0
- package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-pickup.functions.js +20 -11
- package/dist-lib/lib/order-row.server.d.ts +24 -0
- package/dist-lib/lib/order-row.server.d.ts.map +1 -0
- package/dist-lib/lib/order-row.server.js +58 -0
- package/dist-lib/lib/order-shipments.functions.d.ts +168 -0
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-shipments.functions.js +11 -6
- package/dist-lib/lib/salesorders-list.functions.d.ts +42 -0
- package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.d.ts +210 -0
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +84 -0
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +42 -0
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderKarindelingCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderKarindelingCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrderKarindelingCard.d.ts","sourceRoot":"","sources":["../../../src/components/verkoop/OrderKarindelingCard.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AA4C/D,wBAAgB,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,2CA8LvE"}
|
|
@@ -1,208 +1,93 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// Toont karindeling
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
2
|
+
// Toont de karindeling van de buffer waarin deze order valt.
|
|
3
|
+
//
|
|
4
|
+
// BELANGRIJK: deze kaart LEEST de karren uit `order_carts`/`order_cart_items`
|
|
5
|
+
// via de server-fn `listOrderCarts`. Hij berekent niets zelf — de planner
|
|
6
|
+
// draait server-side (cart-replan v3 / logistics_plan_buffer_sql). Een eigen
|
|
7
|
+
// herberekening in de browser gaf eerder een andere indeling dan de database
|
|
8
|
+
// (één artikel per kar, verkeerde kar-telling) en is daarom verwijderd.
|
|
9
|
+
import { useEffect, useMemo } from "react";
|
|
10
|
+
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
11
|
+
import { useServerFn } from "@tanstack/react-start";
|
|
8
12
|
import { Badge, Card, CardContent, CardHeader, CardTitle, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@flowselections/core";
|
|
9
13
|
import { CheckCircle2, Lock } from "lucide-react";
|
|
10
14
|
import { supabase } from "../../integrations/supabase/client";
|
|
11
15
|
import { formatBeladingNotation } from "../../lib/load-carrier-labels";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
function deriveCartsFromFloriday(order) {
|
|
15
|
-
const o = order.raw.order ?? {};
|
|
16
|
-
const pack = o?.packingConfiguration ?? {};
|
|
17
|
-
const ppc = Math.max(1, Number(pack.piecesPerPackage ?? order.quantity.count ?? 1));
|
|
18
|
-
const cpl = Math.max(1, Number(pack.packagesPerLayer ?? 1));
|
|
19
|
-
const lpc = Math.max(1, Number(pack.layersPerLoadCarrier ?? 1));
|
|
20
|
-
const totalPieces = Math.max(0, Number(o.numberOfPieces ?? order.totalPieces ?? 0));
|
|
21
|
-
if (totalPieces <= 0)
|
|
22
|
-
return [];
|
|
23
|
-
const totalCrates = Math.ceil(totalPieces / ppc);
|
|
24
|
-
const cratesPerCart = cpl * lpc;
|
|
25
|
-
const fullCarts = Math.floor(totalCrates / cratesPerCart);
|
|
26
|
-
const remainderCrates = totalCrates - fullCarts * cratesPerCart;
|
|
27
|
-
const carts = [];
|
|
28
|
-
let n = 1;
|
|
29
|
-
for (let i = 0; i < fullCarts; i++) {
|
|
30
|
-
carts.push({
|
|
31
|
-
cart_number: n++,
|
|
32
|
-
is_complete: true,
|
|
33
|
-
occupancy_pct: 100,
|
|
34
|
-
total_layers_used: lpc,
|
|
35
|
-
items: [{
|
|
36
|
-
product_name: order.productName,
|
|
37
|
-
crates: cratesPerCart,
|
|
38
|
-
plants: cratesPerCart * ppc,
|
|
39
|
-
plants_per_crate: ppc,
|
|
40
|
-
crates_per_layer: cpl,
|
|
41
|
-
layers_per_cart: lpc,
|
|
42
|
-
layer_share_pct: 100,
|
|
43
|
-
}],
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
if (remainderCrates > 0) {
|
|
47
|
-
const layersUsed = Math.ceil(remainderCrates / cpl);
|
|
48
|
-
const occ = Math.round(((layersUsed / lpc) * 100) * 100) / 100;
|
|
49
|
-
carts.push({
|
|
50
|
-
cart_number: n,
|
|
51
|
-
is_complete: false,
|
|
52
|
-
occupancy_pct: occ,
|
|
53
|
-
total_layers_used: layersUsed,
|
|
54
|
-
items: [{
|
|
55
|
-
product_name: order.productName,
|
|
56
|
-
crates: remainderCrates,
|
|
57
|
-
plants: remainderCrates * ppc,
|
|
58
|
-
plants_per_crate: ppc,
|
|
59
|
-
crates_per_layer: cpl,
|
|
60
|
-
layers_per_cart: lpc,
|
|
61
|
-
layer_share_pct: occ,
|
|
62
|
-
}],
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return carts;
|
|
66
|
-
}
|
|
16
|
+
import { listOrderCarts } from "../../lib/cart-replan.functions";
|
|
17
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
67
18
|
function belading(i) {
|
|
68
19
|
// Eén notatie in de hele module: lagen × fusten/laag × planten/fust
|
|
69
20
|
// (Floriday-UI-volgorde, bewust anders dan de API-veldvolgorde).
|
|
70
|
-
|
|
71
|
-
|
|
21
|
+
const l = i.layers_per_cart ?? 0;
|
|
22
|
+
const c = i.crates_per_layer ?? 0;
|
|
23
|
+
const p = i.plants_per_crate ?? 0;
|
|
24
|
+
if (!l || !c || !p)
|
|
25
|
+
return "—";
|
|
26
|
+
return formatBeladingNotation(l, c, p) ?? `${l}×${c}×${p}`;
|
|
72
27
|
}
|
|
73
28
|
export function OrderKarindelingCard({ order }) {
|
|
74
29
|
// Lokale/mailbox-orders hebben een prefix (`local:`, `mailbox-proposal:`) in
|
|
75
|
-
// hun DTO-id
|
|
76
|
-
// dus die prefix moet eraf voor de query — anders faalt de UUID-cast en valt
|
|
77
|
-
// de kaart terug op de Floriday-modus met slechts één artikel.
|
|
30
|
+
// hun DTO-id; de DB gebruikt de kale UUID.
|
|
78
31
|
const rawId = order?.id ?? order.raw?.order?.id ?? null;
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
const
|
|
32
|
+
const stripped = typeof rawId === "string" ? rawId.replace(/^(local:|mailbox-proposal:)/, "") : null;
|
|
33
|
+
const orderId = stripped && UUID_RE.test(stripped) ? stripped : null;
|
|
34
|
+
const fetchCarts = useServerFn(listOrderCarts);
|
|
35
|
+
const queryClient = useQueryClient();
|
|
36
|
+
const queryKey = ["order-carts", orderId];
|
|
37
|
+
const { data, isLoading, error } = useQuery({
|
|
38
|
+
queryKey,
|
|
39
|
+
enabled: !!orderId,
|
|
40
|
+
staleTime: 15000,
|
|
41
|
+
retry: false,
|
|
42
|
+
queryFn: async () => fetchCarts({ data: { orderId: orderId } }),
|
|
43
|
+
});
|
|
44
|
+
// Realtime op de karren zelf — niet meer op products/order_items, want die
|
|
45
|
+
// voedden de verwijderde client-planner.
|
|
85
46
|
useEffect(() => {
|
|
86
47
|
if (!orderId)
|
|
87
48
|
return;
|
|
88
|
-
|
|
89
|
-
const load = async () => {
|
|
90
|
-
// 1) Bepaal de buffer van deze order.
|
|
91
|
-
const { data: orderRow } = await supabase
|
|
92
|
-
.from("orders")
|
|
93
|
-
.select("plan_locked_at, buffer_id")
|
|
94
|
-
.eq("id", orderId)
|
|
95
|
-
.maybeSingle();
|
|
96
|
-
if (!active)
|
|
97
|
-
return;
|
|
98
|
-
const bid = orderRow?.buffer_id ?? null;
|
|
99
|
-
setLockedAt(orderRow?.plan_locked_at ?? null);
|
|
100
|
-
setBufferId(bid);
|
|
101
|
-
// 2) Verzamel alle orders in deze buffer (of alleen deze order als er
|
|
102
|
-
// geen buffer bekend is).
|
|
103
|
-
let orderIds = [orderId];
|
|
104
|
-
let siblingOrders = [];
|
|
105
|
-
if (bid) {
|
|
106
|
-
const { data: sibs } = await supabase
|
|
107
|
-
.from("orders")
|
|
108
|
-
.select("id, order_number")
|
|
109
|
-
.eq("buffer_id", bid)
|
|
110
|
-
.is("deleted_at", null);
|
|
111
|
-
siblingOrders = (sibs ?? []).map((s) => ({
|
|
112
|
-
id: s.id,
|
|
113
|
-
order_number: s.order_number,
|
|
114
|
-
}));
|
|
115
|
-
if (siblingOrders.length > 0)
|
|
116
|
-
orderIds = siblingOrders.map((s) => s.id);
|
|
117
|
-
}
|
|
118
|
-
if (!active)
|
|
119
|
-
return;
|
|
120
|
-
setBufferOrders(siblingOrders);
|
|
121
|
-
// 3) Items van alle orders in de buffer.
|
|
122
|
-
const { data: itemRows } = await supabase
|
|
123
|
-
.from("order_items")
|
|
124
|
-
.select("id, order_id, product_id, product_name, quantity, products(plants_per_crate, crates_per_layer, layers_per_cart)")
|
|
125
|
-
.in("order_id", orderIds);
|
|
126
|
-
if (!active)
|
|
127
|
-
return;
|
|
128
|
-
const items = itemRows ?? [];
|
|
129
|
-
setDbItems(items);
|
|
130
|
-
const raws = items.map((it) => ({
|
|
131
|
-
id: it.id,
|
|
132
|
-
product_id: it.product_id,
|
|
133
|
-
product_name: it.product_name,
|
|
134
|
-
quantity: Number(it.quantity ?? 0),
|
|
135
|
-
plants_per_crate: Math.max(1, Number(it.products?.plants_per_crate ?? 1)),
|
|
136
|
-
crates_per_layer: Math.max(1, Number(it.products?.crates_per_layer ?? 1)),
|
|
137
|
-
layers_per_cart: Math.max(1, Number(it.products?.layers_per_cart ?? 1)),
|
|
138
|
-
}));
|
|
139
|
-
const expanded = await expandOrderItemsForPlanner(supabase, raws);
|
|
140
|
-
if (!active)
|
|
141
|
-
return;
|
|
142
|
-
setPlannerInputs(expanded);
|
|
143
|
-
};
|
|
144
|
-
void load();
|
|
49
|
+
const invalidate = () => void queryClient.invalidateQueries({ queryKey: ["order-carts", orderId] });
|
|
145
50
|
const channel = supabase
|
|
146
|
-
.channel(`order-
|
|
147
|
-
.on("postgres_changes", { event: "
|
|
148
|
-
.on("postgres_changes", { event: "*", schema: "public", table: "
|
|
149
|
-
.on("postgres_changes", { event: "UPDATE", schema: "public", table: "
|
|
51
|
+
.channel(`order-carts-${orderId}`)
|
|
52
|
+
.on("postgres_changes", { event: "*", schema: "public", table: "order_carts" }, invalidate)
|
|
53
|
+
.on("postgres_changes", { event: "*", schema: "public", table: "order_cart_items" }, invalidate)
|
|
54
|
+
.on("postgres_changes", { event: "UPDATE", schema: "public", table: "orders" }, invalidate)
|
|
150
55
|
.subscribe();
|
|
151
56
|
return () => {
|
|
152
|
-
active = false;
|
|
153
57
|
void supabase.removeChannel(channel);
|
|
154
58
|
};
|
|
155
|
-
}, [orderId]);
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
59
|
+
}, [orderId, queryClient]);
|
|
60
|
+
const carts = (data?.carts ?? []);
|
|
61
|
+
const orders = data?.orders ?? [];
|
|
62
|
+
const lockedAt = data?.planLockedAt ?? null;
|
|
63
|
+
const blocked = data?.blocked ?? null;
|
|
64
|
+
// De DB-order-id (verschilt van de DTO-id bij Floriday-orders).
|
|
65
|
+
const dbOrderId = data?.orderId ?? null;
|
|
66
|
+
const orderNumberByItem = useMemo(() => {
|
|
67
|
+
const numberByOrder = new Map();
|
|
68
|
+
for (const o of orders)
|
|
69
|
+
numberByOrder.set(o.id, o.order_number);
|
|
164
70
|
const m = new Map();
|
|
165
|
-
for (const
|
|
166
|
-
m.set(
|
|
71
|
+
for (const it of data?.itemOrders ?? []) {
|
|
72
|
+
m.set(it.id, { orderId: it.order_id, orderNumber: numberByOrder.get(it.order_id) ?? null });
|
|
73
|
+
}
|
|
167
74
|
return m;
|
|
168
|
-
}, [
|
|
169
|
-
|
|
170
|
-
|
|
75
|
+
}, [data, orders]);
|
|
76
|
+
// Bron-badge uit de data: order_carts.source + algorithm_version.
|
|
77
|
+
const sourceLabel = useMemo(() => {
|
|
78
|
+
const srcs = [...new Set(carts.map((c) => c.source ?? "onbekend"))];
|
|
79
|
+
const vers = [...new Set(carts.map((c) => c.algorithm_version).filter((v) => v != null))];
|
|
80
|
+
if (srcs.length === 0)
|
|
171
81
|
return null;
|
|
172
|
-
return
|
|
173
|
-
}, [
|
|
174
|
-
const floridayCarts = useMemo(() => deriveCartsFromFloriday(order), [order]);
|
|
175
|
-
const usingVoorraad = plannerCarts !== null;
|
|
176
|
-
const carts = usingVoorraad
|
|
177
|
-
? plannerCarts.map((c) => {
|
|
178
|
-
const orderIds = new Set();
|
|
179
|
-
const items = c.items.map((i) => {
|
|
180
|
-
const oid = itemToOrder.get(i.order_item_id) ?? null;
|
|
181
|
-
if (oid)
|
|
182
|
-
orderIds.add(oid);
|
|
183
|
-
return {
|
|
184
|
-
product_name: i.product_name,
|
|
185
|
-
crates: i.crates,
|
|
186
|
-
plants: i.plants,
|
|
187
|
-
plants_per_crate: i.plants_per_crate,
|
|
188
|
-
crates_per_layer: i.crates_per_layer,
|
|
189
|
-
layers_per_cart: i.layers_per_cart,
|
|
190
|
-
layer_share_pct: i.layer_share_pct,
|
|
191
|
-
order_id: oid,
|
|
192
|
-
order_number: oid ? orderNumberById.get(oid) ?? null : null,
|
|
193
|
-
};
|
|
194
|
-
});
|
|
195
|
-
return {
|
|
196
|
-
cart_number: c.cart_number,
|
|
197
|
-
is_complete: c.is_complete,
|
|
198
|
-
occupancy_pct: c.occupancy_pct,
|
|
199
|
-
total_layers_used: c.total_layers_used,
|
|
200
|
-
items,
|
|
201
|
-
order_ids: [...orderIds],
|
|
202
|
-
};
|
|
203
|
-
})
|
|
204
|
-
: floridayCarts;
|
|
205
|
-
const source = usingVoorraad ? "voorraad" : "floriday";
|
|
82
|
+
return `${srcs.join(", ")}${vers.length > 0 ? ` · v${vers.join("/")}` : ""}`;
|
|
83
|
+
}, [carts]);
|
|
206
84
|
const lockedDate = lockedAt ? new Date(lockedAt).toLocaleString("nl-NL") : null;
|
|
207
|
-
|
|
85
|
+
const multiOrder = orders.length > 1;
|
|
86
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsx(CardTitle, { className: "text-base", children: "Karindeling" }), _jsxs("div", { className: "flex items-center gap-2", children: [lockedAt && (_jsxs(Badge, { variant: "outline", className: "gap-1", children: [_jsx(Lock, { className: "h-3 w-3" }), "Vergrendeld \u2014 pakbon geprint ", lockedDate] })), multiOrder && (_jsxs(Badge, { variant: "outline", title: orders.map((o) => o.order_number ?? o.id).join(", "), children: ["Buffer \u00B7 ", orders.length, " orders"] })), !error && (_jsxs(Badge, { variant: "secondary", children: [carts.length, " kar(ren)", sourceLabel ? ` · bron: ${sourceLabel}` : ""] }))] })] }), _jsx(CardContent, { children: isLoading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Karindeling laden\u2026" })) : error ? (_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-sm font-medium text-destructive", children: "Kon de karindeling niet laden." }), _jsx("p", { className: "text-sm text-muted-foreground", children: error.message })] })) : carts.length === 0 ? (_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen karindeling beschikbaar voor deze order." }), blocked && (blocked.explanation || blocked.reason) && (_jsxs("p", { className: "text-sm text-destructive", children: [blocked.explanation ?? blocked.reason, blocked.at ? ` (${new Date(blocked.at).toLocaleString("nl-NL")})` : ""] }))] })) : (_jsx("div", { className: "space-y-4", children: carts.map((c) => (_jsxs("div", { className: "rounded-md border border-border", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border bg-muted/30 px-3 py-2 text-sm", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("span", { className: "font-mono font-medium", children: ["Kar ", c.cart_number] }), _jsxs(Badge, { variant: c.is_complete ? "default" : "secondary", className: "gap-1", children: [c.is_complete && _jsx(CheckCircle2, { className: "h-3 w-3" }), c.is_complete ? "Volledig" : "Deels"] }), c.order_id === null && multiOrder && (_jsx(Badge, { variant: "outline", children: "Gedeelde kar" })), c.carrier_type && (_jsxs(Badge, { variant: "outline", className: "font-mono text-[10px]", children: [c.carrier_type, c.max_layers ? ` · ${c.max_layers} lagen` : ""] }))] }), _jsxs("div", { className: "text-muted-foreground", children: [Number(c.total_layers_used ?? 0), " lagen \u00B7 benutting", " ", Math.round(Number(c.occupancy_pct ?? 0) * 10) / 10, "%"] })] }), _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Artikel" }), _jsx(TableHead, { className: "text-right", children: "Planten" }), _jsx(TableHead, { className: "text-right", children: "Fusten" }), _jsx(TableHead, { children: "Belading" }), _jsx(TableHead, { className: "text-right", children: "Laag-aandeel" })] }) }), _jsx(TableBody, { children: (c.order_cart_items ?? []).map((i) => {
|
|
87
|
+
const own = i.order_item_id
|
|
88
|
+
? orderNumberByItem.get(i.order_item_id)
|
|
89
|
+
: undefined;
|
|
90
|
+
const crates = Number(i.crates ?? 0);
|
|
91
|
+
return (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { children: i.product_name ?? "—" }), multiOrder && own?.orderNumber && (_jsx(Badge, { variant: own.orderId === dbOrderId ? "default" : "outline", className: "text-[10px]", children: own.orderNumber }))] }) }), _jsx(TableCell, { className: "text-right", children: crates * Number(i.plants_per_crate ?? 0) }), _jsx(TableCell, { className: "text-right", children: crates }), _jsx(TableCell, { className: "font-mono text-xs", children: belading(i) }), _jsxs(TableCell, { className: "text-right", children: [Math.round(Number(i.layer_share_pct ?? 0) * 10) / 10, "%"] })] }, i.id));
|
|
92
|
+
}) })] })] }, c.id))) })) })] }));
|
|
208
93
|
}
|
|
@@ -10736,6 +10736,24 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
10736
10736
|
};
|
|
10737
10737
|
Relationships: [];
|
|
10738
10738
|
};
|
|
10739
|
+
maps_job_lease: {
|
|
10740
|
+
Row: {
|
|
10741
|
+
job: string;
|
|
10742
|
+
locked_until: string;
|
|
10743
|
+
updated_at: string;
|
|
10744
|
+
};
|
|
10745
|
+
Insert: {
|
|
10746
|
+
job: string;
|
|
10747
|
+
locked_until?: string;
|
|
10748
|
+
updated_at?: string;
|
|
10749
|
+
};
|
|
10750
|
+
Update: {
|
|
10751
|
+
job?: string;
|
|
10752
|
+
locked_until?: string;
|
|
10753
|
+
updated_at?: string;
|
|
10754
|
+
};
|
|
10755
|
+
Relationships: [];
|
|
10756
|
+
};
|
|
10739
10757
|
maps_request_queue: {
|
|
10740
10758
|
Row: {
|
|
10741
10759
|
attempts: number;
|
|
@@ -13597,6 +13615,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
13597
13615
|
foutmelding: string | null;
|
|
13598
13616
|
gebruiker_id: string | null;
|
|
13599
13617
|
gebruiker_naam: string;
|
|
13618
|
+
gebruikte_bron: string | null;
|
|
13619
|
+
gebruikte_layout_id: string | null;
|
|
13600
13620
|
gestart_op: string | null;
|
|
13601
13621
|
herkomst: string | null;
|
|
13602
13622
|
id: string;
|
|
@@ -13627,6 +13647,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
13627
13647
|
foutmelding?: string | null;
|
|
13628
13648
|
gebruiker_id?: string | null;
|
|
13629
13649
|
gebruiker_naam?: string;
|
|
13650
|
+
gebruikte_bron?: string | null;
|
|
13651
|
+
gebruikte_layout_id?: string | null;
|
|
13630
13652
|
gestart_op?: string | null;
|
|
13631
13653
|
herkomst?: string | null;
|
|
13632
13654
|
id?: string;
|
|
@@ -13657,6 +13679,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
13657
13679
|
foutmelding?: string | null;
|
|
13658
13680
|
gebruiker_id?: string | null;
|
|
13659
13681
|
gebruiker_naam?: string;
|
|
13682
|
+
gebruikte_bron?: string | null;
|
|
13683
|
+
gebruikte_layout_id?: string | null;
|
|
13660
13684
|
gestart_op?: string | null;
|
|
13661
13685
|
herkomst?: string | null;
|
|
13662
13686
|
id?: string;
|
|
@@ -20326,6 +20350,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
20326
20350
|
foutmelding: string | null;
|
|
20327
20351
|
gebruiker_id: string | null;
|
|
20328
20352
|
gebruiker_naam: string;
|
|
20353
|
+
gebruikte_bron: string | null;
|
|
20354
|
+
gebruikte_layout_id: string | null;
|
|
20329
20355
|
gestart_op: string | null;
|
|
20330
20356
|
herkomst: string | null;
|
|
20331
20357
|
id: string;
|
|
@@ -20447,6 +20473,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
20447
20473
|
foutmelding: string | null;
|
|
20448
20474
|
gebruiker_id: string | null;
|
|
20449
20475
|
gebruiker_naam: string;
|
|
20476
|
+
gebruikte_bron: string | null;
|
|
20477
|
+
gebruikte_layout_id: string | null;
|
|
20450
20478
|
gestart_op: string | null;
|
|
20451
20479
|
herkomst: string | null;
|
|
20452
20480
|
id: string;
|
|
@@ -21503,6 +21531,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
21503
21531
|
};
|
|
21504
21532
|
Returns: string;
|
|
21505
21533
|
};
|
|
21534
|
+
logistics_document_type_map: {
|
|
21535
|
+
Args: {
|
|
21536
|
+
_document_code: string;
|
|
21537
|
+
};
|
|
21538
|
+
Returns: Database["public"]["Enums"]["doc_layout_type"][];
|
|
21539
|
+
};
|
|
21506
21540
|
logistics_emit_event: {
|
|
21507
21541
|
Args: {
|
|
21508
21542
|
p_event_type: string;
|
|
@@ -21966,6 +22000,14 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
|
|
|
21966
22000
|
};
|
|
21967
22001
|
Returns: string;
|
|
21968
22002
|
};
|
|
22003
|
+
maps_cron_token: {
|
|
22004
|
+
Args: never;
|
|
22005
|
+
Returns: string;
|
|
22006
|
+
};
|
|
22007
|
+
maps_kick_queue: {
|
|
22008
|
+
Args: never;
|
|
22009
|
+
Returns: undefined;
|
|
22010
|
+
};
|
|
21969
22011
|
mark_offer_clicked: {
|
|
21970
22012
|
Args: {
|
|
21971
22013
|
p_code: string;
|