@flowselections/layout-maker 1.46.1 → 1.51.3

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 (63) hide show
  1. package/dist-lib/components/ComputerVerwijderenDialog.d.ts +16 -0
  2. package/dist-lib/components/ComputerVerwijderenDialog.d.ts.map +1 -0
  3. package/dist-lib/components/ComputerVerwijderenDialog.js +38 -0
  4. package/dist-lib/components/ComputersLijst.d.ts.map +1 -1
  5. package/dist-lib/components/ComputersLijst.js +5 -2
  6. package/dist-lib/components/LayoutPrinterSelect.d.ts +3 -5
  7. package/dist-lib/components/LayoutPrinterSelect.d.ts.map +1 -1
  8. package/dist-lib/components/LayoutPrinterSelect.js +40 -17
  9. package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
  10. package/dist-lib/components/LayoutsPage.js +28 -18
  11. package/dist-lib/components/PrinterSetupWizard.d.ts +3 -1
  12. package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
  13. package/dist-lib/components/PrinterSetupWizard.js +13 -4
  14. package/dist-lib/components/PrinterVervangenDialog.d.ts +14 -0
  15. package/dist-lib/components/PrinterVervangenDialog.d.ts.map +1 -0
  16. package/dist-lib/components/PrinterVervangenDialog.js +44 -0
  17. package/dist-lib/components/PrintersPage.d.ts.map +1 -1
  18. package/dist-lib/components/PrintersPage.js +2 -2
  19. package/dist-lib/components/PrintplekDetailPage.d.ts.map +1 -1
  20. package/dist-lib/components/PrintplekDetailPage.js +175 -48
  21. package/dist-lib/components/PrintplekVerwijderenDialog.d.ts +9 -0
  22. package/dist-lib/components/PrintplekVerwijderenDialog.d.ts.map +1 -0
  23. package/dist-lib/components/PrintplekVerwijderenDialog.js +34 -0
  24. package/dist-lib/components/PrintplekkenPage.d.ts.map +1 -1
  25. package/dist-lib/components/PrintplekkenPage.js +28 -6
  26. package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -1
  27. package/dist-lib/components/WerkplekConfiguratiePage.js +67 -25
  28. package/dist-lib/index.d.ts +9 -4
  29. package/dist-lib/index.d.ts.map +1 -1
  30. package/dist-lib/index.js +7 -3
  31. package/dist-lib/integrations/supabase/auth-middleware.d.ts +4 -31183
  32. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  33. package/dist-lib/integrations/supabase/auth-middleware.js +1 -1
  34. package/dist-lib/integrations/supabase/client.server.d.ts +2 -31183
  35. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  36. package/dist-lib/integrations/supabase/moduleClient.d.ts +511 -6
  37. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  38. package/dist-lib/integrations/supabase/types.d.ts +527 -6
  39. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  40. package/dist-lib/lib/aiLayout.functions.d.ts +1 -31183
  41. package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
  42. package/dist-lib/lib/documentRoutering.d.ts +2 -1
  43. package/dist-lib/lib/documentRoutering.d.ts.map +1 -1
  44. package/dist-lib/lib/documentRoutering.js +5 -8
  45. package/dist-lib/lib/foutTekst.d.ts +3 -0
  46. package/dist-lib/lib/foutTekst.d.ts.map +1 -0
  47. package/dist-lib/lib/foutTekst.js +25 -0
  48. package/dist-lib/lib/printApi.d.ts.map +1 -1
  49. package/dist-lib/lib/printApi.js +13 -39
  50. package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
  51. package/dist-lib/lib/printQueue.server.js +19 -66
  52. package/dist-lib/lib/printRoutering.d.ts +34 -0
  53. package/dist-lib/lib/printRoutering.d.ts.map +1 -0
  54. package/dist-lib/lib/printRoutering.js +69 -0
  55. package/dist-lib/lib/printService.functions.d.ts +5 -155915
  56. package/dist-lib/lib/printService.functions.d.ts.map +1 -1
  57. package/dist-lib/lib/printplekken.d.ts +67 -2
  58. package/dist-lib/lib/printplekken.d.ts.map +1 -1
  59. package/dist-lib/lib/printplekken.js +141 -10
  60. package/dist-lib/lib/useDocumentData.d.ts +15 -10
  61. package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
  62. package/dist-lib/lib/useDocumentData.js +43 -34
  63. package/package.json +2 -2
@@ -582,88 +582,41 @@ async function zoekPrinter(db, job, layout) {
582
582
  const explicietePlek = leesPrintPlekId(job);
583
583
  // Een Engine-printplek is een harde keuze. Nooit terugvallen op computer,
584
584
  // layout of bedrijfsregels wanneer de Engine een print_plek_id meegaf.
585
+ // Alleen een printer die nog echt aan de plek gekoppeld én actief is telt.
586
+ const plekPrinter = async (plek) => {
587
+ const { data } = await db.rpc("printplek_printer", { _plek: plek, _documenttype: type });
588
+ return typeof data === "string" ? data : null;
589
+ };
585
590
  if (explicietePlek) {
586
- const { data: pp } = await db
587
- .from("document_printplek_printers")
588
- .select("printer_id")
589
- .eq("print_plek_id", explicietePlek)
590
- .eq("documenttype", type)
591
- .maybeSingle();
592
- printer = await pak(pp?.printer_id);
591
+ printer = await pak(await plekPrinter(explicietePlek));
593
592
  if (printer)
594
593
  return { printer, reden: "" };
595
594
  const { data: plek } = await db.from("print_plekken").select("naam").eq("id", explicietePlek).maybeSingle();
596
595
  return {
597
596
  printer: null,
598
- reden: `Printplek '${String(plek?.naam ?? explicietePlek)}' heeft geen printer voor documenttype '${type}'.`,
597
+ reden: `GEEN_PRINTER: printplek '${String(plek?.naam ?? explicietePlek)}' heeft geen gekoppelde printer voor documenttype '${type}'.`,
599
598
  };
600
599
  }
601
- // 2. Regel van de printplek waar de opdracht vandaan komt.
600
+ // 2-5. Gedeelde routering (printplek → werkplek → layout → standaard),
601
+ // dezelfde databasefunctie die het overzicht en layout_print_document
602
+ // gebruiken.
602
603
  const plekId = await zoekPrintPlekId(db, job);
603
- if (plekId) {
604
- const { data: pp } = await db
605
- .from("document_printplek_printers")
606
- .select("printer_id")
607
- .eq("print_plek_id", plekId)
608
- .eq("documenttype", type)
609
- .maybeSingle();
610
- printer = await pak(pp?.printer_id);
611
- if (printer)
612
- return { printer, reden: "" };
613
- }
614
- else if (pickstation) {
604
+ if (!plekId && pickstation) {
615
605
  return {
616
606
  printer: null,
617
607
  reden: `Pickstation '${pickstation}' heeft geen printplek. Koppel dit station aan een printplek.`,
618
608
  };
619
609
  }
620
- // 3. Uitzondering voor de werkplek waar de opdracht vandaan komt.
621
- if (werkplek) {
622
- const { data: wp } = await db
623
- .from("document_werkplek_printers")
624
- .select("printer_id")
625
- .eq("documenttype", type)
626
- .eq("werkplek", werkplek)
627
- .maybeSingle();
628
- printer = await pak(wp?.printer_id);
629
- if (printer)
630
- return { printer, reden: "" };
631
- }
632
- if (layout?.id) {
633
- const { data } = await db
634
- .from("printer_mappings")
635
- .select("printer_id")
636
- .eq("layout_id", layout.id)
637
- .order("prioriteit", { ascending: true })
638
- .limit(1);
639
- printer = await pak(arr(data)[0]?.printer_id);
640
- if (printer)
641
- return { printer, reden: "" };
642
- }
643
- // 4. Bedrijfsbrede standaardregel: eerst op documenttype + papierformaat,
644
- // daarna op documenttype alleen. Geen "pak de enige printer"-noodgreep
645
- // meer: dan zou er stil op de verkeerde printer geprint kunnen worden.
646
- const formaat = layout?.papierformaat ?? "A4";
647
- const { data: fm } = await db
648
- .from("document_formaat_printers")
649
- .select("printer_id")
650
- .eq("documenttype", type)
651
- .eq("formaat_code", formaat)
652
- .maybeSingle();
653
- printer = await pak(fm?.printer_id);
610
+ const { data: route } = await db.rpc("printer_routering", {
611
+ _documenttype: type,
612
+ _print_plek_id: plekId || null,
613
+ _werkplek: werkplek || null,
614
+ _layout_id: layout?.id ?? null,
615
+ _papierformaat: layout?.papierformaat ?? null,
616
+ });
617
+ printer = await pak(route?.printer_id);
654
618
  if (printer)
655
619
  return { printer, reden: "" };
656
- const { data: alle } = await db
657
- .from("document_formaat_printers")
658
- .select("printer_id")
659
- .eq("documenttype", type)
660
- .not("printer_id", "is", null)
661
- .limit(5);
662
- for (const regel of arr(alle)) {
663
- printer = await pak(regel.printer_id);
664
- if (printer)
665
- return { printer, reden: "" };
666
- }
667
620
  if (plekId) {
668
621
  const naam = (await printplekNaamVoorJob(db, job)) ?? "onbekend";
669
622
  return {
@@ -0,0 +1,34 @@
1
+ import type { SupabaseClient } from "@supabase/supabase-js";
2
+ export type RouteringBron = "printplek" | "werkplek" | "layout" | "standaard" | "geen";
3
+ export interface OvergeslagenRegel {
4
+ bron: Exclude<RouteringBron, "geen">;
5
+ regel_id: string;
6
+ printer_id: string | null;
7
+ reden: "ontbreekt" | "inactief" | "niet_bruikbaar";
8
+ }
9
+ export interface RouteringUitkomst {
10
+ bron: RouteringBron;
11
+ printer_id: string | null;
12
+ regel_id: string | null;
13
+ print_plek_id: string | null;
14
+ werkplek: string | null;
15
+ layout_id: string | null;
16
+ papierformaat: string | null;
17
+ overgeslagen: OvergeslagenRegel[];
18
+ }
19
+ export interface RouteringInvoer {
20
+ documenttype: string;
21
+ printplekId?: string | null;
22
+ werkplek?: string | null;
23
+ layoutId?: string | null;
24
+ papierformaat?: string | null;
25
+ }
26
+ /** Roept de gedeelde routering aan; `db` mag de server-client van de shell zijn. */
27
+ export declare function routeringVoor(invoer: RouteringInvoer, db?: SupabaseClient<any, any, any>): Promise<RouteringUitkomst>;
28
+ /** Uitkomst per documentsoort × computer van een printplek (null = zonder computer). */
29
+ export declare function useRouteringOverzicht(printplekId: string, documenttypes: string[], computers: string[]): {
30
+ uitkomsten: Record<string, RouteringUitkomst>;
31
+ laden: boolean;
32
+ reload: () => Promise<void>;
33
+ };
34
+ //# sourceMappingURL=printRoutering.d.ts.map
@@ -0,0 +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,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAEvF,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;CACnC;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;CAC/B;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,CAU5B;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,EAAE;;;;EA+BpB"}
@@ -0,0 +1,69 @@
1
+ // ============================================================================
2
+ // src/lib/printRoutering.ts — dunne laag over de gedeelde databasefunctie
3
+ // `printer_routering`. Dezelfde functie bepaalt de printer bij het echte
4
+ // printen (wachtrij, module-API en layout_print_document), dus wat het
5
+ // overzicht toont is precies wat er gebeurt.
6
+ // ============================================================================
7
+ import { useCallback, useEffect, useState } from "react";
8
+ import { supabase } from "./supabaseClient.js";
9
+ const LEEG = {
10
+ bron: "geen",
11
+ printer_id: null,
12
+ regel_id: null,
13
+ print_plek_id: null,
14
+ werkplek: null,
15
+ layout_id: null,
16
+ papierformaat: null,
17
+ overgeslagen: [],
18
+ };
19
+ function normaliseer(data) {
20
+ if (!data || typeof data !== "object")
21
+ return LEEG;
22
+ const d = data;
23
+ return {
24
+ ...LEEG,
25
+ ...d,
26
+ overgeslagen: Array.isArray(d.overgeslagen) ? d.overgeslagen : [],
27
+ };
28
+ }
29
+ /** Roept de gedeelde routering aan; `db` mag de server-client van de shell zijn. */
30
+ export async function routeringVoor(invoer, db = supabase) {
31
+ const { data, error } = await db.rpc("printer_routering", {
32
+ _documenttype: invoer.documenttype,
33
+ _print_plek_id: invoer.printplekId || null,
34
+ _werkplek: invoer.werkplek?.trim() || null,
35
+ _layout_id: invoer.layoutId || null,
36
+ _papierformaat: invoer.papierformaat || null,
37
+ });
38
+ if (error)
39
+ throw error;
40
+ return normaliseer(data);
41
+ }
42
+ /** Uitkomst per documentsoort × computer van een printplek (null = zonder computer). */
43
+ export function useRouteringOverzicht(printplekId, documenttypes, computers) {
44
+ const [uitkomsten, setUitkomsten] = useState({});
45
+ const [laden, setLaden] = useState(true);
46
+ const sleutelTypes = documenttypes.join("|");
47
+ const sleutelPcs = computers.join("|");
48
+ const load = useCallback(async () => {
49
+ if (!printplekId)
50
+ return;
51
+ const pcs = computers.length ? computers : [null];
52
+ const taken = [];
53
+ for (const t of documenttypes) {
54
+ for (const pc of pcs) {
55
+ taken.push(routeringVoor({ documenttype: t, printplekId, werkplek: pc })
56
+ .catch(() => LEEG)
57
+ .then((u) => [`${t}::${pc ?? ""}`, u]));
58
+ }
59
+ }
60
+ const res = await Promise.all(taken);
61
+ setUitkomsten(Object.fromEntries(res));
62
+ setLaden(false);
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
+ }, [printplekId, sleutelTypes, sleutelPcs]);
65
+ useEffect(() => {
66
+ void load();
67
+ }, [load]);
68
+ return { uitkomsten, laden, reload: load };
69
+ }