@flowselections/layout-maker 1.63.2 → 1.65.2

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 (64) hide show
  1. package/README.md +10 -4
  2. package/dist-lib/components/BedrijfsgegevensKaart.d.ts +3 -0
  3. package/dist-lib/components/BedrijfsgegevensKaart.d.ts.map +1 -0
  4. package/dist-lib/components/BedrijfsgegevensKaart.js +58 -0
  5. package/dist-lib/components/KlaarOmTePrintenBlok.d.ts +3 -0
  6. package/dist-lib/components/KlaarOmTePrintenBlok.d.ts.map +1 -0
  7. package/dist-lib/components/KlaarOmTePrintenBlok.js +69 -0
  8. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  9. package/dist-lib/components/LayoutsPage.js +23 -3
  10. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  11. package/dist-lib/components/PrintQueuePage.js +2 -1
  12. package/dist-lib/components/PrintenPage.d.ts.map +1 -1
  13. package/dist-lib/components/PrintenPage.js +8 -2
  14. package/dist-lib/components/StandaardLayoutActies.d.ts +19 -0
  15. package/dist-lib/components/StandaardLayoutActies.d.ts.map +1 -0
  16. package/dist-lib/components/StandaardLayoutActies.js +105 -0
  17. package/dist-lib/index.d.ts +7 -0
  18. package/dist-lib/index.d.ts.map +1 -1
  19. package/dist-lib/index.js +9 -2
  20. package/dist-lib/integrations/supabase/types.d.ts +1317 -0
  21. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  22. package/dist-lib/lib/bedrijfsgegevens.d.ts +41 -0
  23. package/dist-lib/lib/bedrijfsgegevens.d.ts.map +1 -0
  24. package/dist-lib/lib/bedrijfsgegevens.functions.d.ts +41 -0
  25. package/dist-lib/lib/bedrijfsgegevens.functions.d.ts.map +1 -0
  26. package/dist-lib/lib/bedrijfsgegevens.functions.js +75 -0
  27. package/dist-lib/lib/bedrijfsgegevens.js +126 -0
  28. package/dist-lib/lib/documentTypes.d.ts +10 -0
  29. package/dist-lib/lib/documentTypes.d.ts.map +1 -1
  30. package/dist-lib/lib/documentTypes.js +8 -0
  31. package/dist-lib/lib/etiketControle.js +1 -1
  32. package/dist-lib/lib/klaarOmTePrinten.d.ts +39 -0
  33. package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -0
  34. package/dist-lib/lib/klaarOmTePrinten.js +65 -0
  35. package/dist-lib/lib/layoutStandaarden.d.ts +19 -0
  36. package/dist-lib/lib/layoutStandaarden.d.ts.map +1 -0
  37. package/dist-lib/lib/layoutStandaarden.js +23 -0
  38. package/dist-lib/lib/printQueue.server.d.ts +2 -0
  39. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  40. package/dist-lib/lib/printQueue.server.js +77 -5
  41. package/dist-lib/lib/printService.functions.d.ts +1 -1
  42. package/dist-lib/lib/printService.server.d.ts +2 -0
  43. package/dist-lib/lib/printService.server.d.ts.map +1 -1
  44. package/dist-lib/lib/printService.server.js +2 -1
  45. package/dist-lib/lib/printnodeStatus.d.ts +2 -0
  46. package/dist-lib/lib/printnodeStatus.d.ts.map +1 -1
  47. package/dist-lib/lib/printnodeStatus.js +10 -0
  48. package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts +1 -1
  49. package/dist-lib/lib/shellPoort.d.ts +2 -2
  50. package/dist-lib/lib/shellPoort.d.ts.map +1 -1
  51. package/dist-lib/lib/shellPoort.js +3 -2
  52. package/dist-lib/lib/standaardLayouts.server.d.ts +7 -1
  53. package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
  54. package/dist-lib/lib/standaardLayouts.server.js +52 -54
  55. package/dist-lib/lib/stickerFormaat.d.ts +25 -0
  56. package/dist-lib/lib/stickerFormaat.d.ts.map +1 -1
  57. package/dist-lib/lib/stickerFormaat.js +57 -0
  58. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  59. package/dist-lib/lib/useDocumentData.js +9 -5
  60. package/dist-lib/lib/versie.generated.d.ts +2 -0
  61. package/dist-lib/lib/versie.generated.d.ts.map +1 -0
  62. package/dist-lib/lib/versie.generated.js +2 -0
  63. package/package.json +9 -4
  64. package/sql/print-schema.sql +3205 -0
@@ -13,7 +13,7 @@ import { heeftOrderInhoud, laadOrderVanuitDatabase, laadPakbonData } from "./ord
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";
16
- import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode } from "./stickerFormaat.js";
16
+ import { bepaalStickerMaat, floridayStickerMaat, STICKER_MAAT_ONBEKEND, stickerFormaatCode, stickerIdUitPayload, stickerInfoUitCache, stickerNietNodig, stickerTypeLabel, STICKER_NIET_NODIG, FASE_NIET_NODIG } from "./stickerFormaat.js";
17
17
  import { OPMAAK_LIMIET_MS, OpmaakTeLangFout, metTijdslimiet } from "./opmaakLimiet.js";
18
18
  import { stuurPdfNaarPrinter, opdrachtStatusDetail, vervaltijdVoor } from "./printService.server.js";
19
19
  import { kiesPapier } from "./papierFormaten.js";
@@ -761,6 +761,30 @@ function verzamelLogoIds(waarde, uit, diepte = 0) {
761
761
  }
762
762
  }
763
763
  /** Haalt de logo's op die in de layout gebruikt worden, met tijdelijke URL. */
764
+ /** Eigen bedrijfsgegevens (app_settings) als terugval voor een lege payload.bedrijf. */
765
+ async function bedrijfsInstelling(db) {
766
+ const { BEDRIJFSGEGEVENS_SLEUTEL, leesBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
767
+ const { data } = await db.from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
768
+ return leesBedrijfsgegevens(data?.["value"] ?? null);
769
+ }
770
+ /** Vult order.bedrijf en (zonder eigen documentlogo) het logo uit de instelling. */
771
+ async function metBedrijfsTerugval(db, order, layout) {
772
+ try {
773
+ const { bedrijfMetTerugval, heeftBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
774
+ if (heeftBedrijfsgegevens(order.bedrijf))
775
+ return { order, layout };
776
+ const inst = await bedrijfsInstelling(db);
777
+ const nieuweOrder = { ...order, bedrijf: bedrijfMetTerugval(order.bedrijf, inst) };
778
+ const cfg = (layout?.config ?? {});
779
+ if (inst.logoId && !cfg?.logo?.logoId) {
780
+ return { order: nieuweOrder, layout: { ...layout, config: { ...cfg, logo: { ...(cfg.logo ?? {}), logoId: inst.logoId } } } };
781
+ }
782
+ return { order: nieuweOrder, layout };
783
+ }
784
+ catch {
785
+ return { order, layout };
786
+ }
787
+ }
764
788
  async function logosVoor(db, layout) {
765
789
  const config = layout?.config ?? null;
766
790
  const ids = new Set();
@@ -794,7 +818,7 @@ async function logosVoor(db, layout) {
794
818
  * het documenttype. Zo werkt een bijgewerkte layout meteen door.
795
819
  */
796
820
  export async function bouwHtml(db, job, keuze, uitkomst) {
797
- const layout = keuze.layout;
821
+ let layout = keuze.layout;
798
822
  const noteer = (bron) => {
799
823
  if (uitkomst)
800
824
  uitkomst.bron = bron;
@@ -861,7 +885,9 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
861
885
  const gekozen = (cartId ? karren.find((k) => String(k?.cart_id ?? "").trim() === cartId) : null) ??
862
886
  karren[0] ??
863
887
  null;
864
- const order = { ...volledig, karren: gekozen ? [gekozen] : [] };
888
+ const metTerugval = await metBedrijfsTerugval(db, { ...volledig, karren: gekozen ? [gekozen] : [] }, layout);
889
+ const order = metTerugval.order;
890
+ layout = metTerugval.layout;
865
891
  return renderPakbonDocument(leesAfleverbriefConfig(layout.config), order, {
866
892
  breedteMm,
867
893
  hoogteMm,
@@ -1047,6 +1073,11 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
1047
1073
  };
1048
1074
  }
1049
1075
  }
1076
+ {
1077
+ const t = await metBedrijfsTerugval(db, order, layout);
1078
+ order = t.order;
1079
+ layout = t.layout;
1080
+ }
1050
1081
  const html = renderPakbonDocument(layout.config, order, {
1051
1082
  breedteMm,
1052
1083
  hoogteMm,
@@ -1251,6 +1282,25 @@ export async function geweigerd(db, job, code, bericht) {
1251
1282
  .neq("status", "geannuleerd");
1252
1283
  await log(db, job.id, "geweigerd", `${code}: ${bericht}`);
1253
1284
  }
1285
+ /** Koper wil deze sticker niet: eindstatus zonder fout en zonder nieuwe poging. */
1286
+ export async function nietNodig(db, job) {
1287
+ const nu = new Date().toISOString();
1288
+ await db
1289
+ .from("print_jobs")
1290
+ .update({
1291
+ status: "geannuleerd",
1292
+ verwerkingsfase: FASE_NIET_NODIG,
1293
+ fase_voltooid_op: nu,
1294
+ foutcode: null,
1295
+ foutmelding: STICKER_NIET_NODIG,
1296
+ volgende_poging: null,
1297
+ voltooid_op: nu,
1298
+ updated_at: nu,
1299
+ })
1300
+ .eq("id", job.id)
1301
+ .neq("status", "geannuleerd");
1302
+ await log(db, job.id, FASE_NIET_NODIG, STICKER_NIET_NODIG);
1303
+ }
1254
1304
  async function mislukt(db, job, reden, terugNaarWachtend) {
1255
1305
  const pogingen = Number(job.pogingen ?? 0);
1256
1306
  const opnieuw = terugNaarWachtend && pogingen < MAX_POGINGEN;
@@ -1386,8 +1436,29 @@ async function verwerkJob(db, job) {
1386
1436
  // PDF). Onbekend = niet printen. De maat kiest ook de printer via de
1387
1437
  // formaatregels, zodat een sticker op een etiket komt dat groot genoeg is.
1388
1438
  let stickerMaat = null;
1439
+ let stickerCache = null;
1440
+ if (ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? ""))) {
1441
+ const sid = stickerIdUitPayload(job.payload);
1442
+ if (sid) {
1443
+ const { data: rij } = await db
1444
+ .from("floriday_customer_stickers_cache")
1445
+ .select("sticker_width_mm, sticker_height_mm, sticker_type, should_be_printed")
1446
+ .eq("floriday_id", sid)
1447
+ .eq("is_deleted", false)
1448
+ .order("updated_at", { ascending: false })
1449
+ .limit(1)
1450
+ .maybeSingle();
1451
+ stickerCache = stickerInfoUitCache(rij);
1452
+ }
1453
+ if (stickerNietNodig(stickerCache, job.payload)) {
1454
+ await nietNodig(db, job);
1455
+ return "mislukt";
1456
+ }
1457
+ }
1389
1458
  if (klaar && ETIKET_PDF_SOORTEN.has(String(job.documenttype ?? ""))) {
1390
- stickerMaat = bepaalStickerMaat(floridayStickerMaat(job.payload), pdfPaginaMm(klaar));
1459
+ stickerMaat = stickerCache?.maat
1460
+ ? { ...stickerCache.maat, bron: "floriday" }
1461
+ : bepaalStickerMaat(floridayStickerMaat(job.payload), pdfPaginaMm(klaar));
1391
1462
  if (!stickerMaat)
1392
1463
  throw new GeenDocumentFout(STICKER_MAAT_ONBEKEND);
1393
1464
  await faseLog(db, job.id, "sticker_maat", { bron: stickerMaat.bron, breedte_mm: stickerMaat.breedte_mm, hoogte_mm: stickerMaat.hoogte_mm });
@@ -1476,7 +1547,7 @@ async function verwerkJob(db, job) {
1476
1547
  let papier = kiesPapier(formaten, breedteMm, hoogteMm);
1477
1548
  if (label) {
1478
1549
  const maat = stickerMaat ?? (klaar ? pdfPaginaMm(pdfBase64) : null) ?? { breedte_mm: breedteMm, hoogte_mm: hoogteMm };
1479
- const uit = etiketPast({ ...maat, soortLabel: documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
1550
+ const uit = etiketPast({ ...maat, soortLabel: stickerCache?.sticker_type ? stickerTypeLabel(stickerCache.sticker_type) : documentTypeLabelVoor(String(job.documenttype ?? "Document")) }, label.etiket, label.naam, !!stickerMaat);
1480
1551
  if (!uit.ok) {
1481
1552
  await geweigerd(db, job, uit.code, uit.bericht);
1482
1553
  return "mislukt";
@@ -1499,6 +1570,7 @@ async function verwerkJob(db, job) {
1499
1570
  documentnaam: String(job.documentnaam ?? "Document"),
1500
1571
  pdfBase64,
1501
1572
  kopieen: Number(job.kopieen ?? 1),
1573
+ documenttype: String(job.documenttype ?? ""),
1502
1574
  opties: { paper: papier.paper, rotate: papier.rotate, fitToPage: false },
1503
1575
  });
1504
1576
  if (i > 0) {
@@ -143,7 +143,7 @@ export declare const webhookStatus: import("@tanstack/start-client-core").Option
143
143
  niet_gematcht: string[];
144
144
  }[];
145
145
  aan: boolean;
146
- weergave: "aan" | "uit" | "onbekend";
146
+ weergave: "uit" | "aan" | "onbekend";
147
147
  nietBereikbaar: boolean;
148
148
  pnUrl: string | null;
149
149
  pnGeslaagd: number | null;
@@ -28,6 +28,8 @@ export interface PrintOpdrachtInput {
28
28
  documentnaam: string;
29
29
  pdfBase64: string;
30
30
  kopieen?: number;
31
+ /** Documentsoort: bepaalt het maximum (sticker/traysticker 5000, anders 50). */
32
+ documenttype?: string | null;
31
33
  opties?: PrintOpties;
32
34
  }
33
35
  /** Fout voor een 409 van PrintNode: deze idempotentiesleutel is al ontvangen. */
@@ -1 +1 @@
1
- {"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printService.server.d.ts","sourceRoot":"","sources":["../../src/lib/printService.server.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { kopieenVoorPrinter } from "./stickerFormaat.js";
1
2
  // ============================================================================
2
3
  // src/lib/printService.server.ts — communicatie met de externe printdienst.
3
4
  // Alleen server-side. Fouten worden vertaald naar begrijpelijke meldingen.
@@ -128,7 +129,7 @@ export async function stuurPdfNaarPrinter(input) {
128
129
  contentType: "pdf_base64",
129
130
  content: input.pdfBase64,
130
131
  source: sourceVoorJob(input.jobId),
131
- qty: Math.max(1, Math.min(50, input.kopieen ?? 1)),
132
+ qty: kopieenVoorPrinter(input.kopieen, input.documenttype),
132
133
  options,
133
134
  };
134
135
  if (typeof input.expireAfter === "number" && input.expireAfter > 0) {
@@ -13,5 +13,7 @@ export declare const SCANBARE_SOORTEN: Set<string>;
13
13
  export declare function opnieuwActie(j: JobVoorLabel): "opnieuw_proberen" | "opnieuw_printen" | null;
14
14
  /** "gescand" alleen als de scan ná het printen van dit document was. */
15
15
  export declare function scanLabel(scanTijd: number | string, printTijd: string | null | undefined): "gescand" | "eerder";
16
+ /** "Sticker × 480" voor sticker-opdrachten met meer dan één afdruk. */
17
+ export declare function aantalLabel(documenttype: string | null | undefined, kopieen: number | null | undefined): string | null;
16
18
  export {};
17
19
  //# sourceMappingURL=printnodeStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAe5D;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AAEpF,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAI3F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAI/G"}
1
+ {"version":3,"file":"printnodeStatus.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatus.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMzD,CAAC;AAEF,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,iDAAiD;AACjD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAiB5D;AAED,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,aAAsD,CAAC;AAEpF,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAI3F;AAED,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAI/G;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAKtH"}
@@ -13,6 +13,8 @@ export const PRINTNODE_STATUS_LABEL = {
13
13
  };
14
14
  /** Label voor de statuskolom van de wachtrij. */
15
15
  export function printnodeStatusLabel(j) {
16
+ if (j.status === "geannuleerd" && j.verwerkingsfase === "niet_nodig")
17
+ return "Niet nodig – de koper wil geen sticker";
16
18
  if (j.status === "geannuleerd")
17
19
  return "Geannuleerd";
18
20
  if (j.foutcode === "AANLEVERING_MISLUKT")
@@ -53,3 +55,11 @@ export function scanLabel(scanTijd, printTijd) {
53
55
  const print = printTijd ? new Date(printTijd).getTime() : NaN;
54
56
  return !Number.isNaN(print) && scan >= print ? "gescand" : "eerder";
55
57
  }
58
+ /** "Sticker × 480" voor sticker-opdrachten met meer dan één afdruk. */
59
+ export function aantalLabel(documenttype, kopieen) {
60
+ const t = String(documenttype ?? "");
61
+ const n = Number(kopieen ?? 1);
62
+ if ((t !== "sticker" && t !== "traysticker") || !(n > 1))
63
+ return null;
64
+ return `${t === "traysticker" ? "Traysticker" : "Sticker"} × ${Math.floor(n)}`;
65
+ }
@@ -63,7 +63,7 @@ export declare function weergaveStatus(k: Koppeling | null): "aan" | "uit" | "on
63
63
  /** Veilige status voor het scherm: nooit het geheim. */
64
64
  export declare function veiligeStatus(k: Koppeling | null): {
65
65
  aan: boolean;
66
- weergave: "aan" | "uit" | "onbekend";
66
+ weergave: "uit" | "aan" | "onbekend";
67
67
  nietBereikbaar: boolean;
68
68
  pnUrl: string | null;
69
69
  pnGeslaagd: number | null;
@@ -1,5 +1,5 @@
1
- /** Moduleversie van deze code. Gelijk houden aan package.json (test bewaakt dit). */
2
- export declare const MODULE_VERSIE = "1.63.1";
1
+ /** Moduleversie van deze code: uit package.json (gegenereerd bij build:lib; test bewaakt dit). */
2
+ export declare const MODULE_VERSIE: string;
3
3
  export declare function normaliseerAdres(u: unknown): string | null;
4
4
  /** -1 als a < b, 0 als gelijk, 1 als a > b (alleen cijfers, punt-gescheiden). */
5
5
  export declare function vergelijkVersie(a: string, b: string): number;
@@ -1 +1 @@
1
- {"version":3,"file":"shellPoort.d.ts","sourceRoot":"","sources":["../../src/lib/shellPoort.ts"],"names":[],"mappings":"AAMA,qFAAqF;AACrF,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GACb;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,eAAe,GAAG,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,aAAa,CAWhB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C"}
1
+ {"version":3,"file":"shellPoort.d.ts","sourceRoot":"","sources":["../../src/lib/shellPoort.ts"],"names":[],"mappings":"AAQA,kGAAkG;AAClG,eAAO,MAAM,aAAa,EAAE,MAAsB,CAAC;AAEnD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,GACb;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,GAAG,eAAe,GAAG,sBAAsB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,aAAa,CAWhB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C"}
@@ -3,8 +3,9 @@
3
3
  // de installatie waarvan het adres gelijk is aan shell_base_url uit de eigen
4
4
  // database. Niets vast in code; ontbreekt het adres, dan wordt er niet geprint.
5
5
  // ============================================================================
6
- /** Moduleversie van deze code. Gelijk houden aan package.json (test bewaakt dit). */
7
- export const MODULE_VERSIE = "1.63.1";
6
+ import { PAKKET_VERSIE } from "./versie.generated.js";
7
+ /** Moduleversie van deze code: uit package.json (gegenereerd bij build:lib; test bewaakt dit). */
8
+ export const MODULE_VERSIE = PAKKET_VERSIE;
8
9
  export function normaliseerAdres(u) {
9
10
  const s = String(u ?? "").trim().replace(/\/+$/, "").toLowerCase();
10
11
  return s || null;
@@ -1,6 +1,12 @@
1
1
  import type { SupabaseClient } from "@supabase/supabase-js";
2
2
  type Db = SupabaseClient<any, any, any>;
3
- /** Geeft het aantal aangemaakte layouts terug (0 als er al layouts waren). */
3
+ /** Geeft het aantal automatische acties terug. */
4
4
  export declare function zorgVoorStandaardLayoutsServer(db: Db): Promise<number>;
5
+ /**
6
+ * Eenmalig voorinvullen: eerst de eigen organisatie uit Floriday-auth
7
+ * (floriday_eigen_organisatie), anders invoice_branding_settings. Nooit als er
8
+ * al iets is ingevuld of als er al eens is voorgevuld.
9
+ */
10
+ export declare function zorgVoorBedrijfsgegevens(db: Db): Promise<boolean>;
5
11
  export {};
6
12
  //# sourceMappingURL=standaardLayouts.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"standaardLayouts.server.d.ts","sourceRoot":"","sources":["../../src/lib/standaardLayouts.server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAOxC,8EAA8E;AAC9E,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C5E"}
1
+ {"version":3,"file":"standaardLayouts.server.d.ts","sourceRoot":"","sources":["../../src/lib/standaardLayouts.server.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAExC,kDAAkD;AAClD,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAU5E;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvE"}
@@ -1,61 +1,59 @@
1
1
  // ============================================================================
2
- // src/lib/standaardLayouts.server.ts — standaardlayouts aanmaken met de
3
- // servicerol, alleen als er nog géén enkele layout bestaat (lege shell).
4
- // Pagina's schrijven hierdoor nooit met de gebruikerssessie bij het openen.
2
+ // src/lib/standaardLayouts.server.ts — aanvulronde met de servicerol.
3
+ // Pagina's schrijven hierdoor nooit met de gebruikerssessie.
4
+ //
5
+ // Alles staat in de databasefunctie layout_zorg_systeemlayouts():
6
+ // - Floriday-systeemlayouts per ontbrekende bron+soort;
7
+ // - Flow Selections-standaard per benodigd document (sleutel, nooit de naam),
8
+ // alleen als er geen enkele actieve eigen layout van die soort is;
9
+ // - precies één actieve layout zonder standaard → standaard (gelogd);
10
+ // - standaardprinter alleen als het eenduidig is (gelogd).
11
+ // Daarna: bedrijfsgegevens eenmalig voorinvullen als ze nog leeg zijn.
5
12
  // ============================================================================
6
- import { FLORIDAY_LAYOUT_TOELICHTING, FLORIDAY_SYSTEEM_LAYOUTS, STANDAARD_LAYOUTS } from "./documentTypes.js";
7
- import { standaardProductiebonConfig } from "./productiebonBuilder.js";
8
- const SEED_KEY = "standaard_layouts_geseed";
9
- const SEED_VERSIE = "2";
10
- let gedaan = false;
11
- /** Geeft het aantal aangemaakte layouts terug (0 als er al layouts waren). */
13
+ import { BEDRIJFSGEGEVENS_SLEUTEL, voorinvulBesluit } from "./bedrijfsgegevens.js";
14
+ /** Geeft het aantal automatische acties terug. */
12
15
  export async function zorgVoorStandaardLayoutsServer(db) {
13
- if (gedaan)
14
- return 0;
15
- const { count, error } = await db
16
- .from("document_layouts")
17
- .select("id", { count: "exact", head: true });
16
+ const { data, error: rpcFout } = await db.rpc("layout_zorg_systeemlayouts");
17
+ if (rpcFout)
18
+ throw new Error(`Standaardlayouts controleren mislukt: ${rpcFout.message}`);
19
+ let aantal = Number(data ?? 0) || 0;
20
+ try {
21
+ if (await zorgVoorBedrijfsgegevens(db))
22
+ aantal += 1;
23
+ }
24
+ catch {
25
+ /* voorinvullen is een gemak; nooit de aanvulronde laten mislukken */
26
+ }
27
+ return aantal;
28
+ }
29
+ /**
30
+ * Eenmalig voorinvullen: eerst de eigen organisatie uit Floriday-auth
31
+ * (floriday_eigen_organisatie), anders invoice_branding_settings. Nooit als er
32
+ * al iets is ingevuld of als er al eens is voorgevuld.
33
+ */
34
+ export async function zorgVoorBedrijfsgegevens(db) {
35
+ const { data: rij, error } = await db
36
+ .from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
18
37
  if (error)
19
- throw new Error(`Layouts tellen mislukt: ${error.message}`);
20
- if ((count ?? 0) > 0) {
21
- gedaan = true;
22
- return 0;
38
+ return false;
39
+ let floriday = null;
40
+ let factuur = null;
41
+ const f = await db.rpc("floriday_eigen_organisatie");
42
+ if (!f.error)
43
+ floriday = Array.isArray(f.data) ? f.data[0] : f.data;
44
+ const besluitZonderFactuur = voorinvulBesluit(rij?.value ?? null, floriday, null);
45
+ if (besluitZonderFactuur === "overslaan")
46
+ return false;
47
+ if (!besluitZonderFactuur) {
48
+ const fr = await db.from("invoice_branding_settings").select("*").limit(1).maybeSingle();
49
+ if (!fr.error)
50
+ factuur = fr.data;
23
51
  }
24
- const rijen = [
25
- ...STANDAARD_LAYOUTS.map((l) => ({
26
- naam: l.naam,
27
- documenttype: l.documenttype,
28
- omschrijving: l.omschrijving,
29
- papierformaat: l.papierformaat,
30
- breedte_mm: l.breedte_mm,
31
- hoogte_mm: l.hoogte_mm,
32
- orientatie: "portrait",
33
- bron: "eigen",
34
- systeem: false,
35
- actief: true,
36
- config: l.documenttype === "productiebon"
37
- ? { productiebon: standaardProductiebonConfig() }
38
- : {},
39
- })),
40
- ...FLORIDAY_SYSTEEM_LAYOUTS.map((l) => ({
41
- naam: l.naam,
42
- documenttype: l.documenttype,
43
- omschrijving: FLORIDAY_LAYOUT_TOELICHTING,
44
- papierformaat: l.papierformaat,
45
- breedte_mm: l.breedte_mm,
46
- hoogte_mm: l.hoogte_mm,
47
- orientatie: "portrait",
48
- bron: "floriday",
49
- systeem: true,
50
- actief: true,
51
- })),
52
- ];
53
- const { error: insertFout } = await db.from("document_layouts").insert(rijen);
54
- if (insertFout)
55
- throw new Error(`Standaardlayouts aanmaken mislukt: ${insertFout.message}`);
56
- await db
52
+ const besluit = besluitZonderFactuur ?? voorinvulBesluit(rij?.value ?? null, null, factuur);
53
+ if (!besluit || besluit === "overslaan")
54
+ return false;
55
+ const { error: fout } = await db
57
56
  .from("app_settings")
58
- .upsert({ key: SEED_KEY, value: SEED_VERSIE }, { onConflict: "key" });
59
- gedaan = true;
60
- return rijen.length;
57
+ .upsert({ key: BEDRIJFSGEGEVENS_SLEUTEL, value: JSON.stringify(besluit) }, { onConflict: "key" });
58
+ return !fout;
61
59
  }
@@ -8,6 +8,10 @@ export declare function floridayStickerMaat(payload: unknown): {
8
8
  breedte_mm: number;
9
9
  hoogte_mm: number;
10
10
  } | null;
11
+ /** Maximum afdrukken per opdracht: klantstickers per stuk tot 5000, de rest 50. */
12
+ export declare function maxKopieen(documenttype: string | null | undefined): number;
13
+ /** Aantal dat naar de printer gaat: binnen 1..max voor deze soort. */
14
+ export declare function kopieenVoorPrinter(kopieen: number | null | undefined, documenttype: string | null | undefined): number;
11
15
  export declare function bepaalStickerMaat(floriday: {
12
16
  breedte_mm: number;
13
17
  hoogte_mm: number;
@@ -18,4 +22,25 @@ export declare function bepaalStickerMaat(floriday: {
18
22
  export declare const STICKER_MAAT_ONBEKEND = "De maat van deze klantsticker is onbekend; er is niets geprint.";
19
23
  /** Formaatcode voor de formaatregels: "48x48" (kleinste maat eerst, hele mm). */
20
24
  export declare function stickerFormaatCode(b: number, h: number): string;
25
+ /** Floriday-stickernummer uit de payload (veld floriday_sticker_id; match op id, nooit op naam). */
26
+ export declare function stickerIdUitPayload(payload: unknown): string | null;
27
+ export type StickerCacheInfo = {
28
+ maat: {
29
+ breedte_mm: number;
30
+ hoogte_mm: number;
31
+ } | null;
32
+ sticker_type: string | null;
33
+ should_be_printed: boolean | null;
34
+ };
35
+ /** Leest een rij uit floriday_customer_stickers_cache (Floriday-authenticatie 1.0.87). */
36
+ export declare function stickerInfoUitCache(rij: unknown): StickerCacheInfo | null;
37
+ /** Koper wil geen sticker: cache of payload (shouldBePrinted) zegt expliciet false. */
38
+ export declare function stickerNietNodig(cache: StickerCacheInfo | null, payload: unknown): boolean;
39
+ /** "Potsticker 48 × 48 mm" — soort alleen als informatie, nooit voor het formaat. */
40
+ export declare function stickerTypeLabel(type: string | null | undefined, maat?: {
41
+ breedte_mm: number;
42
+ hoogte_mm: number;
43
+ } | null): string;
44
+ export declare const STICKER_NIET_NODIG = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
45
+ export declare const FASE_NIET_NODIG = "niet_nodig";
21
46
  //# sourceMappingURL=stickerFormaat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stickerFormaat.d.ts","sourceRoot":"","sources":["../../src/lib/stickerFormaat.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAA;CAAE,CAAC;AAO9F,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYtG;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1D,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,WAAW,GAAG,IAAI,CAIpB;AAED,eAAO,MAAM,qBAAqB,oEAAoE,CAAC;AAEvG,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D"}
1
+ {"version":3,"file":"stickerFormaat.d.ts","sourceRoot":"","sources":["../../src/lib/stickerFormaat.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAA;CAAE,CAAC;AAO9F,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmBtG;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAG1E;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGtH;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1D,GAAG,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACpD,WAAW,GAAG,IAAI,CAIpB;AAED,eAAO,MAAM,qBAAqB,oEAAoE,CAAC;AAEvG,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAInE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAUzE;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAO1F;AAED,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,MAAM,CAIjI;AAED,eAAO,MAAM,kBAAkB,6EAA6E,CAAC;AAC7G,eAAO,MAAM,eAAe,eAAe,CAAC"}
@@ -22,8 +22,26 @@ export function floridayStickerMaat(payload) {
22
22
  if (b && h)
23
23
  return { breedte_mm: b, hoogte_mm: h };
24
24
  }
25
+ // Engine 1.0.164: sticker_formaat_mm: { breedte, hoogte }
26
+ const f = p["sticker_formaat_mm"];
27
+ if (f && typeof f === "object") {
28
+ const b = getal(f["breedte"]);
29
+ const h = getal(f["hoogte"]);
30
+ if (b && h)
31
+ return { breedte_mm: b, hoogte_mm: h };
32
+ }
25
33
  return null;
26
34
  }
35
+ /** Maximum afdrukken per opdracht: klantstickers per stuk tot 5000, de rest 50. */
36
+ export function maxKopieen(documenttype) {
37
+ const t = String(documenttype ?? "").trim();
38
+ return t === "sticker" || t === "traysticker" ? 5000 : 50;
39
+ }
40
+ /** Aantal dat naar de printer gaat: binnen 1..max voor deze soort. */
41
+ export function kopieenVoorPrinter(kopieen, documenttype) {
42
+ const n = Math.floor(Number(kopieen ?? 1));
43
+ return Math.max(1, Math.min(maxKopieen(documenttype), Number.isFinite(n) ? n : 1));
44
+ }
27
45
  export function bepaalStickerMaat(floriday, pdf) {
28
46
  if (floriday)
29
47
  return { ...floriday, bron: "floriday" };
@@ -37,3 +55,42 @@ export function stickerFormaatCode(b, h) {
37
55
  const [x, y] = [Math.round(b), Math.round(h)].sort((p, q) => p - q);
38
56
  return `${x}x${y}`;
39
57
  }
58
+ /** Floriday-stickernummer uit de payload (veld floriday_sticker_id; match op id, nooit op naam). */
59
+ export function stickerIdUitPayload(payload) {
60
+ if (!payload || typeof payload !== "object")
61
+ return null;
62
+ const v = payload["floriday_sticker_id"];
63
+ return typeof v === "string" && v.trim() ? v.trim() : null;
64
+ }
65
+ /** Leest een rij uit floriday_customer_stickers_cache (Floriday-authenticatie 1.0.87). */
66
+ export function stickerInfoUitCache(rij) {
67
+ if (!rij || typeof rij !== "object")
68
+ return null;
69
+ const r = rij;
70
+ const b = getal(r["sticker_width_mm"]);
71
+ const h = getal(r["sticker_height_mm"]);
72
+ return {
73
+ maat: b && h ? { breedte_mm: b, hoogte_mm: h } : null,
74
+ sticker_type: typeof r["sticker_type"] === "string" && r["sticker_type"] ? r["sticker_type"] : null,
75
+ should_be_printed: typeof r["should_be_printed"] === "boolean" ? r["should_be_printed"] : null,
76
+ };
77
+ }
78
+ /** Koper wil geen sticker: cache of payload (shouldBePrinted) zegt expliciet false. */
79
+ export function stickerNietNodig(cache, payload) {
80
+ if (cache?.should_be_printed === false)
81
+ return true;
82
+ if (payload && typeof payload === "object") {
83
+ const p = payload;
84
+ if (p["shouldBePrinted"] === false || p["should_be_printed"] === false)
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+ /** "Potsticker 48 × 48 mm" — soort alleen als informatie, nooit voor het formaat. */
90
+ export function stickerTypeLabel(type, maat) {
91
+ const t = String(type ?? "").trim().toUpperCase();
92
+ const soort = !t ? "Klantsticker" : t === "POT" ? "Potsticker" : `Klantsticker (${type})`;
93
+ return maat ? `${soort} ${Math.round(maat.breedte_mm)} × ${Math.round(maat.hoogte_mm)} mm` : soort;
94
+ }
95
+ export const STICKER_NIET_NODIG = "De koper heeft aangegeven dat deze sticker niet geprint hoeft te worden.";
96
+ export const FASE_NIET_NODIG = "niet_nodig";
@@ -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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"}
@@ -10,24 +10,25 @@ const arr = (v) => (Array.isArray(v) ? v : []);
10
10
  * Zorgt dat de vaste Floriday-layouts altijd bestaan, ook in een verse shell
11
11
  * waar de seed-SQL nog niet is gedraaid. Idempotent en stil bij fouten.
12
12
  */
13
- let seedGevraagd = false;
13
+ let seedGevraagdOp = 0;
14
14
  /**
15
15
  * Vraagt de server (servicerol) om de standaardlayouts aan te maken als er nog
16
16
  * geen enkele layout bestaat. Schrijft nooit met de gebruikerssessie.
17
17
  */
18
18
  export async function zorgVoorFloridayLayouts() {
19
- if (seedGevraagd)
19
+ // Bij elk openen opnieuw, maar niet vaker dan eens per minuut.
20
+ if (Date.now() - seedGevraagdOp < 60000)
20
21
  return false;
21
- seedGevraagd = true;
22
+ seedGevraagdOp = Date.now();
22
23
  try {
23
24
  const { zorgVoorStandaardLayoutsFn } = await import("./printService.functions.js");
24
25
  const r = await zorgVoorStandaardLayoutsFn();
25
26
  if (!r?.ok)
26
- seedGevraagd = false;
27
+ seedGevraagdOp = 0;
27
28
  return Number(r?.aangemaakt ?? 0) > 0;
28
29
  }
29
30
  catch {
30
- seedGevraagd = false;
31
+ seedGevraagdOp = 0;
31
32
  return false;
32
33
  }
33
34
  }
@@ -72,6 +73,9 @@ export async function dupliceerLayout(id) {
72
73
  delete b.id;
73
74
  delete b.created_at;
74
75
  delete b.updated_at;
76
+ // Een kopie is geen Flow Selections-standaard meer (de sleutel is uniek).
77
+ delete b.standaard_sleutel;
78
+ delete b.standaard_versie;
75
79
  b.naam = `${String(b.naam)} (kopie)`;
76
80
  b.is_standaard = false;
77
81
  const { data: nieuw, error } = await supabase
@@ -0,0 +1,2 @@
1
+ export declare const PAKKET_VERSIE = "1.65.2";
2
+ //# sourceMappingURL=versie.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versie.generated.d.ts","sourceRoot":"","sources":["../../src/lib/versie.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ // Gegenereerd door scripts/schrijf-versie.cjs uit package.json. Niet met de hand wijzigen.
2
+ export const PAKKET_VERSIE = "1.65.2";