@flowselections/layout-maker 1.69.10 → 1.69.13

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 (73) hide show
  1. package/dist-lib/components/A4StickervelKaart.d.ts +5 -0
  2. package/dist-lib/components/A4StickervelKaart.d.ts.map +1 -0
  3. package/dist-lib/components/A4StickervelKaart.js +123 -0
  4. package/dist-lib/components/KlaarOmTePrintenBlok.d.ts.map +1 -1
  5. package/dist-lib/components/KlaarOmTePrintenBlok.js +50 -7
  6. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  7. package/dist-lib/components/PrintQueuePage.js +2 -1
  8. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  9. package/dist-lib/components/PrintplekDetailPage.js +3 -1
  10. package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
  11. package/dist-lib/components/PrintplekkenPage.js +2 -1
  12. package/dist-lib/components/StickerRouteTestKaart.d.ts +5 -0
  13. package/dist-lib/components/StickerRouteTestKaart.d.ts.map +1 -0
  14. package/dist-lib/components/StickerRouteTestKaart.js +75 -0
  15. package/dist-lib/components/UitwijkRegel.d.ts +5 -0
  16. package/dist-lib/components/UitwijkRegel.d.ts.map +1 -0
  17. package/dist-lib/components/UitwijkRegel.js +17 -0
  18. package/dist-lib/components/UitwijkTekening.d.ts +19 -0
  19. package/dist-lib/components/UitwijkTekening.d.ts.map +1 -0
  20. package/dist-lib/components/UitwijkTekening.js +21 -0
  21. package/dist-lib/index.d.ts +12 -0
  22. package/dist-lib/index.d.ts.map +1 -1
  23. package/dist-lib/index.js +14 -0
  24. package/dist-lib/integrations/supabase/types.d.ts +3227 -22
  25. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  26. package/dist-lib/lib/belading.d.ts +10 -0
  27. package/dist-lib/lib/belading.d.ts.map +1 -0
  28. package/dist-lib/lib/belading.js +49 -0
  29. package/dist-lib/lib/eigenDocumenten.d.ts +2 -0
  30. package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -1
  31. package/dist-lib/lib/eigenDocumenten.js +22 -0
  32. package/dist-lib/lib/installCheck.d.ts +36 -0
  33. package/dist-lib/lib/installCheck.d.ts.map +1 -0
  34. package/dist-lib/lib/installCheck.js +65 -0
  35. package/dist-lib/lib/klaarOmTePrinten.d.ts +15 -1
  36. package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -1
  37. package/dist-lib/lib/klaarOmTePrinten.js +19 -1
  38. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  39. package/dist-lib/lib/orderData.server.js +20 -17
  40. package/dist-lib/lib/pakbonBuilder.d.ts +6 -0
  41. package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
  42. package/dist-lib/lib/pakbonBuilder.js +18 -5
  43. package/dist-lib/lib/pakbonContent.d.ts.map +1 -1
  44. package/dist-lib/lib/pakbonContent.js +4 -1
  45. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  46. package/dist-lib/lib/pakbonHtml.js +5 -2
  47. package/dist-lib/lib/pakbonPresentation.d.ts +3 -1
  48. package/dist-lib/lib/pakbonPresentation.d.ts.map +1 -1
  49. package/dist-lib/lib/pakbonPresentation.js +13 -6
  50. package/dist-lib/lib/printQueue.server.d.ts +11 -0
  51. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  52. package/dist-lib/lib/printQueue.server.js +158 -13
  53. package/dist-lib/lib/printService.server.d.ts.map +1 -1
  54. package/dist-lib/lib/printService.server.js +3 -2
  55. package/dist-lib/lib/standaardLayouts.server.d.ts +6 -0
  56. package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
  57. package/dist-lib/lib/standaardLayouts.server.js +13 -0
  58. package/dist-lib/lib/stickerPlaatsing.d.ts +37 -0
  59. package/dist-lib/lib/stickerPlaatsing.d.ts.map +1 -0
  60. package/dist-lib/lib/stickerPlaatsing.js +122 -0
  61. package/dist-lib/lib/stickerUitwijk.d.ts +197 -0
  62. package/dist-lib/lib/stickerUitwijk.d.ts.map +1 -0
  63. package/dist-lib/lib/stickerUitwijk.js +311 -0
  64. package/dist-lib/lib/testprint.d.ts +13 -0
  65. package/dist-lib/lib/testprint.d.ts.map +1 -1
  66. package/dist-lib/lib/testprint.js +38 -0
  67. package/dist-lib/lib/useDocumentData.js +1 -1
  68. package/dist-lib/lib/versie.generated.d.ts +1 -1
  69. package/dist-lib/lib/versie.generated.js +1 -1
  70. package/dist-lib/lib/vroegeWaarschuwing.d.ts +21 -0
  71. package/dist-lib/lib/vroegeWaarschuwing.d.ts.map +1 -0
  72. package/dist-lib/lib/vroegeWaarschuwing.js +15 -0
  73. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ /** Deel (0–1) van één laag dat deze regel vult, of null als onbekend/onlogisch. */
2
+ export declare function laagDeel(item: Record<string, unknown>): number | null;
3
+ /** Aantal lagen dat een regel beslaat als de Engine dat meldt (veld lagen, of layer_fraction > 1). */
4
+ export declare function lagenVanRegel(item: Record<string, unknown>): number | null;
5
+ /**
6
+ * Tekst voor de laag: "33%" bij een bekende vulling 0–1; "24 lagen" als de
7
+ * regel meerdere lagen beslaat; anders leeg (geen percentage).
8
+ */
9
+ export declare function beladingTekst(delen: (number | null)[], lagen?: (number | null)[]): string;
10
+ //# sourceMappingURL=belading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"belading.d.ts","sourceRoot":"","sources":["../../src/lib/belading.ts"],"names":[],"mappings":"AAeA,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CASrE;AAED,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAM1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,GAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAO,GAAG,MAAM,CAO7F"}
@@ -0,0 +1,49 @@
1
+ // ============================================================================
2
+ // src/lib/belading.ts — belading per laag op de pakbon (1.69.12).
3
+ // Per laag altijd 0–100%: fusten op die laag ÷ fusten per laag. Een
4
+ // layer_fraction van de Engine telt alleen als hij tussen 0 en 1 ligt; een
5
+ // waarde daarboven (regel over meerdere lagen) wordt nooit als percentage
6
+ // getoond, maar als aantal lagen. Onbekend of onlogisch: geen percentage.
7
+ // Gelezen Engine-velden: crates_in_layer, crates, crates_per_layer,
8
+ // layer_fraction, lagen.
9
+ // ============================================================================
10
+ const getal = (v) => {
11
+ const n = Number(v);
12
+ return Number.isFinite(n) ? n : 0;
13
+ };
14
+ /** Deel (0–1) van één laag dat deze regel vult, of null als onbekend/onlogisch. */
15
+ export function laagDeel(item) {
16
+ const capaciteit = getal(item["crates_per_layer"]);
17
+ const opLaag = getal(item["crates_in_layer"]) || getal(item["crates"]);
18
+ if (capaciteit > 0 && opLaag > 0) {
19
+ const d = opLaag / capaciteit;
20
+ return d > 0 && d <= 1.0001 ? Math.min(d, 1) : null;
21
+ }
22
+ const lf = getal(item["layer_fraction"]);
23
+ return lf > 0 && lf <= 1 ? lf : null;
24
+ }
25
+ /** Aantal lagen dat een regel beslaat als de Engine dat meldt (veld lagen, of layer_fraction > 1). */
26
+ export function lagenVanRegel(item) {
27
+ const lagen = getal(item["lagen"]);
28
+ if (lagen >= 1)
29
+ return Math.round(lagen);
30
+ const lf = getal(item["layer_fraction"]);
31
+ if (lf > 1)
32
+ return Math.ceil(lf - 1e-9);
33
+ return null;
34
+ }
35
+ /**
36
+ * Tekst voor de laag: "33%" bij een bekende vulling 0–1; "24 lagen" als de
37
+ * regel meerdere lagen beslaat; anders leeg (geen percentage).
38
+ */
39
+ export function beladingTekst(delen, lagen = []) {
40
+ const meer = lagen.find((l) => l !== null && l > 1);
41
+ if (meer)
42
+ return `${meer} lagen`;
43
+ if (!delen.length || delen.some((d) => d === null))
44
+ return "";
45
+ const som = delen.reduce((a, b) => a + b, 0);
46
+ if (!(som > 0) || som > 1.0001)
47
+ return "";
48
+ return `${Math.round(Math.min(som, 1) * 100)}%`;
49
+ }
@@ -23,6 +23,8 @@ export declare function eigenStickerId(payload: unknown): string | null;
23
23
  export declare const TRAYSTICKER_VELDEN: readonly ["logo", "bedrijfsnaam", "klantnaam", "ordernummer", "leverdatum", "afleverlocatie", "tray", "producten", "barcode"];
24
24
  export type TrayVeld = (typeof TRAYSTICKER_VELDEN)[number];
25
25
  export declare const TRAYSTICKER_GEEN_INDELING = "Aantal fusten onbekend";
26
+ /** Voorbeeldgegevens voor een testprint (geen echte order, geen echte namen). */
27
+ export declare const VOORBEELD_TRAY_PAYLOAD: Record<string, unknown>;
26
28
  export type TrayRegel = {
27
29
  artikelnummer: string;
28
30
  naam: string;
@@ -1 +1 @@
1
- {"version":3,"file":"eigenDocumenten.d.ts","sourceRoot":"","sources":["../../src/lib/eigenDocumenten.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,2BAA2B,4IAC8F,CAAC;AAEvI,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAA;CAAE,CAAC;AAExH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,GAAE,OAAc,EACxB,OAAO,GAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,GAC/D,gBAAgB,GAAG,IAAI,CAmBzB;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGtF;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIhH;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI9D;AAGD,eAAO,MAAM,kBAAkB,+HAErB,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,MAAM,MAAM,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC;AAOlE,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,IAAI,CAOpE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD,MAAM,CAiCR;AAGD,eAAO,MAAM,sBAAsB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAoBvF,CAAC;AAEF,eAAO,MAAM,gCAAgC,UAAuE,CAAC;AAarH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAaxE"}
1
+ {"version":3,"file":"eigenDocumenten.d.ts","sourceRoot":"","sources":["../../src/lib/eigenDocumenten.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,2BAA2B,4IAC8F,CAAC;AAEvI,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAA;CAAE,CAAC;AAExH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,GAAE,OAAc,EACxB,OAAO,GAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAW,GAC/D,gBAAgB,GAAG,IAAI,CAmBzB;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGtF;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIhH;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI9D;AAGD,eAAO,MAAM,kBAAkB,+HAErB,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAoB1D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAChF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC;AAOlE,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,GAAG,IAAI,CAOpE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD,MAAM,CAiCR;AAGD,eAAO,MAAM,sBAAsB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAoBvF,CAAC;AAEF,eAAO,MAAM,gCAAgC,UAAuE,CAAC;AAarH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAaxE"}
@@ -66,6 +66,28 @@ export const TRAYSTICKER_VELDEN = [
66
66
  "logo", "bedrijfsnaam", "klantnaam", "ordernummer", "leverdatum", "afleverlocatie", "tray", "producten", "barcode",
67
67
  ];
68
68
  export const TRAYSTICKER_GEEN_INDELING = "Aantal fusten onbekend";
69
+ /** Voorbeeldgegevens voor een testprint (geen echte order, geen echte namen). */
70
+ export const VOORBEELD_TRAY_PAYLOAD = {
71
+ voorbeeld: true,
72
+ order_number: "VOORBEELD-0001",
73
+ klantnaam: "Voorbeeldklant",
74
+ leverdatum: "01-01-2027",
75
+ afleverlocatie: "Voorbeeldlocatie",
76
+ tray_nummer: 1,
77
+ tray_totaal: 2,
78
+ tray_producten: [
79
+ { artikelnummer: "VB-100", naam: "Voorbeeldplant 12 cm", aantal: "10" },
80
+ {
81
+ artikelnummer: "VB-200",
82
+ naam: "Voorbeeld samenstelling",
83
+ aantal: "4",
84
+ onderdelen: [
85
+ { artikelnummer: "VB-201", naam: "Onderdeel A", aantal: "2" },
86
+ { artikelnummer: "VB-202", naam: "Onderdeel B", aantal: "2" },
87
+ ],
88
+ },
89
+ ],
90
+ };
69
91
  const trayRegel = (x) => {
70
92
  const r = obj(x);
71
93
  return { artikelnummer: tekst(r["artikelnummer"]), naam: tekst(r["naam"] ?? r["productnaam"]), aantal: tekst(r["aantal"]) };
@@ -0,0 +1,36 @@
1
+ import type { PrinterFormaten } from "./papierFormaten.js";
2
+ import { type UitwijkUitkomst, type VerkleinInstelling, type Velindeling } from "./stickerUitwijk.js";
3
+ export type InstallMelding = {
4
+ niveau: "ok" | "waarschuwing";
5
+ printplek: string;
6
+ documenttype: string;
7
+ tekst: string;
8
+ };
9
+ /** Uitleg voor één sticker op één printplek, in gewone taal. */
10
+ export declare function stickerRegel(soortLabel: string, maat: {
11
+ breedte_mm: number;
12
+ hoogte_mm: number;
13
+ }, printerNaam: string | null, geladenEtiket: unknown, a4: {
14
+ naam: string;
15
+ } | null,
16
+ /** Velindeling van de printplek (a4VelVoor), of true/false voor de standaardlijst. */
17
+ a4Vel: boolean | Velindeling | null, instelling: VerkleinInstelling | null,
18
+ /** PrintNode-papiermaten van de labelprinter (1.69.12); weggelaten = niet gecontroleerd. */
19
+ formaten?: PrinterFormaten | null): {
20
+ niveau: "ok" | "waarschuwing";
21
+ tekst: string;
22
+ uitkomst: UitwijkUitkomst | null;
23
+ };
24
+ /** Alle gangbare maten voor één printplek (overzicht op Printplekken). */
25
+ export declare function matenPerPrintplek(printerNaam: string | null, geladenEtiket: unknown, a4: {
26
+ naam: string;
27
+ } | null, a4Vel: boolean, instelling: VerkleinInstelling | null, formaten?: PrinterFormaten | null): {
28
+ maat: string;
29
+ niveau: "ok" | "waarschuwing";
30
+ tekst: string;
31
+ }[];
32
+ /** Melding voor een document zonder printer (bijvoorbeeld Controlelijst karren). */
33
+ export declare function geenPrinterMelding(documentLabel: string, printplek: string | null): string;
34
+ /** Waarschuwing als de labelprinter geen papiermaat voor het geladen etiket kent (1.69.12). */
35
+ export declare function papierMelding(printerNaam: string, geladenEtiket: unknown, formaten: PrinterFormaten | null | undefined): string | null;
36
+ //# sourceMappingURL=installCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installCheck.d.ts","sourceRoot":"","sources":["../../src/lib/installCheck.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,IAAI,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAWF,gEAAgE;AAChE,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,OAAO,EACtB,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI;AAC3B,sFAAsF;AACtF,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,EACnC,UAAU,EAAE,kBAAkB,GAAG,IAAI;AACrC,4FAA4F;AAC5F,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAChC;IAAE,MAAM,EAAE,IAAI,GAAG,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAcpF;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,OAAO,EACtB,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC3B,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,kBAAkB,GAAG,IAAI,EACrC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAKlE;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI1F;AAUD,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAItI"}
@@ -0,0 +1,65 @@
1
+ // ============================================================================
2
+ // src/lib/installCheck.ts — install_check (1.69.11): alleen lezen, waarschuwt,
3
+ // blokkeert nooit. Per printplek: hoe gaan de stickermaten (precies, gedraaid,
4
+ // groter etiket, verkleind, via A4) en ontbreekt er een printer voor een
5
+ // document (bijvoorbeeld de Controlelijst karren).
6
+ // ============================================================================
7
+ import { leesGeladenEtiket } from "./etiketControle.js";
8
+ import { GANGBARE_ETIKETMATEN, kiesUitwijkroute, papierWaarschuwingen, } from "./stickerUitwijk.js";
9
+ const ROUTE_TEKST = {
10
+ precies: "past precies",
11
+ gedraaid: "past gedraaid",
12
+ groter_etiket: "1-op-1 op een groter etiket",
13
+ verkleind: "wordt verkleind",
14
+ a4_vel: "gaat via een A4-stickervel",
15
+ a4_snijlijnen: "gaat via gewoon A4 met snijlijnen",
16
+ };
17
+ /** Uitleg voor één sticker op één printplek, in gewone taal. */
18
+ export function stickerRegel(soortLabel, maat, printerNaam, geladenEtiket, a4,
19
+ /** Velindeling van de printplek (a4VelVoor), of true/false voor de standaardlijst. */
20
+ a4Vel, instelling,
21
+ /** PrintNode-papiermaten van de labelprinter (1.69.12); weggelaten = niet gecontroleerd. */
22
+ formaten) {
23
+ const e = leesGeladenEtiket(geladenEtiket);
24
+ const etiketten = e && printerNaam ? [{ printerNaam, paper: e.standaard ? "" : e.naam, breedte_mm: e.breedte_mm, hoogte_mm: e.hoogte_mm, formaten: formaten === undefined ? undefined : alleenPapier(formaten) }] : [];
25
+ const u = kiesUitwijkroute({ sticker: maat, etiketten, a4Printer: a4, a4VelIngesteld: !!a4Vel, a4VelIndeling: typeof a4Vel === "object" ? a4Vel : undefined, instelling });
26
+ const m = `${Math.round(maat.breedte_mm)} × ${Math.round(maat.hoogte_mm)} mm`;
27
+ if (!u) {
28
+ return { niveau: "waarschuwing", tekst: `${soortLabel} (${m}): geen labelprinter en geen A4-printer op deze printplek.`, uitkomst: null };
29
+ }
30
+ if (u.uitwijkroute === "precies" || u.uitwijkroute === "gedraaid") {
31
+ return { niveau: "ok", tekst: `${soortLabel} (${m}) ${ROUTE_TEKST[u.uitwijkroute]} op ${u.printerNaam}.`, uitkomst: u };
32
+ }
33
+ const kan = printerNaam && e ? `Printer ${printerNaam} kan de ${soortLabel.toLowerCase()} niet 1-op-1 printen (etiket ${Math.round(e.breedte_mm)} × ${Math.round(e.hoogte_mm)} mm). ` : "";
34
+ return { niveau: "waarschuwing", tekst: `${kan}${soortLabel} (${m}) ${ROUTE_TEKST[u.uitwijkroute]}: ${u.reden}.`, uitkomst: u };
35
+ }
36
+ /** Alle gangbare maten voor één printplek (overzicht op Printplekken). */
37
+ export function matenPerPrintplek(printerNaam, geladenEtiket, a4, a4Vel, instelling, formaten) {
38
+ return GANGBARE_ETIKETMATEN.map((m) => {
39
+ const r = stickerRegel("Sticker", m, printerNaam, geladenEtiket, a4, a4Vel, instelling, formaten);
40
+ return { maat: `${m.breedte_mm}×${m.hoogte_mm}`, niveau: r.niveau, tekst: r.uitkomst ? ROUTE_TEKST[r.uitkomst.uitwijkroute] + (r.uitkomst.uitwijkroute === "verkleind" ? ` (${Math.round(r.uitkomst.schaal * 100)}%)` : "") : "geen printer" };
41
+ });
42
+ }
43
+ /** Melding voor een document zonder printer (bijvoorbeeld Controlelijst karren). */
44
+ export function geenPrinterMelding(documentLabel, printplek) {
45
+ return printplek
46
+ ? `${documentLabel} heeft geen printer op printplek ‘${printplek}’. Stel er een in bij Printen › Printplekken.`
47
+ : `${documentLabel} heeft geen printer. Stel er een in bij Printen › Printplekken.`;
48
+ }
49
+ /** Alleen de papierregels (naam -> [b, h]); andere velden zoals dpi tellen niet. */
50
+ function alleenPapier(f) {
51
+ if (!f || typeof f !== "object" || Array.isArray(f))
52
+ return null;
53
+ const uit = {};
54
+ for (const [k, v] of Object.entries(f))
55
+ if (Array.isArray(v) && v.length >= 2)
56
+ uit[k] = v;
57
+ return Object.keys(uit).length ? uit : null;
58
+ }
59
+ /** Waarschuwing als de labelprinter geen papiermaat voor het geladen etiket kent (1.69.12). */
60
+ export function papierMelding(printerNaam, geladenEtiket, formaten) {
61
+ const e = leesGeladenEtiket(geladenEtiket);
62
+ if (!e || formaten === undefined)
63
+ return null;
64
+ return papierWaarschuwingen([{ printerNaam, paper: "", breedte_mm: e.breedte_mm, hoogte_mm: e.hoogte_mm, formaten: alleenPapier(formaten ?? null) }])[0] ?? null;
65
+ }
@@ -1,4 +1,18 @@
1
- export declare const KLAAR_SOORTEN: readonly ["pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon"];
1
+ export declare const KLAAR_SOORTEN: readonly ["pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon", "controlelijst"];
2
+ /**
3
+ * Opgevraagde documenttypen die geen standaardlayout van deze module nodig
4
+ * hebben (1.69.12): factuur komt met de opmaak van Facturatie, etiket was een
5
+ * testopdracht.
6
+ */
7
+ export declare const GEEN_STANDAARD_NODIG: ReadonlySet<string>;
8
+ /**
9
+ * Types zonder standaard die echt in gebruik zijn: opgevraagd (aantal > 0),
10
+ * niet in de standaardlijst en niet in GEEN_STANDAARD_NODIG.
11
+ */
12
+ export declare function opgevraagdZonderStandaard(opgevraagd: {
13
+ documenttype: string;
14
+ aantal: number;
15
+ }[], metStandaard: Iterable<string>): string[];
2
16
  /** Soorten waarvoor de Engine een Floriday-systeemlayout opvraagt. */
3
17
  export declare const FLORIDAY_VERWIJZING_SOORTEN: string[];
4
18
  export interface LayoutRij {
@@ -1 +1 @@
1
- {"version":3,"file":"klaarOmTePrinten.d.ts","sourceRoot":"","sources":["../../src/lib/klaarOmTePrinten.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,0GAEhB,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,UAA6D,CAAC;AAEtG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,4BAA4B,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAU3H,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,CAM9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAWhH;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAc1G;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD"}
1
+ {"version":3,"file":"klaarOmTePrinten.d.ts","sourceRoot":"","sources":["../../src/lib/klaarOmTePrinten.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,2HAEhB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAkC,CAAC;AAExF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAO1I;AAED,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,UAA6D,CAAC;AAEtG,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,4BAA4B,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAU3H,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,YAAY,CAM9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAWhH;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAc1G;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD"}
@@ -5,8 +5,26 @@
5
5
  // ============================================================================
6
6
  import { ETIKET_SOORTEN } from "./documentTypes.js";
7
7
  export const KLAAR_SOORTEN = [
8
- "pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon",
8
+ "pakbon", "afleverbrief", "sticker", "traysticker", "veilingbrief", "factuur", "productiebon", "controlelijst",
9
9
  ];
10
+ /**
11
+ * Opgevraagde documenttypen die geen standaardlayout van deze module nodig
12
+ * hebben (1.69.12): factuur komt met de opmaak van Facturatie, etiket was een
13
+ * testopdracht.
14
+ */
15
+ export const GEEN_STANDAARD_NODIG = new Set(["factuur", "etiket"]);
16
+ /**
17
+ * Types zonder standaard die echt in gebruik zijn: opgevraagd (aantal > 0),
18
+ * niet in de standaardlijst en niet in GEEN_STANDAARD_NODIG.
19
+ */
20
+ export function opgevraagdZonderStandaard(opgevraagd, metStandaard) {
21
+ const std = new Set(metStandaard);
22
+ return opgevraagd
23
+ .filter((o) => o.aantal > 0 && !std.has(o.documenttype) && !GEEN_STANDAARD_NODIG.has(o.documenttype))
24
+ .map((o) => o.documenttype)
25
+ .filter((t, i, a) => a.indexOf(t) === i)
26
+ .sort();
27
+ }
10
28
  /** Soorten waarvoor de Engine een Floriday-systeemlayout opvraagt. */
11
29
  export const FLORIDAY_VERWIJZING_SOORTEN = ["afleverbrief", "veilingbrief", "sticker", "traysticker"];
12
30
  /** Winnende layout: precies één actief, of precies één actief standaard. */
@@ -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,CA0oBrB;AAkHD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG;AAcD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAIzD"}
1
+ {"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAgBA,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,CA0oBrB;AAkHD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG;AAcD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAIzD"}
@@ -12,6 +12,7 @@
12
12
  // te weten welke scope actief was.
13
13
  // Draait alleen op de server (printwachtrij).
14
14
  // ============================================================================
15
+ import { beladingTekst, laagDeel, lagenVanRegel } from "./belading.js";
15
16
  const arr = (v) => (Array.isArray(v) ? v : []);
16
17
  const num = (v) => (Number.isFinite(Number(v)) ? Number(v) : 0);
17
18
  const uniek = (v) => Array.from(new Set(v.map((x) => (x ? String(x) : "")).filter(Boolean)));
@@ -499,27 +500,27 @@ export async function laadPakbonData(db, opties) {
499
500
  extra["potmaat_cm"] ??
500
501
  extra["maat"] ??
501
502
  extra["__potmaat"] ??
502
- "Niet ingesteld"),
503
+ ""),
503
504
  kleur: String(extra["kleur"] ??
504
505
  extra["Kleur"] ??
505
506
  extra["colour"] ??
506
507
  extra["color"] ??
507
508
  extra["__kleur"] ??
508
- "Niet ingesteld"),
509
+ ""),
509
510
  aantal: aantalPlanten,
510
511
  barcode: String(p["barcode"] ?? ""),
511
512
  locatie: String(p["location"] ||
512
513
  extra["locatie"] ||
513
514
  extra["location"] ||
514
515
  extra["warehouse_location"] ||
515
- "Niet ingesteld"),
516
+ ""),
516
517
  gewicht: bron["weight_kg"] ? `${num(bron["weight_kg"]).toFixed(1)} kg` : "",
517
518
  fust_aantal: fusten,
518
519
  // "stuks" is een aantalseenheid, geen fustsoort — die slaan we over.
519
520
  fustsoort: String(extra["fustsoort"] ??
520
521
  extra["Fustsoort"] ??
521
522
  extra["__fustsoort"] ??
522
- (unit && unit.toLowerCase() !== "stuks" ? unit : "Niet ingesteld")),
523
+ (unit && unit.toLowerCase() !== "stuks" ? unit : "")),
523
524
  planten_per_fust: perFust,
524
525
  sticker: stickerWaarde(regelVan(bron), () => stickerVoor(orderVan(bron), p)),
525
526
  onderdelen: onderdelenVoor(bron, p, aantalPlanten),
@@ -540,20 +541,21 @@ export async function laadPakbonData(db, opties) {
540
541
  const fusten = num(item["crates"]);
541
542
  const perFust = num(item["plants_per_crate"]);
542
543
  const nummer = Math.max(1, num(item["layer_index"]) || 1);
543
- const capaciteit = num(item["crates_per_layer"]);
544
- const inLaag = num(item["crates_in_layer"]) || fusten;
545
- const deel = capaciteit > 0 ? inLaag / capaciteit : num(item["layer_fraction"]) || 0;
544
+ const deelOfNull = laagDeel(item);
545
+ const deel = deelOfNull ?? 0;
546
546
  let laag = perLaag.get(nummer);
547
547
  if (!laag) {
548
- laag = { producten: [], ruimte: 0 };
548
+ laag = { producten: [], ruimte: 0, delen: [], lagenRegel: [] };
549
549
  perLaag.set(nummer, laag);
550
550
  }
551
551
  laag.producten.push(maakProduct(item, fusten * perFust, fusten, perFust, !(fusten > 0 && perFust > 0)));
552
552
  laag.ruimte += deel;
553
+ laag.delen.push(deelOfNull);
554
+ laag.lagenRegel.push(lagenVanRegel(item));
553
555
  }
554
556
  const hoogste = Math.max(maxLagen, ...perLaag.keys());
555
557
  for (let n = 1; n <= hoogste; n++) {
556
- lagen.push(perLaag.get(n) ?? { producten: [], ruimte: 0 });
558
+ lagen.push(perLaag.get(n) ?? { producten: [], ruimte: 0, delen: [], lagenRegel: [] });
557
559
  }
558
560
  }
559
561
  else {
@@ -561,22 +563,23 @@ export async function laadPakbonData(db, opties) {
561
563
  for (const item of items) {
562
564
  const fusten = num(item["crates"]);
563
565
  const perFust = num(item["plants_per_crate"]);
564
- const perLaag = num(item["crates_per_layer"]);
565
- const deel = num(item["layer_fraction"]) ||
566
- (perLaag > 0 ? fusten / perLaag : 0) ||
567
- (num(item["layer_share_pct"]) ? num(item["layer_share_pct"]) / 100 : 0) ||
568
- 1;
566
+ // Fusten / capaciteit van de laag is de rekenbare waarheid (1.69.12:
567
+ // altijd 0–1; daarbuiten geen percentage, zie belading.ts).
568
+ const deelOfNull = laagDeel(item);
569
+ const deel = deelOfNull ?? 1;
569
570
  const product = maakProduct(item, fusten * perFust, fusten, perFust, !(fusten > 0 && perFust > 0));
570
571
  if (!huidige || huidige.ruimte + deel > 1.0001) {
571
- huidige = { producten: [], ruimte: 0 };
572
+ huidige = { producten: [], ruimte: 0, delen: [], lagenRegel: [] };
572
573
  lagen.push(huidige);
573
574
  }
574
575
  huidige.producten.push(product);
575
576
  huidige.ruimte += deel;
577
+ huidige.delen.push(deelOfNull);
578
+ huidige.lagenRegel.push(lagenVanRegel(item));
576
579
  }
577
580
  }
578
581
  if (!lagen.length)
579
- lagen.push({ producten: [], ruimte: 0 });
582
+ lagen.push({ producten: [], ruimte: 0, delen: [], lagenRegel: [] });
580
583
  return {
581
584
  // Nodig om een Engine-opdracht voor precies één kar te kunnen filteren.
582
585
  // De waarde komt uit de gedeelde database en wordt nooit lokaal bedacht.
@@ -593,7 +596,7 @@ export async function laadPakbonData(db, opties) {
593
596
  const potmaten = uniek(laag.producten.map((product) => product["potmaat"]));
594
597
  return {
595
598
  laagnummer: j + 1,
596
- belading: `${Math.round(Math.min(laag.ruimte, 1) * 100)}%`,
599
+ belading: beladingTekst(laag.delen, laag.lagenRegel),
597
600
  potmaat: potmaten.length === 1 ? potmaten[0] : "",
598
601
  producten: laag.producten,
599
602
  fusten: vatFustenSamen(laag.producten),
@@ -294,6 +294,12 @@ export declare const DEMO_ORDER: {
294
294
  };
295
295
  export type DemoOrder = typeof DEMO_ORDER;
296
296
  export declare function alleProducten(order: DemoOrder): DemoProduct[];
297
+ /** Kolommen die verdwijnen als ze voor alle regels leeg zijn. */
298
+ export declare const VERBERG_ALS_LEEG: Set<string>;
299
+ /** Haalt Potmaat/Locatie/Kleur/Fustsoort weg als geen enkele regel een waarde heeft. */
300
+ export declare function zonderLegeKolommen<P>(velden: string[], producten: P[], cel: (p: P, v: string) => unknown): string[];
301
+ /** "1 kar", "2 karren": enkelvoud alleen bij precies 1. */
302
+ export declare function telwoord(n: number, enkelvoud: string, meervoud: string): string;
297
303
  export declare function totalen(order: DemoOrder): Record<string, string>;
298
304
  export declare const CONDITIE_VELDEN: {
299
305
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
@@ -334,6 +334,7 @@ export const SECTIE_REGISTER = [
334
334
  omschrijving: "Transporteur, route en chauffeur.",
335
335
  opties: [
336
336
  { key: "toonTransporteur", label: "Vervoerder (carrier_label uit de Engine)", type: "schakelaar", standaard: true },
337
+ { key: "toonOphaalmoment", label: "Vertrektijd / ophaalmoment", type: "schakelaar", standaard: true },
337
338
  { key: "toonRoute", label: "Route", type: "schakelaar", standaard: true },
338
339
  { key: "toonChauffeur", label: "Chauffeur", type: "schakelaar", standaard: false },
339
340
  { key: "toonTrack", label: "Track & trace", type: "schakelaar", standaard: false },
@@ -508,6 +509,7 @@ export const SECTIE_REGISTER = [
508
509
  { value: "qrcode", label: "QR-code" },
509
510
  { value: "chauffeur", label: "Chauffeur" },
510
511
  { value: "route", label: "Route" },
512
+ { value: "stickers", label: "Aantal stickers bij deze kar" },
511
513
  ],
512
514
  },
513
515
  {
@@ -943,7 +945,7 @@ export function onderdeelCellen(o, velden, gekozen) {
943
945
  if (v === naamKolom) {
944
946
  const delen = [];
945
947
  const naam = gekozen.includes("artikelnaam") ? o.artikelnaam : "";
946
- const kop = `↳ ${o.per_stuk ? `${o.per_stuk}× ` : ""}${naam}`.trimEnd();
948
+ const kop = `– ${o.per_stuk ? `${o.per_stuk}× ` : ""}${naam}`.trimEnd();
947
949
  delen.push(kop);
948
950
  for (const extra of zonderKolom) {
949
951
  const w = waarde(extra);
@@ -1154,9 +1156,20 @@ export const DEMO_ORDER = {
1154
1156
  export function alleProducten(order) {
1155
1157
  return order.karren.flatMap((k) => k.lagen.flatMap((l) => l.producten));
1156
1158
  }
1159
+ /** Kolommen die verdwijnen als ze voor alle regels leeg zijn. */
1160
+ export const VERBERG_ALS_LEEG = new Set(["potmaat", "locatie", "kleur", "fustsoort"]);
1161
+ /** Haalt Potmaat/Locatie/Kleur/Fustsoort weg als geen enkele regel een waarde heeft. */
1162
+ export function zonderLegeKolommen(velden, producten, cel) {
1163
+ return velden.filter((v) => !VERBERG_ALS_LEEG.has(v) || producten.some((p) => String(cel(p, v) ?? "").trim() !== ""));
1164
+ }
1165
+ /** "1 kar", "2 karren": enkelvoud alleen bij precies 1. */
1166
+ export function telwoord(n, enkelvoud, meervoud) {
1167
+ return `${n} ${n === 1 ? enkelvoud : meervoud}`;
1168
+ }
1157
1169
  export function totalen(order) {
1158
1170
  const producten = alleProducten(order);
1159
- const lagen = order.karren.reduce((n, k) => n + k.lagen.length, 0);
1171
+ // Alleen lagen met inhoud tellen; lege plekken op de kar zijn geen laag.
1172
+ const lagen = order.karren.reduce((n, k) => n + k.lagen.filter((l) => (l.producten?.length ?? 0) > 0 || (l.fusten?.length ?? 0) > 0).length, 0);
1160
1173
  // Ontbreekt de fustlijst per laag, dan tellen we de fusten van de producten.
1161
1174
  const fusten = order.karren.reduce((n, k) => n +
1162
1175
  k.lagen.reduce((m, l) => {
@@ -1168,9 +1181,9 @@ export function totalen(order) {
1168
1181
  const gewicht = producten.reduce((n, p2) => n + parseFloat(p2.gewicht), 0);
1169
1182
  return {
1170
1183
  producten: `${stuks} stuks`,
1171
- lagen: `${lagen} lagen`,
1172
- fusten: `${fusten} fusten`,
1173
- karren: `${order.karren.length} karren`,
1184
+ lagen: telwoord(lagen, "laag", "lagen"),
1185
+ fusten: telwoord(fusten, "fust", "fusten"),
1186
+ karren: telwoord(order.karren.length, "kar", "karren"),
1174
1187
  gewicht: `${gewicht.toFixed(1)} kg`,
1175
1188
  volume: `${(lagen * 0.42).toFixed(2)} m³`,
1176
1189
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,EAyBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAe,KAAK,IAAI,EAAmC,MAAM,kBAAkB,CAAC;AAE3F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,CAAC;AAinBF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA+EvE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmB9E"}
1
+ {"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,EA0BL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAe,KAAK,IAAI,EAAmC,MAAM,kBAAkB,CAAC;AAE3F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,CAAC;AAmnBF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA+EvE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmB9E"}
@@ -6,7 +6,7 @@
6
6
  // layout-engine (pakbonDocument.ts) bepaalt WAAR het terechtkomt. Er is geen
7
7
  // tweede plek meer waar pakboninhoud wordt samengesteld.
8
8
  // ============================================================================
9
- import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karKopNummer, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
9
+ import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karKopNummer, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, onderdeelCellen, zonderLegeKolommen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
10
10
  import { karMetadata } from "./pakbonPresentation.js";
11
11
  import { KLEUR_GRIJS } from "./pakbonDocument.js";
12
12
  const arr = (v) => (Array.isArray(v) ? v : []);
@@ -66,6 +66,9 @@ function sectitel(tekst, basis) {
66
66
  function productTabel(velden, producten, toonKop, basis, onderdeelKolommen = null) {
67
67
  if (!velden.length || !producten.length)
68
68
  return null;
69
+ velden = zonderLegeKolommen(velden, producten, cel);
70
+ if (!velden.length)
71
+ return null;
69
72
  const breedtes = productVeldBreedtes(velden);
70
73
  const kolommen = velden.map((v, i) => ({
71
74
  label: PRODUCT_LABELS[v] ?? v,
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EA+BL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,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;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AASD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAmB3D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AAwFD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AA4pBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAmFR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;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,EAgCL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,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;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AASD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAmB3D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AAwFD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AA8pBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAmFR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;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"}
@@ -7,7 +7,7 @@
7
7
  // layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
8
8
  // de afdruk altijd exact dezelfde secties — inclusief de orderregels.
9
9
  // ============================================================================
10
- import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, HERHAAL_SECTIES, kopHerhalen, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
10
+ import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, HERHAAL_SECTIES, kopHerhalen, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, zonderLegeKolommen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
11
11
  import { haalPrintLogos } from "./logoLibrary.js";
12
12
  import { code128BarsHtml } from "./code128.js";
13
13
  import { karMetadata } from "./pakbonPresentation.js";
@@ -312,7 +312,7 @@ function fustTabel(velden, fusten, titel) {
312
312
  return `${titel ? `<div class="sectitel">${esc(titel)}</div>` : ""}<table class="regels">${kop}${rijen}</table>`;
313
313
  }
314
314
  function productenHtml(sectie, laag, toonKop = true) {
315
- const velden = lijst(sectie, "velden");
315
+ let velden = lijst(sectie, "velden");
316
316
  if (!velden.length)
317
317
  return "";
318
318
  let producten = sorteerProducten(laag.producten, optS(sectie, "sortering", "eigen"));
@@ -329,6 +329,9 @@ function productenHtml(sectie, laag, toonKop = true) {
329
329
  }
330
330
  if (!producten.length)
331
331
  return "";
332
+ velden = zonderLegeKolommen(velden, producten, cel);
333
+ if (!velden.length)
334
+ return "";
332
335
  const label = (v) => v === "foto" ? "Foto" : v === "qrcode" ? "QR-code" : PRODUCT_LABELS[v] ?? v;
333
336
  const weergave = optS(sectie, "weergave", "tabel");
334
337
  const sub = samenstellingTonen(sectie.opties) ? onderdeelVelden(sectie.opties) : null;
@@ -1,8 +1,10 @@
1
- import type { DemoKar } from "./pakbonBuilder.js";
1
+ import { type DemoKar } from "./pakbonBuilder.js";
2
2
  /**
3
3
  * Canonieke zichtbare metadata van een kar. Zowel het live voorbeeld als de
4
4
  * print-renderer gebruiken deze lijst, zodat geen van beide zelf regels kan
5
5
  * toevoegen of in een andere volgorde kan zetten.
6
6
  */
7
7
  export declare function karMetadata(kar: DemoKar, velden: string[]): string[];
8
+ /** Stickers bij deze kar: planten van regels waar een sticker bij hoort. */
9
+ export declare function aantalStickersBijKar(kar: DemoKar): number;
8
10
  //# sourceMappingURL=pakbonPresentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBpE"}
1
+ {"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwBpE;AACD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAKzD"}