@flowselections/layout-maker 1.55.2 → 1.57.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/dist-lib/components/LayoutVerwijzingenKaart.d.ts +4 -0
- package/dist-lib/components/LayoutVerwijzingenKaart.d.ts.map +1 -0
- package/dist-lib/components/LayoutVerwijzingenKaart.js +59 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +4 -13
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +16 -1
- package/dist-lib/components/PrintenInstellenWizard.d.ts +6 -0
- package/dist-lib/components/PrintenInstellenWizard.d.ts.map +1 -0
- package/dist-lib/components/PrintenInstellenWizard.js +89 -0
- package/dist-lib/components/PrintenPage.d.ts +3 -1
- package/dist-lib/components/PrintenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintenPage.js +4 -2
- package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
- package/dist-lib/components/PrintplekDetailPage.js +2 -0
- package/dist-lib/components/TestprintDialog.js +2 -2
- package/dist-lib/components/WerkplekOmzettingStap.d.ts +10 -0
- package/dist-lib/components/WerkplekOmzettingStap.d.ts.map +1 -0
- package/dist-lib/components/WerkplekOmzettingStap.js +46 -0
- package/dist-lib/components/WerkplekVraag.d.ts +4 -0
- package/dist-lib/components/WerkplekVraag.d.ts.map +1 -0
- package/dist-lib/components/WerkplekVraag.js +26 -0
- package/dist-lib/components/WerkplekkenTab.d.ts +7 -0
- package/dist-lib/components/WerkplekkenTab.d.ts.map +1 -0
- package/dist-lib/components/WerkplekkenTab.js +143 -0
- package/dist-lib/index.d.ts +15 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +12 -0
- package/dist-lib/integrations/supabase/types.d.ts +530 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/beheerder.d.ts +2 -0
- package/dist-lib/lib/beheerder.d.ts.map +1 -0
- package/dist-lib/lib/beheerder.js +18 -0
- package/dist-lib/lib/etiketControle.d.ts +36 -0
- package/dist-lib/lib/etiketControle.d.ts.map +1 -0
- package/dist-lib/lib/etiketControle.js +89 -0
- package/dist-lib/lib/layoutVerwijzingen.d.ts +50 -0
- package/dist-lib/lib/layoutVerwijzingen.d.ts.map +1 -0
- package/dist-lib/lib/layoutVerwijzingen.js +101 -0
- package/dist-lib/lib/papierFormaten.d.ts +3 -3
- package/dist-lib/lib/papierFormaten.d.ts.map +1 -1
- package/dist-lib/lib/papierFormaten.js +6 -6
- package/dist-lib/lib/printQueue.server.d.ts +6 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +149 -23
- package/dist-lib/lib/printRoutering.d.ts +14 -1
- package/dist-lib/lib/printRoutering.d.ts.map +1 -1
- package/dist-lib/lib/printRoutering.js +6 -0
- package/dist-lib/lib/printnodeStatusTekst.d.ts +2 -0
- package/dist-lib/lib/printnodeStatusTekst.d.ts.map +1 -0
- package/dist-lib/lib/printnodeStatusTekst.js +13 -0
- package/dist-lib/lib/productiebonHtml.js +1 -1
- package/dist-lib/lib/testprint.d.ts +6 -0
- package/dist-lib/lib/testprint.d.ts.map +1 -1
- package/dist-lib/lib/testprint.js +11 -7
- package/dist-lib/lib/waaromPrinter.d.ts +7 -0
- package/dist-lib/lib/waaromPrinter.d.ts.map +1 -0
- package/dist-lib/lib/waaromPrinter.js +35 -0
- package/dist-lib/lib/werkplekOmzetting.d.ts +22 -0
- package/dist-lib/lib/werkplekOmzetting.d.ts.map +1 -0
- package/dist-lib/lib/werkplekOmzetting.js +42 -0
- package/dist-lib/lib/werkplekken.d.ts +73 -0
- package/dist-lib/lib/werkplekken.d.ts.map +1 -0
- package/dist-lib/lib/werkplekken.js +156 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
-
export type RouteringBron = "printplek" | "werkplek" | "layout" | "standaard" | "geen";
|
|
2
|
+
export type RouteringBron = "printplek" | "werkplek" | "werkplek_formaat" | "werkplek_afwijking" | "layout" | "standaard" | "geen";
|
|
3
3
|
export interface OvergeslagenRegel {
|
|
4
4
|
bron: Exclude<RouteringBron, "geen">;
|
|
5
5
|
regel_id: string;
|
|
@@ -15,6 +15,11 @@ export interface RouteringUitkomst {
|
|
|
15
15
|
layout_id: string | null;
|
|
16
16
|
papierformaat: string | null;
|
|
17
17
|
overgeslagen: OvergeslagenRegel[];
|
|
18
|
+
/** Nieuw werkplekmodel: welke werkplek en welke van zijn twee printers. */
|
|
19
|
+
werkplek_id?: string | null;
|
|
20
|
+
werkplek_naam?: string | null;
|
|
21
|
+
printer_rol?: "a4" | "label" | null;
|
|
22
|
+
formaat_klasse?: "a4" | "label" | null;
|
|
18
23
|
}
|
|
19
24
|
export interface RouteringInvoer {
|
|
20
25
|
documenttype: string;
|
|
@@ -22,6 +27,8 @@ export interface RouteringInvoer {
|
|
|
22
27
|
werkplek?: string | null;
|
|
23
28
|
layoutId?: string | null;
|
|
24
29
|
papierformaat?: string | null;
|
|
30
|
+
/** Werkplek uit het nieuwe model (op id). */
|
|
31
|
+
werkplekId?: string | null;
|
|
25
32
|
}
|
|
26
33
|
/** Roept de gedeelde routering aan; `db` mag de server-client van de shell zijn. */
|
|
27
34
|
export declare function routeringVoor(invoer: RouteringInvoer, db?: SupabaseClient<any, any, any>): Promise<RouteringUitkomst>;
|
|
@@ -31,4 +38,10 @@ export declare function useRouteringOverzicht(printplekId: string, documenttypes
|
|
|
31
38
|
laden: boolean;
|
|
32
39
|
reload: () => Promise<void>;
|
|
33
40
|
};
|
|
41
|
+
export { waaromDezePrinter } from "./waaromPrinter.js";
|
|
42
|
+
/** Printer voor een documentsoort op een werkplek uit het nieuwe model (op id). */
|
|
43
|
+
export declare function routeringVoorWerkplek(documenttype: string, werkplekId: string, opts?: {
|
|
44
|
+
layoutId?: string | null;
|
|
45
|
+
papierformaat?: string | null;
|
|
46
|
+
}): Promise<RouteringUitkomst>;
|
|
34
47
|
//# sourceMappingURL=printRoutering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printRoutering.d.ts","sourceRoot":"","sources":["../../src/lib/printRoutering.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"printRoutering.d.ts","sourceRoot":"","sources":["../../src/lib/printRoutering.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,oBAAoB,GACpB,QAAQ,GACR,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,gBAAgB,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAuBD,oFAAoF;AACpF,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,EAAE,GAAE,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAwD,GACvF,OAAO,CAAC,iBAAiB,CAAC,CAW5B;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,EAAE;;;;EA+BpB;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,mFAAmF;AACnF,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GACrE,OAAO,CAAC,iBAAiB,CAAC,CAE5B"}
|
|
@@ -34,6 +34,7 @@ export async function routeringVoor(invoer, db = supabase) {
|
|
|
34
34
|
_werkplek: invoer.werkplek?.trim() || null,
|
|
35
35
|
_layout_id: invoer.layoutId || null,
|
|
36
36
|
_papierformaat: invoer.papierformaat || null,
|
|
37
|
+
...(invoer.werkplekId ? { _werkplek_id: invoer.werkplekId } : {}),
|
|
37
38
|
});
|
|
38
39
|
if (error)
|
|
39
40
|
throw error;
|
|
@@ -67,3 +68,8 @@ export function useRouteringOverzicht(printplekId, documenttypes, computers) {
|
|
|
67
68
|
}, [load]);
|
|
68
69
|
return { uitkomsten, laden, reload: load };
|
|
69
70
|
}
|
|
71
|
+
export { waaromDezePrinter } from "./waaromPrinter.js";
|
|
72
|
+
/** Printer voor een documentsoort op een werkplek uit het nieuwe model (op id). */
|
|
73
|
+
export async function routeringVoorWerkplek(documenttype, werkplekId, opts = {}) {
|
|
74
|
+
return routeringVoor({ documenttype, werkplekId, layoutId: opts.layoutId, papierformaat: opts.papierformaat });
|
|
75
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printnodeStatusTekst.d.ts","sourceRoot":"","sources":["../../src/lib/printnodeStatusTekst.ts"],"names":[],"mappings":"AASA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Eerlijke woorden voor een opdrachtstatus, gelijk aan de Printwachtrij.
|
|
2
|
+
const WOORDEN = {
|
|
3
|
+
wachtend: "In de wachtrij",
|
|
4
|
+
bezig: "Naar de printer",
|
|
5
|
+
voltooid: "Bij printer afgeleverd",
|
|
6
|
+
mislukt: "Mislukt",
|
|
7
|
+
geannuleerd: "Geannuleerd",
|
|
8
|
+
};
|
|
9
|
+
export function printTitelVoorStatus(status) {
|
|
10
|
+
if (status.startsWith("mislukt:"))
|
|
11
|
+
return status.replace(/^mislukt:/, "Mislukt:");
|
|
12
|
+
return WOORDEN[status] ?? status;
|
|
13
|
+
}
|
|
@@ -119,7 +119,7 @@ function blokHtml(b, data) {
|
|
|
119
119
|
case "controlepunten": {
|
|
120
120
|
const punten = splitsLijst(b.opties?.["punten"] ?? b.opties?.["controlepunten"]);
|
|
121
121
|
const lijst = punten.length ? punten : ["Kwaliteit gecontroleerd", "Aantal gecontroleerd"];
|
|
122
|
-
return titel(b) + lijst.map((p) => `<div class="regel"
|
|
122
|
+
return titel(b) + lijst.map((p) => `<div class="regel"><span style="display:inline-block;width:3mm;height:3mm;border:0.3mm solid currentColor;margin-right:1.5mm;vertical-align:-0.4mm"></span>${esc(p)}</div>`).join("");
|
|
123
123
|
}
|
|
124
124
|
case "tekstblok":
|
|
125
125
|
return titel(b) + `<div>${esc(vulPbVeldcodes(String(b.opties?.["tekst"] ?? ""), data))}</div>`;
|
|
@@ -17,6 +17,12 @@ export interface TestprintRegel {
|
|
|
17
17
|
* gekozen wordt vanaf deze printplek of werkplek.
|
|
18
18
|
*/
|
|
19
19
|
export declare function bepaalTestOverzicht(ctx: TestprintContext): Promise<TestprintRegel[]>;
|
|
20
|
+
/**
|
|
21
|
+
* De HTML van de testpagina. Groot en schuin "TESTAFDRUK — niet gebruiken",
|
|
22
|
+
* zodat een testvel nooit voor een echt document kan doorgaan. Bovenaan staat
|
|
23
|
+
* waar hij vandaan komt.
|
|
24
|
+
*/
|
|
25
|
+
export declare function testHtml(velden: Record<string, string>): string;
|
|
20
26
|
export interface TestprintResultaat {
|
|
21
27
|
jobId: string;
|
|
22
28
|
printerId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testprint.d.ts","sourceRoot":"","sources":["../../src/lib/testprint.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA4B1F;
|
|
1
|
+
{"version":3,"file":"testprint.d.ts","sourceRoot":"","sources":["../../src/lib/testprint.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA4B1F;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAY/D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,kBAAkB,CAAC,CAyC7B"}
|
|
@@ -37,15 +37,19 @@ export async function bepaalTestOverzicht(ctx) {
|
|
|
37
37
|
}));
|
|
38
38
|
return regels;
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
41
|
-
|
|
40
|
+
/**
|
|
41
|
+
* De HTML van de testpagina. Groot en schuin "TESTAFDRUK — niet gebruiken",
|
|
42
|
+
* zodat een testvel nooit voor een echt document kan doorgaan. Bovenaan staat
|
|
43
|
+
* waar hij vandaan komt.
|
|
44
|
+
*/
|
|
45
|
+
export function testHtml(velden) {
|
|
42
46
|
const rijen = Object.entries(velden)
|
|
43
|
-
.map(([k, v]) => `<tr><td style="padding:
|
|
47
|
+
.map(([k, v]) => `<tr><td style="padding:0.6mm 3mm 0.6mm 0;color:#555">${k}</td><td style="padding:0.6mm 0;font-weight:700">${v}</td></tr>`)
|
|
44
48
|
.join("");
|
|
45
|
-
return `<div style="padding:
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
<
|
|
49
|
+
return `<div style="position:relative;min-height:100%;padding:3mm;font-family:Arial,Helvetica,sans-serif;font-size:9pt;overflow:hidden">
|
|
50
|
+
<div style="font-weight:800;font-size:11pt;margin:0 0 1.5mm">TESTAFDRUK — niet gebruiken</div>
|
|
51
|
+
<table style="border-collapse:collapse">${rijen}</table>
|
|
52
|
+
<div style="position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-35deg);white-space:nowrap;font-size:28pt;font-weight:900;color:#999;opacity:0.55;border:1.2mm solid #999;padding:1mm 4mm">TESTAFDRUK — niet gebruiken</div>
|
|
49
53
|
</div>`;
|
|
50
54
|
}
|
|
51
55
|
/**
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RouteringUitkomst } from "./printRoutering.js";
|
|
2
|
+
/**
|
|
3
|
+
* Eén uitleg "Waarom deze printer?", overal gelijk. Bijvoorbeeld:
|
|
4
|
+
* "Werkplek Kantoor → A4-printer XP-2200 (regel: papierformaat A4)".
|
|
5
|
+
*/
|
|
6
|
+
export declare function waaromDezePrinter(u: Pick<RouteringUitkomst, "bron" | "papierformaat"> & Partial<Pick<RouteringUitkomst, "werkplek_naam" | "printer_rol" | "werkplek">>, printerNaam: string | null, plekNaam?: string | null, extra?: string | null): string;
|
|
7
|
+
//# sourceMappingURL=waaromPrinter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waaromPrinter.d.ts","sourceRoot":"","sources":["../../src/lib/waaromPrinter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAYzE;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,eAAe,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,GAAG,aAAa,GAAG,UAAU,CAAC,CAAC,EAChF,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CAkBR"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const BRON_TEKST = {
|
|
2
|
+
printplek: "regel van de printplek",
|
|
3
|
+
werkplek: "uitzondering voor deze computer",
|
|
4
|
+
werkplek_formaat: "papierformaat",
|
|
5
|
+
werkplek_afwijking: "afwijking voor deze documentsoort",
|
|
6
|
+
layout: "koppeling van de layout",
|
|
7
|
+
standaard: "bedrijfsbrede standaard",
|
|
8
|
+
geen: "geen",
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Eén uitleg "Waarom deze printer?", overal gelijk. Bijvoorbeeld:
|
|
12
|
+
* "Werkplek Kantoor → A4-printer XP-2200 (regel: papierformaat A4)".
|
|
13
|
+
*/
|
|
14
|
+
export function waaromDezePrinter(u, printerNaam, plekNaam, extra) {
|
|
15
|
+
if (u.bron === "geen" || !printerNaam) {
|
|
16
|
+
return "Geen printer ingesteld voor dit document hier — er wordt niets geprint.";
|
|
17
|
+
}
|
|
18
|
+
const formaat = u.papierformaat ? ` ${u.papierformaat}` : "";
|
|
19
|
+
let wie;
|
|
20
|
+
if (u.bron === "werkplek_formaat" || u.bron === "werkplek_afwijking") {
|
|
21
|
+
const rol = u.printer_rol === "label" ? "labelprinter" : u.printer_rol === "a4" ? "A4-printer" : "printer";
|
|
22
|
+
wie = `Werkplek ${u.werkplek_naam ?? "?"} → ${u.bron === "werkplek_afwijking" ? "printer" : rol} ${printerNaam}`;
|
|
23
|
+
}
|
|
24
|
+
else if (u.bron === "printplek") {
|
|
25
|
+
wie = `Printplek ${plekNaam ?? "?"} → ${printerNaam}`;
|
|
26
|
+
}
|
|
27
|
+
else if (u.bron === "werkplek") {
|
|
28
|
+
wie = `Computer ${u.werkplek ?? "?"} → ${printerNaam}`;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
wie = `Bedrijfsbreed → ${printerNaam}`;
|
|
32
|
+
}
|
|
33
|
+
const regel = u.bron === "werkplek_formaat" ? `papierformaat${formaat}` : BRON_TEKST[u.bron];
|
|
34
|
+
return `${wie} (regel: ${regel})${extra ? ` · ${extra}` : ""}`;
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface VoorstelSoort {
|
|
2
|
+
documenttype: string;
|
|
3
|
+
klasse: string;
|
|
4
|
+
bron: string | null;
|
|
5
|
+
printer_id: string | null;
|
|
6
|
+
na_printer_id: string | null;
|
|
7
|
+
verschil: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface WerkplekVoorstel {
|
|
10
|
+
naam: string;
|
|
11
|
+
print_plek_id: string | null;
|
|
12
|
+
a4_printer_id: string | null;
|
|
13
|
+
label_printer_id: string | null;
|
|
14
|
+
bestaat: boolean;
|
|
15
|
+
soorten: VoorstelSoort[];
|
|
16
|
+
}
|
|
17
|
+
export declare function leesVoorstel(data: unknown): WerkplekVoorstel[];
|
|
18
|
+
/** Na de omzetting: label-documenten naar de labelprinter, de rest naar A4. */
|
|
19
|
+
export declare function herbereken(w: WerkplekVoorstel): WerkplekVoorstel;
|
|
20
|
+
export declare function haalOmzettingVoorstel(): Promise<WerkplekVoorstel[]>;
|
|
21
|
+
export declare function pasOmzettingToe(werkplekken: WerkplekVoorstel[]): Promise<string[]>;
|
|
22
|
+
//# sourceMappingURL=werkplekOmzetting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"werkplekOmzetting.d.ts","sourceRoot":"","sources":["../../src/lib/werkplekOmzetting.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAM9D;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAQhE;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAIzE;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQxF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/werkplekOmzetting.ts — voorstel om bestaande printplekken en
|
|
3
|
+
// standaardregels om te zetten naar werkplekken. Het voorstel leest alleen;
|
|
4
|
+
// pas na bevestiging maakt de database alles in één keer aan (alles of niets).
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { supabase } from "./supabaseClient.js";
|
|
7
|
+
const db = supabase;
|
|
8
|
+
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
9
|
+
export function leesVoorstel(data) {
|
|
10
|
+
return arr(data).map((w) => ({
|
|
11
|
+
...w,
|
|
12
|
+
bestaat: w.bestaat === true,
|
|
13
|
+
soorten: arr(w.soorten),
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
/** Na de omzetting: label-documenten naar de labelprinter, de rest naar A4. */
|
|
17
|
+
export function herbereken(w) {
|
|
18
|
+
return {
|
|
19
|
+
...w,
|
|
20
|
+
soorten: w.soorten.map((s) => {
|
|
21
|
+
const na = s.klasse === "label" ? w.label_printer_id : w.a4_printer_id;
|
|
22
|
+
return { ...s, na_printer_id: na, verschil: (s.printer_id ?? null) !== (na ?? null) };
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export async function haalOmzettingVoorstel() {
|
|
27
|
+
const { data, error } = await db.rpc("werkplek_omzetting_voorstel");
|
|
28
|
+
if (error)
|
|
29
|
+
throw new Error(error.message);
|
|
30
|
+
return leesVoorstel(data);
|
|
31
|
+
}
|
|
32
|
+
export async function pasOmzettingToe(werkplekken) {
|
|
33
|
+
const invoer = werkplekken
|
|
34
|
+
.filter((w) => !w.bestaat)
|
|
35
|
+
.map((w) => ({ naam: w.naam, print_plek_id: w.print_plek_id, a4_printer_id: w.a4_printer_id, label_printer_id: w.label_printer_id }));
|
|
36
|
+
if (!invoer.length)
|
|
37
|
+
throw new Error("Er is niets om aan te maken.");
|
|
38
|
+
const { data, error } = await db.rpc("werkplek_omzetting_toepassen", { _werkplekken: invoer });
|
|
39
|
+
if (error)
|
|
40
|
+
throw new Error(error.message);
|
|
41
|
+
return arr(data);
|
|
42
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type GeladenEtiket } from "./etiketControle.js";
|
|
2
|
+
export interface Werkplek {
|
|
3
|
+
id: string;
|
|
4
|
+
naam: string;
|
|
5
|
+
print_plek_id: string | null;
|
|
6
|
+
a4_printer_id: string | null;
|
|
7
|
+
label_printer_id: string | null;
|
|
8
|
+
actief: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface WerkplekAfwijking {
|
|
11
|
+
id: string;
|
|
12
|
+
werkplek_id: string;
|
|
13
|
+
documenttype: string;
|
|
14
|
+
printer_id: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface PrinterRij {
|
|
17
|
+
id: string;
|
|
18
|
+
naam: string;
|
|
19
|
+
weergavenaam: string | null;
|
|
20
|
+
systeemnaam: string | null;
|
|
21
|
+
locatie: string | null;
|
|
22
|
+
online: boolean | null;
|
|
23
|
+
actief: boolean | null;
|
|
24
|
+
verborgen: boolean;
|
|
25
|
+
is_virtueel: boolean;
|
|
26
|
+
extern_printer_id: string | null;
|
|
27
|
+
ondersteunde_formaten: Record<string, number[]> | null;
|
|
28
|
+
geladen_etiket: GeladenEtiket | null;
|
|
29
|
+
}
|
|
30
|
+
export declare const isVirtuelePrinter: (naam: string | null | undefined) => boolean;
|
|
31
|
+
/** De naam die we tonen: eigen naam van de beheerder, anders de technische. */
|
|
32
|
+
export declare const printerTitel: (p: Pick<PrinterRij, "naam" | "weergavenaam"> | null | undefined) => string;
|
|
33
|
+
/** A4-printer of labelprinter voor een formaatcode (zelfde regel als de database). */
|
|
34
|
+
export declare function formaatKlasse(code: string | null | undefined): "a4" | "label";
|
|
35
|
+
export declare function soortPastBijFormaat(documenttype: string, papierformaat: string | null): boolean;
|
|
36
|
+
export declare function formaatMaat(code: string | null | undefined): import("./documentTypes.js").PapierFormaatDef | null;
|
|
37
|
+
export declare function useWerkplekken(): {
|
|
38
|
+
werkplekken: Werkplek[];
|
|
39
|
+
afwijkingen: WerkplekAfwijking[];
|
|
40
|
+
laden: boolean;
|
|
41
|
+
reload: () => Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
export declare function slaWerkplekOp(w: Partial<Werkplek> & {
|
|
44
|
+
naam: string;
|
|
45
|
+
}): Promise<string>;
|
|
46
|
+
export declare function verwijderWerkplek(id: string): Promise<void>;
|
|
47
|
+
export declare function zetAfwijking(werkplek_id: string, documenttype: string, printer_id: string | null): Promise<void>;
|
|
48
|
+
export declare function usePrinterLijst(): {
|
|
49
|
+
printers: PrinterRij[];
|
|
50
|
+
reload: () => Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
export declare function zetPrinterVelden(id: string, velden: Partial<Pick<PrinterRij, "weergavenaam" | "verborgen" | "is_virtueel" | "geladen_etiket">>): Promise<void>;
|
|
53
|
+
/** Werkplek van de ingelogde gebruiker (Afhandeling, Facturen…); null = nog niet gekozen. */
|
|
54
|
+
export declare function mijnWerkplekId(): Promise<string | null>;
|
|
55
|
+
export declare function kiesMijnWerkplek(werkplek_id: string): Promise<void>;
|
|
56
|
+
export declare function useMijnWerkplek(): {
|
|
57
|
+
werkplekId: string | null;
|
|
58
|
+
laden: boolean;
|
|
59
|
+
kies: (id: string) => Promise<void>;
|
|
60
|
+
};
|
|
61
|
+
/** Leesfunctie voor de Logistiek Engine en andere modules: geladen etiketten, op id. */
|
|
62
|
+
export declare function geladenEtiketten(opts?: {
|
|
63
|
+
werkplekId?: string | null;
|
|
64
|
+
printplekId?: string | null;
|
|
65
|
+
}): Promise<{
|
|
66
|
+
werkplek_id: string;
|
|
67
|
+
werkplek_naam: string;
|
|
68
|
+
print_plek_id: string | null;
|
|
69
|
+
printer_id: string;
|
|
70
|
+
printer_naam: string;
|
|
71
|
+
geladen_etiket: GeladenEtiket | null;
|
|
72
|
+
}[]>;
|
|
73
|
+
//# sourceMappingURL=werkplekken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"werkplekken.d.ts","sourceRoot":"","sources":["../../src/lib/werkplekken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/werkplekken.ts — werkplekken met een A4-printer en een labelprinter.
|
|
3
|
+
// Het papierformaat van de layout kiest automatisch welke van de twee. Alles
|
|
4
|
+
// op id; namen zijn alleen voor de weergave.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { useCallback, useEffect, useState } from "react";
|
|
7
|
+
import { supabase } from "./supabaseClient.js";
|
|
8
|
+
import { PAPIERFORMATEN } from "./documentTypes.js";
|
|
9
|
+
import { leesGeladenEtiket } from "./etiketControle.js";
|
|
10
|
+
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
11
|
+
// Nieuwe tabellen staan nog niet in elke gegenereerde typelijst van een Shell.
|
|
12
|
+
const db = supabase;
|
|
13
|
+
/** Virtuele printers die nooit papier opleveren. */
|
|
14
|
+
const VIRTUEEL = /(save as pdf|opslaan als pdf|microsoft print to pdf|onenote|\bfax\b|xps|pdf ?creator|cutepdf|adobe pdf)/i;
|
|
15
|
+
export const isVirtuelePrinter = (naam) => VIRTUEEL.test(String(naam ?? ""));
|
|
16
|
+
/** De naam die we tonen: eigen naam van de beheerder, anders de technische. */
|
|
17
|
+
export const printerTitel = (p) => (p?.weergavenaam?.trim() || p?.naam || "Printer");
|
|
18
|
+
/** A4-printer of labelprinter voor een formaatcode (zelfde regel als de database). */
|
|
19
|
+
export function formaatKlasse(code) {
|
|
20
|
+
const c = String(code ?? "A4").toUpperCase();
|
|
21
|
+
return ["A4", "A5", "A3", "LETTER", "LEGAL", "VRIJ"].includes(c) ? "a4" : "label";
|
|
22
|
+
}
|
|
23
|
+
/** Past de documentsoort bij het papierformaat van de layout? */
|
|
24
|
+
const LABEL_SOORTEN = new Set(["etiket", "verzendlabel", "productlabel", "barcode_label", "sticker"]);
|
|
25
|
+
export function soortPastBijFormaat(documenttype, papierformaat) {
|
|
26
|
+
const klasse = formaatKlasse(papierformaat);
|
|
27
|
+
const labelSoort = LABEL_SOORTEN.has(String(documenttype));
|
|
28
|
+
return labelSoort ? klasse === "label" : klasse === "a4" || !["pakbon", "factuur", "afleverbrief", "offerte", "orderbevestiging"].includes(String(documenttype));
|
|
29
|
+
}
|
|
30
|
+
export function formaatMaat(code) {
|
|
31
|
+
return PAPIERFORMATEN.find((p) => p.code === code) ?? null;
|
|
32
|
+
}
|
|
33
|
+
export function useWerkplekken() {
|
|
34
|
+
const [werkplekken, setWerkplekken] = useState([]);
|
|
35
|
+
const [afwijkingen, setAfwijkingen] = useState([]);
|
|
36
|
+
const [laden, setLaden] = useState(true);
|
|
37
|
+
const load = useCallback(async () => {
|
|
38
|
+
const [w, a] = await Promise.all([
|
|
39
|
+
db.from("print_werkplekken").select("*").order("naam"),
|
|
40
|
+
db.from("print_werkplek_afwijkingen").select("*"),
|
|
41
|
+
]);
|
|
42
|
+
setWerkplekken(arr(w.data));
|
|
43
|
+
setAfwijkingen(arr(a.data));
|
|
44
|
+
setLaden(false);
|
|
45
|
+
}, []);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
void load();
|
|
48
|
+
}, [load]);
|
|
49
|
+
return { werkplekken, afwijkingen, laden, reload: load };
|
|
50
|
+
}
|
|
51
|
+
export async function slaWerkplekOp(w) {
|
|
52
|
+
const rij = {
|
|
53
|
+
naam: w.naam.trim(),
|
|
54
|
+
print_plek_id: w.print_plek_id ?? null,
|
|
55
|
+
a4_printer_id: w.a4_printer_id ?? null,
|
|
56
|
+
label_printer_id: w.label_printer_id ?? null,
|
|
57
|
+
actief: w.actief ?? true,
|
|
58
|
+
};
|
|
59
|
+
const q = w.id
|
|
60
|
+
? db.from("print_werkplekken").update(rij).eq("id", w.id).select("id").single()
|
|
61
|
+
: db.from("print_werkplekken").insert(rij).select("id").single();
|
|
62
|
+
const { data, error } = await q;
|
|
63
|
+
if (error)
|
|
64
|
+
throw error;
|
|
65
|
+
return String(data.id);
|
|
66
|
+
}
|
|
67
|
+
export async function verwijderWerkplek(id) {
|
|
68
|
+
const { error } = await db.from("print_werkplekken").delete().eq("id", id);
|
|
69
|
+
if (error)
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
export async function zetAfwijking(werkplek_id, documenttype, printer_id) {
|
|
73
|
+
if (!printer_id) {
|
|
74
|
+
const { error } = await db.from("print_werkplek_afwijkingen").delete().eq("werkplek_id", werkplek_id).eq("documenttype", documenttype);
|
|
75
|
+
if (error)
|
|
76
|
+
throw error;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const { error } = await db
|
|
80
|
+
.from("print_werkplek_afwijkingen")
|
|
81
|
+
.upsert({ werkplek_id, documenttype, printer_id }, { onConflict: "werkplek_id,documenttype" });
|
|
82
|
+
if (error)
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
export function usePrinterLijst() {
|
|
86
|
+
const [printers, setPrinters] = useState([]);
|
|
87
|
+
const load = useCallback(async () => {
|
|
88
|
+
const { data } = await db
|
|
89
|
+
.from("printers")
|
|
90
|
+
.select("id, naam, weergavenaam, systeemnaam, locatie, online, actief, verborgen, is_virtueel, extern_printer_id, ondersteunde_formaten, geladen_etiket")
|
|
91
|
+
.order("naam");
|
|
92
|
+
setPrinters(arr(data).map((p) => ({
|
|
93
|
+
...p,
|
|
94
|
+
is_virtueel: Boolean(p.is_virtueel) || isVirtuelePrinter(p.naam) || isVirtuelePrinter(p.systeemnaam),
|
|
95
|
+
geladen_etiket: leesGeladenEtiket(p.geladen_etiket),
|
|
96
|
+
})));
|
|
97
|
+
}, []);
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
void load();
|
|
100
|
+
}, [load]);
|
|
101
|
+
return { printers, reload: load };
|
|
102
|
+
}
|
|
103
|
+
export async function zetPrinterVelden(id, velden) {
|
|
104
|
+
const { error } = await db.from("printers").update(velden).eq("id", id);
|
|
105
|
+
if (error)
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
/** Werkplek van de ingelogde gebruiker (Afhandeling, Facturen…); null = nog niet gekozen. */
|
|
109
|
+
export async function mijnWerkplekId() {
|
|
110
|
+
const { data: u } = await db.auth.getUser();
|
|
111
|
+
const uid = u?.user?.id;
|
|
112
|
+
if (!uid)
|
|
113
|
+
return null;
|
|
114
|
+
const { data } = await db.from("print_gebruiker_werkplek").select("werkplek_id").eq("user_id", uid).maybeSingle();
|
|
115
|
+
return data?.werkplek_id ?? null;
|
|
116
|
+
}
|
|
117
|
+
export async function kiesMijnWerkplek(werkplek_id) {
|
|
118
|
+
const { data: u } = await db.auth.getUser();
|
|
119
|
+
const uid = u?.user?.id;
|
|
120
|
+
if (!uid)
|
|
121
|
+
throw new Error("Niet ingelogd.");
|
|
122
|
+
const { error } = await db
|
|
123
|
+
.from("print_gebruiker_werkplek")
|
|
124
|
+
.upsert({ user_id: uid, werkplek_id }, { onConflict: "user_id" });
|
|
125
|
+
if (error)
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
export function useMijnWerkplek() {
|
|
129
|
+
const [werkplekId, setWerkplekId] = useState(null);
|
|
130
|
+
const [laden, setLaden] = useState(true);
|
|
131
|
+
const load = useCallback(async () => {
|
|
132
|
+
setWerkplekId(await mijnWerkplekId().catch(() => null));
|
|
133
|
+
setLaden(false);
|
|
134
|
+
}, []);
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
void load();
|
|
137
|
+
}, [load]);
|
|
138
|
+
return {
|
|
139
|
+
werkplekId,
|
|
140
|
+
laden,
|
|
141
|
+
kies: async (id) => {
|
|
142
|
+
await kiesMijnWerkplek(id);
|
|
143
|
+
setWerkplekId(id);
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/** Leesfunctie voor de Logistiek Engine en andere modules: geladen etiketten, op id. */
|
|
148
|
+
export async function geladenEtiketten(opts = {}) {
|
|
149
|
+
const { data, error } = await db.rpc("geladen_etiketten", {
|
|
150
|
+
_werkplek_id: opts.werkplekId ?? null,
|
|
151
|
+
_print_plek_id: opts.printplekId ?? null,
|
|
152
|
+
});
|
|
153
|
+
if (error)
|
|
154
|
+
throw error;
|
|
155
|
+
return arr(data);
|
|
156
|
+
}
|