@flowselections/layout-maker 1.45.9 → 1.45.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -139
- package/dist-lib/components/AfdrukKnop.d.ts +19 -19
- package/dist-lib/components/AfdrukKnop.js +64 -64
- package/dist-lib/components/NetwerkPrintersDialog.d.ts +7 -7
- package/dist-lib/components/NetwerkPrintersDialog.js +79 -79
- package/dist-lib/components/PakbonPreview.d.ts.map +1 -1
- package/dist-lib/components/PakbonPreview.js +2 -2
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +42 -5
- package/dist-lib/components/PrinterSetupWizard.js +3 -3
- package/dist-lib/components/PrintersRedirectPage.d.ts +1 -1
- package/dist-lib/components/PrintersRedirectPage.js +14 -14
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +4489 -277
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +4489 -277
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +4489 -277
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +4506 -253
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +4489 -277
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.server.js +9 -9
- package/dist-lib/lib/browserPrint.js +1 -1
- package/dist-lib/lib/fieldRegistry.js +1 -0
- package/dist-lib/lib/layoutPreview.js +7 -7
- package/dist-lib/lib/logoLibrary.d.ts +2 -1
- package/dist-lib/lib/logoLibrary.d.ts.map +1 -1
- package/dist-lib/lib/logoLibrary.js +42 -2
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +13 -0
- package/dist-lib/lib/pakbonBuilder.d.ts +26 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +37 -0
- package/dist-lib/lib/pakbonContent.d.ts.map +1 -1
- package/dist-lib/lib/pakbonContent.js +2 -2
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +60 -60
- package/dist-lib/lib/pakbonPresentation.d.ts.map +1 -1
- package/dist-lib/lib/pakbonPresentation.js +2 -4
- package/dist-lib/lib/pdfJobSaver.d.ts.map +1 -1
- package/dist-lib/lib/pdfJobSaver.js +31 -2
- package/dist-lib/lib/pdfMap.d.ts +7 -0
- package/dist-lib/lib/pdfMap.d.ts.map +1 -1
- package/dist-lib/lib/pdfMap.js +17 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +142 -15
- package/dist-lib/lib/printService.functions.d.ts +47214 -52
- package/dist-lib/lib/printService.functions.d.ts.map +1 -1
- package/dist-lib/lib/printService.functions.js +69 -0
- package/dist-lib/lib/printService.server.d.ts +2 -0
- package/dist-lib/lib/printService.server.d.ts.map +1 -1
- package/dist-lib/lib/printService.server.js +10 -0
- package/dist-lib/lib/productiebonHtml.js +15 -15
- package/dist-lib/lib/profielHtml.d.ts.map +1 -1
- package/dist-lib/lib/profielHtml.js +22 -19
- package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
- package/dist-lib/lib/supabaseAdmin.server.js +43 -43
- package/dist-lib/lib/testpagina.js +3 -3
- package/dist-lib/lib/testprint.js +4 -4
- package/package.json +3 -3
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// src/lib/aiLayout.server.ts — hulpfuncties voor de AI-layoutgenerator
|
|
3
3
|
// ============================================================================
|
|
4
4
|
const GATEWAY = "https://ai.gateway.lovable.dev/v1/chat/completions";
|
|
5
|
-
const SYSTEM_PROMPT = `Je bent een documentontwerper voor een Nederlands ERP-systeem.
|
|
6
|
-
Je analyseert een bestaand document (PDF of afbeelding) en zet het om naar een herbruikbare layout.
|
|
7
|
-
Herken logo's, adresblokken, koppen, tabellen met kolommen, totalen, barcodes en voetteksten.
|
|
8
|
-
Vervang concrete gegevens door veldcodes zoals {{order.nummer}}, {{klant.naam}}, {{klant.adres}},
|
|
9
|
-
{{factuur.totaal}}, {{systeem.datum}}. Coördinaten en afmetingen zijn in millimeters, linksboven is 0,0.
|
|
10
|
-
Herken logo's als element van het type "logo". Je krijgt een lijst met logo's die al in de centrale
|
|
11
|
-
Logo Bibliotheek staan; als het herkende logo daar duidelijk bij past, zet dan die exacte naam in
|
|
12
|
-
"logo_naam". Past het bij geen enkel bekend logo, laat "logo_naam" dan leeg zodat het als nieuw logo
|
|
13
|
-
kan worden voorgesteld.
|
|
5
|
+
const SYSTEM_PROMPT = `Je bent een documentontwerper voor een Nederlands ERP-systeem.
|
|
6
|
+
Je analyseert een bestaand document (PDF of afbeelding) en zet het om naar een herbruikbare layout.
|
|
7
|
+
Herken logo's, adresblokken, koppen, tabellen met kolommen, totalen, barcodes en voetteksten.
|
|
8
|
+
Vervang concrete gegevens door veldcodes zoals {{order.nummer}}, {{klant.naam}}, {{klant.adres}},
|
|
9
|
+
{{factuur.totaal}}, {{systeem.datum}}. Coördinaten en afmetingen zijn in millimeters, linksboven is 0,0.
|
|
10
|
+
Herken logo's als element van het type "logo". Je krijgt een lijst met logo's die al in de centrale
|
|
11
|
+
Logo Bibliotheek staan; als het herkende logo daar duidelijk bij past, zet dan die exacte naam in
|
|
12
|
+
"logo_naam". Past het bij geen enkel bekend logo, laat "logo_naam" dan leeg zodat het als nieuw logo
|
|
13
|
+
kan worden voorgesteld.
|
|
14
14
|
Antwoord uitsluitend met JSON.`;
|
|
15
15
|
const SCHEMA = {
|
|
16
16
|
type: "object",
|
|
@@ -26,7 +26,7 @@ export function paginaCss(formaat, orientatie, margeMm = 0) {
|
|
|
26
26
|
const gedraaid = formaat && orientatie === "landscape"
|
|
27
27
|
? `${formaat.hoogte}mm ${formaat.breedte}mm`
|
|
28
28
|
: size;
|
|
29
|
-
return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
|
|
29
|
+
return `@page { size: ${gedraaid}; margin: ${margeMm}mm; }
|
|
30
30
|
@media print { html, body { margin: 0; padding: 0; } }`;
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
@@ -82,6 +82,7 @@ registreerEntiteit({
|
|
|
82
82
|
{ pad: "regel.potmaat", label: "Potmaat", soort: "tekst", voorbeeld: "12 cm" },
|
|
83
83
|
{ pad: "regel.barcode", label: "Barcode", soort: "tekst", voorbeeld: "8712345678904" },
|
|
84
84
|
{ pad: "regel.locatie", label: "Locatie", soort: "tekst", voorbeeld: "A-12-3" },
|
|
85
|
+
{ pad: "regel.afbeelding", label: "Stickerafbeelding", soort: "tekst", voorbeeld: "" },
|
|
85
86
|
],
|
|
86
87
|
});
|
|
87
88
|
registreerEntiteit({
|
|
@@ -81,8 +81,8 @@ function elementHtml(el, ctx) {
|
|
|
81
81
|
return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
|
|
82
82
|
case "barcode":
|
|
83
83
|
return inhoud
|
|
84
|
-
? `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
|
|
85
|
-
<div class="barcode-bars" data-barcode="${esc(inhoud)}" style="width:100%;height:70%;display:flex;background:#fff">${code128BarsHtml(inhoud)}</div>
|
|
84
|
+
? `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
|
|
85
|
+
<div class="barcode-bars" data-barcode="${esc(inhoud)}" style="width:100%;height:70%;display:flex;background:#fff">${code128BarsHtml(inhoud)}</div>
|
|
86
86
|
<div style="font-size:7pt">${esc(inhoud)}</div></div>`
|
|
87
87
|
: "";
|
|
88
88
|
case "qrcode":
|
|
@@ -128,10 +128,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
|
|
|
128
128
|
const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
|
|
129
129
|
const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
|
|
130
130
|
const h = layout.orientatie === "landscape" ? layout.breedte_mm : layout.hoogte_mm;
|
|
131
|
-
return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
|
|
132
|
-
<style>@page{size:${b}mm ${h}mm;margin:0}
|
|
133
|
-
body{margin:0;background:#e5e7eb}
|
|
134
|
-
.pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
|
|
135
|
-
@media print{body{background:#fff}}</style></head>
|
|
131
|
+
return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
|
|
132
|
+
<style>@page{size:${b}mm ${h}mm;margin:0}
|
|
133
|
+
body{margin:0;background:#e5e7eb}
|
|
134
|
+
.pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
|
|
135
|
+
@media print{body{background:#fff}}</style></head>
|
|
136
136
|
<body><div class="pagina">${body}</div></body></html>`;
|
|
137
137
|
}
|
|
@@ -82,7 +82,8 @@ export declare function formatteerBytes(n: number): string;
|
|
|
82
82
|
/**
|
|
83
83
|
* Logo's als ingebedde data-URL. Nodig bij afdrukken: een printvenster kan
|
|
84
84
|
* tijdelijke (ondertekende) URL's soms niet op tijd laden, waardoor het logo
|
|
85
|
-
* als kapotte afbeelding op papier komt.
|
|
85
|
+
* als kapotte afbeelding op papier komt. De afbeelding wordt eerst tot
|
|
86
|
+
* printformaat verkleind zodat de PDF-opdracht klein blijft.
|
|
86
87
|
*/
|
|
87
88
|
export declare function haalPrintLogos(): Promise<{
|
|
88
89
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logoLibrary.d.ts","sourceRoot":"","sources":["../../src/lib/logoLibrary.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAE1C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AAEX,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,UAE3C;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,eAAO,MAAM,qBAAqB,UAA6D,CAAC;AAEhG,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQlD;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CA2CpE;AAaD,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAOtD;AAED,wBAAgB,QAAQ;;;;EAmBvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAGzE;AAED,eAAO,MAAM,gBAAgB,QAEiD,CAAC;AAE/E,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAUnD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAInE;AAED,wBAAgB,aAAa,IAAI;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAa9F;AAcD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CA8BrE;AAUD,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,iBAOtE;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,iBAwBnE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,iBAKlD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,SAAS,iBAUjD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,UAKxC;
|
|
1
|
+
{"version":3,"file":"logoLibrary.d.ts","sourceRoot":"","sources":["../../src/lib/logoLibrary.ts"],"names":[],"mappings":"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"}
|
|
@@ -276,10 +276,50 @@ export function formatteerBytes(n) {
|
|
|
276
276
|
return `${(n / 1024).toFixed(1)} kB`;
|
|
277
277
|
return `${(n / 1024 / 1024).toFixed(1)} MB`;
|
|
278
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Maximale lange zijde van een ingebed printlogo. Een logo staat op papier
|
|
281
|
+
* hooguit enkele centimeters breed; 900 px is bij 300 dpi ruim voldoende.
|
|
282
|
+
* Zonder deze begrenzing gaat een origineel van meerdere megapixels als
|
|
283
|
+
* data-URL mee in de HTML, waardoor de PDF-server de opdracht niet meer
|
|
284
|
+
* aankan ("Internal server error").
|
|
285
|
+
*/
|
|
286
|
+
const PRINT_LOGO_MAX_PX = 900;
|
|
287
|
+
/** Verkleint een raster-data-URL tot printformaat. SVG blijft ongewijzigd. */
|
|
288
|
+
async function verkleinPrintLogo(dataUrl) {
|
|
289
|
+
if (typeof document === "undefined")
|
|
290
|
+
return dataUrl;
|
|
291
|
+
if (/^data:image\/svg/i.test(dataUrl))
|
|
292
|
+
return dataUrl;
|
|
293
|
+
try {
|
|
294
|
+
const img = await new Promise((resolve, reject) => {
|
|
295
|
+
const i = new Image();
|
|
296
|
+
i.onload = () => resolve(i);
|
|
297
|
+
i.onerror = () => reject(new Error("logo onleesbaar"));
|
|
298
|
+
i.src = dataUrl;
|
|
299
|
+
});
|
|
300
|
+
const langste = Math.max(img.naturalWidth, img.naturalHeight, 1);
|
|
301
|
+
if (langste <= PRINT_LOGO_MAX_PX && dataUrl.length < 400000)
|
|
302
|
+
return dataUrl;
|
|
303
|
+
const schaal = Math.min(1, PRINT_LOGO_MAX_PX / langste);
|
|
304
|
+
const c = document.createElement("canvas");
|
|
305
|
+
c.width = Math.max(1, Math.round(img.naturalWidth * schaal));
|
|
306
|
+
c.height = Math.max(1, Math.round(img.naturalHeight * schaal));
|
|
307
|
+
const ctx = c.getContext("2d");
|
|
308
|
+
if (!ctx)
|
|
309
|
+
return dataUrl;
|
|
310
|
+
ctx.drawImage(img, 0, 0, c.width, c.height);
|
|
311
|
+
const klein = c.toDataURL("image/png");
|
|
312
|
+
return klein.length < dataUrl.length ? klein : dataUrl;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return dataUrl;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
279
318
|
/**
|
|
280
319
|
* Logo's als ingebedde data-URL. Nodig bij afdrukken: een printvenster kan
|
|
281
320
|
* tijdelijke (ondertekende) URL's soms niet op tijd laden, waardoor het logo
|
|
282
|
-
* als kapotte afbeelding op papier komt.
|
|
321
|
+
* als kapotte afbeelding op papier komt. De afbeelding wordt eerst tot
|
|
322
|
+
* printformaat verkleind zodat de PDF-opdracht klein blijft.
|
|
283
323
|
*/
|
|
284
324
|
export async function haalPrintLogos() {
|
|
285
325
|
const logos = await haalLogos();
|
|
@@ -295,7 +335,7 @@ export async function haalPrintLogos() {
|
|
|
295
335
|
reader.onerror = () => reject(new Error("Logo kon niet worden gelezen"));
|
|
296
336
|
reader.readAsDataURL(data);
|
|
297
337
|
});
|
|
298
|
-
return { id: l.id, naam: l.naam, viewUrl: dataUrl };
|
|
338
|
+
return { id: l.id, naam: l.naam, viewUrl: await verkleinPrintLogo(dataUrl) };
|
|
299
339
|
}
|
|
300
340
|
catch {
|
|
301
341
|
return { id: l.id, naam: l.naam, viewUrl: l.viewUrl ?? null };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"orderData.server.d.ts","sourceRoot":"","sources":["../../src/lib/orderData.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAwBtD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAgCA;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG;IAC7C,KAAK,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAMA;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,OAAO,EACX,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7E,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CA6arB;AA+DD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG"}
|
|
@@ -210,6 +210,18 @@ export async function laadPakbonData(db, opties) {
|
|
|
210
210
|
for (const p of arr(data))
|
|
211
211
|
producten.set(String(p["id"]), p);
|
|
212
212
|
}
|
|
213
|
+
// --- traystickerafbeelding (gedeelde tabel, beheerd door de voorraadmodule) ---
|
|
214
|
+
// Alleen lezen. Ontbreekt de tabel of rij, dan blijft het veld leeg en
|
|
215
|
+
// tonen andere documentsoorten precies wat ze altijd al toonden.
|
|
216
|
+
const stickerUrls = new Map();
|
|
217
|
+
if (productIds.length) {
|
|
218
|
+
const data = await veilig(() => db.from("product_tray_stickers").select("product_id, bestand_url").in("product_id", productIds));
|
|
219
|
+
for (const s of arr(data)) {
|
|
220
|
+
const url = String(s["bestand_url"] ?? "").trim();
|
|
221
|
+
if (url)
|
|
222
|
+
stickerUrls.set(String(s["product_id"]), url);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
213
225
|
// --- verrijking vanuit Floriday-artikelcache ------------------------------
|
|
214
226
|
// `products.unit` is vrijwel altijd "stuks" en zegt niets over het fust.
|
|
215
227
|
// De echte fustsoort, potmaat en kleur staan in de Floriday-cache:
|
|
@@ -297,6 +309,7 @@ export async function laadPakbonData(db, opties) {
|
|
|
297
309
|
const unit = String(p["unit"] ?? "").trim();
|
|
298
310
|
return {
|
|
299
311
|
artikelnummer: String(p["article_number"] ?? ""),
|
|
312
|
+
afbeelding: stickerUrls.get(String(bron["product_id"] ?? "")) ?? "",
|
|
300
313
|
artikelnaam: taalTekst(bron["product_name"]) || taalTekst(p["product"]),
|
|
301
314
|
potmaat: String(extra["potmaat"] ??
|
|
302
315
|
extra["Potmaat"] ??
|
|
@@ -180,6 +180,32 @@ export interface DemoKar {
|
|
|
180
180
|
gedeeld?: boolean;
|
|
181
181
|
lagen: DemoLaag[];
|
|
182
182
|
}
|
|
183
|
+
export interface VolleKarStandInvoer {
|
|
184
|
+
documentnaam?: unknown;
|
|
185
|
+
volleKarren?: unknown;
|
|
186
|
+
cartIndex?: unknown;
|
|
187
|
+
cartTotal?: unknown;
|
|
188
|
+
/** Positie afgeleid uit de actuele, niet-geannuleerde taken in dezelfde printsessie. */
|
|
189
|
+
reeksIndex?: unknown;
|
|
190
|
+
}
|
|
191
|
+
export interface VolleKarStand {
|
|
192
|
+
index: number;
|
|
193
|
+
totaal: number;
|
|
194
|
+
label: string;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Bepaalt de canonieke positie binnen de reeks volle karren. De Engine kan in
|
|
198
|
+
* cartTotal ook een afsluitende deelkar meetellen en stuurde bij oudere K2-jobs
|
|
199
|
+
* soms opnieuw cartIndex 1. De opdrachtaanduiding K1/K2 en fullCarts zijn dan
|
|
200
|
+
* de betrouwbare bronnen.
|
|
201
|
+
*/
|
|
202
|
+
export declare function bepaalVolleKarStand(invoer: VolleKarStandInvoer): VolleKarStand | null;
|
|
203
|
+
/**
|
|
204
|
+
* Het karnummer zoals het in de karkop hoort te staan: bij een Engine-kar met
|
|
205
|
+
* bekende serie "1 van 3", anders het kale karnummer. Zo drukt een pakbon die
|
|
206
|
+
* per kar wordt uitgeprint nooit zomaar "KAR 1" terwijl er meerdere karren zijn.
|
|
207
|
+
*/
|
|
208
|
+
export declare function karKopNummer(kar: DemoKar): string;
|
|
183
209
|
export declare const DEMO_ORDER: {
|
|
184
210
|
order: {
|
|
185
211
|
nummer: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -864,6 +864,43 @@ export function sectieOnderdruktVoorVariant(type, methode, variant) {
|
|
|
864
864
|
return type === "pickmethode";
|
|
865
865
|
return type === "pickmethode" ? false : [...KAR_SECTIES, "orderregels"].includes(type);
|
|
866
866
|
}
|
|
867
|
+
/**
|
|
868
|
+
* Bepaalt de canonieke positie binnen de reeks volle karren. De Engine kan in
|
|
869
|
+
* cartTotal ook een afsluitende deelkar meetellen en stuurde bij oudere K2-jobs
|
|
870
|
+
* soms opnieuw cartIndex 1. De opdrachtaanduiding K1/K2 en fullCarts zijn dan
|
|
871
|
+
* de betrouwbare bronnen.
|
|
872
|
+
*/
|
|
873
|
+
export function bepaalVolleKarStand(invoer) {
|
|
874
|
+
const naamMatch = /-K(\d+)$/i.exec(String(invoer.documentnaam ?? "").trim());
|
|
875
|
+
const positieUitNaam = Number(naamMatch?.[1] ?? 0);
|
|
876
|
+
const positieUitReeks = Number(invoer.reeksIndex ?? 0);
|
|
877
|
+
const ruweIndex = Number(invoer.cartIndex ?? 0);
|
|
878
|
+
const volleKarren = Number(invoer.volleKarren ?? 0);
|
|
879
|
+
const ruweTotaal = Number(invoer.cartTotal ?? 0);
|
|
880
|
+
// De actuele reeks is doorslaggevend wanneer de Engine verschillende
|
|
881
|
+
// kar-ID's toch allemaal als K1 aanlevert. Naam en cartIndex blijven veilige
|
|
882
|
+
// terugvallen voor losse/herdrukte opdrachten zonder herkenbare printsessie.
|
|
883
|
+
const index = positieUitReeks > 0 ? positieUitReeks : positieUitNaam > 0 ? positieUitNaam : ruweIndex;
|
|
884
|
+
const totaal = volleKarren > 0 ? volleKarren : ruweTotaal;
|
|
885
|
+
if (!(index > 0) || !(totaal > 0))
|
|
886
|
+
return null;
|
|
887
|
+
if (index > totaal) {
|
|
888
|
+
throw new Error(`Ongeldige volle-karstand: kar ${index} valt buiten een reeks van ${totaal}.`);
|
|
889
|
+
}
|
|
890
|
+
return { index, totaal, label: `Kar ${index} van ${totaal}` };
|
|
891
|
+
}
|
|
892
|
+
/**
|
|
893
|
+
* Het karnummer zoals het in de karkop hoort te staan: bij een Engine-kar met
|
|
894
|
+
* bekende serie "1 van 3", anders het kale karnummer. Zo drukt een pakbon die
|
|
895
|
+
* per kar wordt uitgeprint nooit zomaar "KAR 1" terwijl er meerdere karren zijn.
|
|
896
|
+
*/
|
|
897
|
+
export function karKopNummer(kar) {
|
|
898
|
+
const index = Number(kar.cart_index ?? 0);
|
|
899
|
+
const totaal = Number(kar.cart_total ?? 0);
|
|
900
|
+
if (index > 0 && totaal > 1)
|
|
901
|
+
return `${index} van ${totaal}`;
|
|
902
|
+
return String(kar.karnummer);
|
|
903
|
+
}
|
|
867
904
|
const p = (nr, naam, potmaat, aantal, locatie, groep, kleur) => ({
|
|
868
905
|
artikelnummer: nr,
|
|
869
906
|
artikelnaam: naam,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,EAqBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAe,KAAK,IAAI,EAAmC,MAAM,kBAAkB,CAAC;AAE3F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,CAAC;AAomBF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA+EvE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmB9E"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// layout-engine (pakbonDocument.ts) bepaalt WAAR het terechtkomt. Er is geen
|
|
7
7
|
// tweede plek meer waar pakboninhoud wordt samengesteld.
|
|
8
8
|
// ============================================================================
|
|
9
|
-
import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
9
|
+
import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karKopNummer, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
10
|
import { karMetadata } from "./pakbonPresentation.js";
|
|
11
11
|
import { KLEUR_GRIJS } from "./pakbonDocument.js";
|
|
12
12
|
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
@@ -140,7 +140,7 @@ function laagKopFlow(s, laag, velden, bundel, basis) {
|
|
|
140
140
|
function karKopFlow(s, kar, velden, bundel, basis) {
|
|
141
141
|
const scheiding = optS(s, "scheiding", "kop");
|
|
142
142
|
const tekst = optS(s, "koptekst", "KAR {kar}")
|
|
143
|
-
.replace(/\{kar\}/g,
|
|
143
|
+
.replace(/\{kar\}/g, karKopNummer(kar))
|
|
144
144
|
.replace(/\{route\}/g, kar.route)
|
|
145
145
|
.replace(/\{chauffeur\}/g, kar.chauffeur)
|
|
146
146
|
.replace(/\{lagen\}/g, String(kar.lagen.length))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EAyBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AA4rBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAyDR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
|
|
8
8
|
// de afdruk altijd exact dezelfde secties — inclusief de orderregels.
|
|
9
9
|
// ============================================================================
|
|
10
|
-
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
|
+
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, 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";
|
|
@@ -346,7 +346,7 @@ const PRODUCT_LABELS = {
|
|
|
346
346
|
function karKop(s, kar, velden, bundelTekst = "") {
|
|
347
347
|
const scheiding = optS(s, "scheiding", "kop");
|
|
348
348
|
const tekst = optS(s, "koptekst", "KAR {kar}")
|
|
349
|
-
.replace(/\{kar\}/g,
|
|
349
|
+
.replace(/\{kar\}/g, karKopNummer(kar))
|
|
350
350
|
.replace(/\{route\}/g, kar.route)
|
|
351
351
|
.replace(/\{chauffeur\}/g, kar.chauffeur)
|
|
352
352
|
.replace(/\{lagen\}/g, String(kar.lagen.length))
|
|
@@ -751,64 +751,64 @@ export function renderPakbonDocument(config, order, opties = {}) {
|
|
|
751
751
|
// leest dit uit de meta, zodat de wachtrij niets extra hoeft door te geven.
|
|
752
752
|
const totalen = arr(leesPakbonConfig(config).secties).find((s) => s.type === "totalen");
|
|
753
753
|
const paginanummers = !!totalen && opt(totalen, "toon_paginanummer", false) === true;
|
|
754
|
-
return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
|
|
755
|
-
<meta name="pdf-paginanummers" content="${paginanummers ? "ja" : "nee"}" />
|
|
756
|
-
<title>${esc(opties.titel ?? "Pakbon")}</title>
|
|
757
|
-
|
|
758
|
-
<style>
|
|
759
|
-
@page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
|
|
760
|
-
* { box-sizing: border-box; }
|
|
761
|
-
html, body { margin: 0; padding: 0; }
|
|
762
|
-
body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
|
|
763
|
-
.pakbonvariant { border-top: 0.6mm solid #111827; border-bottom: 0.6mm solid #111827; padding: 2mm 1mm; margin-bottom: 2mm; text-align: center; font-size: 15pt; font-weight: 800; line-height: 1.1; }
|
|
764
|
-
.blok { margin-bottom: 2mm; }
|
|
765
|
-
.sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
|
|
766
|
-
.fustgroepkop { display: flex; justify-content: space-between; font-weight: 600; color: #111827; border-bottom: 0.45mm solid #111827; padding-bottom: 0.5mm; margin-bottom: 0.6mm; }
|
|
767
|
-
|
|
768
|
-
.vet { font-weight: 600; }
|
|
769
|
-
.kv { display: flex; justify-content: space-between; gap: 3mm; }
|
|
770
|
-
.kv .k { color: #6b7280; }
|
|
771
|
-
.kv .v { font-weight: 500; }
|
|
772
|
-
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
|
|
773
|
-
.kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
|
|
774
|
-
table.regels { width: 100%; border-collapse: collapse; }
|
|
775
|
-
table.regels.vast { table-layout: fixed; }
|
|
776
|
-
table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
|
|
777
|
-
table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
|
|
778
|
-
table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
|
|
779
|
-
.rand { border: 0.2mm solid #d1d5db; }
|
|
780
|
-
.onder { border-bottom: 0.2mm solid #d1d5db; }
|
|
781
|
-
table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
|
|
782
|
-
tr.zebra td { background: #f3f4f6; }
|
|
783
|
-
.plijst { margin: 0; padding-left: 4mm; }
|
|
784
|
-
.groep { margin-bottom: 1.5mm; }
|
|
785
|
-
.regelrij { display: flex; gap: 2mm; }
|
|
786
|
-
.tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
|
|
787
|
-
.karblok { margin-bottom: 2mm; }
|
|
788
|
-
.karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
|
|
789
|
-
.karkop { display: block; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; overflow-wrap: anywhere; }
|
|
790
|
-
.karkop-titel { font-weight: 700; }
|
|
791
|
-
.karkop-meta { margin-top: 0.4mm; font-size: 78%; font-weight: 400; color: #4b5563; overflow-wrap: anywhere; }
|
|
792
|
-
.bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
|
|
793
|
-
.laag { margin-bottom: 1.5mm; }
|
|
794
|
-
.laagkop { display: block; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; overflow-wrap: anywhere; }
|
|
795
|
-
.laagkop-meta { margin-top: 0.25mm; font-size: 82%; font-weight: 400; color: #4b5563; overflow-wrap: anywhere; }
|
|
796
|
-
.laagkop.compact { border-bottom: none; }
|
|
797
|
-
.meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
|
|
798
|
-
.totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
|
|
799
|
-
.paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; border-top: 0.35mm solid #9ca3af; padding-top: 1mm; }
|
|
800
|
-
.handtekening { margin-top: 3mm; }
|
|
801
|
-
.lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
|
|
802
|
-
.lijnveld.hoog { padding-bottom: 10mm; }
|
|
803
|
-
.lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
|
|
804
|
-
.balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
|
|
805
|
-
.qr { border: 0.25mm dashed #9ca3af; }
|
|
806
|
-
.barcode { display:flex; flex-direction:column; align-items:center; gap:0.8mm; } .barcode-bars { width:45mm; display:flex; background:#fff; }
|
|
807
|
-
.klein { font-size: 85%; color: #6b7280; }
|
|
808
|
-
.breekvoor { break-before: page; page-break-before: always; }
|
|
809
|
-
.heelhouden { break-inside: avoid; page-break-inside: avoid; }
|
|
810
|
-
img { max-width: 100%; }
|
|
811
|
-
</style></head>
|
|
754
|
+
return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
|
|
755
|
+
<meta name="pdf-paginanummers" content="${paginanummers ? "ja" : "nee"}" />
|
|
756
|
+
<title>${esc(opties.titel ?? "Pakbon")}</title>
|
|
757
|
+
|
|
758
|
+
<style>
|
|
759
|
+
@page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
|
|
760
|
+
* { box-sizing: border-box; }
|
|
761
|
+
html, body { margin: 0; padding: 0; }
|
|
762
|
+
body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
|
|
763
|
+
.pakbonvariant { border-top: 0.6mm solid #111827; border-bottom: 0.6mm solid #111827; padding: 2mm 1mm; margin-bottom: 2mm; text-align: center; font-size: 15pt; font-weight: 800; line-height: 1.1; }
|
|
764
|
+
.blok { margin-bottom: 2mm; }
|
|
765
|
+
.sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
|
|
766
|
+
.fustgroepkop { display: flex; justify-content: space-between; font-weight: 600; color: #111827; border-bottom: 0.45mm solid #111827; padding-bottom: 0.5mm; margin-bottom: 0.6mm; }
|
|
767
|
+
|
|
768
|
+
.vet { font-weight: 600; }
|
|
769
|
+
.kv { display: flex; justify-content: space-between; gap: 3mm; }
|
|
770
|
+
.kv .k { color: #6b7280; }
|
|
771
|
+
.kv .v { font-weight: 500; }
|
|
772
|
+
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
|
|
773
|
+
.kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
|
|
774
|
+
table.regels { width: 100%; border-collapse: collapse; }
|
|
775
|
+
table.regels.vast { table-layout: fixed; }
|
|
776
|
+
table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
|
|
777
|
+
table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
|
|
778
|
+
table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
|
|
779
|
+
.rand { border: 0.2mm solid #d1d5db; }
|
|
780
|
+
.onder { border-bottom: 0.2mm solid #d1d5db; }
|
|
781
|
+
table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
|
|
782
|
+
tr.zebra td { background: #f3f4f6; }
|
|
783
|
+
.plijst { margin: 0; padding-left: 4mm; }
|
|
784
|
+
.groep { margin-bottom: 1.5mm; }
|
|
785
|
+
.regelrij { display: flex; gap: 2mm; }
|
|
786
|
+
.tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
|
|
787
|
+
.karblok { margin-bottom: 2mm; }
|
|
788
|
+
.karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
|
|
789
|
+
.karkop { display: block; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; overflow-wrap: anywhere; }
|
|
790
|
+
.karkop-titel { font-weight: 700; }
|
|
791
|
+
.karkop-meta { margin-top: 0.4mm; font-size: 78%; font-weight: 400; color: #4b5563; overflow-wrap: anywhere; }
|
|
792
|
+
.bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
|
|
793
|
+
.laag { margin-bottom: 1.5mm; }
|
|
794
|
+
.laagkop { display: block; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; overflow-wrap: anywhere; }
|
|
795
|
+
.laagkop-meta { margin-top: 0.25mm; font-size: 82%; font-weight: 400; color: #4b5563; overflow-wrap: anywhere; }
|
|
796
|
+
.laagkop.compact { border-bottom: none; }
|
|
797
|
+
.meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
|
|
798
|
+
.totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
|
|
799
|
+
.paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; border-top: 0.35mm solid #9ca3af; padding-top: 1mm; }
|
|
800
|
+
.handtekening { margin-top: 3mm; }
|
|
801
|
+
.lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
|
|
802
|
+
.lijnveld.hoog { padding-bottom: 10mm; }
|
|
803
|
+
.lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
|
|
804
|
+
.balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
|
|
805
|
+
.qr { border: 0.25mm dashed #9ca3af; }
|
|
806
|
+
.barcode { display:flex; flex-direction:column; align-items:center; gap:0.8mm; } .barcode-bars { width:45mm; display:flex; background:#fff; }
|
|
807
|
+
.klein { font-size: 85%; color: #6b7280; }
|
|
808
|
+
.breekvoor { break-before: page; page-break-before: always; }
|
|
809
|
+
.heelhouden { break-inside: avoid; page-break-inside: avoid; }
|
|
810
|
+
img { max-width: 100%; }
|
|
811
|
+
</style></head>
|
|
812
812
|
<body>${body}</body></html>`;
|
|
813
813
|
}
|
|
814
814
|
/** Handig voor testen: het document met de voorbeeldgegevens. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"pakbonPresentation.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonPresentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoBpE"}
|
|
@@ -19,10 +19,8 @@ export function karMetadata(kar, velden) {
|
|
|
19
19
|
info.push(kar.route);
|
|
20
20
|
if (kar.gedeeld)
|
|
21
21
|
info.push("gedeelde kar");
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (label)
|
|
25
|
-
info.push(label);
|
|
22
|
+
// De karstand hoort in de grote karkop (`KAR 2 van 2`), niet nogmaals in
|
|
23
|
+
// deze metaregel. Anders verschijnt dezelfde telling op twee plekken.
|
|
26
24
|
if (kar.cart_id)
|
|
27
25
|
info.push(`ID ${kar.cart_id}`);
|
|
28
26
|
if (kar.cart_items?.length)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfJobSaver.d.ts","sourceRoot":"","sources":["../../src/lib/pdfJobSaver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAgC5C,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,uBAAuB,CAAC,EAAE,eAAe,CAAC;KAC3C;CACF;
|
|
1
|
+
{"version":3,"file":"pdfJobSaver.d.ts","sourceRoot":"","sources":["../../src/lib/pdfJobSaver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAgC5C,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,uBAAuB,CAAC,EAAE,eAAe,CAAC;KAC3C;CACF;AA8OD,8EAA8E;AAC9E,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCzE;AAED,mFAAmF;AACnF,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBvF;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,eAAe,GAAG,cAAc,CAAC,CAI1G;AAoCD,wBAAgB,kBAAkB,IAAI,IAAI,CA+BzC;AAED,kFAAkF;AAClF,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAehG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { toast } from "@flowselections/core";
|
|
2
2
|
import { supabase } from "./supabaseClient.js";
|
|
3
3
|
import { startPdfMapGlobaleBanner } from "../components/PdfMapGlobaleBanner.js";
|
|
4
|
-
import { bewaarInPdfMap, herstelPdfMapToestemming, koppelPdfMapAanPrintplek, luisterNaarPdfMapWijziging, lokalePdfPrintplek, pdfMapKoppeling, pdfMapToestemming, } from "./pdfMap.js";
|
|
4
|
+
import { bewaarInPdfMap, herstelPdfMapToestemming, koppelPdfMapAanPrintplek, luisterNaarPdfMapWijziging, lokalePdfPrintplek, pdfMapKoppeling, pdfMapToestemming, verwijderUitPdfMap, } from "./pdfMap.js";
|
|
5
5
|
import { PDF_OPSLAG_MELDING } from "./pdfOpslagStatus.js";
|
|
6
6
|
const SERVICE_INTERVAL_MS = 5000;
|
|
7
7
|
const WACHT_INTERVAL_MS = 2000;
|
|
@@ -62,9 +62,21 @@ async function geefClaimTerug(jobId, schrijver) {
|
|
|
62
62
|
if (error)
|
|
63
63
|
console.warn("[layout-maker] PDF-opdracht teruggeven mislukt", error.message);
|
|
64
64
|
}
|
|
65
|
+
/** Is deze opdracht net geannuleerd? Annuleren wint altijd van een lopende claim. */
|
|
66
|
+
async function isGeannuleerd(jobId) {
|
|
67
|
+
const { data } = await supabase
|
|
68
|
+
.from("print_jobs")
|
|
69
|
+
.select("status")
|
|
70
|
+
.eq("id", jobId)
|
|
71
|
+
.maybeSingle();
|
|
72
|
+
return data?.status === "geannuleerd";
|
|
73
|
+
}
|
|
65
74
|
async function schrijfGeclaimdePdf(job, schrijver) {
|
|
66
75
|
if (!job.printer_id || (!job.artefact_pad && !job.resultaat_pdf_base64))
|
|
67
76
|
return false;
|
|
77
|
+
// Race met de annuleerknop: controleer vlak vóór het schrijven opnieuw.
|
|
78
|
+
if (await isGeannuleerd(job.id))
|
|
79
|
+
return true;
|
|
68
80
|
const toestemming = await pdfMapToestemming(job.printer_id);
|
|
69
81
|
if (toestemming !== "granted") {
|
|
70
82
|
// Geen map of geen schrijfrecht op dít tabblad: terug in de wachtrij.
|
|
@@ -83,9 +95,26 @@ async function schrijfGeclaimdePdf(job, schrijver) {
|
|
|
83
95
|
await rondClaimAf(job.id, schrijver, "schrijffout", PDF_OPSLAG_MELDING.schrijffout);
|
|
84
96
|
return false;
|
|
85
97
|
}
|
|
98
|
+
// Annulering tijdens het schrijven: haal het bestand meteen weer weg en
|
|
99
|
+
// bevestig niets meer aan de database. Annuleren wint altijd.
|
|
100
|
+
if (await isGeannuleerd(job.id)) {
|
|
101
|
+
await verwijderUitPdfMap(job.printer_id, naam);
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
86
104
|
// Eerst het bestand sluiten, daarna pas de database bevestigen. Een fout in
|
|
87
105
|
// deze bevestiging wordt nooit meer genegeerd of als succes aan de UI gemeld.
|
|
88
|
-
|
|
106
|
+
try {
|
|
107
|
+
await rondClaimAf(job.id, schrijver, "opgeslagen");
|
|
108
|
+
}
|
|
109
|
+
catch (fout) {
|
|
110
|
+
// Was de opdracht ondertussen geannuleerd, dan is de mislukte bevestiging
|
|
111
|
+
// juist de bedoeling: bestand weghalen en stilletjes afronden.
|
|
112
|
+
if (await isGeannuleerd(job.id)) {
|
|
113
|
+
await verwijderUitPdfMap(job.printer_id, naam);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
throw fout;
|
|
117
|
+
}
|
|
89
118
|
return true;
|
|
90
119
|
}
|
|
91
120
|
async function bepaalEigenPrintplek() {
|
package/dist-lib/lib/pdfMap.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ type MapHandle = {
|
|
|
14
14
|
close: () => Promise<void>;
|
|
15
15
|
}>;
|
|
16
16
|
}>;
|
|
17
|
+
removeEntry?: (naam: string) => Promise<void>;
|
|
17
18
|
};
|
|
18
19
|
export type PdfMapKoppeling = {
|
|
19
20
|
versie: 1;
|
|
@@ -71,6 +72,12 @@ export declare function pdfMapNaam(printerId: string): Promise<string | null>;
|
|
|
71
72
|
* de functie false terug en kan de aanroeper gewoon downloaden.
|
|
72
73
|
*/
|
|
73
74
|
export declare function bewaarInPdfMap(printerId: string, bestandsnaam: string, blob: Blob): Promise<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Verwijdert een zojuist weggeschreven bestand weer, bijvoorbeeld wanneer de
|
|
77
|
+
* opdracht tijdens het schrijven is geannuleerd. Lukt het niet, dan blijft het
|
|
78
|
+
* bestand staan en geeft de functie false terug.
|
|
79
|
+
*/
|
|
80
|
+
export declare function verwijderUitPdfMap(printerId: string, bestandsnaam: string): Promise<boolean>;
|
|
74
81
|
/** Controleert toestemming zonder een bestandsactie te starten. */
|
|
75
82
|
export declare function pdfMapToestemming(printerId: string): Promise<"granted" | "prompt" | "denied" | "ontbreekt">;
|
|
76
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfMap.d.ts","sourceRoot":"","sources":["../../src/lib/pdfMap.ts"],"names":[],"mappings":"AAeA,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,aAAa,EAAE,CACb,IAAI,EAAE,MAAM,EACZ,CAAC,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KACrB,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,OAAO,CAAC;YAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pdfMap.d.ts","sourceRoot":"","sources":["../../src/lib/pdfMap.ts"],"names":[],"mappings":"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"}
|