@flowselections/logistiek-engine 1.0.29 → 1.0.30

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 (46) hide show
  1. package/README.md +24 -24
  2. package/dist-lib/components/LogistiekEnginePage.d.ts.map +1 -1
  3. package/dist-lib/components/LogistiekEnginePage.js +2 -1
  4. package/dist-lib/components/WerkwijzeHerindelingCard.d.ts +2 -0
  5. package/dist-lib/components/WerkwijzeHerindelingCard.d.ts.map +1 -0
  6. package/dist-lib/components/WerkwijzeHerindelingCard.js +36 -0
  7. package/dist-lib/hooks/useRuleEngine.d.ts.map +1 -1
  8. package/dist-lib/hooks/useRuleEngine.js +7 -4
  9. package/dist-lib/hooks/useWerkwijzeStatus.d.ts +17 -0
  10. package/dist-lib/hooks/useWerkwijzeStatus.d.ts.map +1 -0
  11. package/dist-lib/hooks/useWerkwijzeStatus.js +58 -0
  12. package/dist-lib/index.d.ts +2 -0
  13. package/dist-lib/index.d.ts.map +1 -1
  14. package/dist-lib/index.js +2 -0
  15. package/dist-lib/integrations/supabase/auth-middleware.d.ts +154 -0
  16. package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
  17. package/dist-lib/integrations/supabase/client.d.ts +1516 -159
  18. package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
  19. package/dist-lib/integrations/supabase/client.server.d.ts +154 -0
  20. package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
  21. package/dist-lib/integrations/supabase/moduleClient.d.ts +154 -0
  22. package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
  23. package/dist-lib/integrations/supabase/types.d.ts +154 -0
  24. package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
  25. package/dist-lib/lib/floridayDocuments.functions.d.ts +462 -0
  26. package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
  27. package/dist-lib/lib/floridayDocuments.server.d.ts +7 -1
  28. package/dist-lib/lib/floridayDocuments.server.d.ts.map +1 -1
  29. package/dist-lib/lib/floridayDocuments.server.js +25 -1
  30. package/dist-lib/lib/floridayPush.functions.d.ts +154 -0
  31. package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
  32. package/dist-lib/lib/floridayPush.server.d.ts.map +1 -1
  33. package/dist-lib/lib/floridayPush.server.js +28 -0
  34. package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
  35. package/dist-lib/lib/handlers/logistics-tick.server.js +14 -0
  36. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +770 -0
  37. package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
  38. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +308 -0
  39. package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
  40. package/dist-lib/lib/logisticsRecalculate.functions.d.ts +154 -0
  41. package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
  42. package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
  43. package/dist-lib/lib/modulePrompts.js +2613 -2406
  44. package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
  45. package/dist-lib/lib/ruleEngineSchema.js +7 -0
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # logistiek Engine
2
-
3
- blank project start
4
-
5
- This project was built with [Lovable](https://lovable.dev).
6
-
7
- ## Build with Lovable
8
-
9
- Continue developing this project in the [Lovable editor](https://lovable.dev/projects/316ec9c5-0f01-408a-b7ec-3d4dccf9b65d).
10
-
11
- - **Ship faster**: describe what you want to build and Lovable handles the code.
12
- - **Stay in sync**: every change made in Lovable is committed straight to this repository.
13
- - **Full ownership**: this code is yours. Push to `main` on GitHub and your changes sync back into Lovable, ready for your next prompt.
14
-
15
- ## Development
16
-
17
- Prefer working locally? You need Node.js and npm — [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
18
-
19
- ```sh
20
- git clone <this-repository-url>
21
- cd <repository-name>
22
- npm i
23
- npm run dev
24
- ```
1
+ # logistiek Engine
2
+
3
+ blank project start
4
+
5
+ This project was built with [Lovable](https://lovable.dev).
6
+
7
+ ## Build with Lovable
8
+
9
+ Continue developing this project in the [Lovable editor](https://lovable.dev/projects/316ec9c5-0f01-408a-b7ec-3d4dccf9b65d).
10
+
11
+ - **Ship faster**: describe what you want to build and Lovable handles the code.
12
+ - **Stay in sync**: every change made in Lovable is committed straight to this repository.
13
+ - **Full ownership**: this code is yours. Push to `main` on GitHub and your changes sync back into Lovable, ready for your next prompt.
14
+
15
+ ## Development
16
+
17
+ Prefer working locally? You need Node.js and npm — [install with nvm](https://github.com/nvm-sh/nvm#installing-and-updating).
18
+
19
+ ```sh
20
+ git clone <this-repository-url>
21
+ cd <repository-name>
22
+ npm i
23
+ npm run dev
24
+ ```
@@ -1 +1 @@
1
- {"version":3,"file":"LogistiekEnginePage.d.ts","sourceRoot":"","sources":["../../src/components/LogistiekEnginePage.tsx"],"names":[],"mappings":"AAoEA,wBAAgB,mBAAmB,gCA4OlC"}
1
+ {"version":3,"file":"LogistiekEnginePage.d.ts","sourceRoot":"","sources":["../../src/components/LogistiekEnginePage.tsx"],"names":[],"mappings":"AAsEA,wBAAgB,mBAAmB,gCA+OlC"}
@@ -10,6 +10,7 @@ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent,
10
10
  import { Container, Pencil, Plus, Puzzle, SlidersHorizontal, Trash2, Workflow } from "lucide-react";
11
11
  import { Link } from "@tanstack/react-router";
12
12
  import { StrategieDialog } from "./StrategieDialog";
13
+ import { WerkwijzeHerindelingCard } from "./WerkwijzeHerindelingCard";
13
14
  import { useLogistiekStrategieen, } from "../hooks/useLogistiekStrategieen";
14
15
  const SNELKOPPELINGEN = [
15
16
  {
@@ -62,7 +63,7 @@ export function LogistiekEnginePage() {
62
63
  setEditing(item);
63
64
  setDialogOpen(true);
64
65
  };
65
- return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Hier bepaal je hoe orders in je bedrijf logistiek worden afgehandeld." }), _jsx("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4", children: SNELKOPPELINGEN.map(({ to, icon: Icon, titel, uitleg }) => (_jsx(Link, { to: to, className: "group", children: _jsx(Card, { className: "h-full transition-colors group-hover:border-primary", children: _jsxs(CardHeader, { className: "p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary/10 text-primary", children: _jsx(Icon, { className: "h-4 w-4" }) }), _jsx(CardTitle, { className: "text-sm font-semibold leading-tight", children: titel })] }), _jsx(CardDescription, { className: "pt-1 text-xs leading-relaxed", children: uitleg })] }) }) }, to))) }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx(CardTitle, { children: "Werkwijzen" }), _jsx(CardDescription, { children: "Alleen een werkwijze die aan staat wordt op je orders toegepast." })] }), _jsxs(Button, { size: "sm", onClick: openNew, children: [_jsx(Plus, { className: "h-4 w-4" }), "Nieuwe werkwijze"] })] }) }), _jsx(CardContent, { children: loading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-8 w-full" }), _jsx(Skeleton, { className: "h-8 w-full" }), _jsx(Skeleton, { className: "h-8 w-full" })] })) : error ? (_jsx("p", { className: "text-sm text-destructive", children: "Kon de gegevens niet ophalen. Probeer het over een moment opnieuw." })) : safeItems.length === 0 ? (_jsxs("div", { className: "space-y-3", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Je hebt nog geen werkwijze ingesteld." }), _jsxs(Button, { variant: "outline", size: "sm", onClick: openNew, children: [_jsx(Plus, { className: "h-4 w-4" }), "Eerste werkwijze aanmaken"] })] })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { className: "w-48 text-right", children: "Acties" })] }) }), _jsx(TableBody, { children: safeItems.map((item) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "h-3 w-3 shrink-0 rounded-full border border-border", style: { backgroundColor: item.color ?? "#3b82f6" } }), _jsxs("div", { children: [_jsx("p", { className: "font-medium", children: item.name ?? "—" }), item.description && (_jsx("p", { className: "text-xs text-muted-foreground", children: item.description }))] })] }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx("input", { type: "radio", name: "actieve-werkwijze", className: "h-4 w-4 accent-primary", checked: !!item.is_active, disabled: saving, onChange: () => kiesWerkwijze(item), "aria-label": `${item.name ?? "Werkwijze"} als actieve werkwijze kiezen` }), _jsx("span", { className: "sr-only", children: "Actief" })] }), _jsx(Badge, { variant: item.is_active ? "default" : "secondary", children: item.is_active ? "Actief" : "Uit" }), item.is_active && (_jsx(Button, { size: "sm", variant: "ghost", disabled: saving, onClick: () => void clearActive(), children: "Uitzetten" }))] }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx(Button, { size: "sm", variant: "outline", asChild: true, children: _jsxs(Link, { to: "/logistiek-engine/rule-engine", search: { strategy: String(item.id), naam: item.name ?? "" }, children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), "Instellen"] }) }), _jsx(Button, { size: "icon", variant: "ghost", onClick: () => openEdit(item), "aria-label": "Bewerken", children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx(Button, { size: "icon", variant: "ghost", onClick: () => setDeleting(item), "aria-label": "Verwijderen", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }, String(item.id)))) })] })) })] }), _jsx(StrategieDialog, { open: dialogOpen, onOpenChange: setDialogOpen, strategie: editing, saving: saving, onSubmit: (input) => (editing ? update(editing.id, input) : create(input)) }), _jsx(AlertDialog, { open: !!deleting, onOpenChange: (open) => !open && setDeleting(null), children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Werkwijze verwijderen?" }), _jsxs(AlertDialogDescription, { children: ["\"", deleting?.name, "\" wordt definitief verwijderd. Dit kan niet ongedaan worden gemaakt."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { onClick: async () => {
66
+ return (_jsxs("main", { className: "p-6 space-y-6", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Hier bepaal je hoe orders in je bedrijf logistiek worden afgehandeld." }), _jsx("div", { className: "grid gap-3 sm:grid-cols-2 lg:grid-cols-4", children: SNELKOPPELINGEN.map(({ to, icon: Icon, titel, uitleg }) => (_jsx(Link, { to: to, className: "group", children: _jsx(Card, { className: "h-full transition-colors group-hover:border-primary", children: _jsxs(CardHeader, { className: "p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-primary/10 text-primary", children: _jsx(Icon, { className: "h-4 w-4" }) }), _jsx(CardTitle, { className: "text-sm font-semibold leading-tight", children: titel })] }), _jsx(CardDescription, { className: "pt-1 text-xs leading-relaxed", children: uitleg })] }) }) }, to))) }), _jsx(WerkwijzeHerindelingCard, {}), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { children: [_jsx(CardTitle, { children: "Werkwijzen" }), _jsx(CardDescription, { children: "Alleen een werkwijze die aan staat wordt op je orders toegepast." })] }), _jsxs(Button, { size: "sm", onClick: openNew, children: [_jsx(Plus, { className: "h-4 w-4" }), "Nieuwe werkwijze"] })] }) }), _jsx(CardContent, { children: loading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-8 w-full" }), _jsx(Skeleton, { className: "h-8 w-full" }), _jsx(Skeleton, { className: "h-8 w-full" })] })) : error ? (_jsx("p", { className: "text-sm text-destructive", children: "Kon de gegevens niet ophalen. Probeer het over een moment opnieuw." })) : safeItems.length === 0 ? (_jsxs("div", { className: "space-y-3", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Je hebt nog geen werkwijze ingesteld." }), _jsxs(Button, { variant: "outline", size: "sm", onClick: openNew, children: [_jsx(Plus, { className: "h-4 w-4" }), "Eerste werkwijze aanmaken"] })] })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Naam" }), _jsx(TableHead, { children: "Status" }), _jsx(TableHead, { className: "w-48 text-right", children: "Acties" })] }) }), _jsx(TableBody, { children: safeItems.map((item) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "h-3 w-3 shrink-0 rounded-full border border-border", style: { backgroundColor: item.color ?? "#3b82f6" } }), _jsxs("div", { children: [_jsx("p", { className: "font-medium", children: item.name ?? "—" }), item.description && (_jsx("p", { className: "text-xs text-muted-foreground", children: item.description }))] })] }) }), _jsx(TableCell, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx("input", { type: "radio", name: "actieve-werkwijze", className: "h-4 w-4 accent-primary", checked: !!item.is_active, disabled: saving, onChange: () => kiesWerkwijze(item), "aria-label": `${item.name ?? "Werkwijze"} als actieve werkwijze kiezen` }), _jsx("span", { className: "sr-only", children: "Actief" })] }), _jsx(Badge, { variant: item.is_active ? "default" : "secondary", children: item.is_active ? "Actief" : "Uit" }), item.is_active && (_jsx(Button, { size: "sm", variant: "ghost", disabled: saving, onClick: () => void clearActive(), children: "Uitzetten" }))] }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx(Button, { size: "sm", variant: "outline", asChild: true, children: _jsxs(Link, { to: "/logistiek-engine/rule-engine", search: { strategy: String(item.id), naam: item.name ?? "" }, children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), "Instellen"] }) }), _jsx(Button, { size: "icon", variant: "ghost", onClick: () => openEdit(item), "aria-label": "Bewerken", children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx(Button, { size: "icon", variant: "ghost", onClick: () => setDeleting(item), "aria-label": "Verwijderen", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }, String(item.id)))) })] })) })] }), _jsx(StrategieDialog, { open: dialogOpen, onOpenChange: setDialogOpen, strategie: editing, saving: saving, onSubmit: (input) => (editing ? update(editing.id, input) : create(input)) }), _jsx(AlertDialog, { open: !!deleting, onOpenChange: (open) => !open && setDeleting(null), children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Werkwijze verwijderen?" }), _jsxs(AlertDialogDescription, { children: ["\"", deleting?.name, "\" wordt definitief verwijderd. Dit kan niet ongedaan worden gemaakt."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: "Annuleren" }), _jsx(AlertDialogAction, { onClick: async () => {
66
67
  if (deleting)
67
68
  await remove(deleting.id);
68
69
  setDeleting(null);
@@ -0,0 +1,2 @@
1
+ export declare function WerkwijzeHerindelingCard(): import("react").JSX.Element;
2
+ //# sourceMappingURL=WerkwijzeHerindelingCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WerkwijzeHerindelingCard.d.ts","sourceRoot":"","sources":["../../src/components/WerkwijzeHerindelingCard.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,wBAAwB,gCAoGvC"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ // ============================================================================
3
+ // src/components/WerkwijzeHerindelingCard.tsx — welke methode geldt er echt?
4
+ // ============================================================================
5
+ // Toont de methode van de actieve werkwijze, hoeveel karren nog volgens een
6
+ // oudere methode zijn berekend en de stand van de verwerking. Alles komt uit de
7
+ // Engine-functies; hier wordt niets zelf berekend.
8
+ // GEEN <Header /> hier — die levert de shell.
9
+ // ============================================================================
10
+ import { useState } from "react";
11
+ import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Skeleton, } from "@flowselections/core";
12
+ import { RefreshCw, RotateCcw, Ruler, Boxes } from "lucide-react";
13
+ import { useWerkwijzeStatus } from "../hooks/useWerkwijzeStatus";
14
+ const METHODE_LABEL = {
15
+ belading: "Indelen op basis van belading",
16
+ afmetingen: "Indelen op basis van afmetingen",
17
+ };
18
+ export function WerkwijzeHerindelingCard() {
19
+ const { status, loading, busy, error, refresh, herindelen } = useWerkwijzeStatus();
20
+ const [melding, setMelding] = useState(null);
21
+ const wachtrij = status?.wachtrij ?? {};
22
+ const pending = Number(wachtrij["pending"] ?? 0);
23
+ const blocked = Number(wachtrij["geblokkeerd"] ?? 0);
24
+ const opnieuw = async () => {
25
+ try {
26
+ const n = await herindelen();
27
+ setMelding(n === 0
28
+ ? "Er stonden geen orders open om opnieuw in te delen."
29
+ : `${n} order(s) opnieuw aangemeld. De indeling wordt op de achtergrond bijgewerkt.`);
30
+ }
31
+ catch (e) {
32
+ setMelding(e?.message ? String(e.message) : "Opnieuw indelen is niet gelukt.");
33
+ }
34
+ };
35
+ 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: [status?.methode === "afmetingen" ? (_jsx(Ruler, { className: "h-4 w-4" })) : (_jsx(Boxes, { className: "h-4 w-4" })), "Werkwijze en herindeling"] }), _jsx(CardDescription, { children: "Zo worden karren op dit moment samengesteld. Verandert de methode, dan worden alle openstaande orders automatisch opnieuw ingedeeld." })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: () => void refresh(), disabled: loading, children: [_jsx(RefreshCw, { className: "h-4 w-4" }), "Verversen"] }), _jsxs(Button, { size: "sm", onClick: () => void opnieuw(), disabled: busy, children: [_jsx(RotateCcw, { className: "h-4 w-4" }), "Alles opnieuw indelen"] })] })] }), _jsx(CardContent, { className: "space-y-3", children: loading ? (_jsx(Skeleton, { className: "h-16 w-full" })) : error ? (_jsx("p", { className: "text-sm text-destructive", children: error })) : status ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Badge, { children: METHODE_LABEL[status.methode] ?? status.methode }), status.actieveWerkwijze ? (_jsxs("span", { className: "text-sm text-muted-foreground", children: ["volgens werkwijze \u201C", status.actieveWerkwijze, "\u201D"] })) : (_jsx("span", { className: "text-sm text-muted-foreground", children: "Er staat geen werkwijze aan; er wordt op belading ingedeeld." }))] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-3", children: [_jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Karren volgens deze methode" }), _jsx("p", { className: "text-lg font-semibold", children: status.karrenVolgensMethode })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Karren van een oudere methode" }), _jsx("p", { className: "text-lg font-semibold", children: status.karrenOudeMethode })] }), _jsxs("div", { className: "rounded-md border p-3", children: [_jsx("p", { className: "text-xs text-muted-foreground", children: "Wacht op indelen" }), _jsx("p", { className: "text-lg font-semibold", children: pending }), blocked > 0 ? (_jsxs("p", { className: "text-xs text-destructive", children: [blocked, " geblokkeerd"] })) : null] })] }), status.karrenOudeMethode > 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Deze karren zijn nog met een eerdere methode berekend. Ze worden vervangen zodra de order opnieuw is ingedeeld; al geprinte of gecontroleerde karren blijven staan." })) : null, melding ? _jsx("p", { className: "text-sm", children: melding }) : null] })) : null })] }));
36
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useRuleEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/useRuleEngine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsC,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEtG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;;;;;;;;;yBAwF3C,MAAM,gBAAgB,MAAM;8BA2BE,MAAM,YAAY,kBAAkB;yBAUhE,UAAU,YAAY;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;+BA4CtD,MAAM;8BA+BP,WAAW;6BAYqB,MAAM;;EA4BzD"}
1
+ {"version":3,"file":"useRuleEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/useRuleEngine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsC,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEtG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;;;;;;;;;yBAwF3C,MAAM,gBAAgB,MAAM;8BA2BE,MAAM,YAAY,kBAAkB;yBAUhE,UAAU,YAAY;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;+BA4CtD,MAAM;8BAmCP,WAAW;6BAYqB,MAAM;;EA4BzD"}
@@ -164,10 +164,13 @@ export function useRuleEngine(options) {
164
164
  }
165
165
  }, [loadVersions]);
166
166
  const activateConfig = useCallback(async (configId) => {
167
- // Binnen dezelfde strategie mag er maar één configuratie actief zijn.
168
- let reset = db().from("logistics_rule_configs").update({ is_active: false }).neq("id", configId);
169
- reset = strategyId ? reset.eq("strategy_id", strategyId) : reset.is("strategy_id", null);
170
- const { error: resetError } = await reset;
167
+ // Er mag in de hele module maar één werkwijze actief zijn: anders leest de
168
+ // planner een andere werkwijze dan het scherm toont.
169
+ const { error: resetError } = await db()
170
+ .from("logistics_rule_configs")
171
+ .update({ is_active: false })
172
+ .neq("id", configId)
173
+ .eq("is_active", true);
171
174
  if (resetError) {
172
175
  toast.error("Activeren mislukt");
173
176
  return;
@@ -0,0 +1,17 @@
1
+ export interface WerkwijzeStatus {
2
+ methode: "belading" | "afmetingen";
3
+ actieveWerkwijze: string | null;
4
+ actieveWerkwijzeId: string | null;
5
+ karrenVolgensMethode: number;
6
+ karrenOudeMethode: number;
7
+ wachtrij: Record<string, number>;
8
+ }
9
+ export declare function useWerkwijzeStatus(): {
10
+ status: WerkwijzeStatus | null;
11
+ loading: boolean;
12
+ busy: boolean;
13
+ error: string | null;
14
+ refresh: () => Promise<void>;
15
+ herindelen: () => Promise<number>;
16
+ };
17
+ //# sourceMappingURL=useWerkwijzeStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWerkwijzeStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useWerkwijzeStatus.ts"],"names":[],"mappings":"AAUA,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;;;;;;sBAiCS,OAAO,CAAC,MAAM,CAAC;EAezD"}
@@ -0,0 +1,58 @@
1
+ // ============================================================================
2
+ // src/hooks/useWerkwijzeStatus.ts — welke indelingsmethode geldt er echt?
3
+ // ============================================================================
4
+ // De Engine is de enige bron: alles komt uit public.logistics_layout_method_status
5
+ // en public.logistics_replan_all. Hier wordt niets zelf berekend.
6
+ // ============================================================================
7
+ import { useCallback, useEffect, useState } from "react";
8
+ import { supabase } from "../integrations/supabase/moduleClient";
9
+ export function useWerkwijzeStatus() {
10
+ const [status, setStatus] = useState(null);
11
+ const [loading, setLoading] = useState(true);
12
+ const [busy, setBusy] = useState(false);
13
+ const [error, setError] = useState(null);
14
+ const load = useCallback(async () => {
15
+ setLoading(true);
16
+ setError(null);
17
+ try {
18
+ const { data, error: rpcError } = await supabase.rpc("logistics_layout_method_status");
19
+ if (rpcError)
20
+ throw rpcError;
21
+ const raw = (data ?? {});
22
+ setStatus({
23
+ methode: raw["methode"] === "afmetingen" ? "afmetingen" : "belading",
24
+ actieveWerkwijze: raw["actieveWerkwijze"] ?? null,
25
+ actieveWerkwijzeId: raw["actieveWerkwijzeId"] ?? null,
26
+ karrenVolgensMethode: Number(raw["karrenVolgensMethode"] ?? 0),
27
+ karrenOudeMethode: Number(raw["karrenOudeMethode"] ?? 0),
28
+ wachtrij: raw["wachtrij"] ?? {},
29
+ });
30
+ }
31
+ catch (e) {
32
+ setError(e?.message ? String(e.message) : "Status kon niet worden opgehaald.");
33
+ }
34
+ finally {
35
+ setLoading(false);
36
+ }
37
+ }, []);
38
+ useEffect(() => {
39
+ void load();
40
+ }, [load]);
41
+ /** Alle open orders opnieuw laten indelen volgens de actieve methode. */
42
+ const herindelen = useCallback(async () => {
43
+ setBusy(true);
44
+ try {
45
+ const { data, error: rpcError } = await supabase.rpc("logistics_replan_all", {
46
+ p_reason: "handmatig_herindelen",
47
+ });
48
+ if (rpcError)
49
+ throw rpcError;
50
+ await load();
51
+ return Number(data?.aangemeld ?? 0);
52
+ }
53
+ finally {
54
+ setBusy(false);
55
+ }
56
+ }, [load]);
57
+ return { status, loading, busy, error, refresh: load, herindelen };
58
+ }
@@ -13,6 +13,8 @@ export { ConsistentieCard } from './components/ConsistentieCard';
13
13
  export { KarplanStatusCard } from './components/KarplanStatusCard';
14
14
  export { GeblokkeerdeOrdersCard } from './components/GeblokkeerdeOrdersCard';
15
15
  export { AfmetingenBronnenCard } from './components/AfmetingenBronnenCard';
16
+ export { WerkwijzeHerindelingCard } from './components/WerkwijzeHerindelingCard';
17
+ export * from './hooks/useWerkwijzeStatus';
16
18
  export * from './hooks/usePrintjobs';
17
19
  export * from './components/VertragingMeldingenCard';
18
20
  export * from './components/CapaciteitMeldingenCard';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,cAAc,sBAAsB,CAAC;AAErC,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AAMpD,eAAO,MAAM,qBAAqB,EAAE,UAcnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qCAAqC,CAAC;AAMpD,eAAO,MAAM,qBAAqB,EAAE,UAcnC,CAAC"}
package/dist-lib/index.js CHANGED
@@ -16,6 +16,8 @@ export { ConsistentieCard } from './components/ConsistentieCard';
16
16
  export { KarplanStatusCard } from './components/KarplanStatusCard';
17
17
  export { GeblokkeerdeOrdersCard } from './components/GeblokkeerdeOrdersCard';
18
18
  export { AfmetingenBronnenCard } from './components/AfmetingenBronnenCard';
19
+ export { WerkwijzeHerindelingCard } from './components/WerkwijzeHerindelingCard';
20
+ export * from './hooks/useWerkwijzeStatus';
19
21
  export * from './hooks/usePrintjobs';
20
22
  export * from './components/VertragingMeldingenCard';
21
23
  export * from './components/CapaciteitMeldingenCard';
@@ -2155,6 +2155,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2155
2155
  created_at: string;
2156
2156
  currency: string;
2157
2157
  distribute_over: string | null;
2158
+ external_id: string | null;
2159
+ external_synced_at: string | null;
2158
2160
  group_type: string;
2159
2161
  handling_fee: number | null;
2160
2162
  id: string;
@@ -2167,6 +2169,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2167
2169
  rounding: string;
2168
2170
  rounding_step: number;
2169
2171
  sort_order: number;
2172
+ source: string;
2170
2173
  unit: string;
2171
2174
  updated_at: string;
2172
2175
  };
@@ -2177,6 +2180,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2177
2180
  created_at?: string;
2178
2181
  currency?: string;
2179
2182
  distribute_over?: string | null;
2183
+ external_id?: string | null;
2184
+ external_synced_at?: string | null;
2180
2185
  group_type?: string;
2181
2186
  handling_fee?: number | null;
2182
2187
  id?: string;
@@ -2189,6 +2194,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2189
2194
  rounding?: string;
2190
2195
  rounding_step?: number;
2191
2196
  sort_order?: number;
2197
+ source?: string;
2192
2198
  unit?: string;
2193
2199
  updated_at?: string;
2194
2200
  };
@@ -2199,6 +2205,8 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2199
2205
  created_at?: string;
2200
2206
  currency?: string;
2201
2207
  distribute_over?: string | null;
2208
+ external_id?: string | null;
2209
+ external_synced_at?: string | null;
2202
2210
  group_type?: string;
2203
2211
  handling_fee?: number | null;
2204
2212
  id?: string;
@@ -2211,6 +2219,7 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
2211
2219
  rounding?: string;
2212
2220
  rounding_step?: number;
2213
2221
  sort_order?: number;
2222
+ source?: string;
2214
2223
  unit?: string;
2215
2224
  updated_at?: string;
2216
2225
  };
@@ -9074,6 +9083,30 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
9074
9083
  referencedColumns: ["id"];
9075
9084
  }];
9076
9085
  };
9086
+ job_locks: {
9087
+ Row: {
9088
+ created_at: string;
9089
+ lock_key: string;
9090
+ locked_until: string;
9091
+ owner: string | null;
9092
+ updated_at: string;
9093
+ };
9094
+ Insert: {
9095
+ created_at?: string;
9096
+ lock_key: string;
9097
+ locked_until: string;
9098
+ owner?: string | null;
9099
+ updated_at?: string;
9100
+ };
9101
+ Update: {
9102
+ created_at?: string;
9103
+ lock_key?: string;
9104
+ locked_until?: string;
9105
+ owner?: string | null;
9106
+ updated_at?: string;
9107
+ };
9108
+ Relationships: [];
9109
+ };
9077
9110
  layout_logos: {
9078
9111
  Row: {
9079
9112
  bestand_url: string;
@@ -13619,6 +13652,27 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
13619
13652
  };
13620
13653
  Relationships: [];
13621
13654
  };
13655
+ pick_buffer_event_cursor: {
13656
+ Row: {
13657
+ created_at: string;
13658
+ id: boolean;
13659
+ last_event_at: string;
13660
+ updated_at: string;
13661
+ };
13662
+ Insert: {
13663
+ created_at?: string;
13664
+ id?: boolean;
13665
+ last_event_at?: string;
13666
+ updated_at?: string;
13667
+ };
13668
+ Update: {
13669
+ created_at?: string;
13670
+ id?: boolean;
13671
+ last_event_at?: string;
13672
+ updated_at?: string;
13673
+ };
13674
+ Relationships: [];
13675
+ };
13622
13676
  pick_countries: {
13623
13677
  Row: {
13624
13678
  active: boolean;
@@ -22135,6 +22189,17 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22135
22189
  };
22136
22190
  Returns: boolean;
22137
22191
  };
22192
+ floriday_adopt_connection: {
22193
+ Args: {
22194
+ p_new: string;
22195
+ p_old: string;
22196
+ };
22197
+ Returns: import("./types").Json;
22198
+ };
22199
+ floriday_autoheal_connections: {
22200
+ Args: never;
22201
+ Returns: import("./types").Json;
22202
+ };
22138
22203
  floriday_capture_stock_snapshot: {
22139
22204
  Args: never;
22140
22205
  Returns: number;
@@ -22192,6 +22257,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22192
22257
  };
22193
22258
  Returns: undefined;
22194
22259
  };
22260
+ floriday_relink_products: {
22261
+ Args: {
22262
+ p_connection_id?: string;
22263
+ };
22264
+ Returns: import("./types").Json;
22265
+ };
22195
22266
  floriday_requeue_dead_letters: {
22196
22267
  Args: {
22197
22268
  p_connection_id?: string;
@@ -22813,6 +22884,10 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22813
22884
  };
22814
22885
  Returns: string;
22815
22886
  };
22887
+ logistics_active_layout_method: {
22888
+ Args: never;
22889
+ Returns: string;
22890
+ };
22816
22891
  logistics_active_pick_workdays: {
22817
22892
  Args: never;
22818
22893
  Returns: string[];
@@ -22902,6 +22977,39 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
22902
22977
  };
22903
22978
  Returns: import("./types").Json;
22904
22979
  };
22980
+ logistics_buffer_detach_late_orders: {
22981
+ Args: {
22982
+ p_buffer?: string;
22983
+ };
22984
+ Returns: import("./types").Json;
22985
+ };
22986
+ logistics_buffer_frozen_order: {
22987
+ Args: {
22988
+ p_order_id: string;
22989
+ };
22990
+ Returns: boolean;
22991
+ };
22992
+ logistics_buffer_handled: {
22993
+ Args: {
22994
+ p_buffer: string;
22995
+ };
22996
+ Returns: boolean;
22997
+ };
22998
+ logistics_buffer_notify: {
22999
+ Args: {
23000
+ p_event_type: string;
23001
+ p_idempotency_key: string;
23002
+ p_order_ref: string;
23003
+ p_payload: import("./types").Json;
23004
+ };
23005
+ Returns: string;
23006
+ };
23007
+ logistics_buffer_open_key: {
23008
+ Args: {
23009
+ p_base_key: string;
23010
+ };
23011
+ Returns: string;
23012
+ };
22905
23013
  logistics_buffer_simulate: {
22906
23014
  Args: {
22907
23015
  p_orders?: import("./types").Json;
@@ -23543,6 +23651,16 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
23543
23651
  };
23544
23652
  Returns: boolean;
23545
23653
  };
23654
+ logistics_layout_method_status: {
23655
+ Args: never;
23656
+ Returns: import("./types").Json;
23657
+ };
23658
+ logistics_link_order_items: {
23659
+ Args: {
23660
+ p_order?: string;
23661
+ };
23662
+ Returns: import("./types").Json;
23663
+ };
23546
23664
  logistics_live_carriers: {
23547
23665
  Args: {
23548
23666
  p_order_ref: string;
@@ -23569,6 +23687,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
23569
23687
  };
23570
23688
  Returns: string;
23571
23689
  };
23690
+ logistics_normalize_product_label: {
23691
+ Args: {
23692
+ p_label: string;
23693
+ };
23694
+ Returns: string;
23695
+ };
23572
23696
  logistics_not_past: {
23573
23697
  Args: {
23574
23698
  p_ts: string;
@@ -23816,6 +23940,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
23816
23940
  };
23817
23941
  Returns: import("./types").Json;
23818
23942
  };
23943
+ logistics_replan_all: {
23944
+ Args: {
23945
+ p_reason?: string;
23946
+ };
23947
+ Returns: import("./types").Json;
23948
+ };
23819
23949
  logistics_report_delay: {
23820
23950
  Args: {
23821
23951
  p_expected_date?: string;
@@ -23869,6 +23999,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
23869
23999
  };
23870
24000
  Returns: import("./types").Json;
23871
24001
  };
24002
+ logistics_resolve_product_id: {
24003
+ Args: {
24004
+ p_label: string;
24005
+ };
24006
+ Returns: string;
24007
+ };
23872
24008
  logistics_resolve_settings: {
23873
24009
  Args: {
23874
24010
  p_config_id: string;
@@ -24186,6 +24322,10 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
24186
24322
  online: boolean;
24187
24323
  }[];
24188
24324
  };
24325
+ pick_apply_buffer_events: {
24326
+ Args: never;
24327
+ Returns: import("./types").Json;
24328
+ };
24189
24329
  pick_available_pick_days: {
24190
24330
  Args: {
24191
24331
  _max_days?: number;
@@ -25113,6 +25253,12 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
25113
25253
  };
25114
25254
  Returns: boolean;
25115
25255
  };
25256
+ release_job_lock: {
25257
+ Args: {
25258
+ _key: string;
25259
+ };
25260
+ Returns: undefined;
25261
+ };
25116
25262
  release_local_pdf_job: {
25117
25263
  Args: {
25118
25264
  _job_id: string;
@@ -25801,6 +25947,14 @@ export declare const requireSupabaseAuth: import("@tanstack/start-client-core").
25801
25947
  row_count: number;
25802
25948
  }[];
25803
25949
  };
25950
+ try_acquire_job_lock: {
25951
+ Args: {
25952
+ _key: string;
25953
+ _owner?: string;
25954
+ _seconds?: number;
25955
+ };
25956
+ Returns: boolean;
25957
+ };
25804
25958
  try_debtor_lock: {
25805
25959
  Args: {
25806
25960
  _group_key: string;