@flowselections/logistiek-engine 1.0.104 → 1.0.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/FlowOrders.js +1 -1
- package/dist-lib/components/MinuutrondeCard.d.ts +2 -0
- package/dist-lib/components/MinuutrondeCard.d.ts.map +1 -0
- package/dist-lib/components/MinuutrondeCard.js +32 -0
- package/dist-lib/components/MisluktVerzendbrievenCard.js +1 -1
- package/dist-lib/components/RegiePage.d.ts.map +1 -1
- package/dist-lib/components/RegiePage.js +2 -1
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts +2 -0
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.d.ts.map +1 -0
- package/dist-lib/components/rule-engine/FloridayConnectionBanner.js +41 -0
- package/dist-lib/hooks/useAfrondWachtrij.js +1 -1
- package/dist-lib/hooks/useBeladingsafwijkingen.js +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +1 -1
- package/dist-lib/hooks/useLogisticsTrace.js +1 -1
- package/dist-lib/hooks/useMinuutronde.d.ts +24 -0
- package/dist-lib/hooks/useMinuutronde.d.ts.map +1 -0
- package/dist-lib/hooks/useMinuutronde.js +37 -0
- package/dist-lib/hooks/useOrderTrace.js +1 -1
- package/dist-lib/hooks/useOrderVersies.js +1 -1
- package/dist-lib/hooks/usePlanWachtrij.js +1 -1
- package/dist-lib/hooks/useRecalcJob.js +1 -1
- package/dist-lib/hooks/useTaakGezondheid.js +1 -1
- package/dist-lib/hooks/useWerktijden.js +1 -1
- package/dist-lib/hooks/useWerkwijzeStatus.js +1 -1
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +4 -31805
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/auth-middleware.js +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +20293 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -0
- package/dist-lib/integrations/supabase/client.js +13 -0
- package/dist-lib/integrations/supabase/client.server.d.ts +337 -3
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.js +1 -1
- package/dist-lib/integrations/supabase/moduleClient.d.ts +337 -3
- package/dist-lib/integrations/supabase/moduleClient.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +341 -3
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/attachAuthToken.js +1 -1
- package/dist-lib/lib/cartCoverage.functions.d.ts +1 -31805
- package/dist-lib/lib/cartCoverage.functions.d.ts.map +1 -1
- package/dist-lib/lib/cartCoverage.functions.js +3 -3
- package/dist-lib/lib/floridayDocuments.functions.d.ts +3 -95415
- package/dist-lib/lib/floridayDocuments.functions.d.ts.map +1 -1
- package/dist-lib/lib/floridayDocuments.functions.js +5 -5
- package/dist-lib/lib/floridayPush.functions.d.ts +1 -31805
- package/dist-lib/lib/floridayPush.functions.d.ts.map +1 -1
- package/dist-lib/lib/floridayPush.functions.js +3 -3
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts +11 -1
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +11 -4
- package/dist-lib/lib/handlers/logistics-tick.test.js +7 -0
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts +5 -159025
- package/dist-lib/lib/loadCarrierPlanning.functions.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.functions.js +7 -7
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts +2 -63610
- package/dist-lib/lib/logisticsRecalcJob.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.functions.js +4 -4
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts +1 -31805
- package/dist-lib/lib/logisticsRecalculate.functions.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalculate.functions.js +2 -2
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +35 -0
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/plannerDiff.functions.d.ts +1 -31805
- package/dist-lib/lib/plannerDiff.functions.d.ts.map +1 -1
- package/dist-lib/lib/plannerDiff.functions.js +3 -3
- package/dist-lib/lib/quarantineFilter.test.d.ts +2 -0
- package/dist-lib/lib/quarantineFilter.test.d.ts.map +1 -0
- package/dist-lib/lib/quarantineFilter.test.js +18 -0
- package/package.json +159 -159
|
@@ -11,7 +11,7 @@ import { useEffect, useMemo, useState } from "react";
|
|
|
11
11
|
import { Badge, Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Skeleton, } from "@flowselections/core";
|
|
12
12
|
import { AlertTriangle, CheckCircle2, ChevronDown, ChevronRight, Clock, RefreshCw, RotateCcw, Search, X } from "lucide-react";
|
|
13
13
|
import { toast } from "sonner";
|
|
14
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
14
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
15
15
|
import { useAlleOrders, useOrderVersies, useVersieEvents } from "../hooks/useOrderVersies";
|
|
16
16
|
import { bepaalRoute, redenTekst } from "../lib/flowRoute";
|
|
17
17
|
import { Gebeurtenis } from "./OrderLogboek";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinuutrondeCard.d.ts","sourceRoot":"","sources":["../../src/components/MinuutrondeCard.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,eAAe,gCAwE9B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// src/components/MinuutrondeCard.tsx — bereikt de minuutronde de shell echt?
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// De minuutronde doet de karindeling en herplanning. Deze kaart toont of de
|
|
6
|
+
// laatste rondes echt door de Engine zijn ontvangen. Alleen lezen.
|
|
7
|
+
// ============================================================================
|
|
8
|
+
import { AlertTriangle, CheckCircle2, Info, RefreshCw } from "lucide-react";
|
|
9
|
+
import { useMinuutronde } from "../hooks/useMinuutronde";
|
|
10
|
+
function tijd(t) {
|
|
11
|
+
if (!t)
|
|
12
|
+
return "nooit";
|
|
13
|
+
const d = new Date(t);
|
|
14
|
+
return Number.isFinite(d.getTime()) ? d.toLocaleString("nl-NL") : "onbekend";
|
|
15
|
+
}
|
|
16
|
+
export function MinuutrondeCard() {
|
|
17
|
+
const { stand, fout, herlaad } = useMinuutronde();
|
|
18
|
+
const laatste = stand?.laatste ?? null;
|
|
19
|
+
const status = stand?.status ?? "onbekend";
|
|
20
|
+
const kop = status === "groen"
|
|
21
|
+
? "De minuutronde wordt ontvangen"
|
|
22
|
+
: status === "oranje"
|
|
23
|
+
? "De minuutronde draait op het moduleproject, niet op een shell"
|
|
24
|
+
: status === "rood"
|
|
25
|
+
? "De minuutronde bereikt de shell niet"
|
|
26
|
+
: "Nog geen rondes vastgelegd";
|
|
27
|
+
const Icoon = status === "groen" ? CheckCircle2 : status === "oranje" ? Info : AlertTriangle;
|
|
28
|
+
const kleur = status === "groen" ? "text-primary" : status === "rood" ? "text-destructive" : "text-muted-foreground";
|
|
29
|
+
return (_jsxs("div", { className: "rounded-lg border bg-card p-4 text-card-foreground", children: [_jsxs("div", { className: "mb-3 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(Icoon, { className: `mt-0.5 h-5 w-5 ${kleur}` }), _jsxs("div", { children: [_jsx("h3", { className: "font-semibold", children: kop }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Karindeling en herplanning draaien elke minuut via deze ronde." })] })] }), _jsx("button", { type: "button", onClick: () => void herlaad(), className: "rounded-md border px-3 py-1.5 text-sm hover:bg-accent", "aria-label": "Minuutronde vernieuwen", children: _jsx(RefreshCw, { className: "h-4 w-4" }) })] }), fout && _jsxs("p", { className: "text-sm text-destructive", children: ["Stand niet beschikbaar: ", fout] }), laatste && (_jsxs("dl", { className: "grid gap-1 text-sm sm:grid-cols-2", children: [_jsx("dt", { className: "text-muted-foreground", children: "Adres" }), _jsx("dd", { children: laatste.target_host ?? "geen adres ingesteld" }), _jsx("dt", { className: "text-muted-foreground", children: "Moduleversie die antwoordde" }), _jsx("dd", { children: laatste.module_version ?? "onbekend" }), _jsx("dt", { className: "text-muted-foreground", children: "Laatste geslaagde ronde" }), _jsx("dd", { children: tijd(stand?.laatsteOk) }), status === "rood" && (_jsxs(_Fragment, { children: [_jsx("dt", { className: "text-muted-foreground", children: "Reden" }), _jsxs("dd", { className: "text-destructive", children: [laatste.error ?? "onbekend", laatste.status_code === 200 && !laatste.engine_ok
|
|
30
|
+
? " — er kwam wel een antwoord, maar zonder herkenning: een oudere moduleversie (vóór 1.0.107) of een andere pagina op dit adres"
|
|
31
|
+
: "", stand && stand.misluktOpRij > 0 ? ` (${stand.misluktOpRij} rondes op rij mislukt)` : ""] })] }))] })), status === "oranje" && (_jsx("p", { className: "mt-3 text-sm text-muted-foreground", children: "Het adres wijst naar het eigen moduleproject. Bij een klant hoort het naar de eigen shell te wijzen." }))] }));
|
|
32
|
+
}
|
|
@@ -7,7 +7,7 @@ import { useCallback, useEffect, useState } from "react";
|
|
|
7
7
|
import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle } from "@flowselections/core";
|
|
8
8
|
import { RefreshCw } from "lucide-react";
|
|
9
9
|
import { toast } from "sonner";
|
|
10
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
10
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
11
11
|
export function MisluktVerzendbrievenCard() {
|
|
12
12
|
const [regels, setRegels] = useState([]);
|
|
13
13
|
const [fout, setFout] = useState(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegiePage.d.ts","sourceRoot":"","sources":["../../src/components/RegiePage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RegiePage.d.ts","sourceRoot":"","sources":["../../src/components/RegiePage.tsx"],"names":[],"mappings":"AAiCA,wBAAgB,SAAS,gCA6FxB"}
|
|
@@ -17,6 +17,7 @@ import { MisluktVerzendbrievenCard } from "./MisluktVerzendbrievenCard";
|
|
|
17
17
|
import { PlannerDiffCard } from "./PlannerDiffCard";
|
|
18
18
|
import { BeladingsafwijkingenCard } from "./BeladingsafwijkingenCard";
|
|
19
19
|
import { OrderLogboek } from "./OrderLogboek";
|
|
20
|
+
import { MinuutrondeCard } from "./MinuutrondeCard";
|
|
20
21
|
import { InklapbaarVenster } from "./InklapbaarVenster";
|
|
21
22
|
import { tellOpenTaken } from "../lib/taskCounts";
|
|
22
23
|
import { LOGISTICS_MODULES } from "../lib/logisticsTasks";
|
|
@@ -35,5 +36,5 @@ export function RegiePage() {
|
|
|
35
36
|
useEffect(() => {
|
|
36
37
|
void laden();
|
|
37
38
|
}, [laden]);
|
|
38
|
-
return (_jsxs("div", { className: "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs("h1", { className: "flex items-center gap-2 text-2xl font-semibold tracking-tight", children: [_jsx(Workflow, { className: "h-6 w-6 text-primary" }), "Overzicht & meldingen"] }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Wat er vandaag klaarstaat en waar aandacht voor nodig is." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { to: "/logistiek-engine", children: "Terug naar overzicht" }) }), _jsxs(Button, { variant: "outline", onClick: () => void laden(), disabled: loading, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] })] })] }), _jsx(InklapbaarVenster, { titel: "Binnengekomen orders", omschrijving: "Klik een order open voor elke stap, beslissing, foutmelding en elk document.", standaardOpen: true, children: _jsx(OrderLogboek, { titel: "Binnengekomen orders" }) }), _jsx(InklapbaarVenster, { titel: "Consistentie", omschrijving: "Controle of alle modules hetzelfde tonen.", children: _jsx(ConsistentieCard, {}) }), _jsx(InklapbaarVenster, { titel: "Beladingsafwijkingen", omschrijving: "Verschillen tussen onze belading en de laatste Floriday-gegevens.", children: _jsx(BeladingsafwijkingenCard, {}) }), _jsx(InklapbaarVenster, { titel: "Karplanstatus", omschrijving: "Stand van de karrenindeling.", children: _jsx(KarplanStatusCard, {}) }), _jsxs(InklapbaarVenster, { titel: "Kardekking", omschrijving: "Staat elke bestelregel correct op een kar?", children: [_jsx(KardekkingCard, {}), _jsx(MisluktVerzendbrievenCard, {})] }), _jsx(InklapbaarVenster, { titel: "Vergelijkende planner", omschrijving: "Proefvergelijking: blijft de karindeling gelijk?", children: _jsx(PlannerDiffCard, {}) }), _jsxs(InklapbaarVenster, { titel: "Taken per module", omschrijving: "Openstaande en geplande taken.", children: [telFout && _jsxs("p", { className: "mb-2 text-sm text-destructive", children: ["Telling niet beschikbaar: ", telFout] }), _jsx("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: Object.keys(LOGISTICS_MODULES).map((key) => (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { children: LOGISTICS_MODULES[key] }), _jsx(CardTitle, { className: "text-2xl", children: perModule[key] ?? 0 })] }), _jsx(CardContent, { className: "text-muted-foreground text-xs", children: "openstaande en geplande taken" })] }, key))) })] })] }));
|
|
39
|
+
return (_jsxs("div", { className: "space-y-6 p-6", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsxs("h1", { className: "flex items-center gap-2 text-2xl font-semibold tracking-tight", children: [_jsx(Workflow, { className: "h-6 w-6 text-primary" }), "Overzicht & meldingen"] }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Wat er vandaag klaarstaat en waar aandacht voor nodig is." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { to: "/logistiek-engine", children: "Terug naar overzicht" }) }), _jsxs(Button, { variant: "outline", onClick: () => void laden(), disabled: loading, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] })] })] }), _jsx(MinuutrondeCard, {}), _jsx(InklapbaarVenster, { titel: "Binnengekomen orders", omschrijving: "Klik een order open voor elke stap, beslissing, foutmelding en elk document.", standaardOpen: true, children: _jsx(OrderLogboek, { titel: "Binnengekomen orders" }) }), _jsx(InklapbaarVenster, { titel: "Consistentie", omschrijving: "Controle of alle modules hetzelfde tonen.", children: _jsx(ConsistentieCard, {}) }), _jsx(InklapbaarVenster, { titel: "Beladingsafwijkingen", omschrijving: "Verschillen tussen onze belading en de laatste Floriday-gegevens.", children: _jsx(BeladingsafwijkingenCard, {}) }), _jsx(InklapbaarVenster, { titel: "Karplanstatus", omschrijving: "Stand van de karrenindeling.", children: _jsx(KarplanStatusCard, {}) }), _jsxs(InklapbaarVenster, { titel: "Kardekking", omschrijving: "Staat elke bestelregel correct op een kar?", children: [_jsx(KardekkingCard, {}), _jsx(MisluktVerzendbrievenCard, {})] }), _jsx(InklapbaarVenster, { titel: "Vergelijkende planner", omschrijving: "Proefvergelijking: blijft de karindeling gelijk?", children: _jsx(PlannerDiffCard, {}) }), _jsxs(InklapbaarVenster, { titel: "Taken per module", omschrijving: "Openstaande en geplande taken.", children: [telFout && _jsxs("p", { className: "mb-2 text-sm text-destructive", children: ["Telling niet beschikbaar: ", telFout] }), _jsx("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: Object.keys(LOGISTICS_MODULES).map((key) => (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "pb-2", children: [_jsx(CardDescription, { children: LOGISTICS_MODULES[key] }), _jsx(CardTitle, { className: "text-2xl", children: perModule[key] ?? 0 })] }), _jsx(CardContent, { className: "text-muted-foreground text-xs", children: "openstaande en geplande taken" })] }, key))) })] })] }));
|
|
39
40
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloridayConnectionBanner.d.ts","sourceRoot":"","sources":["../../../src/components/rule-engine/FloridayConnectionBanner.tsx"],"names":[],"mappings":"AAYA,wBAAgB,wBAAwB,gCAwDvC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// src/components/rule-engine/FloridayConnectionBanner.tsx
|
|
4
|
+
// Toont welke Floriday-koppeling de documenten levert. De gegevens komen
|
|
5
|
+
// volledig uit de authenticatie-module; deze module kiest niets zelf.
|
|
6
|
+
// ============================================================================
|
|
7
|
+
import { useQuery } from "@tanstack/react-query";
|
|
8
|
+
import { Badge, Skeleton } from "@flowselections/core";
|
|
9
|
+
import { AlertTriangle, Link2 } from "lucide-react";
|
|
10
|
+
import { supabase } from "../../integrations/supabase/client";
|
|
11
|
+
import { getFloridayConnection } from "../../lib/floridayDocuments.functions";
|
|
12
|
+
export function FloridayConnectionBanner() {
|
|
13
|
+
const { data, isLoading } = useQuery({
|
|
14
|
+
queryKey: ["floriday-connection"],
|
|
15
|
+
queryFn: async () => {
|
|
16
|
+
try {
|
|
17
|
+
// Zonder sessie geeft de server-function een 401-Response terug; die
|
|
18
|
+
// mag nooit als throw naar de router lekken (blanco scherm).
|
|
19
|
+
const { data: sessionData } = await supabase.auth.getSession();
|
|
20
|
+
if (!sessionData.session) {
|
|
21
|
+
return { ok: false, error: "Geen actieve sessie." };
|
|
22
|
+
}
|
|
23
|
+
return await getFloridayConnection();
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
// Geen sessie of gateway-fout: banner toont de foutstaat, geen crash.
|
|
27
|
+
const message = e instanceof Response ? `HTTP ${e.status}` : String(e?.message ?? e);
|
|
28
|
+
return { ok: false, error: message };
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
retry: false,
|
|
32
|
+
staleTime: 60000,
|
|
33
|
+
});
|
|
34
|
+
if (isLoading)
|
|
35
|
+
return _jsx(Skeleton, { className: "h-14 w-full rounded-lg" });
|
|
36
|
+
if (!data || data.ok !== true) {
|
|
37
|
+
return (_jsxs("div", { className: "flex items-start gap-3 rounded-lg border border-destructive/40 bg-destructive/5 p-3", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 text-destructive" }), _jsxs("div", { className: "text-sm", children: [_jsx("p", { className: "font-medium text-destructive", children: "Geen actieve Floriday-koppeling" }), _jsx("p", { className: "text-muted-foreground", children: "Documenten kunnen niet worden opgehaald zolang de Floriday-authenticatiemodule geen actieve koppeling heeft." })] })] }));
|
|
38
|
+
}
|
|
39
|
+
const c = data.connection;
|
|
40
|
+
return (_jsxs("div", { className: "flex flex-wrap items-center gap-3 rounded-lg border border-border bg-muted/40 p-3", children: [_jsx(Link2, { className: "h-4 w-4 text-muted-foreground" }), _jsxs("div", { className: "text-sm", children: [_jsx("span", { className: "font-medium", children: c?.label ?? c?.organization_name ?? "Floriday" }), c?.gln_code && _jsxs("span", { className: "text-muted-foreground", children: [" \u00B7 GLN ", c.gln_code] })] }), _jsx(Badge, { variant: data.environment === "live" ? "default" : "secondary", children: data.environment === "live" ? "Live" : "Staging" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Documenten worden opgehaald via de Floriday-authenticatiemodule." })] }));
|
|
41
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Muteert niets, behalve wanneer expliciet opnieuw proberen wordt gevraagd.
|
|
6
6
|
// ============================================================================
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
8
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
9
9
|
const LEEG = {
|
|
10
10
|
wachtend: 0,
|
|
11
11
|
bezig: 0,
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// bewaakt de database zelf.
|
|
8
8
|
// ============================================================================
|
|
9
9
|
import { useCallback, useEffect, useState } from "react";
|
|
10
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
10
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
11
11
|
const LEEG = {
|
|
12
12
|
openTotaal: 0,
|
|
13
13
|
beoordelen: 0,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// logistics_blocked_orders / logistics_blocked_overview / logistics_plan_retry.
|
|
5
5
|
// ============================================================================
|
|
6
6
|
import { useCallback, useEffect, useState } from "react";
|
|
7
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
7
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
8
8
|
export const REDEN_LABEL = {
|
|
9
9
|
belading_onbekend: "Belading onbekend",
|
|
10
10
|
belading_onvolledig: "Belading onvolledig",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// staat, is echt door de Engine vastgelegd.
|
|
7
7
|
// ============================================================================
|
|
8
8
|
import { useCallback, useEffect, useState } from "react";
|
|
9
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
9
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
10
10
|
function mapOrder(r) {
|
|
11
11
|
return {
|
|
12
12
|
orderRef: String(r?.order_ref ?? ""),
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface MinuutrondeRonde {
|
|
2
|
+
called_at: string;
|
|
3
|
+
target_host: string | null;
|
|
4
|
+
skipped_reason: string | null;
|
|
5
|
+
status_code: number | null;
|
|
6
|
+
engine_ok: boolean | null;
|
|
7
|
+
module_version: string | null;
|
|
8
|
+
module_project: boolean | null;
|
|
9
|
+
error: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface MinuutrondeStand {
|
|
12
|
+
status: "groen" | "oranje" | "rood" | "onbekend";
|
|
13
|
+
misluktOpRij: number;
|
|
14
|
+
laatsteOk: string | null;
|
|
15
|
+
laatste: MinuutrondeRonde | null;
|
|
16
|
+
recent: MinuutrondeRonde[];
|
|
17
|
+
}
|
|
18
|
+
export declare function leesMinuutronde(data: unknown): MinuutrondeStand;
|
|
19
|
+
export declare function useMinuutronde(intervalMs?: number): {
|
|
20
|
+
stand: MinuutrondeStand | null;
|
|
21
|
+
fout: string | null;
|
|
22
|
+
herlaad: () => Promise<void>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=useMinuutronde.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMinuutronde.d.ts","sourceRoot":"","sources":["../../src/hooks/useMinuutronde.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAU/D;AAED,wBAAgB,cAAc,CAAC,UAAU,SAAQ;;;;EAqBhD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/hooks/useMinuutronde.ts — bereikt de minuutronde de shell echt?
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Leest logistics_tick_health(). Muteert niets.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { useCallback, useEffect, useState } from "react";
|
|
7
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
8
|
+
export function leesMinuutronde(data) {
|
|
9
|
+
const d = (data ?? {});
|
|
10
|
+
const status = ["groen", "oranje", "rood"].includes(d["status"]) ? d["status"] : "onbekend";
|
|
11
|
+
return {
|
|
12
|
+
status,
|
|
13
|
+
misluktOpRij: Number(d["mislukt_op_rij"] ?? 0),
|
|
14
|
+
laatsteOk: d["laatste_ok"] ?? null,
|
|
15
|
+
laatste: d["laatste"] ?? null,
|
|
16
|
+
recent: Array.isArray(d["recent"]) ? d["recent"] : [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function useMinuutronde(intervalMs = 60000) {
|
|
20
|
+
const [stand, setStand] = useState(null);
|
|
21
|
+
const [fout, setFout] = useState(null);
|
|
22
|
+
const laad = useCallback(async () => {
|
|
23
|
+
const { data, error } = await supabase.rpc("logistics_tick_health");
|
|
24
|
+
if (error) {
|
|
25
|
+
setFout(error.message);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
setFout(null);
|
|
29
|
+
setStand(leesMinuutronde(data));
|
|
30
|
+
}, []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
void laad();
|
|
33
|
+
const t = setInterval(() => void laad(), Math.max(15000, intervalMs));
|
|
34
|
+
return () => clearInterval(t);
|
|
35
|
+
}, [laad, intervalMs]);
|
|
36
|
+
return { stand, fout, herlaad: laad };
|
|
37
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// afgeleid of aangevuld: wat hier staat is echt door de Engine vastgelegd.
|
|
7
7
|
// ============================================================================
|
|
8
8
|
import { useCallback, useEffect, useState } from "react";
|
|
9
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
9
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
10
10
|
const LEEG = { search: "", state: "", errorClass: "", source: "", step: "", hours: 72 };
|
|
11
11
|
function mapRij(r) {
|
|
12
12
|
return {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Leest uitsluitend via de logboek-RPC's; wijzigt niets.
|
|
5
5
|
// ============================================================================
|
|
6
6
|
import { useCallback, useEffect, useState } from "react";
|
|
7
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
7
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
8
8
|
import { mapEvent } from "./useLogisticsTrace";
|
|
9
9
|
const n = (v) => (typeof v === "number" ? v : Number(v) || 0);
|
|
10
10
|
const s = (v) => (v == null ? null : String(v));
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// wachtrij resetten via logistics_plan_reset_queue. De Engine blijft de bron.
|
|
6
6
|
// ============================================================================
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
8
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
9
9
|
function rij(r) {
|
|
10
10
|
return {
|
|
11
11
|
id: String(r["id"] ?? ""),
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// ============================================================================
|
|
4
4
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
5
5
|
import { useServerFn } from "@tanstack/react-start";
|
|
6
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
6
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
7
7
|
import { startRecalcJob, tickRecalcJob } from "../lib/logisticsRecalcJob.functions";
|
|
8
8
|
const PHASE_LABEL = {
|
|
9
9
|
buffers: "Orderbuffers indelen",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Leest logistics_cron_health(). Muteert niets.
|
|
5
5
|
// ============================================================================
|
|
6
6
|
import { useCallback, useEffect, useState } from "react";
|
|
7
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
7
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
8
8
|
export function useTaakGezondheid(intervalMs = 60000) {
|
|
9
9
|
const [taken, setTaken] = useState([]);
|
|
10
10
|
const [laden, setLaden] = useState(true);
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// instellingentabellen; ontbreken ze, dan wordt er niets geraden.
|
|
6
6
|
// ============================================================================
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
8
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
9
9
|
function lijst(value) {
|
|
10
10
|
return Array.isArray(value) ? value : [];
|
|
11
11
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// en public.logistics_replan_all. Hier wordt niets zelf berekend.
|
|
6
6
|
// ============================================================================
|
|
7
7
|
import { useCallback, useEffect, useState } from "react";
|
|
8
|
-
import { supabase } from "../integrations/supabase/moduleClient
|
|
8
|
+
import { supabase } from "../integrations/supabase/moduleClient";
|
|
9
9
|
import { kickShippingNoteQueue } from "./useShippingNoteStatus";
|
|
10
10
|
export function useWerkwijzeStatus() {
|
|
11
11
|
const [status, setStatus] = useState(null);
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -66,5 +66,6 @@ export { OrderLogboek } from './components/OrderLogboek';
|
|
|
66
66
|
export { InklapbaarVenster } from './components/InklapbaarVenster';
|
|
67
67
|
export { AfrondWachtrijCard } from './components/AfrondWachtrijCard';
|
|
68
68
|
export { TaakGezondheidCard } from './components/TaakGezondheidCard';
|
|
69
|
+
export { MinuutrondeCard } from './components/MinuutrondeCard';
|
|
69
70
|
export * from './hooks/useAfrondWachtrij';
|
|
70
71
|
//# sourceMappingURL=index.d.ts.map
|
package/dist-lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist-lib/index.js
CHANGED
|
@@ -83,4 +83,5 @@ export { OrderLogboek } from './components/OrderLogboek';
|
|
|
83
83
|
export { InklapbaarVenster } from './components/InklapbaarVenster';
|
|
84
84
|
export { AfrondWachtrijCard } from './components/AfrondWachtrijCard';
|
|
85
85
|
export { TaakGezondheidCard } from './components/TaakGezondheidCard';
|
|
86
|
+
export { MinuutrondeCard } from './components/MinuutrondeCard';
|
|
86
87
|
export * from './hooks/useAfrondWachtrij';
|