@flowselections/layout-maker 1.8.3 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +139 -132
  2. package/dist-lib/components/ComputersLijst.d.ts +2 -1
  3. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  4. package/dist-lib/components/ComputersLijst.js +2 -2
  5. package/dist-lib/components/DocumentRouteringPage.d.ts +2 -0
  6. package/dist-lib/components/DocumentRouteringPage.d.ts.map +1 -0
  7. package/dist-lib/components/DocumentRouteringPage.js +115 -0
  8. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  9. package/dist-lib/components/LayoutsPage.js +13 -8
  10. package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
  11. package/dist-lib/components/PrintQueuePage.js +16 -1
  12. package/dist-lib/components/PrintStatusBanner.d.ts +8 -0
  13. package/dist-lib/components/PrintStatusBanner.d.ts.map +1 -0
  14. package/dist-lib/components/PrintStatusBanner.js +15 -0
  15. package/dist-lib/components/PrinterSetupWizard.js +1 -1
  16. package/dist-lib/components/PrintersPage.d.ts.map +1 -1
  17. package/dist-lib/components/PrintersPage.js +7 -23
  18. package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
  19. package/dist-lib/components/WerkplekConfiguratiePage.js +35 -24
  20. package/dist-lib/components/WerkplekkenTabel.d.ts +2 -2
  21. package/dist-lib/components/WerkplekkenTabel.d.ts.map +1 -1
  22. package/dist-lib/components/WerkplekkenTabel.js +4 -3
  23. package/dist-lib/index.d.ts +8 -3
  24. package/dist-lib/index.d.ts.map +1 -1
  25. package/dist-lib/index.js +9 -5
  26. package/dist-lib/integrations/supabase/auth-middleware.d.ts +491 -145
  27. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  28. package/dist-lib/integrations/supabase/client.server.d.ts +491 -145
  29. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  30. package/dist-lib/integrations/supabase/types.d.ts +505 -150
  31. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  32. package/dist-lib/lib/aiLayout.functions.d.ts +491 -145
  33. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  34. package/dist-lib/lib/aiLayout.server.js +9 -9
  35. package/dist-lib/lib/browserPrint.js +5 -5
  36. package/dist-lib/lib/documentBron.d.ts +35 -0
  37. package/dist-lib/lib/documentBron.d.ts.map +1 -0
  38. package/dist-lib/lib/documentBron.js +62 -0
  39. package/dist-lib/lib/documentRoutering.d.ts +23 -0
  40. package/dist-lib/lib/documentRoutering.d.ts.map +1 -0
  41. package/dist-lib/lib/documentRoutering.js +58 -0
  42. package/dist-lib/lib/documentTypes.d.ts +54 -0
  43. package/dist-lib/lib/documentTypes.d.ts.map +1 -1
  44. package/dist-lib/lib/documentTypes.js +56 -0
  45. package/dist-lib/lib/formaatPrinters.d.ts +5 -0
  46. package/dist-lib/lib/formaatPrinters.d.ts.map +1 -1
  47. package/dist-lib/lib/formaatPrinters.js +12 -0
  48. package/dist-lib/lib/layoutPreview.js +7 -7
  49. package/dist-lib/lib/pakbonHtml.js +50 -50
  50. package/dist-lib/lib/printApi.d.ts +20 -5
  51. package/dist-lib/lib/printApi.d.ts.map +1 -1
  52. package/dist-lib/lib/printApi.js +93 -32
  53. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  54. package/dist-lib/lib/printQueue.server.js +72 -1
  55. package/dist-lib/lib/printService.functions.d.ts +1964 -580
  56. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  57. package/dist-lib/lib/printerTelling.d.ts +24 -0
  58. package/dist-lib/lib/printerTelling.d.ts.map +1 -0
  59. package/dist-lib/lib/printerTelling.js +41 -0
  60. package/dist-lib/lib/productiebonHtml.js +15 -15
  61. package/dist-lib/lib/profielHtml.js +18 -18
  62. package/dist-lib/lib/supabaseAdmin.server.d.ts +5 -5
  63. package/dist-lib/lib/supabaseAdmin.server.js +43 -43
  64. package/dist-lib/lib/testpagina.js +1 -1
  65. package/dist-lib/lib/useDocumentData.d.ts +4 -0
  66. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  67. package/dist-lib/lib/useDocumentData.js +106 -1
  68. package/package.json +6 -1
@@ -0,0 +1,35 @@
1
+ /** Waar de order vandaan komt. */
2
+ export type Herkomst = "floriday" | "eigen";
3
+ /** Welke bron gebruikt wordt: extern document, eigen ontwerp of automatisch. */
4
+ export type Bron = "extern_pdf" | "eigen_layout" | "auto";
5
+ export interface Bronregel {
6
+ id: string;
7
+ documenttype: string;
8
+ herkomst: string;
9
+ bron: string;
10
+ layout_id: string | null;
11
+ }
12
+ export declare const HERKOMSTEN: {
13
+ value: Herkomst;
14
+ label: string;
15
+ }[];
16
+ export declare const BRONNEN: {
17
+ value: Bron;
18
+ label: string;
19
+ }[];
20
+ /** Alle bronregels, eventueel gefilterd op documentsoort. */
21
+ export declare function useBronregels(documenttype?: string): {
22
+ regels: Bronregel[];
23
+ laden: boolean;
24
+ reload: () => Promise<void>;
25
+ };
26
+ /** Legt vast welke bron geldt voor een documentsoort bij een bepaalde herkomst. */
27
+ export declare function zetBronregel(documenttype: string, herkomst: Herkomst | string, bron: Bron | string, layout_id?: string | null): Promise<void>;
28
+ /** Verwijdert een bronregel; daarna geldt weer het standaardgedrag. */
29
+ export declare function verwijderBronregel(id: string): Promise<void>;
30
+ /**
31
+ * De ingestelde bron voor een documentsoort bij deze herkomst.
32
+ * Geeft `null` als er niets is ingesteld (dan geldt het standaardgedrag).
33
+ */
34
+ export declare function bronVoorDocument(documenttype: string, herkomst?: string | null): Promise<Bronregel | null>;
35
+ //# sourceMappingURL=documentBron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentBron.d.ts","sourceRoot":"","sources":["../../src/lib/documentBron.ts"],"names":[],"mappings":"AASA,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5C,gFAAgF;AAChF,MAAM,MAAM,IAAI,GAAG,YAAY,GAAG,cAAc,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAG1D,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAInD,CAAC;AAIF,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM;;;;EAiBlD;AAED,mFAAmF;AACnF,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC3B,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,iBAO1B;AAED,uEAAuE;AACvE,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,iBAGlD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAU3B"}
@@ -0,0 +1,62 @@
1
+ // ============================================================================
2
+ // src/lib/documentBron.ts — waar komt het document vandaan? Per documentsoort
3
+ // en per herkomst van de order (Floriday of een eigen order) kan worden gekozen
4
+ // tussen het meegestuurde externe document en een eigen ontwerp.
5
+ // ============================================================================
6
+ import { useCallback, useEffect, useState } from "react";
7
+ import { supabase } from "./supabaseClient.js";
8
+ export const HERKOMSTEN = [
9
+ { value: "floriday", label: "Floriday-order" },
10
+ { value: "eigen", label: "Eigen order" },
11
+ ];
12
+ export const BRONNEN = [
13
+ { value: "auto", label: "Automatisch" },
14
+ { value: "extern_pdf", label: "Document van Floriday" },
15
+ { value: "eigen_layout", label: "Eigen ontwerp" },
16
+ ];
17
+ const arr = (v) => (Array.isArray(v) ? v : []);
18
+ /** Alle bronregels, eventueel gefilterd op documentsoort. */
19
+ export function useBronregels(documenttype) {
20
+ const [regels, setRegels] = useState([]);
21
+ const [laden, setLaden] = useState(true);
22
+ const load = useCallback(async () => {
23
+ let query = supabase.from("document_bronregels").select("*");
24
+ if (documenttype)
25
+ query = query.eq("documenttype", documenttype);
26
+ const { data } = await query;
27
+ setRegels(arr(data));
28
+ setLaden(false);
29
+ }, [documenttype]);
30
+ useEffect(() => {
31
+ void load();
32
+ }, [load]);
33
+ return { regels, laden, reload: load };
34
+ }
35
+ /** Legt vast welke bron geldt voor een documentsoort bij een bepaalde herkomst. */
36
+ export async function zetBronregel(documenttype, herkomst, bron, layout_id) {
37
+ const { error } = await supabase.from("document_bronregels").upsert({ documenttype, herkomst, bron, layout_id: layout_id ?? null }, { onConflict: "documenttype,herkomst" });
38
+ if (error)
39
+ throw error;
40
+ }
41
+ /** Verwijdert een bronregel; daarna geldt weer het standaardgedrag. */
42
+ export async function verwijderBronregel(id) {
43
+ const { error } = await supabase.from("document_bronregels").delete().eq("id", id);
44
+ if (error)
45
+ throw error;
46
+ }
47
+ /**
48
+ * De ingestelde bron voor een documentsoort bij deze herkomst.
49
+ * Geeft `null` als er niets is ingesteld (dan geldt het standaardgedrag).
50
+ */
51
+ export async function bronVoorDocument(documenttype, herkomst) {
52
+ const h = (herkomst ?? "").trim();
53
+ if (!h)
54
+ return null;
55
+ const { data } = await supabase
56
+ .from("document_bronregels")
57
+ .select("*")
58
+ .eq("documenttype", documenttype)
59
+ .eq("herkomst", h)
60
+ .maybeSingle();
61
+ return data ?? null;
62
+ }
@@ -0,0 +1,23 @@
1
+ export interface WerkplekPrinter {
2
+ id: string;
3
+ documenttype: string;
4
+ werkplek: string;
5
+ printer_id: string | null;
6
+ papierformaat: string | null;
7
+ }
8
+ /** Alle werkplek-uitzonderingen, eventueel gefilterd op documentsoort. */
9
+ export declare function useWerkplekPrinters(documenttype?: string): {
10
+ koppelingen: WerkplekPrinter[];
11
+ laden: boolean;
12
+ reload: () => Promise<void>;
13
+ };
14
+ /** Legt vast dat een documentsoort op een werkplek naar een printer gaat. */
15
+ export declare function zetWerkplekPrinter(documenttype: string, werkplek: string, printer_id: string | null, papierformaat?: string | null): Promise<void>;
16
+ /** Verwijdert een werkplek-uitzondering. */
17
+ export declare function verwijderWerkplekPrinter(id: string): Promise<void>;
18
+ /**
19
+ * De printer die voor deze documentsoort op deze werkplek is ingesteld.
20
+ * Geeft `null` als er geen uitzondering bestaat.
21
+ */
22
+ export declare function printerVoorWerkplekDocument(documenttype: string, werkplek: string): Promise<string | null>;
23
+ //# sourceMappingURL=documentRoutering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentRoutering.d.ts","sourceRoot":"","sources":["../../src/lib/documentRoutering.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAID,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM;;;;EAiBxD;AAED,6EAA6E;AAC7E,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,iBAY9B;AAED,4CAA4C;AAC5C,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,iBAGxD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB"}
@@ -0,0 +1,58 @@
1
+ // ============================================================================
2
+ // src/lib/documentRoutering.ts — welke documentsoort gaat via welke werkplek
3
+ // naar welke printer. Uitzonderingen per werkplek staan hier; de standaard per
4
+ // documentsoort + formaat blijft in `formaatPrinters.ts`.
5
+ // ============================================================================
6
+ import { useCallback, useEffect, useState } from "react";
7
+ import { supabase } from "./supabaseClient.js";
8
+ const arr = (v) => (Array.isArray(v) ? v : []);
9
+ /** Alle werkplek-uitzonderingen, eventueel gefilterd op documentsoort. */
10
+ export function useWerkplekPrinters(documenttype) {
11
+ const [koppelingen, setKoppelingen] = useState([]);
12
+ const [laden, setLaden] = useState(true);
13
+ const load = useCallback(async () => {
14
+ let query = supabase.from("document_werkplek_printers").select("*");
15
+ if (documenttype)
16
+ query = query.eq("documenttype", documenttype);
17
+ const { data } = await query;
18
+ setKoppelingen(arr(data));
19
+ setLaden(false);
20
+ }, [documenttype]);
21
+ useEffect(() => {
22
+ void load();
23
+ }, [load]);
24
+ return { koppelingen, laden, reload: load };
25
+ }
26
+ /** Legt vast dat een documentsoort op een werkplek naar een printer gaat. */
27
+ export async function zetWerkplekPrinter(documenttype, werkplek, printer_id, papierformaat) {
28
+ const { error } = await supabase.from("document_werkplek_printers").upsert({
29
+ documenttype,
30
+ werkplek: werkplek.trim(),
31
+ printer_id,
32
+ papierformaat: papierformaat ?? null,
33
+ }, { onConflict: "documenttype,werkplek" });
34
+ if (error)
35
+ throw error;
36
+ }
37
+ /** Verwijdert een werkplek-uitzondering. */
38
+ export async function verwijderWerkplekPrinter(id) {
39
+ const { error } = await supabase.from("document_werkplek_printers").delete().eq("id", id);
40
+ if (error)
41
+ throw error;
42
+ }
43
+ /**
44
+ * De printer die voor deze documentsoort op deze werkplek is ingesteld.
45
+ * Geeft `null` als er geen uitzondering bestaat.
46
+ */
47
+ export async function printerVoorWerkplekDocument(documenttype, werkplek) {
48
+ const naam = (werkplek ?? "").trim();
49
+ if (!naam)
50
+ return null;
51
+ const { data } = await supabase
52
+ .from("document_werkplek_printers")
53
+ .select("printer_id")
54
+ .eq("documenttype", documenttype)
55
+ .eq("werkplek", naam)
56
+ .maybeSingle();
57
+ return data?.printer_id ?? null;
58
+ }
@@ -103,8 +103,62 @@ export interface LayoutModel {
103
103
  page_settings: PageSettings;
104
104
  /** documentspecifieke configuratie, opgebouwd uit het documentprofiel */
105
105
  config?: Record<string, Record<string, unknown>>;
106
+ /** herkomst van het document: "eigen" ontwerp of "floriday" */
107
+ bron?: string;
108
+ /** vaste layout die niet mag worden aangepast of verwijderd */
109
+ systeem?: boolean;
106
110
  updated_at: string;
107
111
  }
112
+ /** Is dit een vaste layout voor een document dat uit Floriday komt? */
113
+ export declare function isFloridayLayout(l: {
114
+ bron?: string | null;
115
+ systeem?: boolean | null;
116
+ }): boolean;
117
+ /** Toelichting bij een Floriday-layout. */
118
+ export declare const FLORIDAY_LAYOUT_TOELICHTING = "Document komt kant-en-klaar uit Floriday en wordt 1-op-1 afgedrukt.";
119
+ /** Vaste layouts die altijd aanwezig moeten zijn (documenten uit Floriday). */
120
+ export declare const FLORIDAY_SYSTEEM_LAYOUTS: readonly [{
121
+ readonly naam: "Afleverbrief (Floriday)";
122
+ readonly documenttype: "afleverbrief";
123
+ readonly papierformaat: "A4";
124
+ readonly breedte_mm: 210;
125
+ readonly hoogte_mm: 297;
126
+ }, {
127
+ readonly naam: "Veilingbrief (Floriday)";
128
+ readonly documenttype: "veilingbrief";
129
+ readonly papierformaat: "A4";
130
+ readonly breedte_mm: 210;
131
+ readonly hoogte_mm: 297;
132
+ }, {
133
+ readonly naam: "Sticker (Floriday)";
134
+ readonly documenttype: "sticker";
135
+ readonly papierformaat: "LABEL_100x62";
136
+ readonly breedte_mm: 100;
137
+ readonly hoogte_mm: 62;
138
+ }];
139
+ /** Toelichting bij een standaardlayout (geen Floriday-document). */
140
+ export declare const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar \u2014 aanpassen kan per klant.";
141
+ /**
142
+ * Standaardlayouts die bij een verse shell altijd worden toegevoegd, los van
143
+ * Floriday. Deze zijn "eigen" (niet systeem) en dus vrij aanpasbaar/verwijderbaar.
144
+ * Het seeden gebeurt slechts één keer per shell (zie useDocumentData); als een
145
+ * gebruiker een layout verwijdert, wordt deze niet opnieuw aangemaakt.
146
+ */
147
+ export declare const STANDAARD_LAYOUTS: readonly [{
148
+ readonly naam: "Pakbon";
149
+ readonly documenttype: "pakbon";
150
+ readonly papierformaat: "A4";
151
+ readonly breedte_mm: 210;
152
+ readonly hoogte_mm: 297;
153
+ readonly omschrijving: "Standaarddocument voor eigen orders. Volledig aanpasbaar — aanpassen kan per klant.";
154
+ }, {
155
+ readonly naam: "Afleverbrief (BVO)";
156
+ readonly documenttype: "afleverbrief";
157
+ readonly papierformaat: "A4";
158
+ readonly breedte_mm: 210;
159
+ readonly hoogte_mm: 297;
160
+ readonly omschrijving: "Verzendbrief voor eigen (niet-Floriday) orders. Volledig aanpasbaar.";
161
+ }];
108
162
  export interface LayoutVariabele {
109
163
  id?: string;
110
164
  naam: string;
@@ -1 +1 @@
1
- {"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/documentTypes.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,62 @@ export const PAPIERFORMATEN = [
34
34
  { code: "LABEL_57x32", label: "Label 57 × 32 mm", breedte: 57, hoogte: 32 },
35
35
  { code: "VRIJ", label: "Vrij formaat", breedte: 210, hoogte: 297 },
36
36
  ];
37
+ /** Is dit een vaste layout voor een document dat uit Floriday komt? */
38
+ export function isFloridayLayout(l) {
39
+ return Boolean(l?.systeem) && String(l?.bron ?? "") === "floriday";
40
+ }
41
+ /** Toelichting bij een Floriday-layout. */
42
+ export const FLORIDAY_LAYOUT_TOELICHTING = "Document komt kant-en-klaar uit Floriday en wordt 1-op-1 afgedrukt.";
43
+ /** Vaste layouts die altijd aanwezig moeten zijn (documenten uit Floriday). */
44
+ export const FLORIDAY_SYSTEEM_LAYOUTS = [
45
+ {
46
+ naam: "Afleverbrief (Floriday)",
47
+ documenttype: "afleverbrief",
48
+ papierformaat: "A4",
49
+ breedte_mm: 210,
50
+ hoogte_mm: 297,
51
+ },
52
+ {
53
+ naam: "Veilingbrief (Floriday)",
54
+ documenttype: "veilingbrief",
55
+ papierformaat: "A4",
56
+ breedte_mm: 210,
57
+ hoogte_mm: 297,
58
+ },
59
+ {
60
+ naam: "Sticker (Floriday)",
61
+ documenttype: "sticker",
62
+ papierformaat: "LABEL_100x62",
63
+ breedte_mm: 100,
64
+ hoogte_mm: 62,
65
+ },
66
+ ];
67
+ /** Toelichting bij een standaardlayout (geen Floriday-document). */
68
+ export const STANDAARD_LAYOUT_TOELICHTING = "Standaarddocument voor eigen orders. Volledig aanpasbaar — aanpassen kan per klant.";
69
+ /**
70
+ * Standaardlayouts die bij een verse shell altijd worden toegevoegd, los van
71
+ * Floriday. Deze zijn "eigen" (niet systeem) en dus vrij aanpasbaar/verwijderbaar.
72
+ * Het seeden gebeurt slechts één keer per shell (zie useDocumentData); als een
73
+ * gebruiker een layout verwijdert, wordt deze niet opnieuw aangemaakt.
74
+ */
75
+ export const STANDAARD_LAYOUTS = [
76
+ {
77
+ naam: "Pakbon",
78
+ documenttype: "pakbon",
79
+ papierformaat: "A4",
80
+ breedte_mm: 210,
81
+ hoogte_mm: 297,
82
+ omschrijving: STANDAARD_LAYOUT_TOELICHTING,
83
+ },
84
+ {
85
+ naam: "Afleverbrief (BVO)",
86
+ documenttype: "afleverbrief",
87
+ papierformaat: "A4",
88
+ breedte_mm: 210,
89
+ hoogte_mm: 297,
90
+ omschrijving: "Verzendbrief voor eigen (niet-Floriday) orders. Volledig aanpasbaar.",
91
+ },
92
+ ];
37
93
  export const ELEMENT_STANDAARD = {
38
94
  tekst: { label: "Tekst", breedte: 60, hoogte: 8, content: "Nieuwe tekst" },
39
95
  veld: { label: "Databaseveld", breedte: 60, hoogte: 8, content: "{{order.nummer}}" },
@@ -11,4 +11,9 @@ export declare function useFormaatPrinters(documenttype: string): {
11
11
  export declare function zetFormaatPrinter(documenttype: string, formaat_code: string, printer_id: string | null): Promise<void>;
12
12
  /** Bepaalt welke printer bij een formaat hoort (voor automatisch afdrukken). */
13
13
  export declare function printerVoorFormaat(documenttype: string, formaat_code: string): Promise<string | null>;
14
+ /** Alle standaardkoppelingen (documentsoort + formaat), voor overzichten. */
15
+ export declare function useAlleFormaatPrinters(): {
16
+ koppelingen: FormaatPrinter[];
17
+ reload: () => Promise<void>;
18
+ };
14
19
  //# sourceMappingURL=formaatPrinters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formaatPrinters.d.ts","sourceRoot":"","sources":["../../src/lib/formaatPrinters.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;EAgBtD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,iBAQ1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
1
+ {"version":3,"file":"formaatPrinters.d.ts","sourceRoot":"","sources":["../../src/lib/formaatPrinters.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM;;;EAgBtD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,IAAI,iBAQ1B;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB;;;EAarC"}
@@ -37,3 +37,15 @@ export async function printerVoorFormaat(documenttype, formaat_code) {
37
37
  .maybeSingle();
38
38
  return data?.printer_id ?? null;
39
39
  }
40
+ /** Alle standaardkoppelingen (documentsoort + formaat), voor overzichten. */
41
+ export function useAlleFormaatPrinters() {
42
+ const [koppelingen, setKoppelingen] = useState([]);
43
+ const load = useCallback(async () => {
44
+ const { data } = await supabase.from("document_formaat_printers").select("*");
45
+ setKoppelingen(arr(data));
46
+ }, []);
47
+ useEffect(() => {
48
+ void load();
49
+ }, [load]);
50
+ return { koppelingen, reload: load };
51
+ }
@@ -79,8 +79,8 @@ function elementHtml(el, ctx) {
79
79
  case "cirkel":
80
80
  return `<div style="${base};border-radius:50%;border:${s.randbreedte || 0.3}mm solid ${s.randkleur ?? "#111827"}"></div>`;
81
81
  case "barcode":
82
- return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
- <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
82
+ return `<div style="${base};display:flex;flex-direction:column;justify-content:center;align-items:center;font-family:monospace">
83
+ <div style="width:100%;height:70%;background:repeating-linear-gradient(90deg,#111 0 1.2px,#fff 1.2px 3px)"></div>
84
84
  <div style="font-size:7pt">${esc(inhoud)}</div></div>`;
85
85
  case "qrcode":
86
86
  return `<div style="${base};background:repeating-conic-gradient(#111 0% 25%, #fff 0% 50%) 0 0/22% 22%"></div>`;
@@ -125,10 +125,10 @@ export function bouwDocumentHtml(layout, elementen, gegevens) {
125
125
  const body = zichtbaar.map((e) => elementHtml(e, ctx)).join("");
126
126
  const b = layout.orientatie === "landscape" ? layout.hoogte_mm : layout.breedte_mm;
127
127
  const h = layout.orientatie === "landscape" ? layout.breedte_mm : layout.hoogte_mm;
128
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
- <style>@page{size:${b}mm ${h}mm;margin:0}
130
- body{margin:0;background:#e5e7eb}
131
- .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
- @media print{body{background:#fff}}</style></head>
128
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8"><title>${esc(layout.naam)}</title>
129
+ <style>@page{size:${b}mm ${h}mm;margin:0}
130
+ body{margin:0;background:#e5e7eb}
131
+ .pagina{position:relative;width:${b}mm;height:${h}mm;background:#fff;margin:0 auto;overflow:hidden}
132
+ @media print{body{background:#fff}}</style></head>
133
133
  <body><div class="pagina">${body}</div></body></html>`;
134
134
  }
@@ -640,56 +640,56 @@ export function renderPakbonDocument(config, order, opties = {}) {
640
640
  const font = opties.lettertype ?? 'Arial, Helvetica, "Segoe UI", sans-serif';
641
641
  const grootte = opties.lettergrootte ?? 8.5;
642
642
  const body = renderPakbonBody(config, order, opties);
643
- return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
644
- <title>${esc(opties.titel ?? "Pakbon")}</title>
645
- <style>
646
- @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
647
- * { box-sizing: border-box; }
648
- html, body { margin: 0; padding: 0; }
649
- body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
650
- .blok { margin-bottom: 2mm; }
651
- .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
652
- .vet { font-weight: 600; }
653
- .kv { display: flex; justify-content: space-between; gap: 3mm; }
654
- .kv .k { color: #6b7280; }
655
- .kv .v { font-weight: 500; }
656
- .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
657
- .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
658
- table.regels { width: 100%; border-collapse: collapse; }
659
- table.regels.vast { table-layout: fixed; }
660
- table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
661
- table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
662
- table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
663
- .rand { border: 0.2mm solid #d1d5db; }
664
- .onder { border-bottom: 0.2mm solid #d1d5db; }
665
- table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
666
- tr.zebra td { background: #f3f4f6; }
667
- .plijst { margin: 0; padding-left: 4mm; }
668
- .groep { margin-bottom: 1.5mm; }
669
- .regelrij { display: flex; gap: 2mm; }
670
- .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
671
- .karblok { margin-bottom: 2mm; }
672
- .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
673
- .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
674
- .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
675
- .laag { margin-bottom: 1.5mm; }
676
- .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
677
- .laagkop.compact { border-bottom: none; }
678
- .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
679
- .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
680
- .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
681
- .handtekening { margin-top: 3mm; }
682
- .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
683
- .lijnveld.hoog { padding-bottom: 10mm; }
684
- .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
685
- .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
686
- .qr { border: 0.25mm dashed #9ca3af; }
687
- .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
688
- .klein { font-size: 85%; color: #6b7280; }
689
- .breekvoor { break-before: page; page-break-before: always; }
690
- .heelhouden { break-inside: avoid; page-break-inside: avoid; }
691
- img { max-width: 100%; }
692
- </style></head>
643
+ return `<!doctype html><html lang="nl"><head><meta charset="utf-8" />
644
+ <title>${esc(opties.titel ?? "Pakbon")}</title>
645
+ <style>
646
+ @page { size: ${b}mm ${h}mm; margin: ${marge}mm; }
647
+ * { box-sizing: border-box; }
648
+ html, body { margin: 0; padding: 0; }
649
+ body { font-family: ${font}; font-size: ${grootte}pt; color: #111827; line-height: 1.35; }
650
+ .blok { margin-bottom: 2mm; }
651
+ .sectitel { font-size: 90%; font-weight: 600; text-transform: uppercase; color: #6b7280; margin-bottom: 0.6mm; }
652
+ .vet { font-weight: 600; }
653
+ .kv { display: flex; justify-content: space-between; gap: 3mm; }
654
+ .kv .k { color: #6b7280; }
655
+ .kv .v { font-weight: 500; }
656
+ .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 6mm; }
657
+ .kader { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
658
+ table.regels { width: 100%; border-collapse: collapse; }
659
+ table.regels.vast { table-layout: fixed; }
660
+ table.regels.vast td, table.regels.vast th { overflow-wrap: anywhere; }
661
+ table.regels th, table.regels td { padding: 0.7mm 1mm; vertical-align: top; }
662
+ table.regels th { font-size: 90%; text-transform: uppercase; color: #6b7280; font-weight: 600; text-align: left; }
663
+ .rand { border: 0.2mm solid #d1d5db; }
664
+ .onder { border-bottom: 0.2mm solid #d1d5db; }
665
+ table.regels.compact th, table.regels.compact td { padding: 0.3mm 0.8mm; }
666
+ tr.zebra td { background: #f3f4f6; }
667
+ .plijst { margin: 0; padding-left: 4mm; }
668
+ .groep { margin-bottom: 1.5mm; }
669
+ .regelrij { display: flex; gap: 2mm; }
670
+ .tweekolom { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
671
+ .karblok { margin-bottom: 2mm; }
672
+ .karblok.omkaderd { border: 0.25mm solid #d1d5db; border-radius: 1mm; padding: 1.5mm; }
673
+ .karkop { display: flex; justify-content: space-between; align-items: center; padding: 0.8mm 1.5mm; border-radius: 1mm; margin-bottom: 1mm; }
674
+ .bundel { display: inline-block; border: 0.3mm dashed #6b7280; border-radius: 1mm; padding: 0.4mm 1.5mm; margin-bottom: 1mm; font-weight: 700; text-transform: uppercase; letter-spacing: 0.2mm; font-size: 90%; }
675
+ .laag { margin-bottom: 1.5mm; }
676
+ .laagkop { display: flex; justify-content: space-between; font-weight: 500; border-bottom: 0.2mm solid #d1d5db; padding-bottom: 0.4mm; margin-bottom: 0.6mm; }
677
+ .laagkop.compact { border-bottom: none; }
678
+ .meta { display: flex; gap: 3mm; font-size: 88%; font-weight: 400; color: #4b5563; }
679
+ .totalen { display: flex; flex-wrap: wrap; gap: 5mm; border-top: 0.25mm solid #d1d5db; padding-top: 1.2mm; font-weight: 500; }
680
+ .paginavoet { position: fixed; bottom: 0; left: 0; right: 0; background: #fff; }
681
+ .handtekening { margin-top: 3mm; }
682
+ .lijnveld { margin-top: 4mm; border-bottom: 0.25mm solid #6b7280; padding-bottom: 3mm; }
683
+ .lijnveld.hoog { padding-bottom: 10mm; }
684
+ .lijn { border-top: 0.25mm solid #d1d5db; margin: 1.5mm 0; }
685
+ .balk { height: 1mm; background: #374151; margin: 1.5mm 0; }
686
+ .qr { border: 0.25mm dashed #9ca3af; }
687
+ .streepjes { width: 45mm; background: repeating-linear-gradient(to right, #111827 0 2px, transparent 2px 5px); }
688
+ .klein { font-size: 85%; color: #6b7280; }
689
+ .breekvoor { break-before: page; page-break-before: always; }
690
+ .heelhouden { break-inside: avoid; page-break-inside: avoid; }
691
+ img { max-width: 100%; }
692
+ </style></head>
693
693
  <body>${body}</body></html>`;
694
694
  }
695
695
  /** Handig voor testen: het document met de voorbeeldgegevens. */
@@ -6,10 +6,18 @@ export interface PrintDocumentInput {
6
6
  layoutId?: string;
7
7
  /** Optioneel: specifieke printer. Anders wordt er automatisch gekozen. */
8
8
  printerId?: string;
9
+ /** Optioneel: naam van de werkplek/computer waar dit vandaan komt. */
10
+ werkplek?: string;
9
11
  /** Naam zoals die in de wachtrij verschijnt. */
10
12
  documentnaam: string;
11
13
  kopieen?: number;
12
- /** Vrije data die bij het afdrukken gebruikt wordt. */
14
+ /** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
15
+ herkomst?: string;
16
+ /**
17
+ * Vrije data die bij het afdrukken gebruikt wordt. Geef hierin ALTIJD een
18
+ * order-kenmerk mee (`queue_item_id`, `order_id` of `ordernummer`): daarmee
19
+ * kunnen twee verschillende orders nooit als dubbele aanvraag worden gezien.
20
+ */
13
21
  payload?: Record<string, unknown>;
14
22
  isHerprint?: boolean;
15
23
  }
@@ -29,11 +37,12 @@ export declare class DubbeleAanvraagFout extends Error {
29
37
  */
30
38
  export declare function printDocument(input: PrintDocumentInput): Promise<PrintDocumentResult>;
31
39
  /**
32
- * De printer die aan een documentsoort hangt: eerst de standaard (of nieuwste
33
- * actieve) layout voor die soort, dan de printerkoppeling op die layout, anders
34
- * de koppeling op papierformaat. Geeft `null` als er niets gekoppeld is.
40
+ * De printer die aan een documentsoort hangt: eerst de uitzondering voor de
41
+ * werkplek, dan de standaard (of nieuwste actieve) layout voor die soort met
42
+ * zijn printerkoppeling, anders de koppeling op papierformaat. Geeft `null` als
43
+ * er niets gekoppeld is.
35
44
  */
36
- export declare function printerVoorDocumenttype(documenttype: DocumentType | string, papierformaat?: string): Promise<string | null>;
45
+ export declare function printerVoorDocumenttype(documenttype: DocumentType | string, papierformaat?: string, werkplek?: string): Promise<string | null>;
37
46
  export interface PrintPdfInput {
38
47
  /** Documentsoort, alleen voor overzicht en printerkeuze. */
39
48
  documenttype: DocumentType | string;
@@ -46,8 +55,12 @@ export interface PrintPdfInput {
46
55
  * layout of het papierformaat van de documentsoort.
47
56
  */
48
57
  printerId?: string;
58
+ /** Optioneel: werkplek/computernaam; bepaalt mee welke printer wordt gekozen. */
59
+ werkplek?: string;
49
60
  kopieen?: number;
50
61
  papierformaat?: string;
62
+ /** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
63
+ herkomst?: string;
51
64
  payload?: Record<string, unknown>;
52
65
  isHerprint?: boolean;
53
66
  }
@@ -67,6 +80,8 @@ export interface PrintHtmlInput {
67
80
  /** Verplicht: zonder layout kan de wachtrij zelf geen printer afleiden. */
68
81
  printerId: string;
69
82
  kopieen?: number;
83
+ /** Optioneel: waar de order vandaan komt ("floriday" of "eigen"). */
84
+ herkomst?: string;
70
85
  payload?: Record<string, unknown>;
71
86
  isHerprint?: boolean;
72
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printApi.d.ts","sourceRoot":"","sources":["../../src/lib/printApi.ts"],"names":[],"mappings":"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"}