@flowselections/layout-maker 1.69.10 → 1.69.15

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 (92) 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 +4 -6
  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 +3714 -25
  25. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  26. package/dist-lib/integrations/supabase/types.js +1 -0
  27. package/dist-lib/lib/belading.d.ts +10 -0
  28. package/dist-lib/lib/belading.d.ts.map +1 -0
  29. package/dist-lib/lib/belading.js +49 -0
  30. package/dist-lib/lib/codelijstCache.d.ts +11 -0
  31. package/dist-lib/lib/codelijstCache.d.ts.map +1 -0
  32. package/dist-lib/lib/codelijstCache.js +117 -0
  33. package/dist-lib/lib/documentTypes.d.ts +1 -1
  34. package/dist-lib/lib/documentTypes.d.ts.map +1 -1
  35. package/dist-lib/lib/documentTypes.js +2 -1
  36. package/dist-lib/lib/eigenDocumenten.d.ts +2 -0
  37. package/dist-lib/lib/eigenDocumenten.d.ts.map +1 -1
  38. package/dist-lib/lib/eigenDocumenten.js +22 -0
  39. package/dist-lib/lib/installCheck.d.ts +36 -0
  40. package/dist-lib/lib/installCheck.d.ts.map +1 -0
  41. package/dist-lib/lib/installCheck.js +65 -0
  42. package/dist-lib/lib/kiesFormaat.d.ts +11 -0
  43. package/dist-lib/lib/kiesFormaat.d.ts.map +1 -0
  44. package/dist-lib/lib/kiesFormaat.js +32 -0
  45. package/dist-lib/lib/klaarOmTePrinten.d.ts +15 -1
  46. package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -1
  47. package/dist-lib/lib/klaarOmTePrinten.js +19 -1
  48. package/dist-lib/lib/orderData.server.d.ts.map +1 -1
  49. package/dist-lib/lib/orderData.server.js +25 -31
  50. package/dist-lib/lib/pakbonBuilder.d.ts +6 -0
  51. package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
  52. package/dist-lib/lib/pakbonBuilder.js +18 -5
  53. package/dist-lib/lib/pakbonContent.d.ts.map +1 -1
  54. package/dist-lib/lib/pakbonContent.js +4 -1
  55. package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
  56. package/dist-lib/lib/pakbonHtml.js +5 -2
  57. package/dist-lib/lib/pakbonPresentation.d.ts +3 -1
  58. package/dist-lib/lib/pakbonPresentation.d.ts.map +1 -1
  59. package/dist-lib/lib/pakbonPresentation.js +13 -6
  60. package/dist-lib/lib/printQueue.server.d.ts +16 -2
  61. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  62. package/dist-lib/lib/printQueue.server.js +305 -59
  63. package/dist-lib/lib/printService.server.d.ts.map +1 -1
  64. package/dist-lib/lib/printService.server.js +3 -2
  65. package/dist-lib/lib/printerKeuze.d.ts +15 -0
  66. package/dist-lib/lib/printerKeuze.d.ts.map +1 -0
  67. package/dist-lib/lib/printerKeuze.js +32 -0
  68. package/dist-lib/lib/queueTick.d.ts.map +1 -1
  69. package/dist-lib/lib/queueTick.js +9 -1
  70. package/dist-lib/lib/runnerRegistry.server.d.ts +10 -0
  71. package/dist-lib/lib/runnerRegistry.server.d.ts.map +1 -1
  72. package/dist-lib/lib/runnerRegistry.server.js +55 -0
  73. package/dist-lib/lib/standaardLayouts.server.d.ts +6 -0
  74. package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
  75. package/dist-lib/lib/standaardLayouts.server.js +13 -0
  76. package/dist-lib/lib/stickerPlaatsing.d.ts +37 -0
  77. package/dist-lib/lib/stickerPlaatsing.d.ts.map +1 -0
  78. package/dist-lib/lib/stickerPlaatsing.js +122 -0
  79. package/dist-lib/lib/stickerUitwijk.d.ts +197 -0
  80. package/dist-lib/lib/stickerUitwijk.d.ts.map +1 -0
  81. package/dist-lib/lib/stickerUitwijk.js +311 -0
  82. package/dist-lib/lib/testprint.d.ts +13 -0
  83. package/dist-lib/lib/testprint.d.ts.map +1 -1
  84. package/dist-lib/lib/testprint.js +38 -0
  85. package/dist-lib/lib/useDocumentData.js +1 -1
  86. package/dist-lib/lib/versie.generated.d.ts +1 -1
  87. package/dist-lib/lib/versie.generated.js +1 -1
  88. package/dist-lib/lib/vroegeWaarschuwing.d.ts +21 -0
  89. package/dist-lib/lib/vroegeWaarschuwing.d.ts.map +1 -0
  90. package/dist-lib/lib/vroegeWaarschuwing.js +15 -0
  91. package/package.json +1 -1
  92. package/sql/print-schema.sql +1 -0
@@ -0,0 +1,15 @@
1
+ export type PrinterKeuze = {
2
+ printer_id: string | null;
3
+ printer_naam: string | null;
4
+ regels: string[];
5
+ vastgelegd_op: string;
6
+ };
7
+ export declare function leesPrinterKeuze(v: unknown): PrinterKeuze | null;
8
+ /** Een opdracht die al bij de printer is (of klaar is), is nooit "nog niet bepaald". */
9
+ export declare function waaromTekst(job: {
10
+ status?: string | null;
11
+ extern_job_id?: unknown;
12
+ foutmelding?: string | null;
13
+ printer_keuze?: unknown;
14
+ }, printerNaam: string | null, logRegels: string[]): string;
15
+ //# sourceMappingURL=printerKeuze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"printerKeuze.d.ts","sourceRoot":"","sources":["../../src/lib/printerKeuze.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAUhE;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CACzB,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9G,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,CASR"}
@@ -0,0 +1,32 @@
1
+ // ============================================================================
2
+ // src/lib/printerKeuze.ts — "Waarom deze printer?" uit één bron: de rij zelf.
3
+ // De wachtrij schrijft print_jobs.printer_keuze in dezelfde update als de
4
+ // status/extern_job_id, dus status en uitleg kunnen elkaar niet tegenspreken.
5
+ // ============================================================================
6
+ export function leesPrinterKeuze(v) {
7
+ if (!v || typeof v !== "object")
8
+ return null;
9
+ const o = v;
10
+ const regels = Array.isArray(o["regels"]) ? o["regels"].filter((r) => typeof r === "string" && !!r) : [];
11
+ return {
12
+ printer_id: typeof o["printer_id"] === "string" ? o["printer_id"] : null,
13
+ printer_naam: typeof o["printer_naam"] === "string" ? o["printer_naam"] : null,
14
+ regels,
15
+ vastgelegd_op: typeof o["vastgelegd_op"] === "string" ? o["vastgelegd_op"] : "",
16
+ };
17
+ }
18
+ /** Een opdracht die al bij de printer is (of klaar is), is nooit "nog niet bepaald". */
19
+ export function waaromTekst(job, printerNaam, logRegels) {
20
+ const k = leesPrinterKeuze(job.printer_keuze);
21
+ if (k && k.regels.length)
22
+ return k.regels.join("\n");
23
+ if (logRegels.length)
24
+ return logRegels.join("\n");
25
+ const afgeleverd = job.status === "voltooid" || !!job.extern_job_id;
26
+ const naam = k?.printer_naam ?? printerNaam;
27
+ if (afgeleverd)
28
+ return naam ? `Verstuurd naar ${naam}.` : "Verstuurd naar de printer; de uitleg is bij deze oudere opdracht niet bewaard.";
29
+ if (job.status === "mislukt")
30
+ return job.foutmelding ?? "Er is niets geprint.";
31
+ return "Nog niet bepaald: de opdracht is nog niet verwerkt.";
32
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"queueTick.d.ts","sourceRoot":"","sources":["../../src/lib/queueTick.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAiBxC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmGzF"}
1
+ {"version":3,"file":"queueTick.d.ts","sourceRoot":"","sources":["../../src/lib/queueTick.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAiBxC;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsGzF"}
@@ -100,7 +100,15 @@ export async function behandelQueueTick(request, supabase) {
100
100
  console.warn("[printwachtrij] standaardlayouts aanmaken mislukt:", e);
101
101
  }
102
102
  try {
103
- const resultaat = await verwerkWachtrij(supabase, 5);
103
+ // Eén opdracht tegelijk, doorwerken tot RONDE_BUDGET_MS; max is alleen een bovengrens.
104
+ let origin = null;
105
+ try {
106
+ origin = new URL(request.url).origin;
107
+ }
108
+ catch {
109
+ origin = null;
110
+ }
111
+ const resultaat = await verwerkWachtrij(supabase, 20, { origin });
104
112
  return Response.json({ ok: true, ...resultaat, ontbrekend });
105
113
  }
106
114
  catch (e) {
@@ -13,4 +13,14 @@ export declare function meldRunnerAan(db: PrintDb): Promise<void>;
13
13
  export declare function controleerShellPoort(db: PrintDb): Promise<import("./shellPoort.js").PoortUitkomst>;
14
14
  /** Controleert of de meegegeven sleutel bij een geregistreerde shell hoort. */
15
15
  export declare function isRunnerSleutel(db: PrintDb, sleutel: string): Promise<boolean>;
16
+ /**
17
+ * Wekt direct een nieuwe ronde op de eigen route, met de eigen origin van de
18
+ * aanvraag en de bestaande runner-sleutel (print_queue_runners.tick_sleutel).
19
+ * Geen host in code. Lukt het niet, dan meldt hij waarom; de aanroeper valt
20
+ * dan terug op wake_print_queue (pg_net).
21
+ */
22
+ export declare function wekEigenRonde(db: PrintDb, origin: string | null): Promise<{
23
+ ok: boolean;
24
+ reden: string;
25
+ }>;
16
26
  //# sourceMappingURL=runnerRegistry.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runnerRegistry.server.d.ts","sourceRoot":"","sources":["../../src/lib/runnerRegistry.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,OAAO,iDAcrD;AAED,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAapF"}
1
+ {"version":3,"file":"runnerRegistry.server.d.ts","sourceRoot":"","sources":["../../src/lib/runnerRegistry.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC9D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,OAAO,iDAcrD;AAED,+EAA+E;AAC/E,wBAAsB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAapF;AAaD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/G"}
@@ -96,3 +96,58 @@ export async function isRunnerSleutel(db, sleutel) {
96
96
  return false;
97
97
  }
98
98
  }
99
+ /** waitUntil van de Worker-runtime, als die er is (anders null). */
100
+ async function zoekWaitUntil() {
101
+ try {
102
+ const naam = "cloudflare:workers";
103
+ const m = (await import(/* @vite-ignore */ naam));
104
+ return typeof m?.waitUntil === "function" ? m.waitUntil : null;
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ /**
111
+ * Wekt direct een nieuwe ronde op de eigen route, met de eigen origin van de
112
+ * aanvraag en de bestaande runner-sleutel (print_queue_runners.tick_sleutel).
113
+ * Geen host in code. Lukt het niet, dan meldt hij waarom; de aanroeper valt
114
+ * dan terug op wake_print_queue (pg_net).
115
+ */
116
+ export async function wekEigenRonde(db, origin) {
117
+ const basis = (origin ?? eigenBasisUrl() ?? "").replace(/\/+$/, "");
118
+ if (!basis)
119
+ return { ok: false, reden: "eigen adres onbekend" };
120
+ const norm = (u) => u.trim().toLowerCase().replace(/\/+$/, "");
121
+ let sleutel = "";
122
+ try {
123
+ const { data } = await db.from("print_queue_runners").select("basis_url, tick_sleutel").eq("actief", true);
124
+ const rij = (Array.isArray(data) ? data : []).find((r) => norm(String(r.basis_url ?? "")) === norm(basis));
125
+ sleutel = String(rij?.tick_sleutel ?? "");
126
+ }
127
+ catch {
128
+ sleutel = "";
129
+ }
130
+ if (!sleutel)
131
+ return { ok: false, reden: "geen runner-sleutel voor dit adres" };
132
+ const waitUntil = await zoekWaitUntil();
133
+ // Zonder waitUntil zou de aanroep afbreken zodra deze ronde antwoordt (en
134
+ // daarmee ook de gewekte ronde). Dan liever het vangnet.
135
+ if (!waitUntil)
136
+ return { ok: false, reden: "runtime zonder waitUntil" };
137
+ const start = Date.now();
138
+ waitUntil(fetch(`${basis}/api/public/print/queue-tick`, {
139
+ method: "POST",
140
+ headers: { "Content-Type": "application/json", apikey: sleutel },
141
+ body: JSON.stringify({ bron: "vervolgronde" }),
142
+ })
143
+ .then(async (r) => {
144
+ console.info(`[printwachtrij] vervolgronde direct: HTTP ${r.status} na ${Date.now() - start} ms`);
145
+ if (!r.ok)
146
+ await db.rpc("wake_print_queue", { _min_interval_ms: 1000 });
147
+ })
148
+ .catch(async (e) => {
149
+ console.warn(`[printwachtrij] vervolgronde direct mislukt: ${e instanceof Error ? e.message : "onbekend"}; vangnet wake_print_queue.`);
150
+ await db.rpc("wake_print_queue", { _min_interval_ms: 1000 });
151
+ }));
152
+ return { ok: true, reden: "" };
153
+ }
@@ -28,5 +28,11 @@ export declare function zorgVoorStandaardLayoutsMetStatus(db: Db): Promise<{
28
28
  * (met de knop "Overnemen uit factuurgegevens"). Raakt de database niet.
29
29
  */
30
30
  export declare function zorgVoorBedrijfsgegevens(_db: Db): Promise<boolean>;
31
+ /**
32
+ * Ensure: zet de verkleininstelling per stickersoort in app_settings als die
33
+ * nog ontbreekt (gegevens reizen niet mee met de schemasync). Vult alleen
34
+ * ontbrekende soorten aan; een bestaande keuze wordt nooit overschreven.
35
+ */
36
+ export declare function zorgVoorStickerInstellingen(db: Db): Promise<boolean>;
31
37
  export {};
32
38
  //# 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":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAExC,eAAO,MAAM,wBAAwB,2MACqK,CAAC;AAE3M,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBrG;AAED,kDAAkD;AAClD,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5E;AAED,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAOrH;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE"}
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,eAAO,MAAM,wBAAwB,2MACqK,CAAC;AAE3M,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAKrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAmBrG;AAED,kDAAkD;AAClD,wBAAsB,8BAA8B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5E;AAED,wBAAsB,iCAAiC,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAQrH;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAK1E"}
@@ -55,6 +55,7 @@ export async function zorgVoorStandaardLayoutsMetStatus(db) {
55
55
  const aanvulling = await vulStandaardenAan(db);
56
56
  if (aanvulling.schemaOntbreekt)
57
57
  return { aantal: 0, schemaOntbreekt: true };
58
+ await zorgVoorStickerInstellingen(db).catch(() => false);
58
59
  const { data, error: rpcFout } = await db.rpc("layout_zorg_systeemlayouts");
59
60
  if (rpcFout)
60
61
  throw new Error(`Standaardlayouts controleren mislukt: ${rpcFout.message}`);
@@ -70,3 +71,15 @@ export async function zorgVoorStandaardLayoutsMetStatus(db) {
70
71
  export async function zorgVoorBedrijfsgegevens(_db) {
71
72
  return false;
72
73
  }
74
+ /**
75
+ * Ensure: zet de verkleininstelling per stickersoort in app_settings als die
76
+ * nog ontbreekt (gegevens reizen niet mee met de schemasync). Vult alleen
77
+ * ontbrekende soorten aan; een bestaande keuze wordt nooit overschreven.
78
+ */
79
+ export async function zorgVoorStickerInstellingen(db) {
80
+ // 1.69.12: de standaardwaarden staan alleen in de databasefunctie.
81
+ const { error } = await db.rpc("layouts_zorg_voor_sticker_verkleinen");
82
+ if (error)
83
+ throw new Error(`Stickerinstellingen aanvullen mislukt: ${error.message}`);
84
+ return true;
85
+ }
@@ -0,0 +1,37 @@
1
+ import type { UitwijkUitkomst } from "./stickerUitwijk.js";
2
+ import { type Velindeling as VelIndeling } from "./stickerUitwijk.js";
3
+ /** Rand rond het A4-vel met snijlijnen. */
4
+ export declare const SNIJ_MARGE_MM = 5;
5
+ export interface Plaatsing {
6
+ /** Linksonder van het vak (mm, PDF-assen). */
7
+ x_mm: number;
8
+ y_mm: number;
9
+ b_mm: number;
10
+ h_mm: number;
11
+ }
12
+ /** Positie van een sticker gecentreerd op een pagina, in mm (links, onder). */
13
+ export declare function centreer(paginaB: number, paginaH: number, stickerB: number, stickerH: number, schaal: number, rotate: 0 | 90): Plaatsing;
14
+ /** Vakken op een A4 voor deze maat: vaste velindeling, of zoveel als passen met snijlijnen. */
15
+ export declare function velVakken(stickerB: number, stickerH: number, vel: VelIndeling | null): {
16
+ vakken: Plaatsing[];
17
+ snijlijnen: boolean;
18
+ };
19
+ /**
20
+ * Voert de uitwijkroute uit. Etiketroutes: elke pagina wordt een etiketpagina
21
+ * (gedraaid/gecentreerd/verkleind). A4-routes: alle pagina's × kopieën worden
22
+ * 1-op-1 over één of meer vellen verdeeld; de opdracht gaat dan met qty 1.
23
+ */
24
+ export declare function voerUitwijkUit(pdfBase64: string, u: UitwijkUitkomst, sticker: {
25
+ breedte_mm: number;
26
+ hoogte_mm: number;
27
+ }, kopieen: number): Promise<{
28
+ pdfBase64: string;
29
+ kopieen: number;
30
+ paginas: number;
31
+ }>;
32
+ /**
33
+ * Testvel op gewoon A4 (1.69.12): de vakken van de velindeling met rand,
34
+ * 1-op-1, zodat de beheerder het echte stickervel ertegen kan houden.
35
+ */
36
+ export declare function testvelPdf(vel: VelIndeling): Promise<string>;
37
+ //# sourceMappingURL=stickerPlaatsing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickerPlaatsing.d.ts","sourceRoot":"","sources":["../../src/lib/stickerPlaatsing.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAmB,KAAK,WAAW,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIpF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,SAAS,CAIxI;AAED,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG;IAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAgBnI;AAeD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,eAAe,EAClB,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAClD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmClE;AAcD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CASlE"}
@@ -0,0 +1,122 @@
1
+ // ============================================================================
2
+ // src/lib/stickerPlaatsing.ts — de uitwijkroute zelf in de PDF uitvoeren
3
+ // (1.69.12). De printer krijgt altijd een pagina van precies het geladen
4
+ // etiket (of A4), fit_to_page uit en rotate 0: draaien, centreren en
5
+ // eventueel verkleinen gebeurt hier, nooit in de printer of driver.
6
+ // ============================================================================
7
+ import { PDFDocument, degrees, rgb } from "pdf-lib";
8
+ import { velindelingVoor } from "./stickerUitwijk.js";
9
+ const PT = 72 / 25.4;
10
+ const A4 = { b: 210, h: 297 };
11
+ /** Rand rond het A4-vel met snijlijnen. */
12
+ export const SNIJ_MARGE_MM = 5;
13
+ /** Positie van een sticker gecentreerd op een pagina, in mm (links, onder). */
14
+ export function centreer(paginaB, paginaH, stickerB, stickerH, schaal, rotate) {
15
+ const b = (rotate ? stickerH : stickerB) * schaal;
16
+ const h = (rotate ? stickerB : stickerH) * schaal;
17
+ return { x_mm: (paginaB - b) / 2, y_mm: (paginaH - h) / 2, b_mm: b, h_mm: h };
18
+ }
19
+ /** Vakken op een A4 voor deze maat: vaste velindeling, of zoveel als passen met snijlijnen. */
20
+ export function velVakken(stickerB, stickerH, vel) {
21
+ const kol = vel ? vel.kolommen : Math.max(1, Math.floor((A4.b - 2 * SNIJ_MARGE_MM + 1e-9) / stickerB));
22
+ const rij = vel ? vel.rijen : Math.max(1, Math.floor((A4.h - 2 * SNIJ_MARGE_MM + 1e-9) / stickerH));
23
+ const cb = vel ? vel.breedte_mm : stickerB;
24
+ const ch = vel ? vel.hoogte_mm : stickerH;
25
+ // Eigen vel: vaste randen en tussenruimtes vanaf linksboven. Anders gecentreerd.
26
+ const eigen = vel?.marge_links_mm !== undefined || vel?.marge_boven_mm !== undefined;
27
+ const th = eigen ? vel?.tussen_h_mm ?? 0 : 0;
28
+ const tv = eigen ? vel?.tussen_v_mm ?? 0 : 0;
29
+ const x0 = eigen ? vel?.marge_links_mm ?? 0 : (A4.b - kol * cb) / 2;
30
+ const yTop = eigen ? A4.h - (vel?.marge_boven_mm ?? 0) : A4.h - (A4.h - rij * ch) / 2;
31
+ const vakken = [];
32
+ for (let r = 0; r < rij; r++) {
33
+ for (let k = 0; k < kol; k++)
34
+ vakken.push({ x_mm: x0 + k * (cb + th), y_mm: yTop - (r + 1) * ch - r * tv, b_mm: cb, h_mm: ch });
35
+ }
36
+ return { vakken, snijlijnen: !vel };
37
+ }
38
+ function decodeer(b64) {
39
+ if (typeof atob === "function")
40
+ return Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ return new Uint8Array(globalThis.Buffer.from(b64, "base64"));
43
+ }
44
+ function codeer(bytes) {
45
+ let s = "";
46
+ for (let i = 0; i < bytes.length; i += 0x8000)
47
+ s += String.fromCharCode(...bytes.subarray(i, i + 0x8000));
48
+ if (typeof btoa === "function")
49
+ return btoa(s);
50
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
+ return globalThis.Buffer.from(bytes).toString("base64");
52
+ }
53
+ /**
54
+ * Voert de uitwijkroute uit. Etiketroutes: elke pagina wordt een etiketpagina
55
+ * (gedraaid/gecentreerd/verkleind). A4-routes: alle pagina's × kopieën worden
56
+ * 1-op-1 over één of meer vellen verdeeld; de opdracht gaat dan met qty 1.
57
+ */
58
+ export async function voerUitwijkUit(pdfBase64, u, sticker, kopieen) {
59
+ const bron = await PDFDocument.load(decodeer(pdfBase64));
60
+ const doel = await PDFDocument.create();
61
+ const ingebed = await doel.embedPages(bron.getPages());
62
+ if (u.uitwijkroute === "a4_vel" || u.uitwijkroute === "a4_snijlijnen") {
63
+ const vel = u.uitwijkroute === "a4_vel" ? (u.velindeling ?? velindelingVoor(sticker.breedte_mm, sticker.hoogte_mm)) : null;
64
+ const { vakken, snijlijnen } = velVakken(sticker.breedte_mm, sticker.hoogte_mm, vel);
65
+ const reeks = Array.from({ length: Math.max(1, kopieen) }).flatMap(() => ingebed);
66
+ let pagina = null;
67
+ reeks.forEach((p, i) => {
68
+ const vak = vakken[i % vakken.length];
69
+ if (i % vakken.length === 0) {
70
+ pagina = doel.addPage([A4.b * PT, A4.h * PT]);
71
+ if (snijlijnen)
72
+ tekenSnijlijnen(pagina, vakken);
73
+ }
74
+ const pl = centreer(vak.b_mm, vak.h_mm, sticker.breedte_mm, sticker.hoogte_mm, 1, 0);
75
+ pagina.drawPage(p, { x: (vak.x_mm + pl.x_mm) * PT, y: (vak.y_mm + pl.y_mm) * PT, width: sticker.breedte_mm * PT, height: sticker.hoogte_mm * PT });
76
+ });
77
+ return { pdfBase64: codeer(await doel.save()), kopieen: 1, paginas: doel.getPageCount() };
78
+ }
79
+ for (const p of ingebed) {
80
+ const pagina = doel.addPage([u.pagina_breedte_mm * PT, u.pagina_hoogte_mm * PT]);
81
+ const pl = centreer(u.pagina_breedte_mm, u.pagina_hoogte_mm, sticker.breedte_mm, sticker.hoogte_mm, u.schaal, u.rotate);
82
+ const w = sticker.breedte_mm * u.schaal * PT;
83
+ const h = sticker.hoogte_mm * u.schaal * PT;
84
+ if (u.rotate === 90) {
85
+ // Gedraaid om linksonder: vak loopt van x-h tot x en van y tot y+w.
86
+ pagina.drawPage(p, { x: (pl.x_mm + pl.b_mm) * PT, y: pl.y_mm * PT, width: w, height: h, rotate: degrees(90) });
87
+ }
88
+ else {
89
+ pagina.drawPage(p, { x: pl.x_mm * PT, y: pl.y_mm * PT, width: w, height: h });
90
+ }
91
+ }
92
+ return { pdfBase64: codeer(await doel.save()), kopieen, paginas: doel.getPageCount() };
93
+ }
94
+ function tekenSnijlijnen(pagina, vakken) {
95
+ const kleur = rgb(0.6, 0.6, 0.6);
96
+ const xs = new Set();
97
+ const ys = new Set();
98
+ for (const v of vakken) {
99
+ xs.add(v.x_mm);
100
+ xs.add(v.x_mm + v.b_mm);
101
+ ys.add(v.y_mm);
102
+ ys.add(v.y_mm + v.h_mm);
103
+ }
104
+ for (const x of xs)
105
+ pagina.drawLine({ start: { x: x * PT, y: 0 }, end: { x: x * PT, y: A4.h * PT }, thickness: 0.3, color: kleur, dashArray: [3, 3] });
106
+ for (const y of ys)
107
+ pagina.drawLine({ start: { x: 0, y: y * PT }, end: { x: A4.b * PT, y: y * PT }, thickness: 0.3, color: kleur, dashArray: [3, 3] });
108
+ }
109
+ /**
110
+ * Testvel op gewoon A4 (1.69.12): de vakken van de velindeling met rand,
111
+ * 1-op-1, zodat de beheerder het echte stickervel ertegen kan houden.
112
+ */
113
+ export async function testvelPdf(vel) {
114
+ const doel = await PDFDocument.create();
115
+ const pagina = doel.addPage([A4.b * PT, A4.h * PT]);
116
+ const { vakken } = velVakken(vel.breedte_mm, vel.hoogte_mm, vel);
117
+ for (const v of vakken) {
118
+ pagina.drawRectangle({ x: v.x_mm * PT, y: v.y_mm * PT, width: v.b_mm * PT, height: v.h_mm * PT, borderColor: rgb(0, 0, 0), borderWidth: 0.5 });
119
+ }
120
+ pagina.drawText(`Testvel ${Math.round(vel.breedte_mm)}x${Math.round(vel.hoogte_mm)} mm, ${vel.kolommen}x${vel.rijen} per vel - houd het stickervel ertegen`, { x: 5 * PT, y: 2 * PT, size: 7 });
121
+ return codeer(await doel.save());
122
+ }
@@ -0,0 +1,197 @@
1
+ export type StickerSoort = "floriday_sticker" | "floriday_traysticker" | "klantsticker" | "eigen_sticker" | "eigen_traysticker";
2
+ import type { PrinterFormaten } from "./papierFormaten.js";
3
+ export declare const STICKER_SOORTEN: {
4
+ soort: StickerSoort;
5
+ label: string;
6
+ veilingbarcode: boolean;
7
+ }[];
8
+ export interface VerkleinInstelling {
9
+ toegestaan: boolean;
10
+ ondergrens_pct: number;
11
+ }
12
+ export type StickerInstellingen = Record<StickerSoort, VerkleinInstelling>;
13
+ /** Sleutel in app_settings. De standaardwaarden staan alleen hieronder. */
14
+ export declare const STICKER_INSTELLING_SLEUTEL = "layouts.sticker_verkleinen";
15
+ /** Printplekken (ids, JSON-lijst) waar een A4-stickervel in de A4-printer ligt. */
16
+ /** @deprecated 1.69.12: vervangen door print_plekken.a4_stickervel; alleen nog voor de overname. */
17
+ export declare const A4_STICKERVEL_SLEUTEL = "layouts.a4_stickervel_plekken";
18
+ /** De enige plek met de standaardwaarden: aan, 90% met veilingbarcode, anders 85%. */
19
+ export declare function standaardStickerInstellingen(): StickerInstellingen;
20
+ /** Leest de opgeslagen waarde (tekst of object); ontbrekende soorten krijgen de standaard. */
21
+ export declare function leesStickerInstellingen(v: unknown): StickerInstellingen;
22
+ /**
23
+ * Strikt lezen (1.69.12): alleen een volledige instelling voor alle soorten
24
+ * telt; anders null. Geen aanvulling met standaardwaarden uit de code — die
25
+ * staan alleen in de databasefunctie layouts_zorg_voor_sticker_verkleinen.
26
+ */
27
+ export declare function leesStickerInstellingenStrikt(v: unknown): StickerInstellingen | null;
28
+ /** Vaste velindelingen op A4 (210 × 297 mm) voor gangbare stickermaten. */
29
+ export interface Velindeling {
30
+ breedte_mm: number;
31
+ hoogte_mm: number;
32
+ kolommen: number;
33
+ rijen: number;
34
+ /** Alleen bij een eigen vel: vaste randen en tussenruimtes (mm). */
35
+ marge_boven_mm?: number;
36
+ marge_links_mm?: number;
37
+ tussen_h_mm?: number;
38
+ tussen_v_mm?: number;
39
+ }
40
+ export declare const A4_VELINDELINGEN: Velindeling[];
41
+ /** Gangbare etiketmaten (ook voor de varianten van eigen stickers). */
42
+ export declare const GANGBARE_ETIKETMATEN: {
43
+ breedte_mm: number;
44
+ hoogte_mm: number;
45
+ }[];
46
+ export declare function velindelingVoor(b: number, h: number): Velindeling | null;
47
+ export type Uitwijkroute = "precies" | "gedraaid" | "groter_etiket" | "verkleind" | "a4_vel" | "a4_snijlijnen";
48
+ export interface EtiketKandidaat {
49
+ printerNaam: string;
50
+ printerId?: string;
51
+ /** Naam van het formaat zoals eerder ingesteld; alleen gebruikt als `formaten` onbekend is. */
52
+ paper: string;
53
+ breedte_mm: number;
54
+ hoogte_mm: number;
55
+ /** Resolutie van de printer; onbekend = 203 dpi (gangbare labelprinter). */
56
+ dpi?: number | null;
57
+ /**
58
+ * Papiermaten die PrintNode voor deze printer meldt (naam -> [b, h] in 0,1 mm).
59
+ * Gegeven (ook null) = de papiernaam wordt op afmeting (±1 mm) gekozen; geen
60
+ * passende maat = dit etiket telt als niet passend. Weggelaten = niet gecontroleerd.
61
+ */
62
+ formaten?: PrinterFormaten | null;
63
+ }
64
+ export interface UitwijkUitkomst {
65
+ uitwijkroute: Uitwijkroute;
66
+ printerNaam: string;
67
+ printerId?: string;
68
+ /** 1 = ware grootte. Nooit groter dan 1. */
69
+ schaal: number;
70
+ /** In gewone taal, bijvoorbeeld "Geprint op 50×50 in plaats van 50×40, 1-op-1 gecentreerd". */
71
+ reden: string;
72
+ /** Papiernaam voor PrintNode (op afmeting gekozen) of "A4". */
73
+ paper: string;
74
+ /** Draaiing van de sticker binnen de PDF; naar PrintNode gaat altijd rotate 0. */
75
+ rotate: 0 | 90;
76
+ /** Altijd false: de printer of driver mag nooit zelf schalen (1.69.12). */
77
+ fitToPage: false;
78
+ /** Maat van de PDF-pagina = het geladen etiket of A4. */
79
+ pagina_breedte_mm: number;
80
+ pagina_hoogte_mm: number;
81
+ /** Maat van de sticker zelf (voor het voorbeeld in de wachtrij). */
82
+ sticker_breedte_mm: number;
83
+ sticker_hoogte_mm: number;
84
+ /** Alleen bij a4_vel: de gebruikte velindeling (eigen vel of standaard). */
85
+ velindeling?: Velindeling;
86
+ }
87
+ /** Tolerantie bij het herkennen van een papiermaat van de printer. */
88
+ export declare const PAPIER_TOLERANTIE_MM = 1;
89
+ /** Papiernaam op afmeting (±1 mm, ook gedraaid) uit de PrintNode-lijst; null als er geen is. */
90
+ export declare function papierOpMaat(formaten: PrinterFormaten | null | undefined, b: number, h: number): string | null;
91
+ /** Nominale smalste streep van een Code128/veilingbarcode op ware grootte. */
92
+ export declare const NOMINALE_STREEP_MM = 0.33;
93
+ /** Minimaal 2 printerpunten per smalste streep. */
94
+ export declare function barcodeLeesbaar(schaal: number, dpi: number | null | undefined, streep_mm?: number): boolean;
95
+ /**
96
+ * Kiest de uitwijkroute, vaste volgorde:
97
+ * 1. precies passend etiket; 2. hetzelfde etiket gedraaid;
98
+ * 3. groter etiket 1-op-1 gecentreerd, en pas als geen etiket groot genoeg
99
+ * is: verkleinen (verhouding gelijk, ondergrens, barcode leesbaar);
100
+ * 4. A4-stickervel; 5. A4 met snijlijnen.
101
+ * Geeft null alleen als er helemaal geen printer is.
102
+ */
103
+ export declare function kiesUitwijkroute(input: {
104
+ sticker: {
105
+ breedte_mm: number;
106
+ hoogte_mm: number;
107
+ };
108
+ etiketten: EtiketKandidaat[];
109
+ a4Printer: {
110
+ naam: string;
111
+ id?: string;
112
+ } | null;
113
+ /** Er ligt een A4-stickervel klaar (instelling per printplek). */
114
+ a4VelIngesteld: boolean;
115
+ /** Velindeling van de printplek (a4VelVoor); weggelaten = standaardlijst. */
116
+ a4VelIndeling?: Velindeling | null;
117
+ /** null = instelling niet leesbaar: alleen de stap verkleinen vervalt. */
118
+ instelling: VerkleinInstelling | null;
119
+ heeftBarcode?: boolean;
120
+ }): UitwijkUitkomst | null;
121
+ /** Instelling per printplek (print_plekken.a4_stickervel). Zonder maat = elke vaste velindeling. */
122
+ export interface A4Stickervel {
123
+ aanwezig: boolean;
124
+ breedte_mm?: number;
125
+ hoogte_mm?: number;
126
+ marge_boven_mm?: number;
127
+ marge_links_mm?: number;
128
+ tussen_h_mm?: number;
129
+ tussen_v_mm?: number;
130
+ }
131
+ /** Voorstelwaarden voor een eigen vel op de kaart A4-stickervel (alleen invulhulp). */
132
+ export declare const EIGEN_VEL_VOORSTEL: {
133
+ marge_boven_mm: number;
134
+ marge_links_mm: number;
135
+ tussen_h_mm: number;
136
+ tussen_v_mm: number;
137
+ };
138
+ export declare function leesA4StickervelWaarde(v: unknown): A4Stickervel | null;
139
+ /**
140
+ * Velindeling voor deze sticker op deze printplek. Een eigen vel (met maat)
141
+ * gaat altijd vóór de standaardlijst; past de sticker daar niet op, dan geen
142
+ * vel (dus A4 met snijlijnen), nooit schalen. Zonder eigen maat: standaardlijst.
143
+ */
144
+ export declare function a4VelVoor(vel: A4Stickervel | null, sticker: {
145
+ breedte_mm: number;
146
+ hoogte_mm: number;
147
+ }): Velindeling | null;
148
+ /** Ligt er op deze printplek een vel dat bij deze stickermaat hoort? */
149
+ export declare function a4VelPast(vel: A4Stickervel | null, sticker: {
150
+ breedte_mm: number;
151
+ hoogte_mm: number;
152
+ }): boolean;
153
+ /** Papiermaat-waarschuwing per etiket (voor Printplekken en install_check). */
154
+ export declare function papierWaarschuwingen(etiketten: EtiketKandidaat[]): string[];
155
+ /** Vastgelegde uitkomst met precies de veldnamen die Pickschermen 1.0.61 leest. */
156
+ export declare function uitwijkVoorPickschermen(u: UitwijkUitkomst): {
157
+ uitwijkroute: Uitwijkroute;
158
+ printerNaam: string;
159
+ schaal: number;
160
+ reden: string;
161
+ };
162
+ /** Overzicht per printplek: hoe elke gangbare maat geprint wordt (waarschuwing, geen blokkade). */
163
+ export declare function stickerMatenOverzicht(etiketten: EtiketKandidaat[], a4Printer: {
164
+ naam: string;
165
+ } | null, a4VelIngesteld: boolean, instelling: VerkleinInstelling, maten?: {
166
+ breedte_mm: number;
167
+ hoogte_mm: number;
168
+ }[]): {
169
+ maat: string;
170
+ uitkomst: UitwijkUitkomst | null;
171
+ }[];
172
+ /**
173
+ * Vroege waarschuwing: vergelijkt per dag en printplek de benodigde
174
+ * stickermaten (aangeleverd door Engine/Pickschermen) met de aanwezige
175
+ * etiketten. Alleen maten die niet precies of gedraaid passen komen terug.
176
+ */
177
+ export declare function vroegeStickerWaarschuwing(nodig: {
178
+ dag: string;
179
+ print_plek_id: string;
180
+ breedte_mm: number;
181
+ hoogte_mm: number;
182
+ aantal?: number;
183
+ }[], perPlek: Map<string, {
184
+ etiketten: EtiketKandidaat[];
185
+ a4Printer: {
186
+ naam: string;
187
+ } | null;
188
+ a4VelIngesteld: boolean;
189
+ }>, instelling: VerkleinInstelling): {
190
+ dag: string;
191
+ print_plek_id: string;
192
+ maat: string;
193
+ aantal: number;
194
+ uitwijkroute: Uitwijkroute | "geen_printer";
195
+ reden: string;
196
+ }[];
197
+ //# sourceMappingURL=stickerUitwijk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stickerUitwijk.d.ts","sourceRoot":"","sources":["../../src/lib/stickerUitwijk.ts"],"names":[],"mappings":"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"}