@flowselections/logistiek-engine 1.0.151 → 1.0.155

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 (34) hide show
  1. package/dist-lib/components/AutomatischVersturenCard.d.ts.map +1 -1
  2. package/dist-lib/components/AutomatischVersturenCard.js +1 -1
  3. package/dist-lib/components/BeheerPage.d.ts.map +1 -1
  4. package/dist-lib/components/BeheerPage.js +2 -1
  5. package/dist-lib/components/ConsistentieCard.d.ts.map +1 -1
  6. package/dist-lib/components/ConsistentieCard.js +1 -1
  7. package/dist-lib/components/OpruimlijstKarrenCard.d.ts +2 -0
  8. package/dist-lib/components/OpruimlijstKarrenCard.d.ts.map +1 -0
  9. package/dist-lib/components/OpruimlijstKarrenCard.js +42 -0
  10. package/dist-lib/hooks/useWerkwijzeStatus.d.ts.map +1 -1
  11. package/dist-lib/hooks/useWerkwijzeStatus.js +28 -2
  12. package/dist-lib/integrations/supabase/types.d.ts +588 -0
  13. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  14. package/dist-lib/lib/autoSend.d.ts +1 -0
  15. package/dist-lib/lib/autoSend.d.ts.map +1 -1
  16. package/dist-lib/lib/autoSend.functions.d.ts +1 -0
  17. package/dist-lib/lib/autoSend.functions.d.ts.map +1 -1
  18. package/dist-lib/lib/autoSend.functions.js +2 -0
  19. package/dist-lib/lib/autoSend.js +3 -0
  20. package/dist-lib/lib/autoSend.server.d.ts.map +1 -1
  21. package/dist-lib/lib/autoSend.server.js +9 -0
  22. package/dist-lib/lib/floridayCartCarriers.js +1 -1
  23. package/dist-lib/lib/floridayPush.server.js +1 -1
  24. package/dist-lib/lib/handlers/logistics-tick.server.js +8 -0
  25. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  26. package/dist-lib/lib/modulePrompts.js +279 -0
  27. package/dist-lib/lib/moduleVersion.d.ts +1 -1
  28. package/dist-lib/lib/moduleVersion.js +1 -1
  29. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  30. package/dist-lib/lib/ruleEngineSchema.js +8 -1
  31. package/dist-lib/lib/shippingNoteQueue.server.d.ts.map +1 -1
  32. package/dist-lib/lib/shippingNoteQueue.server.js +10 -7
  33. package/dist-lib/lib/stickerRules.js +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AutomatischVersturenCard.d.ts","sourceRoot":"","sources":["../../src/components/AutomatischVersturenCard.tsx"],"names":[],"mappings":"AAMA,wBAAgB,wBAAwB,gCA0CvC"}
1
+ {"version":3,"file":"AutomatischVersturenCard.d.ts","sourceRoot":"","sources":["../../src/components/AutomatischVersturenCard.tsx"],"names":[],"mappings":"AAMA,wBAAgB,wBAAwB,gCA+CvC"}
@@ -18,5 +18,5 @@ export function AutomatischVersturenCard() {
18
18
  };
19
19
  }, [lees]);
20
20
  const jaNee = (v) => (v ? "ja" : "nee");
21
- return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Automatisch versturen" }), _jsx(CardDescription, { children: "Alleen voor Floriday-orders, als \"Automatisch versturen\" in de werkwijze aan staat. Is de sleutel niet op te halen of ontbreekt het Shell-adres, dan wordt er niets verstuurd." })] }), _jsx(CardContent, { className: "space-y-1 text-sm", children: fout ? (_jsxs("p", { className: "text-destructive", children: ["Stand onbekend: ", fout] })) : !stand ? (_jsx("p", { className: "text-muted-foreground", children: "Bezig met controleren\u2026" })) : (_jsxs(_Fragment, { children: [_jsxs("p", { children: ["Sleutel op te halen: ", jaNee(stand.sleutelOpTeHalen), !stand.sleutelOpTeHalen && stand.sleutelReden ? ` (${stand.sleutelReden})` : ""] }), _jsxs("p", { children: ["Shell-adres aanwezig: ", jaNee(stand.adresAanwezig)] })] })) })] }));
21
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Automatisch versturen" }), _jsx(CardDescription, { children: "Alleen voor Floriday-orders, als \"Automatisch versturen\" in de werkwijze aan staat. Is de sleutel niet op te halen of ontbreekt het Shell-adres, dan wordt er niets verstuurd." })] }), _jsx(CardContent, { className: "space-y-1 text-sm", children: fout ? (_jsxs("p", { className: "text-destructive", children: ["Stand onbekend: ", fout] })) : !stand ? (_jsx("p", { className: "text-muted-foreground", children: "Bezig met controleren\u2026" })) : (_jsxs(_Fragment, { children: [_jsxs("p", { children: ["Sleutel op te halen: ", jaNee(stand.sleutelOpTeHalen), !stand.sleutelOpTeHalen && stand.sleutelReden ? ` (${stand.sleutelReden})` : ""] }), _jsxs("p", { children: ["Shell-adres aanwezig: ", jaNee(stand.adresAanwezig)] }), stand.routeOntbreekt ? (_jsx("p", { className: "text-destructive", children: "Het adres voor automatisch versturen bestaat niet in deze Shell. Werk Afhandeling bij en publiceer de Shell opnieuw." })) : null] })) })] }));
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AAqJA,wBAAgB,UAAU,gCAUzB"}
1
+ {"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AAsJA,wBAAgB,UAAU,gCAWzB"}
@@ -13,6 +13,7 @@ import { supabase } from "../integrations/supabase/moduleClient.js";
13
13
  import { RolPoort } from "./RolPoort";
14
14
  import { OudeOrderregelsCard } from "./OudeOrderregelsCard";
15
15
  import { AutomatischVersturenCard } from "./AutomatischVersturenCard";
16
+ import { OpruimlijstKarrenCard } from "./OpruimlijstKarrenCard";
16
17
  import { ENGINE_TOEGANG } from "../hooks/useEngineRollen";
17
18
  function HerindelenBeheer() {
18
19
  const [datum, setDatum] = useState("");
@@ -71,5 +72,5 @@ function HerindelenBeheer() {
71
72
  : `${voor?.geprintOfGepickt ?? 0} order(s) die al geprint of gepickt zijn, blijven ongemoeid.` })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsxs(AlertDialogAction, { onClick: () => void voerUit(), disabled: (voor?.aantal ?? 0) === 0, children: ["Ja, ", voor?.aantal ?? 0, " order(s) opnieuw indelen"] })] })] }) })] }));
72
73
  }
73
74
  export function BeheerPage() {
74
- return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(HerindelenBeheer, {}), _jsx(OudeOrderregelsCard, {}), _jsx(AutomatischVersturenCard, {})] }) }));
75
+ return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(HerindelenBeheer, {}), _jsx(OudeOrderregelsCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
75
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConsistentieCard.d.ts","sourceRoot":"","sources":["../../src/components/ConsistentieCard.tsx"],"names":[],"mappings":"AAuCA,wBAAgB,gBAAgB,gCAuF/B"}
1
+ {"version":3,"file":"ConsistentieCard.d.ts","sourceRoot":"","sources":["../../src/components/ConsistentieCard.tsx"],"names":[],"mappings":"AAuCA,wBAAgB,gBAAgB,gCAsF/B"}
@@ -34,5 +34,5 @@ export function ConsistentieCard() {
34
34
  { label: "Aangemeld in pickwachtrij", waarde: check.announced_carts },
35
35
  ]
36
36
  : [];
37
- return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Scale, { className: "h-5 w-5 text-primary" }), "Zelfde cijfers in elke module"] }), _jsx(CardDescription, { children: "Karren van vandaag per venster. Alle vensters horen hetzelfde te tellen; de lever agenda telt alleen wat vandaag geleverd wordt." })] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => void laden(), disabled: loading, children: _jsx(RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` }) })] }), _jsx(CardContent, { className: "space-y-4", children: loading && !check ? (_jsx(Skeleton, { className: "h-24 w-full" })) : !check ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Geen meting beschikbaar." })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Badge, { variant: check.ok ? "default" : "destructive", children: check.ok ? "Alles gelijk" : "Afwijking gevonden" }), check.orphan_tasks > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.orphan_tasks, " weestaken"] })) : null, (check.duplicate_carts ?? 0) > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.duplicate_carts, " dubbele karren"] })) : null, (check.orphan_carts ?? 0) > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.orphan_carts, " karren uit een oude buffer"] })) : null, _jsxs("span", { className: "text-muted-foreground text-xs", children: ["Peildag ", check.pick_date] })] }), _jsx("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4", children: vensters.map((v) => (_jsxs("div", { className: "rounded-lg border p-3", children: [_jsx("div", { className: "text-muted-foreground text-xs", children: v.label }), _jsx("div", { className: "text-2xl font-semibold tabular-nums", children: v.waarde })] }, v.label))) }), !check.ok ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "E\u00E9n of meer modules tellen anders. Controleer of die module de laatste koppelprompt heeft toegepast; de Engine corrigeert niets zelf." })) : null] })) })] }));
37
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Scale, { className: "h-5 w-5 text-primary" }), "Zelfde cijfers in elke module"] }), _jsx(CardDescription, { children: "Karren van vandaag per venster. Alle vensters horen hetzelfde te tellen; de lever agenda telt alleen wat vandaag geleverd wordt." })] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => void laden(), disabled: loading, children: _jsx(RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` }) })] }), _jsx(CardContent, { className: "space-y-4", children: loading && !check ? (_jsx(Skeleton, { className: "h-24 w-full" })) : !check ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Geen meting beschikbaar." })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Badge, { variant: check.ok ? "default" : "destructive", children: check.ok ? "Alles gelijk" : "Afwijking gevonden" }), check.orphan_tasks > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.orphan_tasks, " weestaken"] })) : null, (check.duplicate_carts ?? 0) > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.duplicate_carts, " dubbele karren"] })) : null, (check.orphan_carts ?? 0) > 0 ? (_jsxs(Badge, { variant: "destructive", children: [check.orphan_carts, " karren uit een oude buffer"] })) : null, _jsxs("span", { className: "text-muted-foreground text-xs", children: ["Peildag ", check.pick_date] })] }), _jsx("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4", children: vensters.map((v) => (_jsxs("div", { className: "rounded-lg border p-3", children: [_jsx("div", { className: "text-muted-foreground text-xs", children: v.label }), _jsx("div", { className: "text-2xl font-semibold tabular-nums", children: v.waarde })] }, v.label))) }), !check.ok ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Aantallen verschillen tussen schermen. Meld dit bij Flow Selections." })) : null] })) })] }));
38
38
  }
@@ -0,0 +1,2 @@
1
+ export declare function OpruimlijstKarrenCard(): import("react").JSX.Element;
2
+ //# sourceMappingURL=OpruimlijstKarrenCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpruimlijstKarrenCard.d.ts","sourceRoot":"","sources":["../../src/components/OpruimlijstKarrenCard.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,qBAAqB,gCAkFpC"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Alleen-lezen opruimlijst van losse karren. Niets verwijderen.
3
+ import { useState } from "react";
4
+ import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle } from "@flowselections/core";
5
+ import { supabase } from "../integrations/supabase/moduleClient.js";
6
+ const GROEPEN = [
7
+ { key: "buffer_bestaat", titel: "Buffer bestaat nog" },
8
+ { key: "buffer_weg", titel: "Buffer weg / geen koppeling" },
9
+ { key: "order_verwijderd", titel: "Order verwijderd" },
10
+ ];
11
+ export function OpruimlijstKarrenCard() {
12
+ const [karren, setKarren] = useState(null);
13
+ const [tellers, setTellers] = useState({});
14
+ const [bezig, setBezig] = useState(false);
15
+ const [fout, setFout] = useState(null);
16
+ const [open, setOpen] = useState(null);
17
+ const laad = async () => {
18
+ setBezig(true);
19
+ setFout(null);
20
+ try {
21
+ const { data, error } = await supabase.rpc("logistics_orphan_carts_list");
22
+ if (error)
23
+ throw error;
24
+ const d = (data ?? {});
25
+ setKarren(Array.isArray(d["karren"]) ? d["karren"] : []);
26
+ setTellers((d["tellers"] ?? {}));
27
+ }
28
+ catch (e) {
29
+ setFout(e?.message ? String(e.message) : "De opruimlijst kon niet worden opgehaald.");
30
+ }
31
+ finally {
32
+ setBezig(false);
33
+ }
34
+ };
35
+ const lijst = Array.isArray(karren) ? karren : [];
36
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Opruimlijst losse karren" }), _jsx(CardDescription, { children: "Alleen bekijken. Er wordt niets verwijderd." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx(Button, { onClick: () => void laad(), disabled: bezig, children: karren ? "Verversen" : "Lijst ophalen" }), fout ? _jsx("p", { className: "text-sm text-destructive", children: fout }) : null, karren
37
+ ? GROEPEN.map((g) => {
38
+ const rijen = lijst.filter((k) => k.groep === g.key);
39
+ return (_jsxs("div", { className: "rounded border border-border", children: [_jsxs("button", { type: "button", className: "flex w-full justify-between p-3 text-left text-sm font-medium", onClick: () => setOpen(open === g.key ? null : g.key), children: [_jsx("span", { children: g.titel }), _jsxs("span", { children: [Number(tellers[g.key] ?? rijen.length), " karren"] })] }), open === g.key ? (_jsx("div", { className: "max-h-96 overflow-auto border-t border-border", children: _jsxs("table", { className: "w-full text-xs", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-left text-muted-foreground", children: [_jsx("th", { className: "p-2", children: "Karnummer" }), _jsx("th", { className: "p-2", children: "Order" }), _jsx("th", { className: "p-2", children: "Buffer" }), _jsx("th", { className: "p-2", children: "Aangemaakt" })] }) }), _jsx("tbody", { children: rijen.map((k) => (_jsxs("tr", { className: "border-t border-border", children: [_jsx("td", { className: "p-2", children: k.cartNumber ?? "—" }), _jsx("td", { className: "p-2", children: k.orderNumber ?? "—" }), _jsx("td", { className: "p-2 font-mono", children: k.bufferId ? k.bufferId.slice(0, 8) : "—" }), _jsx("td", { className: "p-2", children: k.createdAt ? new Date(k.createdAt).toLocaleString("nl-NL") : "—" })] }, k.id))) })] }) })) : null] }, g.key));
40
+ })
41
+ : null] })] }));
42
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useWerkwijzeStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useWerkwijzeStatus.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,GAAG,YAAY,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,kBAAkB;;;;;;;sBAkCS,OAAO,CAAC,MAAM,CAAC;iCAmBJ,OAAO,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;gCA4BiD,OAAO,CAAC;QACzD,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;EA4BH"}
1
+ {"version":3,"file":"useWerkwijzeStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useWerkwijzeStatus.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,GAAG,YAAY,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,kBAAkB;;;;;;;sBA0DS,OAAO,CAAC,MAAM,CAAC;iCAmBJ,OAAO,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;gCA4BiD,OAAO,CAAC;QACzD,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;EA4BH"}
@@ -21,10 +21,36 @@ export function useWerkwijzeStatus() {
21
21
  if (rpcError)
22
22
  throw rpcError;
23
23
  const raw = (data ?? {});
24
+ const werkwijzeId = raw["actieveWerkwijzeId"] ?? null;
25
+ // Naam uit de lijst met werkwijzen, gekoppeld op id (nooit op naam).
26
+ let naam = raw["actieveWerkwijze"] ?? null;
27
+ if (werkwijzeId) {
28
+ try {
29
+ const { data: cfg } = await supabase
30
+ .from("logistics_rule_configs")
31
+ .select("strategy_id")
32
+ .eq("id", werkwijzeId)
33
+ .maybeSingle();
34
+ const sid = cfg?.strategy_id ?? null;
35
+ if (sid) {
36
+ const { data: st } = await supabase
37
+ .from("logistics_strategies")
38
+ .select("name")
39
+ .eq("id", sid)
40
+ .maybeSingle();
41
+ const n = st?.name;
42
+ if (n && n.trim())
43
+ naam = n.trim();
44
+ }
45
+ }
46
+ catch {
47
+ /* naam uit de status blijft staan */
48
+ }
49
+ }
24
50
  setStatus({
25
51
  methode: raw["methode"] === "afmetingen" ? "afmetingen" : "belading",
26
- actieveWerkwijze: raw["actieveWerkwijze"] ?? null,
27
- actieveWerkwijzeId: raw["actieveWerkwijzeId"] ?? null,
52
+ actieveWerkwijze: naam,
53
+ actieveWerkwijzeId: werkwijzeId,
28
54
  karrenVolgensMethode: Number(raw["karrenVolgensMethode"] ?? 0),
29
55
  karrenOudeMethode: Number(raw["karrenOudeMethode"] ?? 0),
30
56
  wachtrij: raw["wachtrij"] ?? {},