@flowselections/layout-maker 1.32.0 → 1.38.4
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/README.md +139 -139
- package/dist-lib/components/AfdrukKnop.d.ts +19 -19
- package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
- package/dist-lib/components/ComputersLijst.js +5 -5
- package/dist-lib/components/DocumentenPage.d.ts.map +1 -1
- package/dist-lib/components/DocumentenPage.js +3 -2
- package/dist-lib/components/LayoutPrinterSelect.d.ts +8 -0
- package/dist-lib/components/LayoutPrinterSelect.d.ts.map +1 -0
- package/dist-lib/components/LayoutPrinterSelect.js +23 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +16 -3
- package/dist-lib/components/NetwerkPrintersDialog.d.ts +7 -7
- package/dist-lib/components/PaginaDocument.d.ts +4 -1
- package/dist-lib/components/PaginaDocument.d.ts.map +1 -1
- package/dist-lib/components/PaginaDocument.js +10 -5
- package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -1
- package/dist-lib/components/PakbonBuilderPage.js +6 -2
- package/dist-lib/components/PakbonPreview.d.ts +4 -2
- package/dist-lib/components/PakbonPreview.d.ts.map +1 -1
- package/dist-lib/components/PakbonPreview.js +55 -12
- package/dist-lib/components/PakbonSectiesPanel.d.ts +2 -2
- package/dist-lib/components/PakbonSectiesPanel.d.ts.map +1 -1
- package/dist-lib/components/PakbonSectiesPanel.js +7 -2
- package/dist-lib/components/PdfMapAutoSaver.d.ts +6 -0
- package/dist-lib/components/PdfMapAutoSaver.d.ts.map +1 -0
- package/dist-lib/components/PdfMapAutoSaver.js +12 -0
- package/dist-lib/components/PdfMapGlobaleBanner.d.ts +12 -0
- package/dist-lib/components/PdfMapGlobaleBanner.d.ts.map +1 -0
- package/dist-lib/components/PdfMapGlobaleBanner.js +30 -0
- package/dist-lib/components/PdfMapToestemmingBanner.d.ts +7 -0
- package/dist-lib/components/PdfMapToestemmingBanner.d.ts.map +1 -0
- package/dist-lib/components/PdfMapToestemmingBanner.js +139 -0
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +42 -3
- package/dist-lib/components/PrintenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintenPage.js +3 -2
- package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
- package/dist-lib/components/PrinterSetupWizard.js +28 -5
- package/dist-lib/components/PrintersRedirectPage.d.ts +1 -1
- package/dist-lib/components/PrintersRedirectPage.js +14 -14
- package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekDetailPage.js +30 -4
- package/dist-lib/components/PrintplekWizard.d.ts.map +1 -1
- package/dist-lib/components/PrintplekWizard.js +81 -3
- package/dist-lib/components/ProductiebonBuilderPage.d.ts.map +1 -1
- package/dist-lib/components/ProductiebonBuilderPage.js +3 -1
- package/dist-lib/index.d.ts +10 -2
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +13 -2
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1396 -727
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1396 -727
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +24008 -0
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/moduleClient.js +29 -0
- package/dist-lib/integrations/supabase/types.d.ts +1403 -750
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +1396 -727
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.server.js +9 -9
- package/dist-lib/lib/browserPrint.js +1 -1
- package/dist-lib/lib/code128.d.ts +5 -0
- package/dist-lib/lib/code128.d.ts.map +1 -0
- package/dist-lib/lib/code128.js +51 -0
- package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -1
- package/dist-lib/lib/htmlPdf.server.js +101 -6
- package/dist-lib/lib/layoutPreview.d.ts.map +1 -1
- package/dist-lib/lib/layoutPreview.js +11 -8
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +123 -10
- package/dist-lib/lib/pakbonBuilder.d.ts +28 -2
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +69 -8
- package/dist-lib/lib/pakbonHtml.d.ts +14 -2
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +155 -63
- package/dist-lib/lib/pakbonScan.d.ts +44 -0
- package/dist-lib/lib/pakbonScan.d.ts.map +1 -0
- package/dist-lib/lib/pakbonScan.js +105 -0
- package/dist-lib/lib/pdfJobSaver.d.ts +20 -0
- package/dist-lib/lib/pdfJobSaver.d.ts.map +1 -0
- package/dist-lib/lib/pdfJobSaver.js +173 -0
- package/dist-lib/lib/pdfMap.d.ts +48 -0
- package/dist-lib/lib/pdfMap.d.ts.map +1 -0
- package/dist-lib/lib/pdfMap.js +219 -0
- package/dist-lib/lib/pdfPrinter.d.ts +9 -0
- package/dist-lib/lib/pdfPrinter.d.ts.map +1 -0
- package/dist-lib/lib/pdfPrinter.js +34 -0
- package/dist-lib/lib/previewPdf.d.ts.map +1 -1
- package/dist-lib/lib/previewPdf.js +41 -9
- package/dist-lib/lib/printApi.d.ts.map +1 -1
- package/dist-lib/lib/printApi.js +9 -1
- package/dist-lib/lib/printQueue.server.d.ts +7 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +346 -52
- package/dist-lib/lib/printService.functions.d.ts +5365 -2689
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/productiebonHtml.js +15 -15
- package/dist-lib/lib/profielHtml.js +18 -18
- package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
- package/dist-lib/lib/supabaseAdmin.server.js +43 -43
- package/dist-lib/lib/supabaseClient.d.ts +1 -3
- package/dist-lib/lib/supabaseClient.d.ts.map +1 -1
- package/dist-lib/lib/supabaseClient.js +4 -8
- package/dist-lib/lib/testpagina.js +3 -3
- package/dist-lib/lib/testprint.js +4 -4
- package/dist-lib/lib/useDocumentData.d.ts +10 -0
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +19 -0
- package/dist-lib/lib/voorbeeldPrint.d.ts +4 -0
- package/dist-lib/lib/voorbeeldPrint.d.ts.map +1 -1
- package/dist-lib/lib/voorbeeldPrint.js +13 -2
- package/package.json +151 -151
|
@@ -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
|
/**
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Geeft de zwart/wit modules van Code 128 subset B terug. */
|
|
2
|
+
export declare function code128Bars(value: string): string;
|
|
3
|
+
/** Browserweergave van de barcode zonder externe barcodebibliotheek. */
|
|
4
|
+
export declare function code128BarsHtml(value: string): string;
|
|
5
|
+
//# sourceMappingURL=code128.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code128.d.ts","sourceRoot":"","sources":["../../src/lib/code128.ts"],"names":[],"mappings":"AAkBA,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBjD;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Code 128 subset B — compacte, scanbare barcode voor printdocumenten.
|
|
3
|
+
// ============================================================================
|
|
4
|
+
const PATRONEN = [
|
|
5
|
+
"212222", "222122", "222221", "121223", "121322", "131222", "122213", "122312", "132212", "221213",
|
|
6
|
+
"221312", "231212", "112232", "122132", "122231", "113222", "123122", "123221", "223211", "221132",
|
|
7
|
+
"221231", "213212", "223112", "312131", "311222", "321122", "321221", "312212", "322112", "322211",
|
|
8
|
+
"212123", "212321", "232121", "111323", "131123", "131321", "112313", "132113", "132311", "211313",
|
|
9
|
+
"231113", "231311", "112133", "112331", "132131", "113123", "113321", "133121", "313121", "211331",
|
|
10
|
+
"231131", "213113", "213311", "213131", "311123", "311321", "331121", "312113", "312311", "332111",
|
|
11
|
+
"314111", "221411", "431111", "111224", "111422", "121124", "121421", "141122", "141221", "112214",
|
|
12
|
+
"112412", "122114", "122411", "142112", "142211", "241211", "221114", "413111", "241112", "134111",
|
|
13
|
+
"111242", "121142", "121241", "114212", "124112", "124211", "411212", "421112", "421211", "212141",
|
|
14
|
+
"214121", "412121", "111143", "111341", "131141", "114113", "114311", "411113", "411311", "113141",
|
|
15
|
+
"114131", "311141", "411131", "211412", "211214", "211232", "2331112",
|
|
16
|
+
];
|
|
17
|
+
/** Geeft de zwart/wit modules van Code 128 subset B terug. */
|
|
18
|
+
export function code128Bars(value) {
|
|
19
|
+
const tekst = String(value ?? "");
|
|
20
|
+
if (!tekst)
|
|
21
|
+
return "";
|
|
22
|
+
const codes = Array.from(tekst, (teken) => {
|
|
23
|
+
const code = teken.charCodeAt(0);
|
|
24
|
+
return code >= 32 && code <= 126 ? code - 32 : "?".charCodeAt(0) - 32;
|
|
25
|
+
});
|
|
26
|
+
const checksum = codes.reduce((som, code, index) => som + code * (index + 1), 104) % 103;
|
|
27
|
+
const symbolen = [104, ...codes, checksum, 106];
|
|
28
|
+
return symbolen
|
|
29
|
+
.map((symbool) => {
|
|
30
|
+
const patroon = PATRONEN[symbool] ?? PATRONEN[0];
|
|
31
|
+
let zwart = true;
|
|
32
|
+
return Array.from(patroon, (breedte) => {
|
|
33
|
+
const modules = Number(breedte);
|
|
34
|
+
const resultaat = (zwart ? "1" : "0").repeat(modules);
|
|
35
|
+
zwart = !zwart;
|
|
36
|
+
return resultaat;
|
|
37
|
+
}).join("");
|
|
38
|
+
})
|
|
39
|
+
.join("");
|
|
40
|
+
}
|
|
41
|
+
/** Browserweergave van de barcode zonder externe barcodebibliotheek. */
|
|
42
|
+
export function code128BarsHtml(value) {
|
|
43
|
+
const bars = code128Bars(value);
|
|
44
|
+
if (!bars)
|
|
45
|
+
return "";
|
|
46
|
+
const modules = bars.length;
|
|
47
|
+
return bars
|
|
48
|
+
.split("")
|
|
49
|
+
.map((bar) => `<span style="display:block;flex:0 0 ${100 / modules}%;height:100%;background:${bar === "1" ? "#111827" : "transparent"}"></span>`)
|
|
50
|
+
.join("");
|
|
51
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAYA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAUD,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AA2BD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgClD;AAqBD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAiBlE;AAKD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4mCD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+DrF;AA0BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// rijen naast elkaar, tabellen met vaste kolombreedtes, kaders, lijnen,
|
|
9
9
|
// afbeeldingen, barcodes en QR-vlakken.
|
|
10
10
|
// ============================================================================
|
|
11
|
+
import { code128Bars } from "./code128.js";
|
|
11
12
|
import { PDFDocument, StandardFonts, rgb, } from "pdf-lib";
|
|
12
13
|
export const MM = 2.834645669291339; // punten per millimeter
|
|
13
14
|
const LEEG = new Set(["img", "br", "hr", "col", "meta", "link", "input"]);
|
|
@@ -428,14 +429,34 @@ class Tekenaar {
|
|
|
428
429
|
function regelHoogte(s) {
|
|
429
430
|
return s.grootte * 1.35;
|
|
430
431
|
}
|
|
431
|
-
/** Breekt tekst af op de beschikbare breedte. */
|
|
432
|
+
/** Breekt tekst af op de beschikbare breedte; te lange woorden worden hard gesplitst. */
|
|
432
433
|
function breekAf(tk, tekst, s, breedte) {
|
|
433
434
|
const woorden = veiligeTekst(tekst).split(/\s+/).filter((w) => w.length);
|
|
434
435
|
if (!woorden.length)
|
|
435
436
|
return [];
|
|
436
437
|
const regels = [];
|
|
437
438
|
let huidig = "";
|
|
439
|
+
const duw = () => {
|
|
440
|
+
if (huidig)
|
|
441
|
+
regels.push(huidig);
|
|
442
|
+
huidig = "";
|
|
443
|
+
};
|
|
438
444
|
for (const w of woorden) {
|
|
445
|
+
// Woord past sowieso niet: hak het op zodat het nooit de kolom uitloopt.
|
|
446
|
+
if (tk.breedteVan(w, s) > breedte) {
|
|
447
|
+
duw();
|
|
448
|
+
let deel = "";
|
|
449
|
+
for (const teken of w) {
|
|
450
|
+
if (deel && tk.breedteVan(deel + teken, s) > breedte) {
|
|
451
|
+
regels.push(deel);
|
|
452
|
+
deel = teken;
|
|
453
|
+
}
|
|
454
|
+
else
|
|
455
|
+
deel += teken;
|
|
456
|
+
}
|
|
457
|
+
huidig = deel;
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
439
460
|
const kandidaat = huidig ? `${huidig} ${w}` : w;
|
|
440
461
|
if (tk.breedteVan(kandidaat, s) <= breedte || !huidig)
|
|
441
462
|
huidig = kandidaat;
|
|
@@ -444,10 +465,25 @@ function breekAf(tk, tekst, s, breedte) {
|
|
|
444
465
|
huidig = w;
|
|
445
466
|
}
|
|
446
467
|
}
|
|
447
|
-
|
|
448
|
-
regels.push(huidig);
|
|
468
|
+
duw();
|
|
449
469
|
return regels;
|
|
450
470
|
}
|
|
471
|
+
/**
|
|
472
|
+
* Verkleint de letter zo min mogelijk tot het langste woord binnen de breedte
|
|
473
|
+
* past. Zo blijft tekst maximaal leesbaar zonder ooit over te lopen.
|
|
474
|
+
*/
|
|
475
|
+
function passendeStijl(tk, tekst, s, breedte) {
|
|
476
|
+
const woorden = veiligeTekst(tekst).split(/\s+/).filter((w) => w.length);
|
|
477
|
+
if (!woorden.length || breedte <= 0)
|
|
478
|
+
return s;
|
|
479
|
+
const langste = woorden.reduce((a, b) => (tk.breedteVan(b, s) > tk.breedteVan(a, s) ? b : a));
|
|
480
|
+
const nodig = tk.breedteVan(langste, s);
|
|
481
|
+
if (nodig <= breedte)
|
|
482
|
+
return s;
|
|
483
|
+
const min = Math.max(4.5, s.grootte * 0.6);
|
|
484
|
+
const geschaald = Math.max(min, Math.floor((s.grootte * breedte) / nodig * 10) / 10);
|
|
485
|
+
return geschaald < s.grootte ? { ...s, grootte: geschaald } : s;
|
|
486
|
+
}
|
|
451
487
|
function tekenRegel(tk, regel, x, breedte, y, s) {
|
|
452
488
|
const t = metTransform(veiligeTekst(regel), s);
|
|
453
489
|
const w = tk.breedteVan(t, s);
|
|
@@ -526,6 +562,14 @@ async function tekenBlok(ctx, n, vak, ouderStijl) {
|
|
|
526
562
|
const s = stijlVan(n, ouderStijl);
|
|
527
563
|
const st = eig(n);
|
|
528
564
|
const cl = klassen(n);
|
|
565
|
+
const barcode = zoekBarcodeWaarde(n);
|
|
566
|
+
if (barcode) {
|
|
567
|
+
const h = lengte(st["height"]) ?? 15 * MM;
|
|
568
|
+
tk.zorgVoor(h + 1 * MM);
|
|
569
|
+
tekenBarcode(tk, barcode, vak.x, vak.breedte, h);
|
|
570
|
+
tk.y -= h + 1 * MM;
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
529
573
|
if (n.tag === "#tekst") {
|
|
530
574
|
const regels = breekAf(tk, n.tekst ?? "", s, vak.breedte);
|
|
531
575
|
for (const r of regels) {
|
|
@@ -770,9 +814,11 @@ async function tekenTabel(ctx, tabel, vak, s) {
|
|
|
770
814
|
const eigenCelRanden = rijen.some((r) => r.kinderen.some((c) => (c.tag === "td" || c.tag === "th") && !!celRandOnder(c)));
|
|
771
815
|
const tekenRij = (rij, herhaald = false) => {
|
|
772
816
|
const cellen = rij.kinderen.filter((c) => c.tag === "td" || c.tag === "th");
|
|
773
|
-
const
|
|
774
|
-
const
|
|
775
|
-
const
|
|
817
|
+
const celBreedte = (i) => Math.max(4, (breedtes[i] ?? 20) - padX * 2);
|
|
818
|
+
const celTekst = cellen.map((c) => plattTekst(c));
|
|
819
|
+
const cellenStijl = cellen.map((c, i) => passendeStijl(tk, celTekst[i], stijlVan(c, s), celBreedte(i)));
|
|
820
|
+
const teksten = cellen.map((_, i) => breekAf(tk, celTekst[i], cellenStijl[i], celBreedte(i)));
|
|
821
|
+
const hoogte = Math.max(regelHoogte(s), ...teksten.map((t, i) => Math.max(1, t.length) * regelHoogte(cellenStijl[i] ?? s))) + padY * 2;
|
|
776
822
|
if (hoogte > tk.ruimte) {
|
|
777
823
|
tk.nieuwePagina();
|
|
778
824
|
if (kopRij && !herhaald && rij !== kopRij)
|
|
@@ -849,6 +895,17 @@ async function tekenAbsoluut(ctx, n, s) {
|
|
|
849
895
|
const hoogte = lengte(st["height"]) ?? regelHoogte(eigen);
|
|
850
896
|
const yBoven = tk.hoogte - top;
|
|
851
897
|
const yOnder = yBoven - hoogte;
|
|
898
|
+
const barcode = zoekBarcodeWaarde(n);
|
|
899
|
+
if (barcode) {
|
|
900
|
+
const barcodeHoogte = Math.max(5 * MM, hoogte * 0.72);
|
|
901
|
+
tekenBarcode(tk, barcode, x, breedte, barcodeHoogte, yBoven);
|
|
902
|
+
const onderschrift = plattTekst(n).trim();
|
|
903
|
+
if (onderschrift) {
|
|
904
|
+
const kleinStijl = { ...eigen, grootte: Math.min(eigen.grootte, 7), uitlijning: "center" };
|
|
905
|
+
tekenRegel(tk, onderschrift, x, breedte, yOnder + 1, kleinStijl);
|
|
906
|
+
}
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
852
909
|
const gradientKind = zoekGradient(n);
|
|
853
910
|
if (gradientKind) {
|
|
854
911
|
const gebied = gradientKind === "streepjes" ? hoogte * 0.72 : Math.min(breedte, hoogte);
|
|
@@ -968,6 +1025,44 @@ async function tekenAbsoluut(ctx, n, s) {
|
|
|
968
1025
|
tekenRegel(tk, r, x + padding, breedte - padding * 2, y + eigen.grootte * 0.25, eigen);
|
|
969
1026
|
}
|
|
970
1027
|
}
|
|
1028
|
+
/** Tekent de waarde-encoded Code 128 subset B barcode. */
|
|
1029
|
+
function tekenBarcode(tk, waarde, x, breedte, hoogte, yBoven) {
|
|
1030
|
+
const patroon = code128Bars(waarde);
|
|
1031
|
+
if (!patroon)
|
|
1032
|
+
return;
|
|
1033
|
+
const boven = yBoven ?? tk.y;
|
|
1034
|
+
const y = boven - hoogte;
|
|
1035
|
+
let start = 0;
|
|
1036
|
+
let zwart = patroon[0] === "1";
|
|
1037
|
+
for (let i = 1; i <= patroon.length; i += 1) {
|
|
1038
|
+
const huidig = patroon[i] === "1";
|
|
1039
|
+
if (i === patroon.length || huidig !== zwart) {
|
|
1040
|
+
if (zwart) {
|
|
1041
|
+
tk.pagina.drawRectangle({
|
|
1042
|
+
x: x + (start / patroon.length) * breedte,
|
|
1043
|
+
y,
|
|
1044
|
+
width: ((i - start) / patroon.length) * breedte,
|
|
1045
|
+
height: hoogte,
|
|
1046
|
+
color: DONKER,
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
1049
|
+
start = i;
|
|
1050
|
+
zwart = huidig;
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
/** Leest alleen expliciet door de renderer aangeleverde barcodewaarden. */
|
|
1055
|
+
function zoekBarcodeWaarde(n) {
|
|
1056
|
+
const waarde = String(n.attrs["data-barcode"] ?? "").trim();
|
|
1057
|
+
if (waarde)
|
|
1058
|
+
return waarde;
|
|
1059
|
+
for (const k of n.kinderen) {
|
|
1060
|
+
const diep = zoekBarcodeWaarde(k);
|
|
1061
|
+
if (diep)
|
|
1062
|
+
return diep;
|
|
1063
|
+
}
|
|
1064
|
+
return null;
|
|
1065
|
+
}
|
|
971
1066
|
/** Zoekt een streepjes- of blokjespatroon (barcode/QR) in de knoop of kinderen. */
|
|
972
1067
|
function zoekGradient(n) {
|
|
973
1068
|
const css = `${eig(n)["background"] ?? ""} ${eig(n)["background-image"] ?? ""}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutPreview.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPreview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layoutPreview.d.ts","sourceRoot":"","sources":["../../src/lib/layoutPreview.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAE5E;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAuB5F;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;GAI5B,CAAC;AA4FF,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAaR"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// src/lib/layoutPreview.ts — voorbeeldgegevens, veldvervanging en print-HTML
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import { alleVelden } from "./fieldRegistry.js";
|
|
5
|
+
import { code128BarsHtml } from "./code128.js";
|
|
5
6
|
export function voorbeeldContext() {
|
|
6
7
|
const ctx = {};
|
|
7
8
|
for (const v of alleVelden())
|
|
@@ -79,9 +80,11 @@ function elementHtml(el, ctx) {
|
|
|
79
80
|
case "cirkel":
|
|
80
81
|
return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
|
|
81
82
|
case "barcode":
|
|
82
|
-
return
|
|
83
|
-
|
|
84
|
-
<div style="
|
|
83
|
+
return inhoud
|
|
84
|
+
? `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
|
|
85
|
+
<div class="barcode-bars" data-barcode="${esc(inhoud)}" style="width:100%;height:70%;display:flex;background:#fff">${code128BarsHtml(inhoud)}</div>
|
|
86
|
+
<div style="font-size:7pt">${esc(inhoud)}</div></div>`
|
|
87
|
+
: "";
|
|
85
88
|
case "qrcode":
|
|
86
89
|
return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
|
|
87
90
|
case "logo":
|
|
@@ -125,10 +128,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
|
|
|
125
128
|
const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
|
|
126
129
|
const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
|
|
127
130
|
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>
|
|
131
|
+
return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
|
|
132
|
+
<style>@page{size:${b}mm ${h}mm;margin:0}
|
|
133
|
+
body{margin:0;background:#e5e7eb}
|
|
134
|
+
.pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
|
|
135
|
+
@media print{body{background:#fff}}</style></head>
|
|
133
136
|
<body><div class="pagina">${body}</div></body></html>`;
|
|
134
137
|
}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CA8XrB;AA+DD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
|
|
@@ -205,24 +205,127 @@ export async function laadPakbonData(db, opties) {
|
|
|
205
205
|
if (productIds.length) {
|
|
206
206
|
const data = await veilig(() => db
|
|
207
207
|
.from("products")
|
|
208
|
-
.select("id, product, article_number, barcode, location, unit, weight, custom_fields")
|
|
208
|
+
.select("id, product, article_number, barcode, location, unit, weight, custom_fields, floriday_trade_item_id, trade_item_key")
|
|
209
209
|
.in("id", productIds));
|
|
210
210
|
for (const p of arr(data))
|
|
211
211
|
producten.set(String(p["id"]), p);
|
|
212
212
|
}
|
|
213
|
+
// --- verrijking vanuit Floriday-artikelcache ------------------------------
|
|
214
|
+
// `products.unit` is vrijwel altijd "stuks" en zegt niets over het fust.
|
|
215
|
+
// De echte fustsoort, potmaat en kleur staan in de Floriday-cache:
|
|
216
|
+
// - fustsoort: primaire verpakkingsconfiguratie → vbnPackageCode, met de
|
|
217
|
+
// gebruikersnaam uit `fust_types`.
|
|
218
|
+
// - potmaat: kenmerk S01 (Potmaat).
|
|
219
|
+
// - kleur: kenmerk B01 (Hoofdkleur 1).
|
|
220
|
+
const floridayIds = uniek(Array.from(producten.values()).map((p) => {
|
|
221
|
+
const extra = (p["custom_fields"] ?? {});
|
|
222
|
+
return String(p["floriday_trade_item_id"] ?? p["trade_item_key"] ?? extra["floriday_id"] ?? "");
|
|
223
|
+
}));
|
|
224
|
+
const floridayInfo = new Map();
|
|
225
|
+
if (floridayIds.length) {
|
|
226
|
+
const items = arr(await veilig(() => db
|
|
227
|
+
.from("floriday_trade_items_cache")
|
|
228
|
+
.select("floriday_id, data")
|
|
229
|
+
.in("floriday_id", floridayIds)));
|
|
230
|
+
for (const it of items) {
|
|
231
|
+
const d = (it["data"] ?? {});
|
|
232
|
+
const configs = arr(d["packingConfigurations"]);
|
|
233
|
+
const primair = configs.find((c) => c["primary"]) ?? configs[0] ?? {};
|
|
234
|
+
const fustCode = String((primair["package"] ?? {})["vbnPackageCode"] ?? "");
|
|
235
|
+
const kenmerken = arr(d["characteristics"]);
|
|
236
|
+
const b01 = kenmerken.find((k) => String(k["vbnCode"]) === "B01");
|
|
237
|
+
const s01 = kenmerken.find((k) => String(k["vbnCode"]).toUpperCase() === "S01");
|
|
238
|
+
const kleurCode = b01 ? String(b01["vbnValueCode"] ?? "") : "";
|
|
239
|
+
const potmaatCode = s01 ? String(s01["vbnValueCode"] ?? "") : "";
|
|
240
|
+
floridayInfo.set(String(it["floriday_id"]), { fustCode, kleurCode, potmaatCode });
|
|
241
|
+
}
|
|
242
|
+
// VBN-verpakkincode → de ingestelde fustnaam. `fust_types` is hiervoor de
|
|
243
|
+
// bron van waarheid; `crate_types` bevat niet alle VBN-codes.
|
|
244
|
+
const fustCodes = uniek(Array.from(floridayInfo.values()).map((i) => i.fustCode));
|
|
245
|
+
const fustNamen = new Map();
|
|
246
|
+
if (fustCodes.length) {
|
|
247
|
+
const fusten = arr(await veilig(() => db.from("fust_types").select("vbn_code, name").in("vbn_code", fustCodes)));
|
|
248
|
+
for (const fust of fusten) {
|
|
249
|
+
const code = String(fust["vbn_code"] ?? "");
|
|
250
|
+
const naam = String(fust["name"] ?? "").trim();
|
|
251
|
+
if (code && naam && !fustNamen.has(code))
|
|
252
|
+
fustNamen.set(code, naam);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Floriday-kenmerkcodes → leesbare labels uit de VBN-codelijst.
|
|
256
|
+
const kenmerkSleutels = uniek(Array.from(floridayInfo.values()).flatMap((i) => [
|
|
257
|
+
i.kleurCode ? `B01:${i.kleurCode}` : "",
|
|
258
|
+
i.potmaatCode ? `S01:${i.potmaatCode}` : "",
|
|
259
|
+
]));
|
|
260
|
+
const kenmerkNamen = new Map();
|
|
261
|
+
if (kenmerkSleutels.length) {
|
|
262
|
+
const waarden = arr(await veilig(() => db
|
|
263
|
+
.from("floriday_code_lists_cache")
|
|
264
|
+
.select("code, label")
|
|
265
|
+
.eq("list_name", "vbn-characteristic-value")
|
|
266
|
+
.in("code", kenmerkSleutels)));
|
|
267
|
+
for (const w of waarden) {
|
|
268
|
+
const code = String(w["code"] ?? "");
|
|
269
|
+
const label = String(w["label"] ?? "").trim();
|
|
270
|
+
if (code && label && !kenmerkNamen.has(code))
|
|
271
|
+
kenmerkNamen.set(code, label);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Schrijf de verrijking terug in de custom_fields van het product.
|
|
275
|
+
for (const p of producten.values()) {
|
|
276
|
+
const extra = (p["custom_fields"] ?? {});
|
|
277
|
+
const floridayId = String(p["floriday_trade_item_id"] ?? p["trade_item_key"] ?? extra["floriday_id"] ?? "");
|
|
278
|
+
const info = floridayInfo.get(floridayId);
|
|
279
|
+
if (!info)
|
|
280
|
+
continue;
|
|
281
|
+
if (info.fustCode) {
|
|
282
|
+
const naam = fustNamen.get(info.fustCode);
|
|
283
|
+
extra["__fustsoort"] = naam ?? `VBN ${info.fustCode}`;
|
|
284
|
+
}
|
|
285
|
+
if (info.kleurCode) {
|
|
286
|
+
extra["__kleur"] = kenmerkNamen.get(`B01:${info.kleurCode}`) ?? info.kleurCode;
|
|
287
|
+
}
|
|
288
|
+
if (info.potmaatCode) {
|
|
289
|
+
extra["__potmaat"] = kenmerkNamen.get(`S01:${info.potmaatCode}`) ?? info.potmaatCode;
|
|
290
|
+
}
|
|
291
|
+
p["custom_fields"] = extra;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
213
294
|
const maakProduct = (bron, aantalPlanten, fusten, perFust) => {
|
|
214
295
|
const p = producten.get(String(bron["product_id"] ?? "")) ?? {};
|
|
215
296
|
const extra = (p["custom_fields"] ?? {});
|
|
297
|
+
const unit = String(p["unit"] ?? "").trim();
|
|
216
298
|
return {
|
|
217
299
|
artikelnummer: String(p["article_number"] ?? ""),
|
|
218
300
|
artikelnaam: taalTekst(bron["product_name"]) || taalTekst(p["product"]),
|
|
219
|
-
potmaat: String(extra["potmaat"] ??
|
|
301
|
+
potmaat: String(extra["potmaat"] ??
|
|
302
|
+
extra["Potmaat"] ??
|
|
303
|
+
extra["pot_size"] ??
|
|
304
|
+
extra["potSize"] ??
|
|
305
|
+
extra["potmaat_cm"] ??
|
|
306
|
+
extra["maat"] ??
|
|
307
|
+
extra["__potmaat"] ??
|
|
308
|
+
"Niet ingesteld"),
|
|
309
|
+
kleur: String(extra["kleur"] ??
|
|
310
|
+
extra["Kleur"] ??
|
|
311
|
+
extra["colour"] ??
|
|
312
|
+
extra["color"] ??
|
|
313
|
+
extra["__kleur"] ??
|
|
314
|
+
"Niet ingesteld"),
|
|
220
315
|
aantal: aantalPlanten,
|
|
221
316
|
barcode: String(p["barcode"] ?? ""),
|
|
222
|
-
locatie: String(p["location"]
|
|
317
|
+
locatie: String(p["location"] ||
|
|
318
|
+
extra["locatie"] ||
|
|
319
|
+
extra["location"] ||
|
|
320
|
+
extra["warehouse_location"] ||
|
|
321
|
+
"Niet ingesteld"),
|
|
223
322
|
gewicht: bron["weight_kg"] ? `${num(bron["weight_kg"]).toFixed(1)} kg` : "",
|
|
224
323
|
fust_aantal: fusten,
|
|
225
|
-
|
|
324
|
+
// "stuks" is een aantalseenheid, geen fustsoort — die slaan we over.
|
|
325
|
+
fustsoort: String(extra["fustsoort"] ??
|
|
326
|
+
extra["Fustsoort"] ??
|
|
327
|
+
extra["__fustsoort"] ??
|
|
328
|
+
(unit && unit.toLowerCase() !== "stuks" ? unit : "Niet ingesteld")),
|
|
226
329
|
planten_per_fust: perFust,
|
|
227
330
|
};
|
|
228
331
|
};
|
|
@@ -251,17 +354,27 @@ export async function laadPakbonData(db, opties) {
|
|
|
251
354
|
if (!lagen.length)
|
|
252
355
|
lagen.push({ producten: [], ruimte: 0 });
|
|
253
356
|
return {
|
|
357
|
+
// Nodig om een Engine-opdracht voor precies één kar te kunnen filteren.
|
|
358
|
+
// De waarde komt uit de gedeelde database en wordt nooit lokaal bedacht.
|
|
359
|
+
cart_id: String(kar["id"] ?? "") || undefined,
|
|
360
|
+
cart_label: String(kar["cart_label"] ?? kar["label"] ?? "") || undefined,
|
|
361
|
+
cart_index: index + 1,
|
|
362
|
+
cart_total: karrenRijen.length,
|
|
254
363
|
karnummer: num(kar["cart_number"]) || index + 1,
|
|
255
364
|
route: String(kar["carrier_type"] ?? ""),
|
|
256
365
|
gewicht: kar["weight_kg"] ? `${num(kar["weight_kg"]).toFixed(1)} kg` : "",
|
|
257
366
|
gedeeld: kar["__gedeeld"] === true,
|
|
258
367
|
opmerking: String(kar["notes"] ?? ""),
|
|
259
|
-
lagen: lagen.slice(0, Math.max(maxLagen, lagen.length)).map((laag, j) =>
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
368
|
+
lagen: lagen.slice(0, Math.max(maxLagen, lagen.length)).map((laag, j) => {
|
|
369
|
+
const potmaten = uniek(laag.producten.map((product) => product["potmaat"]));
|
|
370
|
+
return {
|
|
371
|
+
laagnummer: j + 1,
|
|
372
|
+
belading: `${Math.round(Math.min(laag.ruimte, 1) * 100)}%`,
|
|
373
|
+
potmaat: potmaten.length === 1 ? potmaten[0] : "",
|
|
374
|
+
producten: laag.producten,
|
|
375
|
+
fusten: vatFustenSamen(laag.producten),
|
|
376
|
+
};
|
|
377
|
+
}),
|
|
265
378
|
};
|
|
266
379
|
});
|
|
267
380
|
// --- losse orderregels (zonder karindeling) -------------------------------
|
|
@@ -67,10 +67,22 @@ export declare function sectieDef(type: PakbonSectieType): SectieDef;
|
|
|
67
67
|
export declare function nieuweSectie(type: PakbonSectieType): PakbonSectie;
|
|
68
68
|
export declare function standaardPakbonConfig(): PakbonConfig;
|
|
69
69
|
export declare function leesPakbonConfig(config: unknown): PakbonConfig;
|
|
70
|
+
/** Manier waarop de order gepickt wordt. */
|
|
71
|
+
export type PickMethode = "kar" | "fusten" | "beide";
|
|
72
|
+
/** Variant die de Logistics Engine voor een gecombineerde pakbon kiest. */
|
|
73
|
+
export type PakbonLayoutVariant = "full_cart" | "partial_order";
|
|
74
|
+
/** Normaliseert alleen de twee varianten uit het gedeelde Engine-contract. */
|
|
75
|
+
export declare function pakbonLayoutVariant(value: unknown): PakbonLayoutVariant | null;
|
|
70
76
|
/** Actieve pickmethode van een pakbonconfiguratie. */
|
|
71
|
-
export declare function pickMethode(secties: PakbonSectie[] | undefined):
|
|
77
|
+
export declare function pickMethode(secties: PakbonSectie[] | undefined): PickMethode;
|
|
72
78
|
/** Blokken die bij de gekozen pickmethode niet van toepassing zijn. */
|
|
73
|
-
export declare function sectieOnderdrukt(type: PakbonSectieType, methode:
|
|
79
|
+
export declare function sectieOnderdrukt(type: PakbonSectieType, methode: PickMethode): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Blokken die de Engine-variant weglaat. Zonder variant blijft de editor/het
|
|
82
|
+
* losse voorbeeld compleet; een echte Engine-opdracht wordt in de wachtrij
|
|
83
|
+
* geblokkeerd totdat de variant aanwezig is.
|
|
84
|
+
*/
|
|
85
|
+
export declare function sectieOnderdruktVoorVariant(type: PakbonSectieType, methode: PickMethode, variant?: PakbonLayoutVariant | null): boolean;
|
|
74
86
|
export interface DemoProduct {
|
|
75
87
|
artikelnummer: string;
|
|
76
88
|
artikelnaam: string;
|
|
@@ -107,6 +119,14 @@ export interface DemoKar {
|
|
|
107
119
|
route: string;
|
|
108
120
|
chauffeur: string;
|
|
109
121
|
gewicht: string;
|
|
122
|
+
/** Gegevens die de Engine voor één volle of gedeeltelijke kar aanlevert. */
|
|
123
|
+
cart_label?: string;
|
|
124
|
+
cart_index?: number;
|
|
125
|
+
cart_total?: number;
|
|
126
|
+
cart_id?: string;
|
|
127
|
+
cart_items?: unknown[];
|
|
128
|
+
/** Bestaande Engine-barcode van deze kar; de Layout maker genereert deze nooit. */
|
|
129
|
+
barcode?: string;
|
|
110
130
|
/** Kar bevat ook regels van een andere order (buffer-/gedeelde kar). */
|
|
111
131
|
gedeeld?: boolean;
|
|
112
132
|
lagen: DemoLaag[];
|
|
@@ -209,4 +229,10 @@ export interface FustVerzamelGroep {
|
|
|
209
229
|
* karindeling maakt.
|
|
210
230
|
*/
|
|
211
231
|
export declare function fustVerzamellijst(karren: unknown): FustVerzamelGroep[];
|
|
232
|
+
/**
|
|
233
|
+
* Voorbeeld van een deelkar (niet-volle kar): alleen een deel van de fusten,
|
|
234
|
+
* zonder karindeling. Uitsluitend bedoeld voor het voorbeeld in de builder —
|
|
235
|
+
* echte opdrachten krijgen hun gegevens van de Logistics Engine.
|
|
236
|
+
*/
|
|
237
|
+
export declare function deelkarVoorbeeldOrder(order?: DemoOrder): DemoOrder;
|
|
212
238
|
//# sourceMappingURL=pakbonBuilder.d.ts.map
|
|
@@ -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,
|
|
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,EA0atC,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,4CAA4C;AAC5C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErD,2EAA2E;AAC3E,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,eAAe,CAAC;AAEhE,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAK9E;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG,WAAW,CAS5E;AAID,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAET;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,GACnC,OAAO,CAKT;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,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;IACvB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AA2BD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAoGhB,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;AA8BD,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;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,GAAE,SAAsB,GAAG,SAAS,CAc9E"}
|