@flowselections/layout-maker 1.69.5 → 1.69.8
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/dist-lib/components/AfleverbriefBuilderPage.d.ts.map +1 -1
- package/dist-lib/components/AfleverbriefBuilderPage.js +16 -8
- package/dist-lib/components/BlokOntwerperPage.d.ts.map +1 -1
- package/dist-lib/components/BlokOntwerperPage.js +15 -8
- package/dist-lib/components/FormaatOrientatieBar.d.ts +2 -1
- package/dist-lib/components/FormaatOrientatieBar.d.ts.map +1 -1
- package/dist-lib/components/FormaatOrientatieBar.js +6 -4
- package/dist-lib/components/PakbonBuilderPage.d.ts.map +1 -1
- package/dist-lib/components/PakbonBuilderPage.js +16 -8
- package/dist-lib/components/ProductiebonBuilderPage.d.ts.map +1 -1
- package/dist-lib/components/ProductiebonBuilderPage.js +16 -10
- package/dist-lib/components/SysteemLayoutMelding.d.ts +6 -0
- package/dist-lib/components/SysteemLayoutMelding.d.ts.map +1 -0
- package/dist-lib/components/SysteemLayoutMelding.js +29 -0
- package/dist-lib/integrations/supabase/types.d.ts +220 -10
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -1
- package/dist-lib/lib/htmlPdf.server.js +46 -4
- package/dist-lib/lib/layoutOpslaan.d.ts +16 -0
- package/dist-lib/lib/layoutOpslaan.d.ts.map +1 -0
- package/dist-lib/lib/layoutOpslaan.js +56 -0
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +7 -3
- package/dist-lib/lib/pakbonBuilder.d.ts +13 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +49 -5
- package/dist-lib/lib/pakbonHtml.d.ts +2 -0
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +35 -7
- package/dist-lib/lib/useDocumentData.d.ts +1 -0
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +9 -2
- package/dist-lib/lib/versie.generated.d.ts +1 -1
- package/dist-lib/lib/versie.generated.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAcA,iFAAiF;AACjF,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,IAAI,SAA0B;CAC/B;AACD,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAUD,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AA2BD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgClD;AAqBD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAiBlE;AAKD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAcA,iFAAiF;AACjF,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,IAAI,SAA0B;CAC/B;AACD,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAUD,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AA2BD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAgClD;AAqBD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAiBlE;AAKD,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,mDAAmD;IACnD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA8rCD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CA8BtE;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0GrF;AAmCD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD"}
|
|
@@ -345,6 +345,8 @@ class Tekenaar {
|
|
|
345
345
|
this.vet = vet;
|
|
346
346
|
this.paginas = [];
|
|
347
347
|
this.voetHoogte = 0;
|
|
348
|
+
/** Hoogte van de herhaalkop (.paginakop) die bovenaan elke pagina staat. */
|
|
349
|
+
this.kopHoogte = 0;
|
|
348
350
|
this.voetTekenaar = null;
|
|
349
351
|
/** Zolang dit aanstaat komt er geen nieuwe pagina bij (voet tekenen). */
|
|
350
352
|
this.vast = false;
|
|
@@ -368,21 +370,29 @@ class Tekenaar {
|
|
|
368
370
|
this.voetHoogte = hoogte;
|
|
369
371
|
this.voetTekenaar = teken;
|
|
370
372
|
}
|
|
373
|
+
/** Reserveert bovenaan iedere pagina ruimte voor de herhaalkop. */
|
|
374
|
+
zetKop(hoogte) {
|
|
375
|
+
const bovenaan = this.y >= this.hoogte - this.marge - this.kopHoogte - 0.01;
|
|
376
|
+
this.kopHoogte = hoogte;
|
|
377
|
+
if (bovenaan)
|
|
378
|
+
this.y = this.hoogte - this.marge - hoogte;
|
|
379
|
+
}
|
|
371
380
|
nieuwePagina() {
|
|
372
381
|
if (this.vast)
|
|
373
382
|
return;
|
|
374
383
|
this.pagina = this.pdf.addPage([this.breedte, this.hoogte]);
|
|
375
384
|
this.paginas.push(this.pagina);
|
|
376
|
-
this.y = this.hoogte - this.marge;
|
|
385
|
+
this.y = this.hoogte - this.marge - this.kopHoogte;
|
|
377
386
|
}
|
|
378
387
|
zorgVoor(h) {
|
|
379
|
-
if (h <= this.ruimte || this.y >= this.hoogte - this.marge - 0.01)
|
|
388
|
+
if (h <= this.ruimte || this.y >= this.hoogte - this.marge - this.kopHoogte - 0.01)
|
|
380
389
|
return;
|
|
381
390
|
this.nieuwePagina();
|
|
382
391
|
}
|
|
383
392
|
/** Tekent op een wegwerp-pagina om de exacte hoogte te meten. */
|
|
384
393
|
async meet(teken) {
|
|
385
|
-
const bewaard = { pagina: this.pagina, y: this.y, paginas: this.paginas, voet: this.voetHoogte };
|
|
394
|
+
const bewaard = { pagina: this.pagina, y: this.y, paginas: this.paginas, voet: this.voetHoogte, kop: this.kopHoogte };
|
|
395
|
+
this.kopHoogte = 0;
|
|
386
396
|
const hoog = 20000;
|
|
387
397
|
const tijdelijk = this.pdf.addPage([this.breedte, hoog]);
|
|
388
398
|
this.pagina = tijdelijk;
|
|
@@ -405,11 +415,13 @@ class Tekenaar {
|
|
|
405
415
|
this.y = bewaard.y;
|
|
406
416
|
this.paginas = bewaard.paginas;
|
|
407
417
|
this.voetHoogte = bewaard.voet;
|
|
418
|
+
this.kopHoogte = bewaard.kop;
|
|
408
419
|
return hoogte;
|
|
409
420
|
}
|
|
410
421
|
/** Tekent iets op een bestaande pagina, bijvoorbeeld de vaste voet. */
|
|
411
422
|
async opPagina(p, y, teken) {
|
|
412
|
-
const bewaard = { pagina: this.pagina, y: this.y, paginas: this.paginas, voet: this.voetHoogte };
|
|
423
|
+
const bewaard = { pagina: this.pagina, y: this.y, paginas: this.paginas, voet: this.voetHoogte, kop: this.kopHoogte };
|
|
424
|
+
this.kopHoogte = 0;
|
|
413
425
|
this.pagina = p;
|
|
414
426
|
this.y = y;
|
|
415
427
|
this.paginas = [p];
|
|
@@ -425,6 +437,7 @@ class Tekenaar {
|
|
|
425
437
|
this.y = bewaard.y;
|
|
426
438
|
this.paginas = bewaard.paginas;
|
|
427
439
|
this.voetHoogte = bewaard.voet;
|
|
440
|
+
this.kopHoogte = bewaard.kop;
|
|
428
441
|
this.vast = false;
|
|
429
442
|
}
|
|
430
443
|
rondAf() {
|
|
@@ -1423,7 +1436,26 @@ export async function htmlNaarPdfBytes(opties) {
|
|
|
1423
1436
|
voetHoogte = await tk.meet(() => tekenKinderen(ctx, voetOuder, voetVak, stijl));
|
|
1424
1437
|
tk.zetVoet(voetHoogte + 2 * MM, () => { });
|
|
1425
1438
|
}
|
|
1439
|
+
// herhaalkop (kopblokken "op iedere pakbon / pagina") — spiegelbeeld van
|
|
1440
|
+
// de voet: één keer gemeten, die hoogte gaat bovenaan elke pagina van het
|
|
1441
|
+
// afdrukgebied af, zodat de inhoud eronder begint en niets overlapt.
|
|
1442
|
+
const kopKnoop = zoekKlasse(wortel, "paginakop");
|
|
1443
|
+
const kopOuder = kopKnoop ? { tag: "div", attrs: {}, kinderen: [kopKnoop] } : null;
|
|
1444
|
+
if (kopOuder) {
|
|
1445
|
+
verwijder(wortel, kopKnoop);
|
|
1446
|
+
const kopHoogte = await tk.meet(() => tekenKinderen(ctx, kopOuder, voetVak, stijl));
|
|
1447
|
+
const vrij = hoogte - marge * 2 - (voetOuder ? voetHoogte + 2 * MM : 0) - kopHoogte - 1 * MM;
|
|
1448
|
+
if (vrij < 20 * MM) {
|
|
1449
|
+
throw new Error("Afdrukafwijking gevonden: de herhaalde kopblokken en de paginavoet zijn samen te hoog voor deze pagina.");
|
|
1450
|
+
}
|
|
1451
|
+
tk.zetKop(kopHoogte + 1 * MM);
|
|
1452
|
+
}
|
|
1426
1453
|
await tekenKinderen(ctx, wortel, { x: marge, breedte: breedte - marge * 2 }, stijl);
|
|
1454
|
+
if (kopOuder) {
|
|
1455
|
+
for (const p of [...tk.paginas]) {
|
|
1456
|
+
await tk.opPagina(p, hoogte - marge, () => tekenKinderen(ctx, kopOuder, voetVak, stijl));
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1427
1459
|
if (voetOuder) {
|
|
1428
1460
|
for (const p of [...tk.paginas]) {
|
|
1429
1461
|
await tk.opPagina(p, marge + voetHoogte + 1 * MM, () => tekenKinderen(ctx, voetOuder, voetVak, stijl));
|
|
@@ -1453,6 +1485,16 @@ function basisGrootte(html) {
|
|
|
1453
1485
|
const n = m ? Number(m[1]) : NaN;
|
|
1454
1486
|
return Number.isFinite(n) && n > 3 && n < 30 ? n : 8.5;
|
|
1455
1487
|
}
|
|
1488
|
+
function zoekKlasse(n, klasse) {
|
|
1489
|
+
for (const k of n.kinderen) {
|
|
1490
|
+
if (heeft(k, klasse))
|
|
1491
|
+
return k;
|
|
1492
|
+
const diep = zoekKlasse(k, klasse);
|
|
1493
|
+
if (diep)
|
|
1494
|
+
return diep;
|
|
1495
|
+
}
|
|
1496
|
+
return null;
|
|
1497
|
+
}
|
|
1456
1498
|
function zoekVoet(n) {
|
|
1457
1499
|
for (const k of n.kinderen) {
|
|
1458
1500
|
if (heeft(k, "paginavoet"))
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** JSON met gesorteerde sleutels: jsonb verandert de volgorde, dat is geen verschil. */
|
|
2
|
+
export declare function genormaliseerd(waarde: unknown): string;
|
|
3
|
+
export declare function zelfdeIndeling(a: unknown, b: unknown): boolean;
|
|
4
|
+
export declare const NIET_BEVESTIGD = "Opslaan niet bevestigd: database gaf iets anders terug";
|
|
5
|
+
/**
|
|
6
|
+
* Schrijft één indeling onder een vaste sleutel, leest de layout opnieuw uit
|
|
7
|
+
* de database en geeft pas succes als de teruggelezen indeling gelijk is.
|
|
8
|
+
*/
|
|
9
|
+
export declare function bewaarIndeling(layoutId: string, huidigeConfig: Record<string, unknown> | null | undefined, sleutel: string, indeling: unknown): Promise<Record<string, unknown>>;
|
|
10
|
+
/** Succesmelding; noemt een mislukt voorbeeld zonder het opslaan te blokkeren. */
|
|
11
|
+
export declare function opgeslagenMelding(basis: string, controle: "controleren" | "gereed" | "afwijking", fout?: string | null): {
|
|
12
|
+
soort: "succes" | "waarschuwing";
|
|
13
|
+
tekst: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function foutTekstVan(e: unknown, standaard?: string): string;
|
|
16
|
+
//# sourceMappingURL=layoutOpslaan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutOpslaan.d.ts","sourceRoot":"","sources":["../../src/lib/layoutOpslaan.ts"],"names":[],"mappings":"AAGA,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAetD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,eAAO,MAAM,cAAc,2DAA2D,CAAC;AAEvF;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACzD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,aAAa,GAAG,QAAQ,GAAG,WAAW,EAChD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GACnB;IAAE,KAAK,EAAE,QAAQ,GAAG,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKrD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,SAAoB,GAAG,MAAM,CAI9E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { supabase } from "./supabaseClient.js";
|
|
2
|
+
import { updateLayout } from "./useDocumentData.js";
|
|
3
|
+
/** JSON met gesorteerde sleutels: jsonb verandert de volgorde, dat is geen verschil. */
|
|
4
|
+
export function genormaliseerd(waarde) {
|
|
5
|
+
const sorteer = (v) => {
|
|
6
|
+
if (Array.isArray(v))
|
|
7
|
+
return v.map(sorteer);
|
|
8
|
+
if (v && typeof v === "object") {
|
|
9
|
+
return Object.keys(v)
|
|
10
|
+
.sort()
|
|
11
|
+
.reduce((acc, k) => {
|
|
12
|
+
const w = v[k];
|
|
13
|
+
if (w !== undefined)
|
|
14
|
+
acc[k] = sorteer(w);
|
|
15
|
+
return acc;
|
|
16
|
+
}, {});
|
|
17
|
+
}
|
|
18
|
+
return v;
|
|
19
|
+
};
|
|
20
|
+
return JSON.stringify(sorteer(waarde) ?? null);
|
|
21
|
+
}
|
|
22
|
+
export function zelfdeIndeling(a, b) {
|
|
23
|
+
return genormaliseerd(a) === genormaliseerd(b);
|
|
24
|
+
}
|
|
25
|
+
export const NIET_BEVESTIGD = "Opslaan niet bevestigd: database gaf iets anders terug";
|
|
26
|
+
/**
|
|
27
|
+
* Schrijft één indeling onder een vaste sleutel, leest de layout opnieuw uit
|
|
28
|
+
* de database en geeft pas succes als de teruggelezen indeling gelijk is.
|
|
29
|
+
*/
|
|
30
|
+
export async function bewaarIndeling(layoutId, huidigeConfig, sleutel, indeling) {
|
|
31
|
+
await updateLayout(layoutId, { config: { ...(huidigeConfig ?? {}), [sleutel]: indeling } });
|
|
32
|
+
const { data, error } = await supabase
|
|
33
|
+
.from("document_layouts")
|
|
34
|
+
.select("config")
|
|
35
|
+
.eq("id", layoutId)
|
|
36
|
+
.maybeSingle();
|
|
37
|
+
if (error)
|
|
38
|
+
throw error;
|
|
39
|
+
const config = (data?.config ?? {});
|
|
40
|
+
if (!zelfdeIndeling(config[sleutel], indeling))
|
|
41
|
+
throw new Error(NIET_BEVESTIGD);
|
|
42
|
+
return config;
|
|
43
|
+
}
|
|
44
|
+
/** Succesmelding; noemt een mislukt voorbeeld zonder het opslaan te blokkeren. */
|
|
45
|
+
export function opgeslagenMelding(basis, controle, fout) {
|
|
46
|
+
if (controle === "gereed")
|
|
47
|
+
return { soort: "succes", tekst: basis };
|
|
48
|
+
const reden = fout?.trim() || (controle === "controleren" ? "het voorbeeld wordt nog gemaakt" : "afwijking in de afdrukcontrole");
|
|
49
|
+
return { soort: "waarschuwing", tekst: `Opgeslagen, maar het voorbeeld kon niet worden gemaakt: ${reden}` };
|
|
50
|
+
}
|
|
51
|
+
export function foutTekstVan(e, standaard = "Opslaan mislukt") {
|
|
52
|
+
if (e instanceof Error && e.message)
|
|
53
|
+
return e.message;
|
|
54
|
+
const m = e?.message;
|
|
55
|
+
return typeof m === "string" && m ? m : standaard;
|
|
56
|
+
}
|
|
@@ -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,CA0oBrB;AAkHD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAGhG;AAcD,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAIzD"}
|
|
@@ -481,7 +481,10 @@ export async function laadPakbonData(db, opties) {
|
|
|
481
481
|
};
|
|
482
482
|
});
|
|
483
483
|
};
|
|
484
|
-
|
|
484
|
+
// Aantal planten op een karregel = fusten × planten per fust. Ontbreekt een
|
|
485
|
+
// van beide, dan blijft het leeg met een melding: geen terugval op "boxes"
|
|
486
|
+
// (eenheid onbekend) en geen stille standaard.
|
|
487
|
+
const maakProduct = (bron, aantalPlanten, fusten, perFust, aantalOnbekend = false) => {
|
|
485
488
|
const p = producten.get(String(bron["product_id"] ?? "")) ?? {};
|
|
486
489
|
const extra = (p["custom_fields"] ?? {});
|
|
487
490
|
const unit = String(p["unit"] ?? "").trim();
|
|
@@ -520,6 +523,7 @@ export async function laadPakbonData(db, opties) {
|
|
|
520
523
|
planten_per_fust: perFust,
|
|
521
524
|
sticker: stickerWaarde(regelVan(bron), () => stickerVoor(orderVan(bron), p)),
|
|
522
525
|
onderdelen: onderdelenVoor(bron, p, aantalPlanten),
|
|
526
|
+
...(aantalOnbekend ? { aantal_onbekend: true } : {}),
|
|
523
527
|
};
|
|
524
528
|
};
|
|
525
529
|
// --- karren met lagen -----------------------------------------------------
|
|
@@ -544,7 +548,7 @@ export async function laadPakbonData(db, opties) {
|
|
|
544
548
|
laag = { producten: [], ruimte: 0 };
|
|
545
549
|
perLaag.set(nummer, laag);
|
|
546
550
|
}
|
|
547
|
-
laag.producten.push(maakProduct(item, fusten * perFust
|
|
551
|
+
laag.producten.push(maakProduct(item, fusten * perFust, fusten, perFust, !(fusten > 0 && perFust > 0)));
|
|
548
552
|
laag.ruimte += deel;
|
|
549
553
|
}
|
|
550
554
|
const hoogste = Math.max(maxLagen, ...perLaag.keys());
|
|
@@ -562,7 +566,7 @@ export async function laadPakbonData(db, opties) {
|
|
|
562
566
|
(perLaag > 0 ? fusten / perLaag : 0) ||
|
|
563
567
|
(num(item["layer_share_pct"]) ? num(item["layer_share_pct"]) / 100 : 0) ||
|
|
564
568
|
1;
|
|
565
|
-
const product = maakProduct(item, fusten * perFust
|
|
569
|
+
const product = maakProduct(item, fusten * perFust, fusten, perFust, !(fusten > 0 && perFust > 0));
|
|
566
570
|
if (!huidige || huidige.ruimte + deel > 1.0001) {
|
|
567
571
|
huidige = { producten: [], ruimte: 0 };
|
|
568
572
|
lagen.push(huidige);
|
|
@@ -47,6 +47,11 @@ export declare const ONDERDEEL_VELD_OPTIES: {
|
|
|
47
47
|
label: string;
|
|
48
48
|
}[];
|
|
49
49
|
export declare const ONDERDEEL_VELDEN_STANDAARD: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Label op papier. Bewust los van het editorlabel: in de editor heet "aantal"
|
|
52
|
+
* "Aantal planten", maar de afgedrukte kop blijft "Aantal" zodat bestaande
|
|
53
|
+
* layouts er exact hetzelfde uitzien.
|
|
54
|
+
*/
|
|
50
55
|
export declare function kolomLabel(key: string): string;
|
|
51
56
|
export declare function nieuweKolom(key: string): PakbonKolom;
|
|
52
57
|
/**
|
|
@@ -107,6 +112,12 @@ export declare function fustRegels(karren: unknown, opties?: {
|
|
|
107
112
|
comprimeren?: boolean;
|
|
108
113
|
sortering?: string;
|
|
109
114
|
}): FustRegel[];
|
|
115
|
+
/** Waarden van `opties.herhalen` op de kopblokken; ontbreekt = "document". */
|
|
116
|
+
export type KopHerhalen = "document" | "eerste_per_kar" | "elke_pagina";
|
|
117
|
+
export declare const HERHAAL_SECTIES: Set<string>;
|
|
118
|
+
export declare function kopHerhalen(s: {
|
|
119
|
+
opties?: Record<string, unknown>;
|
|
120
|
+
} | undefined): KopHerhalen;
|
|
110
121
|
export declare const SECTIE_REGISTER: SectieDef[];
|
|
111
122
|
export declare function sectieDef(type: PakbonSectieType): SectieDef;
|
|
112
123
|
export declare function nieuweSectie(type: PakbonSectieType): PakbonSectie;
|
|
@@ -152,6 +163,8 @@ export interface DemoProduct {
|
|
|
152
163
|
fust_aantal: number;
|
|
153
164
|
fustsoort: string;
|
|
154
165
|
planten_per_fust: number;
|
|
166
|
+
/** Aantal planten onbekend (fusten of planten per fust ontbreken). */
|
|
167
|
+
aantal_onbekend?: boolean;
|
|
155
168
|
/** "Ja", "Nee" of "–" (onbekend). */
|
|
156
169
|
sticker?: string;
|
|
157
170
|
/** Onderdelen (halffabricaten) van een samengesteld product. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,aAAa,GACb,QAAQ,GACR,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,cAAc,GACd,WAAW,GACX,QAAQ,GACR,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,oBAAoB,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAgBhE,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;GAMjC,CAAC;AACF,eAAO,MAAM,0BAA0B,UAAgD,CAAC;AAExF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export const BESCHIKBARE_KOLOMMEN = [
|
|
|
10
10
|
{ key: "artikelnummer", label: "Artikelnummer" },
|
|
11
11
|
{ key: "artikelnaam", label: "Artikelnaam" },
|
|
12
12
|
{ key: "potmaat", label: "Potmaat" },
|
|
13
|
-
{ key: "aantal", label: "Aantal" },
|
|
13
|
+
{ key: "aantal", label: "Aantal planten" },
|
|
14
14
|
{ key: "belading", label: "Belading" },
|
|
15
15
|
{ key: "barcode", label: "Barcode" },
|
|
16
16
|
{ key: "opmerking", label: "Opmerking" },
|
|
@@ -27,11 +27,18 @@ export const ONDERDEEL_VELD_OPTIES = [
|
|
|
27
27
|
{ value: "artikelnaam", label: "Productnaam" },
|
|
28
28
|
{ value: "kleur", label: "Kleur" },
|
|
29
29
|
{ value: "potmaat", label: "Potmaat" },
|
|
30
|
-
{ value: "aantal", label: "Aantal" },
|
|
30
|
+
{ value: "aantal", label: "Aantal planten" },
|
|
31
31
|
{ value: "sticker", label: "Sticker" },
|
|
32
32
|
];
|
|
33
33
|
export const ONDERDEEL_VELDEN_STANDAARD = ["artikelnaam", "kleur", "potmaat", "aantal"];
|
|
34
|
+
/**
|
|
35
|
+
* Label op papier. Bewust los van het editorlabel: in de editor heet "aantal"
|
|
36
|
+
* "Aantal planten", maar de afgedrukte kop blijft "Aantal" zodat bestaande
|
|
37
|
+
* layouts er exact hetzelfde uitzien.
|
|
38
|
+
*/
|
|
34
39
|
export function kolomLabel(key) {
|
|
40
|
+
if (key === "aantal")
|
|
41
|
+
return "Aantal";
|
|
35
42
|
return BESCHIKBARE_KOLOMMEN.find((k) => k.key === key)?.label ?? key;
|
|
36
43
|
}
|
|
37
44
|
export function nieuweKolom(key) {
|
|
@@ -238,6 +245,22 @@ const weergave = {
|
|
|
238
245
|
{ value: "naast", label: "Naast elkaar" },
|
|
239
246
|
],
|
|
240
247
|
};
|
|
248
|
+
export const HERHAAL_SECTIES = new Set(["bedrijfsgegevens", "klantgegevens", "afleveradres", "orderinformatie"]);
|
|
249
|
+
export function kopHerhalen(s) {
|
|
250
|
+
const w = s?.opties?.["herhalen"];
|
|
251
|
+
return w === "eerste_per_kar" || w === "elke_pagina" ? w : "document";
|
|
252
|
+
}
|
|
253
|
+
const herhalenDef = {
|
|
254
|
+
key: "herhalen",
|
|
255
|
+
label: "Weergave bij meerdere pakbonnen",
|
|
256
|
+
type: "keuze",
|
|
257
|
+
standaard: "document",
|
|
258
|
+
opties: [
|
|
259
|
+
{ value: "document", label: "Eén keer bovenaan het document" },
|
|
260
|
+
{ value: "eerste_per_kar", label: "Alleen op de eerste pakbon van elke kar" },
|
|
261
|
+
{ value: "elke_pagina", label: "Op iedere pakbon / pagina" },
|
|
262
|
+
],
|
|
263
|
+
};
|
|
241
264
|
export const SECTIE_REGISTER = [
|
|
242
265
|
{
|
|
243
266
|
type: "logo",
|
|
@@ -267,6 +290,7 @@ export const SECTIE_REGISTER = [
|
|
|
267
290
|
{ key: "toonAdres", label: "Adres", type: "schakelaar", standaard: true },
|
|
268
291
|
{ key: "toonContact", label: "Telefoon / e-mail", type: "schakelaar", standaard: true },
|
|
269
292
|
{ key: "toonKvk", label: "KvK & BTW", type: "schakelaar", standaard: false },
|
|
293
|
+
herhalenDef,
|
|
270
294
|
],
|
|
271
295
|
},
|
|
272
296
|
{
|
|
@@ -277,13 +301,14 @@ export const SECTIE_REGISTER = [
|
|
|
277
301
|
{ key: "toonKlantnummer", label: "Klantnummer", type: "schakelaar", standaard: true },
|
|
278
302
|
{ key: "toonContact", label: "Contactpersoon", type: "schakelaar", standaard: true },
|
|
279
303
|
{ key: "toonReferentie", label: "Klantreferentie", type: "schakelaar", standaard: true },
|
|
304
|
+
herhalenDef,
|
|
280
305
|
],
|
|
281
306
|
},
|
|
282
307
|
{
|
|
283
308
|
type: "afleveradres",
|
|
284
309
|
label: "Afleveradres",
|
|
285
310
|
omschrijving: "Adres waar de zending naartoe gaat.",
|
|
286
|
-
opties: [{ key: "toonLand", label: "Land tonen", type: "schakelaar", standaard: true }],
|
|
311
|
+
opties: [{ key: "toonLand", label: "Land tonen", type: "schakelaar", standaard: true }, herhalenDef],
|
|
287
312
|
},
|
|
288
313
|
{
|
|
289
314
|
type: "factuuradres",
|
|
@@ -300,6 +325,7 @@ export const SECTIE_REGISTER = [
|
|
|
300
325
|
{ key: "toonDatum", label: "Orderdatum", type: "schakelaar", standaard: true },
|
|
301
326
|
{ key: "toonLeverdatum", label: "Leverdatum", type: "schakelaar", standaard: true },
|
|
302
327
|
{ key: "toonReferentie", label: "Referentie", type: "schakelaar", standaard: true },
|
|
328
|
+
herhalenDef,
|
|
303
329
|
],
|
|
304
330
|
},
|
|
305
331
|
{
|
|
@@ -1068,7 +1094,7 @@ export const DEMO_ORDER = {
|
|
|
1068
1094
|
opmerking: "",
|
|
1069
1095
|
producten: [
|
|
1070
1096
|
p("B2201", "Ficus Lyrata", "17 cm", 60, "B-11", "Groen", "Groen"),
|
|
1071
|
-
p("B2210", "Monstera Deliciosa", "17 cm",
|
|
1097
|
+
p("B2210", "Monstera Deliciosa", "17 cm", 36, "B-12", "Groen", "Groen"),
|
|
1072
1098
|
],
|
|
1073
1099
|
fusten: [{ fusttype: "Plateau", aantal: 6, hoogte: "18 cm", belading: "10 st", barcode: "FT-9120" }],
|
|
1074
1100
|
},
|
|
@@ -1098,13 +1124,31 @@ export const DEMO_ORDER = {
|
|
|
1098
1124
|
{ artikelnaam: "Pernettya roze", kleur: "Roze", potmaat: "9 cm", per_stuk: 5, aantal: 50, sticker: "Nee" },
|
|
1099
1125
|
],
|
|
1100
1126
|
},
|
|
1101
|
-
p("C3311", "Succulenten mix", "9 cm",
|
|
1127
|
+
p("C3311", "Succulenten mix", "9 cm", 84, "C-05", "Bloeiend", "Mix"),
|
|
1102
1128
|
],
|
|
1103
1129
|
fusten: [
|
|
1104
1130
|
{ fusttype: "Deense tray", aantal: 10, hoogte: "22 cm", belading: "8 st", barcode: "FT-8802" },
|
|
1105
1131
|
],
|
|
1106
1132
|
})),
|
|
1107
1133
|
})),
|
|
1134
|
+
// Kar 9 is zo vol dat hij over twee pagina's loopt: zo zijn eerste
|
|
1135
|
+
// pagina, vervolgpagina en volgende kar in het voorbeeld te controleren.
|
|
1136
|
+
{
|
|
1137
|
+
karnummer: 9,
|
|
1138
|
+
barcode: "VOORBEELD-KAR-09",
|
|
1139
|
+
route: "Route Zuid",
|
|
1140
|
+
chauffeur: "J. Bakker",
|
|
1141
|
+
gewicht: "160 kg",
|
|
1142
|
+
lagen: [1, 2, 3, 4].map((laagnr) => ({
|
|
1143
|
+
laagnummer: laagnr,
|
|
1144
|
+
belading: "8 × 12",
|
|
1145
|
+
potmaat: "12 cm",
|
|
1146
|
+
gewicht: "40 kg",
|
|
1147
|
+
opmerking: "",
|
|
1148
|
+
producten: Array.from({ length: 9 }, (_, i) => p(`D4${laagnr}${i}`, `Kalanchoe kleur ${laagnr}.${i + 1}`, "12 cm", 24, `D-0${laagnr}`, "Bloeiend", "Mix")),
|
|
1149
|
+
fusten: [{ fusttype: "Deense tray", aantal: 18, hoogte: "22 cm", belading: "12 st", barcode: `FT-94${laagnr}` }],
|
|
1150
|
+
})),
|
|
1151
|
+
},
|
|
1108
1152
|
],
|
|
1109
1153
|
};
|
|
1110
1154
|
export function alleProducten(order) {
|
|
@@ -41,6 +41,8 @@ export interface PakbonRenderOpties {
|
|
|
41
41
|
voorbeeldBeideVarianten?: boolean;
|
|
42
42
|
}
|
|
43
43
|
export declare function esc(v: unknown): string;
|
|
44
|
+
/** Melding bij een regel waarvan het aantal planten niet te bepalen is. */
|
|
45
|
+
export declare const AANTAL_ONBEKEND = "Planten per fust onbekend";
|
|
44
46
|
/**
|
|
45
47
|
* Vult ontbrekende onderdelen aan met veilige lege waarden, zodat een module
|
|
46
48
|
* die maar een deel van de gegevens heeft nooit een lege of stukke pakbon
|
|
@@ -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,EA+BL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AASD,2EAA2E;AAC3E,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAmB3D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AAwFD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AA4pBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAmFR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
|
|
8
8
|
// de afdruk altijd exact dezelfde secties — inclusief de orderregels.
|
|
9
9
|
// ============================================================================
|
|
10
|
-
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
|
+
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, HERHAAL_SECTIES, kopHerhalen, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
11
11
|
import { haalPrintLogos } from "./logoLibrary.js";
|
|
12
12
|
import { code128BarsHtml } from "./code128.js";
|
|
13
13
|
import { karMetadata } from "./pakbonPresentation.js";
|
|
@@ -24,8 +24,12 @@ const cel = (p, veld) => {
|
|
|
24
24
|
return "";
|
|
25
25
|
if (veld === "qrcode")
|
|
26
26
|
return "";
|
|
27
|
+
if (veld === "aantal" && p.aantal_onbekend)
|
|
28
|
+
return AANTAL_ONBEKEND;
|
|
27
29
|
return String(p[veld] ?? "");
|
|
28
30
|
};
|
|
31
|
+
/** Melding bij een regel waarvan het aantal planten niet te bepalen is. */
|
|
32
|
+
export const AANTAL_ONBEKEND = "Planten per fust onbekend";
|
|
29
33
|
/** Rendert uitsluitend een bestaande barcodewaarde uit de Engine-payload. */
|
|
30
34
|
function barcodeHtml(value, hoogteMm = 15) {
|
|
31
35
|
const tekst = String(value ?? "").trim();
|
|
@@ -150,6 +154,7 @@ function normProduct(p) {
|
|
|
150
154
|
fust_aantal: Number(p["fust_aantal"] ?? 0) || 0,
|
|
151
155
|
fustsoort: String(p["fustsoort"] ?? ""),
|
|
152
156
|
planten_per_fust: Number(p["planten_per_fust"] ?? 0) || 0,
|
|
157
|
+
...(p["aantal_onbekend"] === true ? { aantal_onbekend: true } : {}),
|
|
153
158
|
sticker: p["sticker"] == null || p["sticker"] === "" ? "–" : String(p["sticker"]),
|
|
154
159
|
onderdelen: Array.isArray(p["onderdelen"])
|
|
155
160
|
? p["onderdelen"].map((o) => ({
|
|
@@ -502,7 +507,9 @@ function fustVerzamellijstHtml(order, s) {
|
|
|
502
507
|
}
|
|
503
508
|
function karrenHtml(s, order, zoek,
|
|
504
509
|
/** Kop die op iedere nieuwe karpagina wordt herhaald (HELE KAR / DEELKAR). */
|
|
505
|
-
paginaKop = ""
|
|
510
|
+
paginaKop = "",
|
|
511
|
+
/** Kopblokken met `herhalen = "eerste_per_kar"`, vanaf de tweede kar. */
|
|
512
|
+
karStartKop = "") {
|
|
506
513
|
const modus = optS(s, "modus", "pagina");
|
|
507
514
|
if (modus === "geen")
|
|
508
515
|
return "";
|
|
@@ -526,13 +533,15 @@ paginaKop = "") {
|
|
|
526
533
|
const laagGroepen = groepeerIdentiekeLagen(lagen, String(lagenModus) === "gebundeld");
|
|
527
534
|
laagGroepen.forEach((lg, j) => {
|
|
528
535
|
const breek = i > 0 || j > 0;
|
|
529
|
-
|
|
536
|
+
const karKop = i > 0 && j === 0 ? karStartKop : "";
|
|
537
|
+
delen.push(`<div class="${breek ? "breekvoor" : ""}">${breek ? paginaKop : ""}${karKop}${blokFrame(s, karBlok(s, kar, [lg.laag], zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
|
|
530
538
|
});
|
|
531
539
|
return;
|
|
532
540
|
}
|
|
533
541
|
const breek = i > 0 && perPagina;
|
|
534
542
|
const scheider = i > 0 && !perPagina ? scheidingHtml(scheiding) : "";
|
|
535
|
-
|
|
543
|
+
const karKop = i > 0 ? karStartKop : "";
|
|
544
|
+
delen.push(`<div class="${breek ? "breekvoor" : ""} ${modus === "passend" ? "heelhouden" : ""}">${breek ? paginaKop : ""}${scheider}${karKop}${blokFrame(s, karBlok(s, kar, lagen, zoek, modus === "blok" || modus === "passend", groep.aantal))}</div>`);
|
|
536
545
|
});
|
|
537
546
|
return delen.join("");
|
|
538
547
|
}
|
|
@@ -731,14 +740,33 @@ export function renderPakbonBody(config, order, opties = {}) {
|
|
|
731
740
|
const klantKop = klantNaam
|
|
732
741
|
? `<div class="blok" style="font-size:16pt;font-weight:800;line-height:1.15">${esc(klantNaam)}</div>`
|
|
733
742
|
: "";
|
|
734
|
-
|
|
743
|
+
// "Weergave bij meerdere pakbonnen" per kopblok; ontbreekt = "document"
|
|
744
|
+
// (huidig gedrag). De grote klantnaam volgt de keuze van klantgegevens.
|
|
745
|
+
const herhaal = (s) => (HERHAAL_SECTIES.has(String(s.type)) ? kopHerhalen(s) : "document");
|
|
746
|
+
const klantSectie = zoek("klantgegevens");
|
|
747
|
+
const klantModus = klantSectie ? herhaal(klantSectie) : "document";
|
|
748
|
+
const kop = variantKop + (klantModus === "elke_pagina" ? "" : klantKop) + documentLogoHtml(cfg.logo, opts);
|
|
749
|
+
const karStartKop = (klantModus === "eerste_per_kar" ? klantKop : "") +
|
|
750
|
+
secties
|
|
751
|
+
.filter((s) => herhaal(s) === "eerste_per_kar")
|
|
752
|
+
.map((s) => blokFrame(s, sectieHtml(s, order, zoek, opts)))
|
|
753
|
+
.join("");
|
|
754
|
+
const paginaKopInhoud = (klantModus === "elke_pagina" ? klantKop : "") +
|
|
755
|
+
secties
|
|
756
|
+
.filter((s) => herhaal(s) === "elke_pagina")
|
|
757
|
+
.map((s) => blokFrame(s, sectieHtml(s, order, zoek, opts)))
|
|
758
|
+
.join("");
|
|
759
|
+
// De PDF-motor tekent .paginakop bovenaan iedere pagina en houdt die
|
|
760
|
+
// hoogte vrij van het afdrukgebied; in de HTML staat hij één keer bovenaan.
|
|
761
|
+
const paginaKop = paginaKopInhoud && !opties.zonderPaginavoet ? `<div class="paginakop">${paginaKopInhoud}</div>` : "";
|
|
735
762
|
const totalenSectie = zoek("totalen");
|
|
736
763
|
const totalenElkePagina = !!totalenSectie && opt(totalenSectie, "elke_pagina", false) === true;
|
|
737
764
|
const inhoud = secties
|
|
738
765
|
.filter((s) => !(s.type === "totalen" && totalenElkePagina))
|
|
739
766
|
.filter((s) => !(s.type === "barcode" && heeftKarBarcodes))
|
|
767
|
+
.filter((s) => herhaal(s) !== "elke_pagina")
|
|
740
768
|
.map((s) => s.type === "karren"
|
|
741
|
-
? karrenHtml(s, order, zoek, variantKop)
|
|
769
|
+
? karrenHtml(s, order, zoek, variantKop, karStartKop)
|
|
742
770
|
: blokFrame(s, sectieHtml(s, order, zoek, opts)))
|
|
743
771
|
.join("");
|
|
744
772
|
const pickSectie = alleSecties.find((s) => s.type === "pickmethode");
|
|
@@ -759,7 +787,7 @@ export function renderPakbonBody(config, order, opties = {}) {
|
|
|
759
787
|
const voet = totalenElkePagina && totalenSectie && !opties.zonderPaginavoet
|
|
760
788
|
? `<div class="paginavoet">${sectieHtml(totalenSectie, order, zoek, opts)}</div>`
|
|
761
789
|
: "";
|
|
762
|
-
return kop + inhoud + (barcode ? `<div class="blok">${barcode}</div>` : "") + voet;
|
|
790
|
+
return paginaKop + kop + inhoud + (barcode ? `<div class="blok">${barcode}</div>` : "") + voet;
|
|
763
791
|
}
|
|
764
792
|
/** Het documentlogo bovenaan de pakbon. */
|
|
765
793
|
function documentLogoHtml(logoCfg, opties) {
|
|
@@ -89,6 +89,7 @@ export interface LayoutConflict {
|
|
|
89
89
|
/** Documentsoorten met meer dan één actieve layout binnen dezelfde bron. */
|
|
90
90
|
export declare function layoutConflicten(layouts: LayoutModel[]): LayoutConflict[];
|
|
91
91
|
export declare function verwijderLayout(id: string): Promise<void>;
|
|
92
|
+
export declare const LAYOUT_NIET_OPGESLAGEN = "Layout niet opgeslagen: geen rechten of layout niet gevonden";
|
|
92
93
|
export declare function updateLayout(id: string, patch: Record<string, unknown>): Promise<void>;
|
|
93
94
|
export declare function useLayoutDetail(layoutId: string): {
|
|
94
95
|
layout: LayoutModel | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useDocumentData.d.ts","sourceRoot":"","sources":["../../src/lib/useDocumentData.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,9 @@ export async function dupliceerLayout(id) {
|
|
|
84
84
|
delete b.standaard_versie;
|
|
85
85
|
b.naam = `${String(b.naam)} (kopie)`;
|
|
86
86
|
b.is_standaard = false;
|
|
87
|
+
// Een kopie van een systeemlayout is zelf aanpasbaar.
|
|
88
|
+
if ("systeem" in b)
|
|
89
|
+
b.systeem = false;
|
|
87
90
|
const { data: nieuw, error } = await supabase
|
|
88
91
|
.from("document_layouts")
|
|
89
92
|
.insert(b)
|
|
@@ -151,13 +154,17 @@ export async function verwijderLayout(id) {
|
|
|
151
154
|
if (error)
|
|
152
155
|
throw error;
|
|
153
156
|
}
|
|
157
|
+
export const LAYOUT_NIET_OPGESLAGEN = "Layout niet opgeslagen: geen rechten of layout niet gevonden";
|
|
154
158
|
export async function updateLayout(id, patch) {
|
|
155
|
-
const { error } = await supabase
|
|
159
|
+
const { data, error } = await supabase
|
|
156
160
|
.from("document_layouts")
|
|
157
161
|
.update(patch)
|
|
158
|
-
.eq("id", id)
|
|
162
|
+
.eq("id", id)
|
|
163
|
+
.select("id");
|
|
159
164
|
if (error)
|
|
160
165
|
throw error;
|
|
166
|
+
if (!Array.isArray(data) || data.length === 0)
|
|
167
|
+
throw new Error(LAYOUT_NIET_OPGESLAGEN);
|
|
161
168
|
}
|
|
162
169
|
export function useLayoutDetail(layoutId) {
|
|
163
170
|
const [layout, setLayout] = useState(null);
|