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