@flowselections/layout-maker 1.69.5 → 1.69.10

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 (48) hide show
  1. package/dist-lib/components/AfleverbriefBuilderPage.d.ts.map +1 -1
  2. package/dist-lib/components/AfleverbriefBuilderPage.js +16 -8
  3. package/dist-lib/components/BlokOntwerperPage.d.ts.map +1 -1
  4. package/dist-lib/components/BlokOntwerperPage.js +15 -8
  5. package/dist-lib/components/FormaatOrientatieBar.d.ts +2 -1
  6. package/dist-lib/components/FormaatOrientatieBar.d.ts.map +1 -1
  7. package/dist-lib/components/FormaatOrientatieBar.js +6 -4
  8. package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -1
  9. package/dist-lib/components/PakbonBuilderPage.js +16 -8
  10. package/dist-lib/components/ProductiebonBuilderPage.d.ts.map +1 -1
  11. package/dist-lib/components/ProductiebonBuilderPage.js +16 -10
  12. package/dist-lib/components/SysteemLayoutMelding.d.ts +6 -0
  13. package/dist-lib/components/SysteemLayoutMelding.d.ts.map +1 -0
  14. package/dist-lib/components/SysteemLayoutMelding.js +29 -0
  15. package/dist-lib/integrations/supabase/types.d.ts +220 -10
  16. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  17. package/dist-lib/lib/documentProfiles.js +2 -2
  18. package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -1
  19. package/dist-lib/lib/eigenDocumenten.js +1 -0
  20. package/dist-lib/lib/fieldRegistry.js +3 -2
  21. package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -1
  22. package/dist-lib/lib/htmlPdf.server.js +46 -4
  23. package/dist-lib/lib/layoutOpslaan.d.ts +16 -0
  24. package/dist-lib/lib/layoutOpslaan.d.ts.map +1 -0
  25. package/dist-lib/lib/layoutOpslaan.js +56 -0
  26. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  27. package/dist-lib/lib/orderData.server.js +7 -3
  28. package/dist-lib/lib/pakbonBuilder.d.ts +13 -0
  29. package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
  30. package/dist-lib/lib/pakbonBuilder.js +53 -9
  31. package/dist-lib/lib/pakbonHtml.d.ts +2 -0
  32. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  33. package/dist-lib/lib/pakbonHtml.js +35 -7
  34. package/dist-lib/lib/printQueue.server.d.ts +13 -0
  35. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  36. package/dist-lib/lib/printQueue.server.js +81 -4
  37. package/dist-lib/lib/profielHtml.d.ts.map +1 -1
  38. package/dist-lib/lib/profielHtml.js +2 -1
  39. package/dist-lib/lib/useDocumentData.d.ts +1 -0
  40. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  41. package/dist-lib/lib/useDocumentData.js +9 -2
  42. package/dist-lib/lib/versie.generated.d.ts +1 -1
  43. package/dist-lib/lib/versie.generated.d.ts.map +1 -1
  44. package/dist-lib/lib/versie.generated.js +1 -1
  45. package/dist-lib/lib/vervoerder.d.ts +27 -3
  46. package/dist-lib/lib/vervoerder.d.ts.map +1 -1
  47. package/dist-lib/lib/vervoerder.js +65 -10
  48. package/package.json +2 -2
@@ -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, 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, 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";
@@ -24,8 +24,12 @@ const cel = (p, veld) => {
24
24
  return "";
25
25
  if (veld === "qrcode")
26
26
  return "";
27
+ if (veld === "aantal" && p.aantal_onbekend)
28
+ return AANTAL_ONBEKEND;
27
29
  return String(p[veld] ?? "");
28
30
  };
31
+ /** Melding bij een regel waarvan het aantal planten niet te bepalen is. */
32
+ export const AANTAL_ONBEKEND = "Planten per fust onbekend";
29
33
  /** Rendert uitsluitend een bestaande barcodewaarde uit de Engine-payload. */
30
34
  function barcodeHtml(value, hoogteMm = 15) {
31
35
  const tekst = String(value ?? "").trim();
@@ -150,6 +154,7 @@ function normProduct(p) {
150
154
  fust_aantal: Number(p["fust_aantal"] ?? 0) || 0,
151
155
  fustsoort: String(p["fustsoort"] ?? ""),
152
156
  planten_per_fust: Number(p["planten_per_fust"] ?? 0) || 0,
157
+ ...(p["aantal_onbekend"] === true ? { aantal_onbekend: true } : {}),
153
158
  sticker: p["sticker"] == null || p["sticker"] === "" ? "–" : String(p["sticker"]),
154
159
  onderdelen: Array.isArray(p["onderdelen"])
155
160
  ? p["onderdelen"].map((o) => ({
@@ -502,7 +507,9 @@ function fustVerzamellijstHtml(order, s) {
502
507
  }
503
508
  function karrenHtml(s, order, zoek,
504
509
  /** Kop die op iedere nieuwe karpagina wordt herhaald (HELE KAR / DEELKAR). */
505
- paginaKop = "") {
510
+ paginaKop = "",
511
+ /** Kopblokken met `herhalen = "eerste_per_kar"`, vanaf de tweede kar. */
512
+ karStartKop = "") {
506
513
  const modus = optS(s, "modus", "pagina");
507
514
  if (modus === "geen")
508
515
  return "";
@@ -526,13 +533,15 @@ paginaKop = "") {
526
533
  const laagGroepen = groepeerIdentiekeLagen(lagen, String(lagenModus) === "gebundeld");
527
534
  laagGroepen.forEach((lg, j) => {
528
535
  const breek = i > 0 || j > 0;
529
- delen.push(`<div class="${breek ? "breekvoor" : ""}">${breek ? paginaKop : ""}${blokFrame(s, karBlok(s, kar, [lg.laag], zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
536
+ const karKop = i > 0 && j === 0 ? karStartKop : "";
537
+ delen.push(`<div class="${breek ? "breekvoor" : ""}">${breek ? paginaKop : ""}${karKop}${blokFrame(s, karBlok(s, kar, [lg.laag], zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
530
538
  });
531
539
  return;
532
540
  }
533
541
  const breek = i > 0 && perPagina;
534
542
  const scheider = i > 0 && !perPagina ? scheidingHtml(scheiding) : "";
535
- delen.push(`<div class="${breek ? "breekvoor" : ""} ${modus === "passend" ? "heelhouden" : ""}">${breek ? paginaKop : ""}${scheider}${blokFrame(s, karBlok(s, kar, lagen, zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
543
+ const karKop = i > 0 ? karStartKop : "";
544
+ delen.push(`<div class="${breek ? "breekvoor" : ""} ${modus === "passend" ? "heelhouden" : ""}">${breek ? paginaKop : ""}${scheider}${karKop}${blokFrame(s, karBlok(s, kar, lagen, zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
536
545
  });
537
546
  return delen.join("");
538
547
  }
@@ -731,14 +740,33 @@ export function renderPakbonBody(config, order, opties = {}) {
731
740
  const klantKop = klantNaam
732
741
  ? `<div class="blok" style="font-size:16pt;font-weight:800;line-height:1.15">${esc(klantNaam)}</div>`
733
742
  : "";
734
- const kop = variantKop + klantKop + documentLogoHtml(cfg.logo, opts);
743
+ // "Weergave bij meerdere pakbonnen" per kopblok; ontbreekt = "document"
744
+ // (huidig gedrag). De grote klantnaam volgt de keuze van klantgegevens.
745
+ const herhaal = (s) => (HERHAAL_SECTIES.has(String(s.type)) ? kopHerhalen(s) : "document");
746
+ const klantSectie = zoek("klantgegevens");
747
+ const klantModus = klantSectie ? herhaal(klantSectie) : "document";
748
+ const kop = variantKop + (klantModus === "elke_pagina" ? "" : klantKop) + documentLogoHtml(cfg.logo, opts);
749
+ const karStartKop = (klantModus === "eerste_per_kar" ? klantKop : "") +
750
+ secties
751
+ .filter((s) => herhaal(s) === "eerste_per_kar")
752
+ .map((s) => blokFrame(s, sectieHtml(s, order, zoek, opts)))
753
+ .join("");
754
+ const paginaKopInhoud = (klantModus === "elke_pagina" ? klantKop : "") +
755
+ secties
756
+ .filter((s) => herhaal(s) === "elke_pagina")
757
+ .map((s) => blokFrame(s, sectieHtml(s, order, zoek, opts)))
758
+ .join("");
759
+ // De PDF-motor tekent .paginakop bovenaan iedere pagina en houdt die
760
+ // hoogte vrij van het afdrukgebied; in de HTML staat hij één keer bovenaan.
761
+ const paginaKop = paginaKopInhoud && !opties.zonderPaginavoet ? `<div class="paginakop">${paginaKopInhoud}</div>` : "";
735
762
  const totalenSectie = zoek("totalen");
736
763
  const totalenElkePagina = !!totalenSectie && opt(totalenSectie, "elke_pagina", false) === true;
737
764
  const inhoud = secties
738
765
  .filter((s) => !(s.type === "totalen" && totalenElkePagina))
739
766
  .filter((s) => !(s.type === "barcode" && heeftKarBarcodes))
767
+ .filter((s) => herhaal(s) !== "elke_pagina")
740
768
  .map((s) => s.type === "karren"
741
- ? karrenHtml(s, order, zoek, variantKop)
769
+ ? karrenHtml(s, order, zoek, variantKop, karStartKop)
742
770
  : blokFrame(s, sectieHtml(s, order, zoek, opts)))
743
771
  .join("");
744
772
  const pickSectie = alleSecties.find((s) => s.type === "pickmethode");
@@ -759,7 +787,7 @@ export function renderPakbonBody(config, order, opties = {}) {
759
787
  const voet = totalenElkePagina && totalenSectie && !opties.zonderPaginavoet
760
788
  ? `<div class="paginavoet">${sectieHtml(totalenSectie, order, zoek, opts)}</div>`
761
789
  : "";
762
- return kop + inhoud + (barcode ? `<div class="blok">${barcode}</div>` : "") + voet;
790
+ return paginaKop + kop + inhoud + (barcode ? `<div class="blok">${barcode}</div>` : "") + voet;
763
791
  }
764
792
  /** Het documentlogo bovenaan de pakbon. */
765
793
  function documentLogoHtml(logoCfg, opties) {
@@ -17,6 +17,19 @@ export declare class GeenDocumentFout extends Error {
17
17
  export declare class WachtOpLayoutFout extends Error {
18
18
  name: string;
19
19
  }
20
+ /** Geen vervoerder (of Engine te oud): wachten tot hij is ingesteld, onbegrensd. */
21
+ export declare class WachtOpVervoerderFout extends Error {
22
+ name: string;
23
+ }
24
+ /**
25
+ * Bepaalt de vervoerder voor een eigen document. Alleen carrier_label uit de
26
+ * Engine (payload of logistics_brief_transport). Geeft null voor documenten
27
+ * zonder vervoerder (of Floriday 1-op-1). Gooit WachtOpVervoerderFout als hij
28
+ * ontbreekt; nooit een naam opzoeken, nooit "onbekend".
29
+ */
30
+ export declare function bepaalVervoerder(db: PrintDb, job: Job, p: Job, layout: Job | null): Promise<string | null>;
31
+ /** Wacht op een vervoerder: blijft wachtend (geen eindstatus), reden zichtbaar in de wachtrij. */
32
+ export declare function wachtOpVervoerder(db: PrintDb, job: Job, reden: string): Promise<"wachtend">;
20
33
  /** Blijvende contractfout: opnieuw proberen met dezelfde invoer kan niet slagen. */
21
34
  export declare class EngineContractFout extends GeenDocumentFout {
22
35
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,13 @@
3
3
  // Pakt wachtende opdrachten op, maakt er een PDF van en stuurt die stil naar
4
4
  // de juiste printer. Draait alleen op de server (cron / interne aanroep).
5
5
  // ============================================================================
6
- import { metVervoerder } from "./vervoerder.js";
6
+ import { carrierUitPayload, carrierUitTransport, ENGINE_TE_OUD, geenVervoerderTekst, metVervoerder, VERVOERDER_DOCUMENTEN, voorbeeldVervoerder } from "./vervoerder.js";
7
7
  import { maakPakbonOrder, renderPakbonDocument, voorbeeldPakbonOrder, } from "./pakbonHtml.js";
8
8
  import { bouwPakbonScanInhoud, bewaarPakbonScanInhoud } from "./pakbonScan.js";
9
9
  import { bouwPakbonBarcodeVerzoek, geleverdeBarcodeVoorJob, vraagPakbonBarcodeAan, } from "./pakbonBarcodeVerzoek.js";
10
10
  import { bepaalVolleKarStand, deelkarRegels, leesAfleverbriefConfig, pakbonLayoutVariant, } from "./pakbonBuilder.js";
11
11
  import { renderProductiebonDocument } from "./productiebonHtml.js";
12
- import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData } from "./orderData.server.js";
12
+ import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData, zoekOrderVerwijzing } from "./orderData.server.js";
13
13
  import { profielHeeftInhoud, renderProfielDocument } from "./profielHtml.js";
14
14
  import { bouwDocumentHtml, voorbeeldContext } from "./layoutPreview.js";
15
15
  import { AfbeeldingInhoudFout, htmlNaarPdfServer, PdfRenderFout } from "./htmlNaarPdf.server.js";
@@ -132,6 +132,71 @@ export class WachtOpLayoutFout extends Error {
132
132
  this.name = "WachtOpLayoutFout";
133
133
  }
134
134
  }
135
+ /** Geen vervoerder (of Engine te oud): wachten tot hij is ingesteld, onbegrensd. */
136
+ export class WachtOpVervoerderFout extends Error {
137
+ constructor() {
138
+ super(...arguments);
139
+ this.name = "WachtOpVervoerderFout";
140
+ }
141
+ }
142
+ /**
143
+ * Bepaalt de vervoerder voor een eigen document. Alleen carrier_label uit de
144
+ * Engine (payload of logistics_brief_transport). Geeft null voor documenten
145
+ * zonder vervoerder (of Floriday 1-op-1). Gooit WachtOpVervoerderFout als hij
146
+ * ontbreekt; nooit een naam opzoeken, nooit "onbekend".
147
+ */
148
+ export async function bepaalVervoerder(db, job, p, layout) {
149
+ const dt = normaliseerDocumenttype(layout?.documenttype ?? job.documenttype);
150
+ if (!VERVOERDER_DOCUMENTEN.includes(dt))
151
+ return null;
152
+ if (String(layout?.bron ?? "") === "floriday" || String(p._herkomst ?? "") === "floriday")
153
+ return null;
154
+ if (isTestprintJob(job) || p.voorbeeld === true)
155
+ return voorbeeldVervoerder(p);
156
+ const ref = zoekOrderVerwijzing(p);
157
+ const ordernummer = String(ref.ordernummer ?? p.order_number ?? p.ordernummer ?? "").trim();
158
+ let r = carrierUitPayload(p);
159
+ if (r.soort === "afwezig") {
160
+ if (!ref.orderId) {
161
+ // Engine-opdracht zonder carrier_label en zonder order: Engine te oud.
162
+ if (isEngineOpdracht(job))
163
+ throw new WachtOpVervoerderFout(ENGINE_TE_OUD);
164
+ return null;
165
+ }
166
+ const { data, error } = await db.rpc("logistics_brief_transport", {
167
+ p_order_id: ref.orderId,
168
+ ...(ref.cartId ? { p_cart_id: ref.cartId } : {}),
169
+ });
170
+ if (error)
171
+ throw new WachtOpVervoerderFout(`${ENGINE_TE_OUD} (${String(error.message ?? "").slice(0, 120)})`);
172
+ r = carrierUitTransport(data);
173
+ if (r.soort === "afwezig")
174
+ throw new WachtOpVervoerderFout(ENGINE_TE_OUD);
175
+ }
176
+ if (r.soort === "geen")
177
+ throw new WachtOpVervoerderFout(geenVervoerderTekst(ordernummer));
178
+ return r.label;
179
+ }
180
+ /** Wacht op een vervoerder: blijft wachtend (geen eindstatus), reden zichtbaar in de wachtrij. */
181
+ export async function wachtOpVervoerder(db, job, reden) {
182
+ const nu = new Date().toISOString();
183
+ await db
184
+ .from("print_jobs")
185
+ .update({
186
+ status: "wachtend",
187
+ foutcode: "GEEN_VERVOERDER",
188
+ foutmelding: reden.slice(0, 500),
189
+ pogingen: Number(job.pogingen ?? 0) + 1,
190
+ volgende_poging: new Date(Date.now() + 5 * 60 * 1000).toISOString(),
191
+ opgepakt_op: null,
192
+ voltooid_op: null,
193
+ updated_at: nu,
194
+ })
195
+ .eq("id", job.id)
196
+ .neq("status", "geannuleerd");
197
+ await log(db, job.id, "wacht_op_vervoerder", reden);
198
+ return "wachtend";
199
+ }
135
200
  /** Blijvende contractfout: opnieuw proberen met dezelfde invoer kan niet slagen. */
136
201
  export class EngineContractFout extends GeenDocumentFout {
137
202
  constructor() {
@@ -922,6 +987,8 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
922
987
  return meegestuurd;
923
988
  }
924
989
  const p = (job.payload ?? {});
990
+ // Vervoerder: alleen carrier_label uit de Engine. Ontbreekt hij → wachten.
991
+ const carrierLabel = await bepaalVervoerder(db, job, p, layout);
925
992
  const liggend = String(layout.orientatie ?? "portrait") === "landscape";
926
993
  const b = Number(layout.breedte_mm ?? 210);
927
994
  const h = Number(layout.hoogte_mm ?? 297);
@@ -997,7 +1064,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
997
1064
  const gekozen = (cartId ? karren.find((k) => String(k?.cart_id ?? "").trim() === cartId) : null) ??
998
1065
  karren[0] ??
999
1066
  null;
1000
- const metTerugval = await metBedrijfsTerugval(db, { ...volledig, karren: gekozen ? [gekozen] : [] }, layout);
1067
+ const metTerugval = await metBedrijfsTerugval(db, metVervoerder({ ...volledig, karren: gekozen ? [gekozen] : [] }, p, carrierLabel), layout);
1001
1068
  const order = metTerugval.order;
1002
1069
  layout = metTerugval.layout;
1003
1070
  return renderPakbonDocument(leesAfleverbriefConfig(layout.config), order, {
@@ -1074,7 +1141,7 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
1074
1141
  if (isTestpakbon)
1075
1142
  order = zonderBarcodes(order);
1076
1143
  // Vervoerder/ophaalmoment alleen uit de printopdracht; ontbrekend = weglaten.
1077
- order = metVervoerder(order, p);
1144
+ order = metVervoerder(order, p, carrierLabel);
1078
1145
  if (isEngineOpdracht(job) && !isTestpakbon) {
1079
1146
  let barcode = String(engineBarcode ?? "").trim();
1080
1147
  if (!barcode) {
@@ -1271,6 +1338,13 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
1271
1338
  ? null
1272
1339
  : await laadOrderVanuitDatabase(db, p).catch(() => null);
1273
1340
  const gegevens = { ...(uitDatabase ?? {}), ...(meegegeven ?? {}) };
1341
+ if (carrierLabel !== null) {
1342
+ // Eén bron: carrier_label. Overschrijft elke andere transporteurwaarde.
1343
+ gegevens.carrier_label = carrierLabel;
1344
+ gegevens.transporteur = carrierLabel;
1345
+ gegevens.verzending = { ...(gegevens.verzending ?? {}), transporteur: carrierLabel };
1346
+ gegevens.order = { ...(gegevens.order ?? {}), transporteur: carrierLabel, carrier_label: carrierLabel };
1347
+ }
1274
1348
  const profielData = p.voorbeeld === true ? { ...voorbeeldContext(), ...(gegevens ?? {}) } : gegevens;
1275
1349
  const profielHtml = renderProfielDocument(String(layout.documenttype), cfg, profielData, {
1276
1350
  breedteMm,
@@ -1749,6 +1823,9 @@ async function verwerkJob(db, job) {
1749
1823
  return "verstuurd";
1750
1824
  }
1751
1825
  catch (e) {
1826
+ if (e instanceof WachtOpVervoerderFout) {
1827
+ return await wachtOpVervoerder(db, job, e.message);
1828
+ }
1752
1829
  if (e instanceof WachtOpLayoutFout) {
1753
1830
  return await wachtOpLayout(db, job, e.message);
1754
1831
  }
@@ -1 +1 @@
1
- {"version":3,"file":"profielHtml.d.ts","sourceRoot":"","sources":["../../src/lib/profielHtml.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA2ND,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAWjF;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE,mBAAwB,GAC/B,MAAM,CAwCR"}
1
+ {"version":3,"file":"profielHtml.d.ts","sourceRoot":"","sources":["../../src/lib/profielHtml.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA4ND,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAWjF;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,EACjB,MAAM,GAAE,mBAAwB,GAC/B,MAAM,CAwCR"}
@@ -48,7 +48,8 @@ const SYNONIEMEN = {
48
48
  plaats: ["ontvanger.plaats", "klant.plaats", "adres.plaats"],
49
49
  land: ["ontvanger.land", "klant.land", "adres.land"],
50
50
  klantnaam: ["klant.naam", "ontvanger.bedrijf", "klantnaam"],
51
- transporteur: ["verzending.transporteur", "order.transporteur", "transporteur"],
51
+ transporteur: ["carrier_label", "order.carrier_label", "verzending.transporteur", "order.transporteur", "transporteur"],
52
+ carrier_label: ["carrier_label", "order.carrier_label"],
52
53
  verzendmethode: ["verzending.methode", "order.verzendmethode", "verzendmethode"],
53
54
  route: ["verzending.route", "order.route", "route"],
54
55
  track_trace: ["verzending.track_trace", "order.track_trace", "trackTrace"],
@@ -89,6 +89,7 @@ export interface LayoutConflict {
89
89
  /** Documentsoorten met meer dan één actieve layout binnen dezelfde bron. */
90
90
  export declare function layoutConflicten(layouts: LayoutModel[]): LayoutConflict[];
91
91
  export declare function verwijderLayout(id: string): Promise<void>;
92
+ export declare const LAYOUT_NIET_OPGESLAGEN = "Layout niet opgeslagen: geen rechten of layout niet gevonden";
92
93
  export declare function updateLayout(id: string, patch: Record<string, unknown>): Promise<void>;
93
94
  export declare function useLayoutDetail(layoutId: string): {
94
95
  layout: LayoutModel | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,9 @@ export async function dupliceerLayout(id) {
84
84
  delete b.standaard_versie;
85
85
  b.naam = `${String(b.naam)} (kopie)`;
86
86
  b.is_standaard = false;
87
+ // Een kopie van een systeemlayout is zelf aanpasbaar.
88
+ if ("systeem" in b)
89
+ b.systeem = false;
87
90
  const { data: nieuw, error } = await supabase
88
91
  .from("document_layouts")
89
92
  .insert(b)
@@ -151,13 +154,17 @@ export async function verwijderLayout(id) {
151
154
  if (error)
152
155
  throw error;
153
156
  }
157
+ export const LAYOUT_NIET_OPGESLAGEN = "Layout niet opgeslagen: geen rechten of layout niet gevonden";
154
158
  export async function updateLayout(id, patch) {
155
- const { error } = await supabase
159
+ const { data, error } = await supabase
156
160
  .from("document_layouts")
157
161
  .update(patch)
158
- .eq("id", id);
162
+ .eq("id", id)
163
+ .select("id");
159
164
  if (error)
160
165
  throw error;
166
+ if (!Array.isArray(data) || data.length === 0)
167
+ throw new Error(LAYOUT_NIET_OPGESLAGEN);
161
168
  }
162
169
  export function useLayoutDetail(layoutId) {
163
170
  const [layout, setLayout] = useState(null);
@@ -1,2 +1,2 @@
1
- export declare const PAKKET_VERSIE = "1.69.5";
1
+ export declare const PAKKET_VERSIE = "1.69.10";
2
2
  //# sourceMappingURL=versie.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"versie.generated.d.ts","sourceRoot":"","sources":["../../src/lib/versie.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,WAAW,CAAC"}
1
+ {"version":3,"file":"versie.generated.d.ts","sourceRoot":"","sources":["../../src/lib/versie.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,YAAY,CAAC"}
@@ -1,2 +1,2 @@
1
1
  // Gegenereerd door scripts/schrijf-versie.cjs uit package.json. Niet met de hand wijzigen.
2
- export const PAKKET_VERSIE = "1.69.5";
2
+ export const PAKKET_VERSIE = "1.69.10";
@@ -3,11 +3,35 @@ export interface VervoerderInfo {
3
3
  ophaalmoment: string;
4
4
  ophaaladres: string;
5
5
  }
6
+ /** Documentsoorten van deze module die een vervoerder moeten tonen. */
7
+ export declare const VERVOERDER_DOCUMENTEN: readonly ["pakbon", "afleverbrief", "verzendlabel", "transportdocument"];
8
+ /** Voorbeeldwaarden voor testprint en editor (geen echte vervoerdersnaam). */
9
+ export declare const VOORBEELD_VERVOERDERS: readonly ["Voorbeeld Transport BV", "Eigen vervoer", "Afhalen"];
10
+ export declare const ENGINE_TE_OUD = "Logistieke Engine 1.0.184 of hoger nodig: de opdracht bevat geen vervoerder (carrier_label). Er is niets geprint.";
11
+ export declare function geenVervoerderTekst(ordernummer: string): string;
12
+ export type CarrierUitkomst = {
13
+ soort: "ok";
14
+ label: string;
15
+ } | {
16
+ soort: "geen";
17
+ } | {
18
+ soort: "afwezig";
19
+ };
20
+ /** Kiest het voorbeeldlabel voor een testprint (alleen één van de drie). */
21
+ export declare function voorbeeldVervoerder(payload: unknown): string;
22
+ /** Leest carrier_label uit één transportobject (payload of logistics_brief_transport). */
23
+ export declare function carrierUitTransport(t: unknown): CarrierUitkomst;
24
+ /** Zoekt carrier_label in de payload (bovenin, transport, data, data.transport). */
25
+ export declare function carrierUitPayload(payload: unknown): CarrierUitkomst;
6
26
  /** ISO-tijd (UTC) → leesbaar in Europe/Amsterdam. Ongeldig → leeg. */
7
27
  export declare function ophaalmomentTekst(iso: unknown): string;
8
- export declare function vervoerderUitPayload(payload: unknown): VervoerderInfo;
9
- /** Zet bekende waarden op order.transport; ontbrekende blijven leeg (regel valt weg). */
28
+ /** Ophaalmoment/-adres uit de payload. De vervoerder komt hier NIET vandaan. */
29
+ export declare function vervoerderUitPayload(payload: unknown, carrierLabel?: string | null): VervoerderInfo;
30
+ /**
31
+ * Zet vervoerder (alleen carrier_label) en ophaalgegevens op order.transport.
32
+ * Elke andere bronwaarde voor de transporteur wordt overschreven: geen terugval.
33
+ */
10
34
  export declare function metVervoerder<T extends {
11
35
  transport: Record<string, unknown>;
12
- }>(order: T, payload: unknown): T;
36
+ }>(order: T, payload: unknown, carrierLabel?: string | null): T;
13
37
  //# sourceMappingURL=vervoerder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vervoerder.d.ts","sourceRoot":"","sources":["../../src/lib/vervoerder.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAUtD;AAeD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAWrE;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAW7G"}
1
+ {"version":3,"file":"vervoerder.d.ts","sourceRoot":"","sources":["../../src/lib/vervoerder.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,0EAA2E,CAAC;AAE9G,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,iEAAkE,CAAC;AAErG,eAAO,MAAM,aAAa,sHAC2F,CAAC;AAEtH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzB,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAG5D;AAMD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,eAAe,CAa/D;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAWnE;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAUtD;AAeD,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAE,MAAM,GAAG,IAAW,GAAG,cAAc,CAQzG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAC5E,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,OAAO,EAChB,YAAY,GAAE,MAAM,GAAG,IAAW,GACjC,CAAC,CAYH"}
@@ -1,8 +1,61 @@
1
1
  // ============================================================================
2
2
  // src/lib/vervoerder.ts — vervoerder en ophaalmoment uit de printopdracht.
3
- // Alleen uit payload; nooit aanvullen. Een vervoerdersadres is geen ophaaladres.
3
+ // De vervoerder komt uitsluitend uit `carrier_label` van de Logistieke Engine
4
+ // (1.0.184+). Nooit opzoeken op naam, nooit terugvallen op een andere naam.
4
5
  // ============================================================================
5
6
  const tekst = (v) => (typeof v === "string" ? v.trim() : "");
7
+ const obj = (v) => (v && typeof v === "object" ? v : null);
8
+ /** Documentsoorten van deze module die een vervoerder moeten tonen. */
9
+ export const VERVOERDER_DOCUMENTEN = ["pakbon", "afleverbrief", "verzendlabel", "transportdocument"];
10
+ /** Voorbeeldwaarden voor testprint en editor (geen echte vervoerdersnaam). */
11
+ export const VOORBEELD_VERVOERDERS = ["Voorbeeld Transport BV", "Eigen vervoer", "Afhalen"];
12
+ export const ENGINE_TE_OUD = "Logistieke Engine 1.0.184 of hoger nodig: de opdracht bevat geen vervoerder (carrier_label). Er is niets geprint.";
13
+ export function geenVervoerderTekst(ordernummer) {
14
+ const nr = ordernummer.trim() || "zonder nummer";
15
+ return `Geen vervoerder bij order ${nr}: stel er een in bij de order of bij Afhandeling → Vervoerders`;
16
+ }
17
+ /** Kiest het voorbeeldlabel voor een testprint (alleen één van de drie). */
18
+ export function voorbeeldVervoerder(payload) {
19
+ const gevraagd = tekst(obj(payload)?.["voorbeeld_carrier_label"]);
20
+ return VOORBEELD_VERVOERDERS.includes(gevraagd) ? gevraagd : VOORBEELD_VERVOERDERS[0];
21
+ }
22
+ function isGeenBron(o) {
23
+ return [o["carrier_source"], o["vervoerder_bron"], o["bron"]].some((v) => tekst(v).toLowerCase() === "geen");
24
+ }
25
+ /** Leest carrier_label uit één transportobject (payload of logistics_brief_transport). */
26
+ export function carrierUitTransport(t) {
27
+ const o = obj(t);
28
+ if (!o)
29
+ return { soort: "afwezig" };
30
+ if (isGeenBron(o))
31
+ return { soort: "geen" };
32
+ const label = tekst(o["carrier_label"]);
33
+ if (label)
34
+ return { soort: "ok", label };
35
+ if ("carrier_label" in o)
36
+ return { soort: "geen" };
37
+ // De Engine meldt zelf dat de vervoerder ontbreekt.
38
+ const onbekend = Array.isArray(o["onbekend"]) ? o["onbekend"].map(tekst) : [];
39
+ if (onbekend.some((x) => x === "vervoerder" || x === "vervoerder_niet_eenduidig" || x === "order")) {
40
+ return { soort: "geen" };
41
+ }
42
+ return { soort: "afwezig" };
43
+ }
44
+ /** Zoekt carrier_label in de payload (bovenin, transport, data, data.transport). */
45
+ export function carrierUitPayload(payload) {
46
+ const p = obj(payload) ?? {};
47
+ const d = obj(p["data"]);
48
+ const plekken = [p, obj(p["transport"]), d, obj(d?.["transport"])];
49
+ let geen = false;
50
+ for (const plek of plekken) {
51
+ const r = carrierUitTransport(plek);
52
+ if (r.soort === "ok")
53
+ return r;
54
+ if (r.soort === "geen")
55
+ geen = true;
56
+ }
57
+ return geen ? { soort: "geen" } : { soort: "afwezig" };
58
+ }
6
59
  /** ISO-tijd (UTC) → leesbaar in Europe/Amsterdam. Ongeldig → leeg. */
7
60
  export function ophaalmomentTekst(iso) {
8
61
  const s = tekst(iso);
@@ -31,26 +84,28 @@ function adresTekst(v) {
31
84
  ].filter(Boolean);
32
85
  return delen.join(", ");
33
86
  }
34
- export function vervoerderUitPayload(payload) {
87
+ /** Ophaalmoment/-adres uit de payload. De vervoerder komt hier NIET vandaan. */
88
+ export function vervoerderUitPayload(payload, carrierLabel = null) {
35
89
  const p = (payload && typeof payload === "object" ? payload : {});
36
- const v = (p["vervoerder"] && typeof p["vervoerder"] === "object" ? p["vervoerder"] : {});
37
- const naam = tekst(v["naam"]);
38
- const code = tekst(v["code"]);
39
90
  return {
40
- transporteur: naam ? (code ? `${naam} (${code})` : naam) : "",
91
+ transporteur: carrierLabel ?? "",
41
92
  ophaalmoment: ophaalmomentTekst(p["ophaalmoment"]),
42
93
  // Alleen payload.ophaaladres; vervoerder.adres wordt bewust genegeerd.
43
94
  ophaaladres: adresTekst(p["ophaaladres"]),
44
95
  };
45
96
  }
46
- /** Zet bekende waarden op order.transport; ontbrekende blijven leeg (regel valt weg). */
47
- export function metVervoerder(order, payload) {
48
- const v = vervoerderUitPayload(payload);
97
+ /**
98
+ * Zet vervoerder (alleen carrier_label) en ophaalgegevens op order.transport.
99
+ * Elke andere bronwaarde voor de transporteur wordt overschreven: geen terugval.
100
+ */
101
+ export function metVervoerder(order, payload, carrierLabel = null) {
102
+ const v = vervoerderUitPayload(payload, carrierLabel);
49
103
  return {
50
104
  ...order,
51
105
  transport: {
52
106
  ...order.transport,
53
- ...(v.transporteur ? { transporteur: v.transporteur } : {}),
107
+ transporteur: v.transporteur,
108
+ carrier_label: v.transporteur,
54
109
  ophaalmoment: v.ophaalmoment,
55
110
  ophaaladres: v.ophaaladres,
56
111
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowselections/layout-maker",
3
- "version": "1.69.5",
3
+ "version": "1.69.10",
4
4
  "flowselections": {
5
5
  "moduleId": "layout-maker",
6
6
  "pages": [
@@ -143,7 +143,7 @@
143
143
  "devDependencies": {
144
144
  "@cloudflare/vite-plugin": "^1.25.5",
145
145
  "@eslint/js": "^9.32.0",
146
- "@flowselections/core": "1.0.29",
146
+ "@flowselections/core": "1.0.30",
147
147
  "@lovable.dev/vite-tanstack-config": "2.26.5",
148
148
  "@rsbuild/core": "^1.0.0",
149
149
  "@tailwindcss/vite": "^4.2.1",