@flowselections/layout-maker 1.36.7 → 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/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 +4 -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 +3 -2
- package/dist-lib/components/PrinterSetupWizard.js +3 -3
- package/dist-lib/components/PrintersRedirectPage.d.ts +1 -1
- package/dist-lib/components/PrintersRedirectPage.js +14 -14
- package/dist-lib/index.d.ts +4 -2
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +3 -2
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1240 -812
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1240 -812
- 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 +1231 -821
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +1240 -812
- 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 +58 -0
- 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 +6 -0
- 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/printQueue.server.d.ts +7 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +247 -26
- package/dist-lib/lib/printService.functions.d.ts +4445 -2733
- 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/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"]);
|
|
@@ -561,6 +562,14 @@ async function tekenBlok(ctx, n, vak, ouderStijl) {
|
|
|
561
562
|
const s = stijlVan(n, ouderStijl);
|
|
562
563
|
const st = eig(n);
|
|
563
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
|
+
}
|
|
564
573
|
if (n.tag === "#tekst") {
|
|
565
574
|
const regels = breekAf(tk, n.tekst ?? "", s, vak.breedte);
|
|
566
575
|
for (const r of regels) {
|
|
@@ -886,6 +895,17 @@ async function tekenAbsoluut(ctx, n, s) {
|
|
|
886
895
|
const hoogte = lengte(st["height"]) ?? regelHoogte(eigen);
|
|
887
896
|
const yBoven = tk.hoogte - top;
|
|
888
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
|
+
}
|
|
889
909
|
const gradientKind = zoekGradient(n);
|
|
890
910
|
if (gradientKind) {
|
|
891
911
|
const gebied = gradientKind === "streepjes" ? hoogte * 0.72 : Math.min(breedte, hoogte);
|
|
@@ -1005,6 +1025,44 @@ async function tekenAbsoluut(ctx, n, s) {
|
|
|
1005
1025
|
tekenRegel(tk, r, x + padding, breedte - padding * 2, y + eigen.grootte * 0.25, eigen);
|
|
1006
1026
|
}
|
|
1007
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
|
+
}
|
|
1008
1066
|
/** Zoekt een streepjes- of blokjespatroon (barcode/QR) in de knoop of kinderen. */
|
|
1009
1067
|
function zoekGradient(n) {
|
|
1010
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"}
|
|
@@ -354,6 +354,12 @@ export async function laadPakbonData(db, opties) {
|
|
|
354
354
|
if (!lagen.length)
|
|
355
355
|
lagen.push({ producten: [], ruimte: 0 });
|
|
356
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,
|
|
357
363
|
karnummer: num(kar["cart_number"]) || index + 1,
|
|
358
364
|
route: String(kar["carrier_type"] ?? ""),
|
|
359
365
|
gewicht: kar["weight_kg"] ? `${num(kar["weight_kg"]).toFixed(1)} kg` : "",
|
|
@@ -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"}
|
|
@@ -212,7 +212,7 @@ export const SECTIE_REGISTER = [
|
|
|
212
212
|
{
|
|
213
213
|
type: "pickmethode",
|
|
214
214
|
label: "Pickmethode",
|
|
215
|
-
omschrijving: "Bepaalt
|
|
215
|
+
omschrijving: "Bepaalt of orders per kar, per fust of op beide manieren worden gepickt.",
|
|
216
216
|
opties: [
|
|
217
217
|
{
|
|
218
218
|
key: "methode",
|
|
@@ -222,8 +222,9 @@ export const SECTIE_REGISTER = [
|
|
|
222
222
|
opties: [
|
|
223
223
|
{ value: "kar", label: "Order picken per kar" },
|
|
224
224
|
{ value: "fusten", label: "Order picken per fusten (zelf karindeling maken)" },
|
|
225
|
+
{ value: "beide", label: "Order picken per kar én per fusten (karren + verzamellijst)" },
|
|
225
226
|
],
|
|
226
|
-
hint: "Bij picken per fusten vervallen de blokken Karren, Lagen, Producten en Fusten
|
|
227
|
+
hint: "Bij picken per fusten vervallen de blokken Karren, Lagen, Producten en Fusten. Bij de gecombineerde keuze bepaalt de Engine per opdracht: full_cart toont de karindeling, partial_order alleen de te verzamelen fusten.",
|
|
227
228
|
},
|
|
228
229
|
{
|
|
229
230
|
key: "kop",
|
|
@@ -249,6 +250,14 @@ export const SECTIE_REGISTER = [
|
|
|
249
250
|
},
|
|
250
251
|
{ key: "toonFusthoogte", label: "Fusthoogte en belading tonen", type: "schakelaar", standaard: true },
|
|
251
252
|
{ key: "toonTotaal", label: "Totaal aantal fusten tonen", type: "schakelaar", standaard: true },
|
|
253
|
+
{
|
|
254
|
+
key: "toonBarcode",
|
|
255
|
+
label: "Barcode voor afleverbrief tonen",
|
|
256
|
+
type: "schakelaar",
|
|
257
|
+
standaard: true,
|
|
258
|
+
hint: "De barcode wordt uitsluitend overgenomen uit de Engine-opdracht.",
|
|
259
|
+
},
|
|
260
|
+
{ key: "barcodeHoogte", label: "Barcodehoogte (mm)", type: "getal", standaard: 15 },
|
|
252
261
|
],
|
|
253
262
|
},
|
|
254
263
|
{
|
|
@@ -498,9 +507,9 @@ export const SECTIE_REGISTER = [
|
|
|
498
507
|
{
|
|
499
508
|
type: "barcode",
|
|
500
509
|
label: "Barcode",
|
|
501
|
-
omschrijving: "
|
|
510
|
+
omschrijving: "Scanbare barcode. Bij Engine-pakbonnen komt de waarde uit de opdracht.",
|
|
502
511
|
opties: [
|
|
503
|
-
{ key: "waarde", label: "Inhoud", type: "tekst", standaard: "{{
|
|
512
|
+
{ key: "waarde", label: "Inhoud", type: "tekst", standaard: "{{barcode}}" },
|
|
504
513
|
{ key: "hoogte", label: "Hoogte (mm)", type: "getal", standaard: 15 },
|
|
505
514
|
],
|
|
506
515
|
},
|
|
@@ -572,11 +581,20 @@ function migreerPickmethode(secties) {
|
|
|
572
581
|
const karIndex = secties.findIndex((s) => s.type === "karren");
|
|
573
582
|
const oud = karIndex >= 0 ? String(secties[karIndex].opties?.["pickmethode"] ?? "kar") : "kar";
|
|
574
583
|
const blok = nieuweSectie("pickmethode");
|
|
575
|
-
blok.opties["methode"] = oud === "fusten"
|
|
584
|
+
blok.opties["methode"] = oud === "fusten" || oud === "beide" ? oud : "kar";
|
|
576
585
|
const kopie = [...secties];
|
|
577
586
|
kopie.splice(karIndex >= 0 ? karIndex : kopie.length, 0, blok);
|
|
578
587
|
return kopie;
|
|
579
588
|
}
|
|
589
|
+
/** Normaliseert alleen de twee varianten uit het gedeelde Engine-contract. */
|
|
590
|
+
export function pakbonLayoutVariant(value) {
|
|
591
|
+
const variant = String(value ?? "").trim().toLowerCase();
|
|
592
|
+
if (variant === "full_cart")
|
|
593
|
+
return "full_cart";
|
|
594
|
+
if (variant === "partial_order")
|
|
595
|
+
return "partial_order";
|
|
596
|
+
return null;
|
|
597
|
+
}
|
|
580
598
|
/** Actieve pickmethode van een pakbonconfiguratie. */
|
|
581
599
|
export function pickMethode(secties) {
|
|
582
600
|
const lijst = Array.isArray(secties) ? secties : [];
|
|
@@ -584,13 +602,31 @@ export function pickMethode(secties) {
|
|
|
584
602
|
const waarde = blok
|
|
585
603
|
? String(blok.opties?.["methode"] ?? "kar")
|
|
586
604
|
: String(lijst.find((s) => s.type === "karren")?.opties?.["pickmethode"] ?? "kar");
|
|
587
|
-
|
|
605
|
+
if (waarde === "fusten")
|
|
606
|
+
return "fusten";
|
|
607
|
+
if (waarde === "beide")
|
|
608
|
+
return "beide";
|
|
609
|
+
return "kar";
|
|
588
610
|
}
|
|
589
611
|
const KAR_SECTIES = ["karren", "lagen", "producten", "fusten"];
|
|
590
612
|
/** Blokken die bij de gekozen pickmethode niet van toepassing zijn. */
|
|
591
613
|
export function sectieOnderdrukt(type, methode) {
|
|
592
614
|
return methode === "fusten" && KAR_SECTIES.includes(type);
|
|
593
615
|
}
|
|
616
|
+
/**
|
|
617
|
+
* Blokken die de Engine-variant weglaat. Zonder variant blijft de editor/het
|
|
618
|
+
* losse voorbeeld compleet; een echte Engine-opdracht wordt in de wachtrij
|
|
619
|
+
* geblokkeerd totdat de variant aanwezig is.
|
|
620
|
+
*/
|
|
621
|
+
export function sectieOnderdruktVoorVariant(type, methode, variant) {
|
|
622
|
+
if (sectieOnderdrukt(type, methode))
|
|
623
|
+
return true;
|
|
624
|
+
if (methode !== "beide" || !variant)
|
|
625
|
+
return false;
|
|
626
|
+
if (variant === "full_cart")
|
|
627
|
+
return type === "pickmethode";
|
|
628
|
+
return type === "pickmethode" ? false : [...KAR_SECTIES, "orderregels"].includes(type);
|
|
629
|
+
}
|
|
594
630
|
const p = (nr, naam, potmaat, aantal, locatie, groep, kleur) => ({
|
|
595
631
|
artikelnummer: nr,
|
|
596
632
|
artikelnaam: naam,
|
|
@@ -651,6 +687,7 @@ export const DEMO_ORDER = {
|
|
|
651
687
|
karren: [
|
|
652
688
|
{
|
|
653
689
|
karnummer: 5,
|
|
690
|
+
barcode: "VOORBEELD-KAR-05",
|
|
654
691
|
route: "Route Zuid",
|
|
655
692
|
chauffeur: "J. Bakker",
|
|
656
693
|
gewicht: "142 kg",
|
|
@@ -687,6 +724,7 @@ export const DEMO_ORDER = {
|
|
|
687
724
|
// ze samengevoegd tot één blok met "Deze kar 3× pakken".
|
|
688
725
|
...[6, 7, 8].map((nr) => ({
|
|
689
726
|
karnummer: nr,
|
|
727
|
+
barcode: `VOORBEELD-KAR-${String(nr).padStart(2, "0")}`,
|
|
690
728
|
route: "Route Zuid",
|
|
691
729
|
chauffeur: "J. Bakker",
|
|
692
730
|
gewicht: "118 kg",
|
|
@@ -813,8 +851,10 @@ function laagVingerafdruk(l) {
|
|
|
813
851
|
return [l.belading, l.potmaat, l.gewicht, l.opmerking, producten, fusten].join("#");
|
|
814
852
|
}
|
|
815
853
|
function karVingerafdruk(k) {
|
|
816
|
-
// karnummer bewust niet meegenomen: alleen de indeling telt
|
|
817
|
-
|
|
854
|
+
// karnummer bewust niet meegenomen: alleen de indeling telt. Een kar met een
|
|
855
|
+
// eigen barcode of cart_id van de Engine is wél uniek en wordt nooit gebundeld.
|
|
856
|
+
const uniek = String(k.barcode ?? "") || String(k.cart_id ?? "") || String(k.cart_label ?? "");
|
|
857
|
+
return [uniek, k.route, k.chauffeur, k.gewicht, k.gedeeld ? "gedeeld" : "", (k.lagen ?? []).map(laagVingerafdruk).join("~")].join("#");
|
|
818
858
|
}
|
|
819
859
|
/** Groepeert identieke karren. Bij `aan = false` blijft elke kar los. */
|
|
820
860
|
export function groepeerIdentiekeKarren(karren, aan) {
|
|
@@ -928,3 +968,24 @@ export function fustVerzamellijst(karren) {
|
|
|
928
968
|
}
|
|
929
969
|
return [...map.values()].sort((a, b) => a.fusttype.localeCompare(b.fusttype));
|
|
930
970
|
}
|
|
971
|
+
/**
|
|
972
|
+
* Voorbeeld van een deelkar (niet-volle kar): alleen een deel van de fusten,
|
|
973
|
+
* zonder karindeling. Uitsluitend bedoeld voor het voorbeeld in de builder —
|
|
974
|
+
* echte opdrachten krijgen hun gegevens van de Logistics Engine.
|
|
975
|
+
*/
|
|
976
|
+
export function deelkarVoorbeeldOrder(order = DEMO_ORDER) {
|
|
977
|
+
const eerste = order.karren[0];
|
|
978
|
+
const laag = eerste?.lagen?.[0];
|
|
979
|
+
if (!eerste || !laag)
|
|
980
|
+
return order;
|
|
981
|
+
return {
|
|
982
|
+
...order,
|
|
983
|
+
karren: [
|
|
984
|
+
{
|
|
985
|
+
...eerste,
|
|
986
|
+
gedeeld: true,
|
|
987
|
+
lagen: [{ ...laag, producten: laag.producten.slice(0, 1), fusten: laag.fusten?.slice(0, 1) ?? [] }],
|
|
988
|
+
},
|
|
989
|
+
],
|
|
990
|
+
};
|
|
991
|
+
}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { type DemoOrder, type PakbonConfig } from "./pakbonBuilder.js";
|
|
2
|
-
/** Gegevensvorm van een pakbon.
|
|
3
|
-
export type PakbonOrder = DemoOrder
|
|
2
|
+
/** Gegevensvorm van een pakbon. Engine-metadata blijft naast ordergegevens beschikbaar. */
|
|
3
|
+
export type PakbonOrder = DemoOrder & {
|
|
4
|
+
barcode?: string;
|
|
5
|
+
cart?: {
|
|
6
|
+
cart_label?: string;
|
|
7
|
+
cart_index?: number;
|
|
8
|
+
cart_total?: number;
|
|
9
|
+
cart_id?: string;
|
|
10
|
+
cart_items?: unknown[];
|
|
11
|
+
barcode?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
4
14
|
export interface PakbonLogo {
|
|
5
15
|
id: string;
|
|
6
16
|
naam?: string;
|
|
@@ -20,6 +30,8 @@ export interface PakbonRenderOpties {
|
|
|
20
30
|
logos?: PakbonLogo[];
|
|
21
31
|
/** Documentlogo: gebruikt wanneer een logoblok zelf geen logo heeft. */
|
|
22
32
|
logoId?: string | null;
|
|
33
|
+
/** Variant die uitsluitend door de Logistics Engine wordt bepaald. */
|
|
34
|
+
layoutVariant?: string | null;
|
|
23
35
|
}
|
|
24
36
|
export declare function esc(v: unknown): string;
|
|
25
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAoBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAKzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,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;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAiF3D;AAgrBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA+CR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAoER;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"}
|