@flowselections/layout-maker 1.24.1 → 1.28.0

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 (43) hide show
  1. package/README.md +139 -139
  2. package/dist-lib/components/AfdrukKnop.d.ts +19 -19
  3. package/dist-lib/components/NetwerkPrintersDialog.d.ts +7 -7
  4. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  5. package/dist-lib/components/PrintQueuePage.js +12 -1
  6. package/dist-lib/components/PrinterSetupWizard.js +3 -3
  7. package/dist-lib/components/PrintersRedirectPage.d.ts +1 -1
  8. package/dist-lib/components/PrintersRedirectPage.js +14 -14
  9. package/dist-lib/integrations/supabase/auth-middleware.d.ts +38 -0
  10. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  11. package/dist-lib/integrations/supabase/client.server.d.ts +38 -0
  12. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  13. package/dist-lib/integrations/supabase/types.d.ts +38 -0
  14. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  15. package/dist-lib/lib/aiLayout.functions.d.ts +38 -0
  16. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  17. package/dist-lib/lib/aiLayout.server.js +9 -9
  18. package/dist-lib/lib/browserPrint.js +1 -1
  19. package/dist-lib/lib/layoutPreview.js +7 -7
  20. package/dist-lib/lib/orderData.server.d.ts +25 -3
  21. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  22. package/dist-lib/lib/orderData.server.js +171 -55
  23. package/dist-lib/lib/pakbonBuilder.d.ts +2 -0
  24. package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
  25. package/dist-lib/lib/pakbonBuilder.js +1 -1
  26. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  27. package/dist-lib/lib/pakbonHtml.js +53 -50
  28. package/dist-lib/lib/printQueue.server.d.ts +15 -3
  29. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  30. package/dist-lib/lib/printQueue.server.js +142 -13
  31. package/dist-lib/lib/printService.functions.d.ts +152 -0
  32. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  33. package/dist-lib/lib/printService.server.d.ts.map +1 -1
  34. package/dist-lib/lib/printService.server.js +3 -0
  35. package/dist-lib/lib/productiebonHtml.js +15 -15
  36. package/dist-lib/lib/profielHtml.js +18 -18
  37. package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
  38. package/dist-lib/lib/supabaseAdmin.server.js +43 -43
  39. package/dist-lib/lib/testpagina.js +3 -3
  40. package/dist-lib/lib/testprint.js +4 -4
  41. package/dist-lib/lib/useDocumentData.d.ts +4 -0
  42. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  43. package/package.json +139 -139
@@ -26,7 +26,7 @@ export function paginaCss(formaat, orientatie, margeMm = 0) {
26
26
  const gedraaid = formaat && orientatie === "landscape"
27
27
  ? `${formaat.hoogte}mm ${formaat.breedte}mm`
28
28
  : size;
29
- return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
29
+ return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
30
30
  @media print { html, body { margin: 0; padding: 0; } }`;
31
31
  }
32
32
  /**
@@ -79,8 +79,8 @@ function elementHtml(el, ctx) {
79
79
  case "cirkel":
80
80
  return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
81
81
  case "barcode":
82
- return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
- <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
82
+ return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
+ <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
84
84
  <div style="font-size:7pt">${esc(inhoud)}</div></div>`;
85
85
  case "qrcode":
86
86
  return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
@@ -125,10 +125,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
125
125
  const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
126
126
  const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
127
127
  const h = layout.orientatie === "landscape" ? layout.breedte_mm : layout.hoogte_mm;
128
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
- <style>@page{size:${b}mm ${h}mm;margin:0}
130
- body{margin:0;background:#e5e7eb}
131
- .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
- @media print{body{background:#fff}}</style></head>
128
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
+ <style>@page{size:${b}mm ${h}mm;margin:0}
130
+ body{margin:0;background:#e5e7eb}
131
+ .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
+ @media print{body{background:#fff}}</style></head>
133
133
  <body><div class="pagina">${body}</div></body></html>`;
134
134
  }
@@ -1,15 +1,37 @@
1
1
  import type { PrintDb } from "./printQueue.server.js";
2
2
  type Rij = Record<string, any>;
3
+ export type PakbonScope = "order" | "buffer" | "cart";
3
4
  /** Bevat de meegestuurde payload zelf al orderregels of karren? */
4
5
  export declare function heeftOrderInhoud(bron: unknown): boolean;
5
- /** Zoekt het order-id in de (geneste) payload van een printopdracht. */
6
+ /** Zoekt de scope-verwijzing in de (geneste) payload van een printopdracht. */
6
7
  export declare function zoekOrderVerwijzing(payload: unknown): {
7
8
  orderId: string | null;
8
9
  ordernummer: string | null;
10
+ bufferId: string | null;
11
+ cartId: string | null;
9
12
  };
10
13
  /**
11
- * Bouwt de ruwe ordergegevens (vorm die `maakPakbonOrder` verwacht) op basis
12
- * van het order-id of ordernummer. Geeft `null` als de order niet te vinden is.
14
+ * Bepaalt op basis van de payload welke scope actief is.
15
+ * orderId → order, bufferId → buffer, cartId → cart. Ontbreekt alles, dan
16
+ * order (huidig gedrag, met ordernummer als terugval).
17
+ */
18
+ export declare function bepaalScope(payload: unknown): {
19
+ scope: PakbonScope;
20
+ id: string | null;
21
+ ordernummer: string | null;
22
+ };
23
+ /**
24
+ * Bouwt de ruwe pakbongegevens (vorm die `maakPakbonOrder` verwacht).
25
+ * Geeft `null` als er niets te vinden is.
26
+ */
27
+ export declare function laadPakbonData(db: PrintDb, opties: {
28
+ scope: PakbonScope;
29
+ id: string | null;
30
+ ordernummer?: string | null;
31
+ }): Promise<Rij | null>;
32
+ /**
33
+ * Terugvalpad vanuit de printwachtrij: leidt de scope af uit de payload en
34
+ * laadt de gegevens. Blijft bestaan zodat aanroepers niets hoeven te weten.
13
35
  */
14
36
  export declare function laadOrderVanuitDatabase(db: PrintDb, payload: unknown): Promise<Rij | null>;
15
37
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAuB/B,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAyBA;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAiKhG"}
1
+ {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CA2OrB;AAkCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
@@ -1,14 +1,20 @@
1
1
  // ============================================================================
2
2
  // src/lib/orderData.server.ts — ordergegevens ophalen uit de gedeelde database.
3
3
  // ----------------------------------------------------------------------------
4
- // Modules sturen bij een printopdracht vaak alleen verwijzingen mee (orderId of
5
- // ordernummer). Zonder inhoud zou de pakbon blanco worden. Dit bestand bouwt op
6
- // basis van die verwijzing een volledig pakbon-model uit `orders`,
4
+ // Modules sturen bij een printopdracht vaak alleen verwijzingen mee (orderId,
5
+ // bufferId of cartId). Zonder inhoud zou de pakbon blanco worden. Dit bestand
6
+ // bouwt op basis van die verwijzing een volledig pakbon-model uit `orders`,
7
7
  // `order_items`, `order_carts` en `order_cart_items`.
8
+ //
9
+ // Er is bewust ÉÉN laadfunctie met een scope-parameter:
10
+ // laadPakbonData({ scope: 'order' | 'buffer' | 'cart', id })
11
+ // Alle scopes leveren exact dezelfde vorm terug, zodat de renderer niet hoeft
12
+ // te weten welke scope actief was.
8
13
  // Draait alleen op de server (printwachtrij).
9
14
  // ============================================================================
10
15
  const arr = (v) => (Array.isArray(v) ? v : []);
11
16
  const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : 0);
17
+ const uniek = (v) => Array.from(new Set(v.map((x) => (x ? String(x) : "")).filter(Boolean)));
12
18
  /**
13
19
  * Deze tabellen horen bij een andere module. Bestaan ze in deze shell niet
14
20
  * (of mag de server er niet bij), dan mag dat nooit een printopdracht laten
@@ -33,7 +39,7 @@ export function heeftOrderInhoud(bron) {
33
39
  return true;
34
40
  return arr(b["producten"]).length > 0 || arr(b["regels"]).length > 0;
35
41
  }
36
- /** Zoekt het order-id in de (geneste) payload van een printopdracht. */
42
+ /** Zoekt de scope-verwijzing in de (geneste) payload van een printopdracht. */
37
43
  export function zoekOrderVerwijzing(payload) {
38
44
  const kandidaten = [];
39
45
  const verzamel = (v, diepte) => {
@@ -48,62 +54,153 @@ export function zoekOrderVerwijzing(payload) {
48
54
  verzamel(payload, 0);
49
55
  let orderId = null;
50
56
  let ordernummer = null;
57
+ let bufferId = null;
58
+ let cartId = null;
51
59
  for (const k of kandidaten) {
52
60
  orderId ?? (orderId = (k["orderId"] ?? k["order_id"] ?? null));
61
+ bufferId ?? (bufferId = (k["bufferId"] ?? k["buffer_id"] ?? null));
62
+ cartId ?? (cartId = (k["cartId"] ?? k["cart_id"] ?? k["karId"] ?? null));
53
63
  ordernummer ?? (ordernummer = (k["order_number"] ??
54
64
  k["orderNumber"] ??
55
65
  k["ordernummer"] ??
56
66
  k["reference"] ??
57
67
  null));
58
68
  }
69
+ const id = (v) => (typeof v === "string" && v.length > 8 ? v : null);
59
70
  return {
60
- orderId: typeof orderId === "string" && orderId.length > 8 ? orderId : null,
71
+ orderId: id(orderId),
72
+ bufferId: id(bufferId),
73
+ cartId: id(cartId),
61
74
  ordernummer: typeof ordernummer === "string" && ordernummer.trim() ? ordernummer.trim() : null,
62
75
  };
63
76
  }
64
77
  /**
65
- * Bouwt de ruwe ordergegevens (vorm die `maakPakbonOrder` verwacht) op basis
66
- * van het order-id of ordernummer. Geeft `null` als de order niet te vinden is.
78
+ * Bepaalt op basis van de payload welke scope actief is.
79
+ * orderId → order, bufferId → buffer, cartId → cart. Ontbreekt alles, dan
80
+ * order (huidig gedrag, met ordernummer als terugval).
67
81
  */
68
- export async function laadOrderVanuitDatabase(db, payload) {
69
- const { orderId, ordernummer } = zoekOrderVerwijzing(payload);
70
- if (!orderId && !ordernummer)
71
- return null;
72
- let order = null;
73
- if (orderId) {
74
- order = await veilig(() => db.from("orders").select("*").eq("id", orderId).maybeSingle());
82
+ export function bepaalScope(payload) {
83
+ const { orderId, bufferId, cartId, ordernummer } = zoekOrderVerwijzing(payload);
84
+ if (orderId)
85
+ return { scope: "order", id: orderId, ordernummer };
86
+ if (bufferId)
87
+ return { scope: "buffer", id: bufferId, ordernummer: null };
88
+ if (cartId)
89
+ return { scope: "cart", id: cartId, ordernummer: null };
90
+ return { scope: "order", id: null, ordernummer };
91
+ }
92
+ /**
93
+ * Bouwt de ruwe pakbongegevens (vorm die `maakPakbonOrder` verwacht).
94
+ * Geeft `null` als er niets te vinden is.
95
+ */
96
+ export async function laadPakbonData(db, opties) {
97
+ const { scope, id } = opties;
98
+ const ordernummer = opties.ordernummer ?? null;
99
+ let orders = [];
100
+ let regels = [];
101
+ let karrenRijen = [];
102
+ /** Alleen bij order-scope: binnen gedeelde karren filteren op eigen regels. */
103
+ let beperkTotEigenRegels = false;
104
+ if (scope === "order") {
105
+ if (!id && !ordernummer)
106
+ return null;
107
+ let order = null;
108
+ if (id) {
109
+ order = await veilig(() => db.from("orders").select("*").eq("id", id).maybeSingle());
110
+ }
111
+ if (!order && ordernummer) {
112
+ const rijen = await veilig(() => db
113
+ .from("orders")
114
+ .select("*")
115
+ .eq("order_number", ordernummer)
116
+ .is("deleted_at", null)
117
+ .limit(1));
118
+ order = arr(rijen)[0] ?? null;
119
+ }
120
+ if (!order)
121
+ return null;
122
+ orders = [order];
123
+ beperkTotEigenRegels = true;
124
+ regels = arr(await veilig(() => db.from("order_items").select("*").eq("order_id", order["id"])));
125
+ const eigenRegelIds = regels.map((r) => String(r["id"]));
126
+ // 1) karren die exclusief bij deze order horen
127
+ // 2) gedeelde/buffer-karren waar wél regels van deze order op staan
128
+ const [eigen, gedeeldeItems] = await Promise.all([
129
+ veilig(() => db
130
+ .from("order_carts")
131
+ .select("*")
132
+ .eq("order_id", order["id"])
133
+ .order("cart_number", { ascending: true })),
134
+ eigenRegelIds.length
135
+ ? veilig(() => db.from("order_cart_items").select("cart_id").in("order_item_id", eigenRegelIds))
136
+ : Promise.resolve([]),
137
+ ]);
138
+ karrenRijen = arr(eigen);
139
+ const bekend = new Set(karrenRijen.map((k) => String(k["id"])));
140
+ const extraIds = uniek(arr(gedeeldeItems).map((i) => i["cart_id"])).filter((kid) => !bekend.has(kid));
141
+ if (extraIds.length) {
142
+ karrenRijen.push(...arr(await veilig(() => db.from("order_carts").select("*").in("id", extraIds))));
143
+ }
75
144
  }
76
- if (!order && ordernummer) {
77
- const rijen = await veilig(() => db
78
- .from("orders")
79
- .select("*")
80
- .eq("order_number", ordernummer)
81
- .is("deleted_at", null)
82
- .limit(1));
83
- order = arr(rijen)[0] ?? null;
145
+ else {
146
+ if (!id)
147
+ return null;
148
+ // buffer: alle karren van de buffer. cart: precies één kar.
149
+ karrenRijen = arr(await veilig(() => scope === "buffer"
150
+ ? db.from("order_carts").select("*").eq("buffer_id", id)
151
+ : db.from("order_carts").select("*").eq("id", id)));
152
+ if (!karrenRijen.length)
153
+ return null;
154
+ const items = arr(await veilig(() => db
155
+ .from("order_cart_items")
156
+ .select("order_item_id")
157
+ .in("cart_id", karrenRijen.map((k) => k["id"]))));
158
+ const regelIds = uniek(items.map((i) => i["order_item_id"]));
159
+ if (regelIds.length) {
160
+ regels = arr(await veilig(() => db.from("order_items").select("*").in("id", regelIds)));
161
+ }
162
+ const orderIds = uniek([
163
+ ...regels.map((r) => r["order_id"]),
164
+ ...karrenRijen.map((k) => k["order_id"]),
165
+ ]);
166
+ if (orderIds.length) {
167
+ orders = arr(await veilig(() => db.from("orders").select("*").in("id", orderIds)));
168
+ }
84
169
  }
85
- if (!order)
86
- return null;
87
- const [regelsRuw, karrenRuw] = await Promise.all([
88
- veilig(() => db.from("order_items").select("*").eq("order_id", order["id"])),
89
- veilig(() => db
90
- .from("order_carts")
91
- .select("*")
92
- .eq("order_id", order["id"])
93
- .order("cart_number", { ascending: true })),
94
- ]);
95
- const regels = arr(regelsRuw);
96
- const karrenRijen = arr(karrenRuw);
170
+ karrenRijen.sort((a, b) => num(a["cart_number"]) - num(b["cart_number"]));
171
+ const eigenRegelIds = new Set(regels.map((r) => String(r["id"])));
172
+ const eigenOrderIds = new Set(orders.map((o) => String(o["id"])));
173
+ const regelPerId = new Map(regels.map((r) => [String(r["id"]), r]));
174
+ // --- karitems -------------------------------------------------------------
97
175
  let karItems = [];
98
176
  if (karrenRijen.length) {
99
- karItems = arr(await veilig(() => db
177
+ const alleItems = arr(await veilig(() => db
100
178
  .from("order_cart_items")
101
179
  .select("*")
102
180
  .in("cart_id", karrenRijen.map((k) => k["id"]))));
181
+ const karVanId = new Map(karrenRijen.map((k) => [String(k["id"]), k]));
182
+ karItems = alleItems.filter((i) => {
183
+ const regelId = i["order_item_id"] ? String(i["order_item_id"]) : "";
184
+ if (!beperkTotEigenRegels)
185
+ return true;
186
+ if (regelId)
187
+ return eigenRegelIds.has(regelId);
188
+ const kar = karVanId.get(String(i["cart_id"] ?? ""));
189
+ return eigenOrderIds.has(String(kar?.["order_id"] ?? ""));
190
+ });
191
+ // Markeer gedeelde karren: kar staat niet op één van onze orders, of er
192
+ // staan regels van meerdere orders op.
193
+ for (const kar of karrenRijen) {
194
+ const kid = String(kar["id"]);
195
+ const opKar = alleItems.filter((i) => String(i["cart_id"] ?? "") === kid);
196
+ const ordersOpKar = uniek(opKar.map((i) => regelPerId.get(String(i["order_item_id"] ?? ""))?.["order_id"]));
197
+ const vreemdeRegels = opKar.some((i) => i["order_item_id"] && !eigenRegelIds.has(String(i["order_item_id"])));
198
+ const anderseigenaar = kar["order_id"] != null && !eigenOrderIds.has(String(kar["order_id"]));
199
+ kar["__gedeeld"] = ordersOpKar.length > 1 || vreemdeRegels || anderseigenaar;
200
+ }
103
201
  }
104
- const productIds = Array.from(new Set([...regels, ...karItems]
105
- .map((r) => r["product_id"])
106
- .filter((v) => typeof v === "string")));
202
+ // --- productgegevens ------------------------------------------------------
203
+ const productIds = uniek([...regels, ...karItems].map((r) => r["product_id"]));
107
204
  const producten = new Map();
108
205
  if (productIds.length) {
109
206
  const data = await veilig(() => db
@@ -113,12 +210,6 @@ export async function laadOrderVanuitDatabase(db, payload) {
113
210
  for (const p of arr(data))
114
211
  producten.set(String(p["id"]), p);
115
212
  }
116
- const regelPerProduct = new Map();
117
- for (const r of regels) {
118
- const key = String(r["product_id"] ?? r["id"]);
119
- if (!regelPerProduct.has(key))
120
- regelPerProduct.set(key, r);
121
- }
122
213
  const maakProduct = (bron, aantalPlanten, fusten, perFust) => {
123
214
  const p = producten.get(String(bron["product_id"] ?? "")) ?? {};
124
215
  const extra = (p["custom_fields"] ?? {});
@@ -163,6 +254,7 @@ export async function laadOrderVanuitDatabase(db, payload) {
163
254
  karnummer: num(kar["cart_number"]) || index + 1,
164
255
  route: String(kar["carrier_type"] ?? ""),
165
256
  gewicht: kar["weight_kg"] ? `${num(kar["weight_kg"]).toFixed(1)} kg` : "",
257
+ gedeeld: kar["__gedeeld"] === true,
166
258
  opmerking: String(kar["notes"] ?? ""),
167
259
  lagen: lagen.slice(0, Math.max(maxLagen, lagen.length)).map((laag, j) => ({
168
260
  laagnummer: j + 1,
@@ -174,26 +266,50 @@ export async function laadOrderVanuitDatabase(db, payload) {
174
266
  });
175
267
  // --- losse orderregels (zonder karindeling) -------------------------------
176
268
  const losseRegels = regels.map((r) => {
177
- const fusten = num(r["plants_per_crate"]) > 0 ? Math.ceil(num(r["quantity"]) / num(r["plants_per_crate"])) : 0;
269
+ const fusten = num(r["plants_per_crate"]) > 0
270
+ ? Math.ceil(num(r["quantity"]) / num(r["plants_per_crate"]))
271
+ : 0;
178
272
  return maakProduct(r, num(r["quantity"]), fusten, num(r["plants_per_crate"]));
179
273
  });
274
+ return { ...maakKopsecties(orders, scope), karren, producten: losseRegels };
275
+ }
276
+ /**
277
+ * Kopsecties bij één of meerdere orders. Conservatief: bij meerdere orders
278
+ * tonen we de klant (als die gelijk is) en géén willekeurig ordernummer.
279
+ */
280
+ function maakKopsecties(orders, scope) {
281
+ const nummers = uniek(orders.map((o) => o["order_number"]));
282
+ const klanten = uniek(orders.map((o) => o["customer_name"]));
283
+ const klantIds = uniek(orders.map((o) => o["customer_id"]));
284
+ const eerste = orders[0] ?? {};
285
+ const meer = orders.length > 1;
286
+ const lijst = (v) => (v.length > 4 ? `${v.slice(0, 4).join(", ")} +${v.length - 4}` : v.join(", "));
180
287
  return {
181
288
  order: {
182
- nummer: String(order["order_number"] ?? ""),
183
- datum: String(order["order_date"] ?? ""),
184
- leverdatum: String(order["delivery_date"] ?? ""),
185
- referentie: String(order["order_number"] ?? ""),
186
- opmerking: String(order["notes"] ?? ""),
289
+ nummer: meer ? "" : String(eerste["order_number"] ?? ""),
290
+ datum: String(eerste["order_date"] ?? ""),
291
+ leverdatum: String(eerste["delivery_date"] ?? ""),
292
+ referentie: lijst(nummers),
293
+ opmerking: meer ? "" : String(eerste["notes"] ?? ""),
294
+ aantal_orders: orders.length,
295
+ ordernummers: nummers,
296
+ scope,
187
297
  },
188
298
  klant: {
189
- naam: String(order["customer_name"] ?? ""),
190
- nummer: String(order["customer_id"] ?? ""),
191
- referentie: String(order["order_number"] ?? ""),
299
+ naam: klanten.length === 1 ? klanten[0] : klanten.length ? `Meerdere klanten (${klanten.length})` : "",
300
+ nummer: klantIds.length === 1 ? klantIds[0] : "",
301
+ referentie: lijst(nummers),
192
302
  },
193
- karren,
194
- producten: losseRegels,
195
303
  };
196
304
  }
305
+ /**
306
+ * Terugvalpad vanuit de printwachtrij: leidt de scope af uit de payload en
307
+ * laadt de gegevens. Blijft bestaan zodat aanroepers niets hoeven te weten.
308
+ */
309
+ export async function laadOrderVanuitDatabase(db, payload) {
310
+ const { scope, id, ordernummer } = bepaalScope(payload);
311
+ return laadPakbonData(db, { scope, id, ordernummer });
312
+ }
197
313
  /** Telt fusten per soort op binnen één laag. */
198
314
  function vatFustenSamen(producten) {
199
315
  const per = new Map();
@@ -107,6 +107,8 @@ export interface DemoKar {
107
107
  route: string;
108
108
  chauffeur: string;
109
109
  gewicht: string;
110
+ /** Kar bevat ook regels van een andere order (buffer-/gedeelde kar). */
111
+ gedeeld?: boolean;
110
112
  lagen: DemoLaag[];
111
113
  }
112
114
  export declare const DEMO_ORDER: {
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,aAAa,GACb,QAAQ,GACR,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,cAAc,GACd,WAAW,GACX,QAAQ,GACR,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,oBAAoB,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAehE,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,UAErC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAYpD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsB9D;AAMD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,gBAAgB;;;GAU5B,CAAC;AA6BF,eAAO,MAAM,eAAe,EAAE,SAAS,EAgatC,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAE3D;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAcjE;AAED,wBAAgB,qBAAqB,IAAI,YAAY,CAmBpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,CAY9D;AAcD,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAOjF;AAID,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,KAAK,GAAG,QAAQ,GACxB,OAAO,CAET;AAKD,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnG;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AA2BD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAkGhB,OAAO,EAAE;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC;AAE1C,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,EAAE,CAE7D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GA2BjC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAC5B;AAID,eAAO,MAAM,eAAe,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAS7D,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAuB1F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAIvF;AAID,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAOpE;AA4BD,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,QAAQ,EAAE,CAenF;AAED,gDAAgD;AAChD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,SAAS,EAAE,CAenF;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,EAAE,CA6DtE"}
1
+ {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
@@ -814,7 +814,7 @@ function laagVingerafdruk(l) {
814
814
  }
815
815
  function karVingerafdruk(k) {
816
816
  // karnummer bewust niet meegenomen: alleen de indeling telt
817
- return [k.route, k.chauffeur, k.gewicht, (k.lagen ?? []).map(laagVingerafdruk).join("~")].join("#");
817
+ return [k.route, k.chauffeur, k.gewicht, k.gedeeld ? "gedeeld" : "", (k.lagen ?? []).map(laagVingerafdruk).join("~")].join("#");
818
818
  }
819
819
  /** Groepeert identieke karren. Bij `aan = false` blijft elke kar los. */
820
820
  export function groepeerIdentiekeKarren(karren, aan) {
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAmBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAGzB,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CA+D3D;AA4oBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA8BR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA2DR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAmBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAGzB,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAgE3D;AA6oBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA8BR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA2DR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -43,6 +43,7 @@ export function maakPakbonOrder(input) {
43
43
  route: String(k["route"] ?? ""),
44
44
  chauffeur: String(k["chauffeur"] ?? ""),
45
45
  gewicht: String(k["gewicht"] ?? ""),
46
+ gedeeld: k["gedeeld"] === true,
46
47
  lagen: arr(k["lagen"]).map((l, j) => ({
47
48
  laagnummer: Number(l["laagnummer"] ?? j + 1),
48
49
  belading: String(l["belading"] ?? ""),
@@ -320,6 +321,8 @@ function karKop(s, kar, velden, bundelTekst = "") {
320
321
  info.push(kar.chauffeur);
321
322
  if (velden.includes("route") && kar.route)
322
323
  info.push(kar.route);
324
+ if (kar.gedeeld)
325
+ info.push("gedeelde kar");
323
326
  const toonNummer = velden.includes("karnummer");
324
327
  if (!toonNummer && !info.length && !bundelTekst)
325
328
  return "";
@@ -640,56 +643,56 @@ export function renderPakbonDocument(config, order, opties = {}) {
640
643
  const font = opties.lettertype ?? 'Arial, Helvetica, "Segoe UI", sans-serif';
641
644
  const grootte = opties.lettergrootte ?? 8.5;
642
645
  const body = renderPakbonBody(config, order, opties);
643
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
644
- <title>${esc(opties.titel ?? "Pakbon")}</title>
645
- <style>
646
- @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
647
- * { box-sizing: border-box; }
648
- html, body { margin: 0; padding: 0; }
649
- body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
650
- .blok { margin-bottom: 2mm; }
651
- .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
652
- .vet { font-weight: 600; }
653
- .kv { display: flex; justify-content: space-between; gap: 3mm; }
654
- .kv .k { color: #6b7280; }
655
- .kv .v { font-weight: 500; }
656
- .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
657
- .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
658
- table.regels { width: 100%; border-collapse: collapse; }
659
- table.regels.vast { table-layout: fixed; }
660
- table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
661
- table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
662
- table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
663
- .rand { border: 0.2mm solid #d1d5db; }
664
- .onder { border-bottom: 0.2mm solid #d1d5db; }
665
- table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
666
- tr.zebra td { background: #f3f4f6; }
667
- .plijst { margin: 0; padding-left: 4mm; }
668
- .groep { margin-bottom: 1.5mm; }
669
- .regelrij { display: flex; gap: 2mm; }
670
- .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
671
- .karblok { margin-bottom: 2mm; }
672
- .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
673
- .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
674
- .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
675
- .laag { margin-bottom: 1.5mm; }
676
- .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
677
- .laagkop.compact { border-bottom: none; }
678
- .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
679
- .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
680
- .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
681
- .handtekening { margin-top: 3mm; }
682
- .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
683
- .lijnveld.hoog { padding-bottom: 10mm; }
684
- .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
685
- .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
686
- .qr { border: 0.25mm dashed #9ca3af; }
687
- .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
688
- .klein { font-size: 85%; color: #6b7280; }
689
- .breekvoor { break-before: page; page-break-before: always; }
690
- .heelhouden { break-inside: avoid; page-break-inside: avoid; }
691
- img { max-width: 100%; }
692
- </style></head>
646
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
647
+ <title>${esc(opties.titel ?? "Pakbon")}</title>
648
+ <style>
649
+ @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
650
+ * { box-sizing: border-box; }
651
+ html, body { margin: 0; padding: 0; }
652
+ body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
653
+ .blok { margin-bottom: 2mm; }
654
+ .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
655
+ .vet { font-weight: 600; }
656
+ .kv { display: flex; justify-content: space-between; gap: 3mm; }
657
+ .kv .k { color: #6b7280; }
658
+ .kv .v { font-weight: 500; }
659
+ .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
660
+ .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
661
+ table.regels { width: 100%; border-collapse: collapse; }
662
+ table.regels.vast { table-layout: fixed; }
663
+ table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
664
+ table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
665
+ table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
666
+ .rand { border: 0.2mm solid #d1d5db; }
667
+ .onder { border-bottom: 0.2mm solid #d1d5db; }
668
+ table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
669
+ tr.zebra td { background: #f3f4f6; }
670
+ .plijst { margin: 0; padding-left: 4mm; }
671
+ .groep { margin-bottom: 1.5mm; }
672
+ .regelrij { display: flex; gap: 2mm; }
673
+ .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
674
+ .karblok { margin-bottom: 2mm; }
675
+ .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
676
+ .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
677
+ .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
678
+ .laag { margin-bottom: 1.5mm; }
679
+ .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
680
+ .laagkop.compact { border-bottom: none; }
681
+ .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
682
+ .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
683
+ .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
684
+ .handtekening { margin-top: 3mm; }
685
+ .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
686
+ .lijnveld.hoog { padding-bottom: 10mm; }
687
+ .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
688
+ .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
689
+ .qr { border: 0.25mm dashed #9ca3af; }
690
+ .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
691
+ .klein { font-size: 85%; color: #6b7280; }
692
+ .breekvoor { break-before: page; page-break-before: always; }
693
+ .heelhouden { break-inside: avoid; page-break-inside: avoid; }
694
+ img { max-width: 100%; }
695
+ </style></head>
693
696
  <body>${body}</body></html>`;
694
697
  }
695
698
  /** Handig voor testen: het document met de voorbeeldgegevens. */
@@ -8,9 +8,21 @@ export type PrintDb = SupabaseClient<any, any, any>;
8
8
  * meer nu de shell de client levert.
9
9
  */
10
10
  export declare function controleerClient(db: PrintDb): Promise<string | null>;
11
+ /**
12
+ * `ontwerpWint` = deze layout is een echt ontwerp van deze module (actief, geen
13
+ * Floriday-systeemlayout) en gaat daarom vóór meegestuurde HTML. Er is bewust
14
+ * maar één schakelaar voor dit besluit: bron/systeem. Een tweede schakelaar
15
+ * ("stond er een layout_id op de opdracht?") is verwijderd.
16
+ */
11
17
  type LayoutKeuze = {
12
18
  layout: Job | null;
13
- expliciet: boolean;
19
+ ontwerpWint: boolean;
20
+ };
21
+ /** Waar de uiteindelijke opmaak vandaan kwam (uitkomst, geen invoer). */
22
+ export type GebruikteBron = "extern_pdf" | "eigen_layout" | "render_html" | "klantlayout";
23
+ /** Meelifter waarin `bouwHtml` vastlegt welke bron het uiteindelijk werd. */
24
+ export type BronUitkomst = {
25
+ bron: GebruikteBron;
14
26
  };
15
27
  /** Zet een binnenkomend documenttype om naar de sleutel van deze module. */
16
28
  export declare function normaliseerDocumenttype(type: unknown): string;
@@ -24,7 +36,7 @@ export declare function kantEnKlarePdf(_db: PrintDb, job: Job): Promise<string |
24
36
  * Volgorde: gekoppelde layout wint > meegestuurde HTML > actieve layout van
25
37
  * het documenttype. Zo werkt een bijgewerkte layout meteen door.
26
38
  */
27
- export declare function bouwHtml(db: PrintDb, job: Job, keuze: LayoutKeuze): Promise<string>;
39
+ export declare function bouwHtml(db: PrintDb, job: Job, keuze: LayoutKeuze, uitkomst?: BronUitkomst): Promise<string>;
28
40
  /**
29
41
  * Controleert of het document echt iets afdrukt. Zonder deze controle kan een
30
42
  * lege layout of een opdracht zonder gegevens een blanco vel opleveren.
@@ -36,7 +48,7 @@ export interface WachtrijResultaat {
36
48
  mislukt: number;
37
49
  bijgewerkt: number;
38
50
  }
39
- /** Eén ronde: wachtende opdrachten afdrukken en statussen bijwerken. */
51
+ /** Eén ronde: vastgelopen opdrachten opruimen, afdrukken en statussen bijwerken. */
40
52
  export declare function verwerkWachtrij(db: PrintDb, max?: number): Promise<WachtrijResultaat>;
41
53
  export {};
42
54
  //# sourceMappingURL=printQueue.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAsB5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAeD,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAc9D,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAI7D;AA6FD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BnF;AAgPD;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA8HzF;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AAwLD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wEAAwE;AACxE,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBtF"}
1
+ {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAsB5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAeD;;;;;GAKG;AACH,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhE,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAE1F,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAcnD,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAI7D;AAkHD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BnF;AAgPD;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,MAAM,CAAC,CA8IjB;AAGD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AAmRD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oFAAoF;AACpF,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,SAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4BtF"}