@flowselections/floriday-verkoop-module 1.0.20 → 1.0.24
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/karindeling/AfmetingenTab.d.ts +6 -0
- package/dist-lib/components/karindeling/AfmetingenTab.d.ts.map +1 -0
- package/dist-lib/components/karindeling/AfmetingenTab.js +128 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts +2 -0
- package/dist-lib/components/karindeling/KarindelingPage.d.ts.map +1 -0
- package/dist-lib/components/karindeling/KarindelingPage.js +102 -0
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts +6 -0
- package/dist-lib/components/verkoop/OrderControlStatusCard.d.ts.map +1 -0
- package/dist-lib/components/verkoop/OrderControlStatusCard.js +41 -0
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.js +83 -37
- package/dist-lib/components/verkoop/SalesOrderDetailPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailPage.js +74 -8
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +2 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.js +3 -2
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.js +40 -5
- package/dist-lib/components/verkoop/VerkoopOrdersPage.d.ts.map +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.js +19 -3
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +12 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1536 -581
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +1536 -581
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.js +24 -9
- package/dist-lib/integrations/supabase/client.server.d.ts +1536 -581
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +1543 -562
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +3 -9
- package/dist-lib/lib/cart-lock.functions.d.ts +1536 -581
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planner.d.ts +9 -1
- package/dist-lib/lib/cart-planner.d.ts.map +1 -1
- package/dist-lib/lib/cart-planner.js +21 -4
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +140842 -0
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -0
- package/dist-lib/lib/cart-planning-settings.functions.js +375 -0
- package/dist-lib/lib/cart-replan.functions.d.ts +15811 -1082
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.js +85 -27
- package/dist-lib/lib/create-order.functions.d.ts +19021 -7561
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +4558 -1693
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-fulfillment.server.js +1 -1
- package/dist-lib/lib/floriday-central-token.server.d.ts +12 -0
- package/dist-lib/lib/floriday-central-token.server.d.ts.map +1 -0
- package/dist-lib/lib/floriday-central-token.server.js +58 -0
- package/dist-lib/lib/floriday-gateway.server.d.ts +2 -2
- package/dist-lib/lib/floriday-gateway.server.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.server.js +10 -37
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +1536 -581
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.js +14 -4
- package/dist-lib/lib/floriday-mirror.functions.d.ts +12806 -0
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -0
- package/dist-lib/lib/floriday-mirror.functions.js +278 -0
- package/dist-lib/lib/floriday-public.functions.d.ts +10989 -4301
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-public.functions.js +114 -38
- package/dist-lib/lib/floriday-sync.d.ts +0 -1
- package/dist-lib/lib/floriday-sync.d.ts.map +1 -1
- package/dist-lib/lib/floriday-sync.js +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +7772 -2997
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.d.ts +38420 -0
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -0
- package/dist-lib/lib/order-buffers.functions.js +244 -0
- package/dist-lib/lib/order-shipments.functions.d.ts +6165 -2345
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-mapping.d.ts +5 -0
- package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-mapping.js +8 -1
- package/dist-lib/lib/salesorders.functions.d.ts +30443 -1979
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.js +307 -0
- package/dist-lib/lib/tradeitems.functions.d.ts +1536 -581
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/dist-lib/lib/useSalesOrderDetailQuery.d.ts +2 -0
- package/dist-lib/lib/useSalesOrderDetailQuery.d.ts.map +1 -0
- package/dist-lib/lib/useSalesOrderDetailQuery.js +50 -0
- package/dist-lib/lib/useSalesOrdersQuery.d.ts +2 -2
- package/dist-lib/lib/useSalesOrdersQuery.d.ts.map +1 -1
- package/dist-lib/lib/useSalesOrdersQuery.js +139 -10
- package/package.json +5 -5
|
@@ -33,8 +33,107 @@ const ENTITY_TABLE = {
|
|
|
33
33
|
const CachedListSchema = z.object({
|
|
34
34
|
environment: EnvSchema,
|
|
35
35
|
entity: z.string().min(1),
|
|
36
|
-
limit: z.number().int().positive().max(
|
|
36
|
+
limit: z.number().int().positive().max(20000).optional(),
|
|
37
|
+
// Optioneel — alleen benut voor entity "sales-orders".
|
|
38
|
+
since: z.string().optional(),
|
|
39
|
+
until: z.string().optional(),
|
|
40
|
+
dateField: z.enum(["ordered", "delivery"]).optional(),
|
|
37
41
|
});
|
|
42
|
+
// Sales-orders lezen we via een aparte, geoptimaliseerde tak: scope op de
|
|
43
|
+
// actieve connectie, sorteer op sequence_number DESC, pagineer met .range(),
|
|
44
|
+
// en filter serverside op de opgegeven periode. Zo blijft dit toekomstbestendig
|
|
45
|
+
// bij tienduizenden orders in de cache.
|
|
46
|
+
async function readSalesOrdersCache(supabase, args) {
|
|
47
|
+
// 1) Actieve connection_id voor de gekozen omgeving.
|
|
48
|
+
const dbEnv = args.environment === "live" ? "live" : "staging";
|
|
49
|
+
const { data: connRows, error: connErr } = await supabase
|
|
50
|
+
.from("floriday_connections")
|
|
51
|
+
.select("id")
|
|
52
|
+
.eq("is_active", true)
|
|
53
|
+
.eq("environment", dbEnv)
|
|
54
|
+
.limit(1);
|
|
55
|
+
if (connErr)
|
|
56
|
+
throw new Error(`floriday_connections lezen faalde: ${connErr.message}`);
|
|
57
|
+
const connectionId = (connRows ?? [])[0]?.id;
|
|
58
|
+
if (!connectionId)
|
|
59
|
+
return [];
|
|
60
|
+
// 2) Kolom in `data`-JSON die correspondeert met het gekozen dateField.
|
|
61
|
+
// Postgrest ondersteunt filters op JSON via ->>.
|
|
62
|
+
const dateColumn = args.dateField === "delivery"
|
|
63
|
+
? "data->delivery->>latestDeliveryDateTime"
|
|
64
|
+
: "data->>orderDateTime";
|
|
65
|
+
// 3) Gepagineerd lezen tot `limit` of tot de dataset uitgeput is.
|
|
66
|
+
const pageSize = 1000;
|
|
67
|
+
const collected = [];
|
|
68
|
+
for (let from = 0; from < args.limit; from += pageSize) {
|
|
69
|
+
const to = Math.min(from + pageSize - 1, args.limit - 1);
|
|
70
|
+
let q = supabase
|
|
71
|
+
.from("floriday_salesorders_cache")
|
|
72
|
+
.select("*")
|
|
73
|
+
.eq("connection_id", connectionId)
|
|
74
|
+
.eq("is_deleted", false)
|
|
75
|
+
.order("sequence_number", { ascending: false })
|
|
76
|
+
.range(from, to);
|
|
77
|
+
if (args.since)
|
|
78
|
+
q = q.gte(dateColumn, args.since);
|
|
79
|
+
if (args.until)
|
|
80
|
+
q = q.lt(dateColumn, args.until);
|
|
81
|
+
const { data: rows, error } = await q;
|
|
82
|
+
if (error)
|
|
83
|
+
throw new Error(`floriday_salesorders_cache lezen faalde: ${error.message}`);
|
|
84
|
+
const batch = rows ?? [];
|
|
85
|
+
collected.push(...batch);
|
|
86
|
+
if (batch.length < pageSize)
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
return collected;
|
|
90
|
+
}
|
|
91
|
+
async function joinOrderNumbers(supabase, rows) {
|
|
92
|
+
const ids = Array.from(new Set(rows
|
|
93
|
+
.map((r) => String(r?.floriday_id ?? r?.data?.salesOrderId ?? ""))
|
|
94
|
+
.filter((id) => id.length > 0)));
|
|
95
|
+
if (ids.length === 0)
|
|
96
|
+
return rows;
|
|
97
|
+
const orderNumbers = new Map();
|
|
98
|
+
const chunkSize = 500;
|
|
99
|
+
const maxAttempts = 3;
|
|
100
|
+
for (let i = 0; i < ids.length; i += chunkSize) {
|
|
101
|
+
const chunk = ids.slice(i, i + chunkSize);
|
|
102
|
+
let lastErr = null;
|
|
103
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
104
|
+
try {
|
|
105
|
+
const { data: mapRows, error: mapErr } = await supabase
|
|
106
|
+
.from("floriday_order_number_map")
|
|
107
|
+
.select("floriday_id, order_number")
|
|
108
|
+
.in("floriday_id", chunk);
|
|
109
|
+
if (mapErr)
|
|
110
|
+
throw new Error(mapErr.message);
|
|
111
|
+
for (const m of mapRows ?? []) {
|
|
112
|
+
orderNumbers.set(String(m.floriday_id), String(m.order_number ?? ""));
|
|
113
|
+
}
|
|
114
|
+
lastErr = null;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
lastErr = e;
|
|
119
|
+
if (attempt < maxAttempts) {
|
|
120
|
+
await new Promise((r) => setTimeout(r, 250 * attempt));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (lastErr) {
|
|
125
|
+
// Non-fatal: log en ga door zonder order_number verrijking voor deze chunk.
|
|
126
|
+
console.warn(`[floriday-public] joinOrderNumbers chunk ${i / chunkSize} faalde na ${maxAttempts} pogingen:`, lastErr instanceof Error ? lastErr.message : lastErr);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return rows.map((r) => {
|
|
130
|
+
const floridayId = String(r?.floriday_id ?? r?.data?.salesOrderId ?? "");
|
|
131
|
+
const orderNumber = orderNumbers.get(floridayId);
|
|
132
|
+
return orderNumber
|
|
133
|
+
? { ...r, order_number: orderNumber, data: { ...(r.data ?? {}), orderNumber } }
|
|
134
|
+
: r;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
38
137
|
export const getFlorydayCachedList = createServerFn({ method: "POST" })
|
|
39
138
|
.middleware([requireSupabaseAuth])
|
|
40
139
|
.inputValidator((d) => CachedListSchema.parse(d))
|
|
@@ -43,50 +142,27 @@ export const getFlorydayCachedList = createServerFn({ method: "POST" })
|
|
|
43
142
|
if (!table) {
|
|
44
143
|
throw new Error(`Onbekende entity "${data.entity}" — toegestane waarden: ${Object.keys(ENTITY_TABLE).join(", ")}`);
|
|
45
144
|
}
|
|
145
|
+
// Sales-orders: aparte, geoptimaliseerde leestak.
|
|
146
|
+
if (data.entity === "sales-orders") {
|
|
147
|
+
const rows = await readSalesOrdersCache(context.supabase, {
|
|
148
|
+
environment: data.environment,
|
|
149
|
+
limit: data.limit ?? 20000,
|
|
150
|
+
since: data.since,
|
|
151
|
+
until: data.until,
|
|
152
|
+
dateField: data.dateField ?? "ordered",
|
|
153
|
+
});
|
|
154
|
+
const withNumbers = await joinOrderNumbers(context.supabase, rows);
|
|
155
|
+
return { entity: data.entity, rows: withNumbers };
|
|
156
|
+
}
|
|
157
|
+
// Overige entities: onveranderd gedrag.
|
|
46
158
|
const limit = data.limit ?? 1000;
|
|
47
159
|
let q = context.supabase.from(table).select("*").limit(limit);
|
|
48
|
-
|
|
49
|
-
const hasIsDeleted = [
|
|
50
|
-
"floriday_salesorders_cache",
|
|
51
|
-
"floriday_trade_items_cache",
|
|
52
|
-
].includes(table);
|
|
160
|
+
const hasIsDeleted = table === "floriday_trade_items_cache";
|
|
53
161
|
if (hasIsDeleted)
|
|
54
162
|
q = q.eq("is_deleted", false);
|
|
55
163
|
const { data: rows, error } = await q;
|
|
56
164
|
if (error)
|
|
57
165
|
throw new Error(`${table} lezen faalde: ${error.message}`);
|
|
58
|
-
if (table === "floriday_salesorders_cache") {
|
|
59
|
-
const ids = (rows ?? [])
|
|
60
|
-
.map((r) => String(r?.floriday_id ?? r?.data?.salesOrderId ?? ""))
|
|
61
|
-
.filter((id) => id.length > 0);
|
|
62
|
-
if (ids.length > 0) {
|
|
63
|
-
const mapped = [];
|
|
64
|
-
const idSet = new Set(ids);
|
|
65
|
-
for (let from = 0; from < 10000; from += 1000) {
|
|
66
|
-
const { data: chunkRows, error: mapError } = await context.supabase
|
|
67
|
-
.from("floriday_order_number_map")
|
|
68
|
-
.select("floriday_id, order_number")
|
|
69
|
-
.range(from, from + 999);
|
|
70
|
-
if (mapError)
|
|
71
|
-
throw new Error(`floriday_order_number_map lezen faalde: ${mapError.message}`);
|
|
72
|
-
const batch = chunkRows ?? [];
|
|
73
|
-
mapped.push(...batch.filter((m) => idSet.has(String(m.floriday_id))));
|
|
74
|
-
if (batch.length < 1000)
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
const orderNumbers = new Map((mapped ?? []).map((m) => [String(m.floriday_id), String(m.order_number ?? "")]));
|
|
78
|
-
return {
|
|
79
|
-
entity: data.entity,
|
|
80
|
-
rows: (rows ?? []).map((r) => {
|
|
81
|
-
const floridayId = String(r?.floriday_id ?? r?.data?.salesOrderId ?? "");
|
|
82
|
-
const orderNumber = orderNumbers.get(floridayId) ?? null;
|
|
83
|
-
return orderNumber
|
|
84
|
-
? { ...r, order_number: orderNumber, data: { ...(r.data ?? {}), orderNumber } }
|
|
85
|
-
: r;
|
|
86
|
-
}),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
166
|
return { entity: data.entity, rows: rows ?? [] };
|
|
91
167
|
});
|
|
92
168
|
const CodeListSchema = z.object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floriday-sync.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"floriday-sync.d.ts","sourceRoot":"","sources":["../../src/lib/floriday-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW,CAAC,IAAI;IAC/B,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAkCD,wBAAsB,cAAc,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnE,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,GACtB,OAAO,CAAC,UAAU,CAAC,CA+FrB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAOlC"}
|
|
@@ -108,7 +108,7 @@ export async function syncBySequence(supabase, opts) {
|
|
|
108
108
|
export async function loadActiveConnections(supabase) {
|
|
109
109
|
const { data, error } = await supabase
|
|
110
110
|
.from("floriday_connections")
|
|
111
|
-
.select("id, environment,
|
|
111
|
+
.select("id, environment, api_key, is_active")
|
|
112
112
|
.eq("is_active", true);
|
|
113
113
|
if (error)
|
|
114
114
|
throw new Error(`floriday_connections lezen faalde: ${error.message}`);
|