@flowselections/logistiek-engine 1.0.242 → 1.0.244
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/db/schema/logistiek-engine.sql +9696 -34
- package/dist-lib/components/BeheerPage.d.ts.map +1 -1
- package/dist-lib/components/BeheerPage.js +2 -1
- package/dist-lib/components/DataGereedheidCard.d.ts +1 -0
- package/dist-lib/components/DataGereedheidCard.d.ts.map +1 -1
- package/dist-lib/components/DataGereedheidCard.js +4 -3
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +14 -3
- package/dist-lib/components/GereedheidCard.d.ts +14 -0
- package/dist-lib/components/GereedheidCard.d.ts.map +1 -0
- package/dist-lib/components/GereedheidCard.js +60 -0
- package/dist-lib/components/LadingdragersPage.d.ts.map +1 -1
- package/dist-lib/components/LadingdragersPage.js +5 -1
- package/dist-lib/components/MinuutrondeCard.js +1 -1
- package/dist-lib/components/StartlijstCard.d.ts.map +1 -1
- package/dist-lib/components/StartlijstCard.js +4 -1
- package/dist-lib/components/rule-engine/RuleFieldInput.d.ts.map +1 -1
- package/dist-lib/components/rule-engine/RuleFieldInput.js +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +14 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +40 -3
- 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/types.d.ts +3350 -150
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.d.ts +17 -0
- package/dist-lib/lib/beladingRegels.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.js +29 -3
- package/dist-lib/lib/dimensionPlanner.d.ts +10 -0
- package/dist-lib/lib/dimensionPlanner.d.ts.map +1 -1
- package/dist-lib/lib/dimensionPlanner.js +20 -0
- package/dist-lib/lib/engineStatusTeksten.d.ts +1 -1
- package/dist-lib/lib/engineStatusTeksten.js +1 -1
- package/dist-lib/lib/flowRoute.d.ts.map +1 -1
- package/dist-lib/lib/flowRoute.js +2 -2
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts +2 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +259 -184
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +21 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +162 -21
- package/dist-lib/lib/loadCarrierTypes.d.ts +2 -0
- package/dist-lib/lib/loadCarrierTypes.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.server.js +8 -1
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +57 -0
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/ruleEngineSchema.d.ts +2 -0
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +70 -2
- package/dist-lib/lib/scheduleTasks.server.d.ts +3 -1
- package/dist-lib/lib/scheduleTasks.server.d.ts.map +1 -1
- package/dist-lib/lib/scheduleTasks.server.js +5 -2
- package/dist-lib/lib/statusFase.d.ts +11 -0
- package/dist-lib/lib/statusFase.d.ts.map +1 -0
- package/dist-lib/lib/statusFase.js +58 -0
- package/dist-lib/lib/werkers.server.d.ts +17 -0
- package/dist-lib/lib/werkers.server.d.ts.map +1 -0
- package/dist-lib/lib/werkers.server.js +31 -0
- package/package.json +34 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BeheerPage.d.ts","sourceRoot":"","sources":["../../src/components/BeheerPage.tsx"],"names":[],"mappings":"AAkKA,wBAAgB,UAAU,gCA0BzB"}
|
|
@@ -23,6 +23,7 @@ import { BeladingVerstuurderCard } from "./BeladingVerstuurderCard.js";
|
|
|
23
23
|
import { DocumentkeuzeCard } from "./DocumentkeuzeCard.js";
|
|
24
24
|
import { DataGereedheidCard } from "./DataGereedheidCard.js";
|
|
25
25
|
import { StartlijstCard } from "./StartlijstCard.js";
|
|
26
|
+
import { GereedheidCard } from "./GereedheidCard.js";
|
|
26
27
|
import { MinuutrondeStartMelding } from "./MinuutrondeStartMelding.js";
|
|
27
28
|
import { ENGINE_TOEGANG } from "../hooks/useEngineRollen.js";
|
|
28
29
|
import { useEngineZelfherstel } from "../hooks/useEngineZelfherstel.js";
|
|
@@ -84,5 +85,5 @@ function HerindelenBeheer() {
|
|
|
84
85
|
}
|
|
85
86
|
export function BeheerPage() {
|
|
86
87
|
useEngineZelfherstel();
|
|
87
|
-
return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(StartlijstCard, {}), _jsx(HerindelenBeheer, {}), _jsxs("p", { className: "text-sm", children: [_jsx(Link, { to: "/logistiek-engine/proefindeling", className: "underline", children: "Proefindeling" }), " ", "\u2014 reken de karindeling na zonder iets op te slaan."] }), _jsx(HerindelingMeldingCard, {}), _jsx(VervoerderBewakingCard, {}), _jsx(EtiketInstellenMelding, {}), _jsx(DataGereedheidCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(DocumentkeuzeCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
|
|
88
|
+
return (_jsx(RolPoort, { rollen: ENGINE_TOEGANG.beheer, children: _jsxs("div", { className: "space-y-6 p-6", children: [_jsx(MinuutrondeStartMelding, {}), _jsx(StartlijstCard, {}), _jsx(GereedheidCard, {}), _jsx(HerindelenBeheer, {}), _jsxs("p", { className: "text-sm", children: [_jsx(Link, { to: "/logistiek-engine/proefindeling", className: "underline", children: "Proefindeling" }), " ", "\u2014 reken de karindeling na zonder iets op te slaan."] }), _jsx(HerindelingMeldingCard, {}), _jsx(VervoerderBewakingCard, {}), _jsx(EtiketInstellenMelding, {}), _jsx(DataGereedheidCard, {}), _jsx(GeblokkeerdeStickersCard, {}), _jsx(OudeOrderregelsCard, {}), _jsx(BeladingVerstuurderCard, {}), _jsx(DocumentkeuzeCard, {}), _jsx(AutomatischVersturenCard, {}), _jsx(OpruimlijstKarrenCard, {})] }) }));
|
|
88
89
|
}
|
|
@@ -13,6 +13,7 @@ type Drager = {
|
|
|
13
13
|
max_height_cm: number | null;
|
|
14
14
|
max_crates_per_layer: number | null;
|
|
15
15
|
layers_per_carrier: number | null;
|
|
16
|
+
overstek_cm?: number | null;
|
|
16
17
|
};
|
|
17
18
|
/** 1.0.197: fysieke controle per product met dezelfde regels als de planner. */
|
|
18
19
|
export declare function fysiekVoorRegel(r: Regel, fustIn: Fust | null, d: Drager | null): FysiekOordeel & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataGereedheidCard.d.ts","sourceRoot":"","sources":["../../src/components/DataGereedheidCard.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU3E,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACxG,KAAK,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"DataGereedheidCard.d.ts","sourceRoot":"","sources":["../../src/components/DataGereedheidCard.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU3E,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACxG,KAAK,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAMtP,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAwB9H;AAED,KAAK,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,KAAK,KAAK,GAAG;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAClI,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS7C,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ7C,CAAC;AAGF,wBAAgB,kBAAkB,gCAmMjC"}
|
|
@@ -11,7 +11,7 @@ import { useCallback, useEffect, useState } from "react";
|
|
|
11
11
|
import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Skeleton } from "@flowselections/core";
|
|
12
12
|
import { RefreshCw } from "lucide-react";
|
|
13
13
|
import { supabase } from "../integrations/supabase/moduleClient.js";
|
|
14
|
-
import {
|
|
14
|
+
import { maxFustenPerLaagMetOverstek } from "../lib/dimensionPlanner.js";
|
|
15
15
|
import { fysiekeBelading } from "../lib/beladingRegels.js";
|
|
16
16
|
import { ladingdragerNaam } from "../lib/loadCarrierTypes.js";
|
|
17
17
|
import { useFloricodeLadingdragers } from "../hooks/useFloricodeLadingdragers.js";
|
|
@@ -33,7 +33,8 @@ export function fysiekVoorRegel(r, fustIn, d) {
|
|
|
33
33
|
width_mm: num(r.velden?.fust_width_mm?.waarde) ?? fustIn?.width_mm ?? null,
|
|
34
34
|
height_mm: num(r.velden?.fust_height_mm?.waarde) ?? fustIn?.height_mm ?? null,
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
// Golf 1 / 11: zelfde berekening als de karindeling (precieze pasvorm + overstek van de ladingdrager).
|
|
37
|
+
const ls = maxFustenPerLaagMetOverstek(d?.layer_length_cm, d?.layer_width_cm, fust?.length_mm ? fust.length_mm / 10 : null, fust?.width_mm ? fust.width_mm / 10 : null, d?.overstek_cm ?? 2);
|
|
37
38
|
const o = fysiekeBelading({
|
|
38
39
|
product: r.product,
|
|
39
40
|
bron: String(r.velden?.crates_per_layer?.bron ?? "product"),
|
|
@@ -109,7 +110,7 @@ export function DataGereedheidCard() {
|
|
|
109
110
|
if (codes.length > 0) {
|
|
110
111
|
const { data: c } = await supabase
|
|
111
112
|
.from("load_carrier_types")
|
|
112
|
-
.select("
|
|
113
|
+
.select("*")
|
|
113
114
|
.in("code", codes);
|
|
114
115
|
setDragers(new Map((Array.isArray(c) ? c : []).map((x) => [String(x.code), x])));
|
|
115
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeblokkeerdeOrdersCard.d.ts","sourceRoot":"","sources":["../../src/components/GeblokkeerdeOrdersCard.tsx"],"names":[],"mappings":"AA8BA,wBAAgB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"GeblokkeerdeOrdersCard.d.ts","sourceRoot":"","sources":["../../src/components/GeblokkeerdeOrdersCard.tsx"],"names":[],"mappings":"AA8BA,wBAAgB,sBAAsB,gCAqOrC"}
|
|
@@ -18,7 +18,18 @@ function datum(waarde) {
|
|
|
18
18
|
return Number.isNaN(d.getTime()) ? "—" : d.toLocaleDateString("nl-NL");
|
|
19
19
|
}
|
|
20
20
|
export function GeblokkeerdeOrdersCard() {
|
|
21
|
-
const { rows, overzicht, loading, error, busy, refresh, retry, dubbelenOpruimen, beladingBevestigen } = useGeblokkeerdeOrders();
|
|
21
|
+
const { rows, laagVragen, overzicht, loading, error, busy, refresh, retry, dubbelenOpruimen, beladingBevestigen, laagBevestigen } = useGeblokkeerdeOrders();
|
|
22
|
+
const safeVragen = Array.isArray(laagVragen) ? laagVragen : [];
|
|
23
|
+
const klopt = async (v) => {
|
|
24
|
+
try {
|
|
25
|
+
const n = await laagBevestigen(v);
|
|
26
|
+
setMelding(`${v.product}: ${v.opgegeven} per laag op ${v.ladingdrager} bevestigd. Dit wordt niet meer gevraagd` +
|
|
27
|
+
(n > 0 ? `; ${n} order(s) worden opnieuw ingedeeld.` : "."));
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
setMelding(e?.message ? String(e.message) : "Bevestigen is niet gelukt; probeer het opnieuw.");
|
|
31
|
+
}
|
|
32
|
+
};
|
|
22
33
|
const bevestigen = async (orderId, orderRef) => {
|
|
23
34
|
try {
|
|
24
35
|
const n = await beladingBevestigen(orderId);
|
|
@@ -68,9 +79,9 @@ export function GeblokkeerdeOrdersCard() {
|
|
|
68
79
|
setMelding(e?.message ? String(e.message) : "Opruimen is niet gelukt.");
|
|
69
80
|
}
|
|
70
81
|
};
|
|
71
|
-
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(AlertTriangle, { className: "h-4 w-4 text-destructive" }), "Vastgelopen orders"] }), _jsx(CardDescription, { children: "Deze orders krijgen geen karrenindeling tot er iets aan de order verandert of je ze hier opnieuw aanbiedt." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [zichtbaar.length > 0 && (_jsxs(Button, { variant: "outline", size: "sm", disabled: busy, onClick: () => void opnieuw(zichtbaar.map((r) => r.orderId)), children: [_jsx(RotateCcw, { className: "mr-2 h-4 w-4" }), "Alles opnieuw proberen"] })), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => void refresh(), disabled: loading, children: _jsx(RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` }) })] })] }), _jsxs(CardContent, { className: "space-y-4", children: [overzicht?.tickStale && (_jsx("p", { className: "rounded-md bg-muted p-3 text-sm text-muted-foreground", children: "De verwerking op de achtergrond heeft zich langer dan tien minuten niet gemeld. Opnieuw proberen zet de order wel klaar, maar hij wordt pas opgepakt zodra de verwerking weer draait." })), error && _jsx("p", { className: "text-sm text-destructive", children: error }), melding && _jsx("p", { className: "text-sm text-muted-foreground", children: melding }), loading && safeRows.length === 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-6 w-full" }), _jsx(Skeleton, { className: "h-6 w-full" })] })) : safeRows.length === 0 ? (_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Geen vastgelopen orders. Alles is ingedeeld of staat nog in de wachtrij", overzicht ? ` (${overzicht.pending} wachtend)` : "", "."] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Badge, { variant: filter === "" ? "default" : "outline", className: "cursor-pointer", onClick: () => setFilter(""), children: ["Alles (", safeRows.length, ")"] }), codes.map(([code, aantal]) => (_jsxs(Badge, { variant: filter === code ? "default" : "outline", className: "cursor-pointer", onClick: () => setFilter(code), children: [redenLabel(code), " (", aantal, ")"] }, code)))] }), _jsx("div", { className: "divide-y rounded-md border", children: zichtbaar.map((r) => (_jsxs("div", { className: "flex items-start justify-between gap-4 p-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "font-medium", children: r.orderRef }), _jsx(Badge, { variant: "secondary", children: redenLabel(r.reasonCode) }), _jsx(Badge, { variant: "outline", children: "Wacht op actie" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["Leverdatum ", datum(r.deliveryDate), " \u00B7 sinds ", datum(r.blockedSince)] })] }), r.reason && (_jsx("p", { className: "mt-1 line-clamp-2 text-sm text-muted-foreground", children: r.reason })), redenUitleg(r.reasonCode) && (_jsx("p", { className: "mt-1 text-sm", children: redenUitleg(r.reasonCode) }))] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [(["belading_onvolledig", "gewicht_onbekend"].includes(String(r.reasonCode)) ||
|
|
82
|
+
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(AlertTriangle, { className: "h-4 w-4 text-destructive" }), "Vastgelopen orders"] }), _jsx(CardDescription, { children: "Deze orders krijgen geen karrenindeling tot er iets aan de order verandert of je ze hier opnieuw aanbiedt." })] }), _jsxs("div", { className: "flex items-center gap-2", children: [zichtbaar.length > 0 && (_jsxs(Button, { variant: "outline", size: "sm", disabled: busy, onClick: () => void opnieuw(zichtbaar.map((r) => r.orderId)), children: [_jsx(RotateCcw, { className: "mr-2 h-4 w-4" }), "Alles opnieuw proberen"] })), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => void refresh(), disabled: loading, children: _jsx(RefreshCw, { className: `h-4 w-4 ${loading ? "animate-spin" : ""}` }) })] })] }), _jsxs(CardContent, { className: "space-y-4", children: [overzicht?.tickStale && (_jsx("p", { className: "rounded-md bg-muted p-3 text-sm text-muted-foreground", children: "De verwerking op de achtergrond heeft zich langer dan tien minuten niet gemeld. Opnieuw proberen zet de order wel klaar, maar hij wordt pas opgepakt zodra de verwerking weer draait." })), error && _jsx("p", { className: "text-sm text-destructive", children: error }), melding && _jsx("p", { className: "text-sm text-muted-foreground", children: melding }), loading && safeRows.length === 0 ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-6 w-full" }), _jsx(Skeleton, { className: "h-6 w-full" })] })) : safeRows.length === 0 ? (_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Geen vastgelopen orders. Alles is ingedeeld of staat nog in de wachtrij", overzicht ? ` (${overzicht.pending} wachtend)` : "", "."] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Badge, { variant: filter === "" ? "default" : "outline", className: "cursor-pointer", onClick: () => setFilter(""), children: ["Alles (", safeRows.length, ")"] }), codes.map(([code, aantal]) => (_jsxs(Badge, { variant: filter === code ? "default" : "outline", className: "cursor-pointer", onClick: () => setFilter(code), children: [redenLabel(code), " (", aantal, ")"] }, code)))] }), _jsx("div", { className: "divide-y rounded-md border", children: zichtbaar.map((r) => (_jsxs("div", { className: "flex items-start justify-between gap-4 p-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "font-medium", children: r.orderRef }), _jsx(Badge, { variant: "secondary", children: redenLabel(r.reasonCode) }), _jsx(Badge, { variant: "outline", children: "Wacht op actie" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["Leverdatum ", datum(r.deliveryDate), " \u00B7 sinds ", datum(r.blockedSince)] })] }), r.reason && (_jsx("p", { className: "mt-1 line-clamp-2 text-sm text-muted-foreground", children: r.reason })), redenUitleg(r.reasonCode) && (_jsx("p", { className: "mt-1 text-sm", children: redenUitleg(r.reasonCode) })), safeVragen.filter((v) => v.orderId === r.orderId).map((v) => (_jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-2 text-sm", children: [_jsx("span", { children: v.tekst }), _jsxs(Button, { size: "sm", disabled: busy, onClick: () => void klopt(v), children: ["Klopt ", v.opgegeven, "?"] })] }, `${v.productId}|${v.fustSleutel}|${v.ladingdragerCode}`)))] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [(["belading_onvolledig", "gewicht_onbekend"].includes(String(r.reasonCode)) ||
|
|
72
83
|
String(r.reason ?? "").startsWith("Belading fysiek onmogelijk")) && (_jsx("a", { className: "text-sm underline", href: "/logistiek-engine/beheer#gegevens-voor-karindeling", children: "Gegevens invullen" })), r.reasonCode === "ladingdrager_niet_in_beheer" && (_jsx("a", { className: "text-sm underline", href: "/logistiek-engine/ladingdragers", children: "Naar ladingdragers" })), r.reasonCode === "belading_onwaarschijnlijk" &&
|
|
73
|
-
|
|
84
|
+
String(r.reason ?? "").includes("Belading onwaarschijnlijk") && (_jsx(Button, { size: "sm", disabled: busy, onClick: () => void bevestigen(r.orderId, r.orderRef), children: "Belading bevestigen" })), r.reasonCode === "dubbele_regels" && (_jsx(Button, { variant: "secondary", size: "sm", disabled: busy, onClick: () => void opruimen(r.orderId, r.orderRef), children: "Dubbele regels opruimen" })), _jsx(Button, { variant: "outline", size: "sm", disabled: busy, onClick: () => void opnieuw([r.orderId]), children: "Opnieuw" })] })] }, r.queueId))) })] })), _jsx(BeladingWaarschuwingen, {})] })] }));
|
|
74
85
|
}
|
|
75
86
|
/** 1.0.190: beladingen die wel zijn ingedeeld maar opvallen (alleen waarschuwing). */
|
|
76
87
|
function BeladingWaarschuwingen() {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type AfhStatus = {
|
|
2
|
+
beschikbaar?: boolean;
|
|
3
|
+
ok?: boolean | null;
|
|
4
|
+
reden?: string | null;
|
|
5
|
+
naam?: string | null;
|
|
6
|
+
};
|
|
7
|
+
/** Gewone zin voor één Afhandeling-onderdeel. Geëxporteerd voor de test. */
|
|
8
|
+
export declare function afhRegel(soort: "vangnet" | "aanmeldtaak", s: AfhStatus | undefined): {
|
|
9
|
+
ok: boolean | null;
|
|
10
|
+
tekst: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function GereedheidCard(): import("react").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=GereedheidCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GereedheidCard.d.ts","sourceRoot":"","sources":["../../src/components/GereedheidCard.tsx"],"names":[],"mappings":"AAeA,KAAK,SAAS,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAG7G,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG;IAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAU1H;AAED,wBAAgB,cAAc,gCAgE7B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// src/components/GereedheidCard.tsx — Golf 1: gereedheid van deze omgeving
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Toont waarschuwingen die de Engine niet blokkeren maar wel aandacht vragen.
|
|
6
|
+
// Tijdzone (leeg of ongeldig = Europe/Amsterdam, huisregel I4), en uit
|
|
7
|
+
// Afhandeling: vaste vervoerder en aanmeldtaak/postvak (punt I). Ontbreekt dat
|
|
8
|
+
// onderdeel in deze omgeving, dan staat er "nog niet beschikbaar".
|
|
9
|
+
// GEEN <Header /> hier — die levert de shell.
|
|
10
|
+
// ============================================================================
|
|
11
|
+
import { useEffect, useState } from "react";
|
|
12
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@flowselections/core";
|
|
13
|
+
import { AlertTriangle, CheckCircle2, Info } from "lucide-react";
|
|
14
|
+
import { supabase } from "../integrations/supabase/moduleClient.js";
|
|
15
|
+
/** Gewone zin voor één Afhandeling-onderdeel. Geëxporteerd voor de test. */
|
|
16
|
+
export function afhRegel(soort, s) {
|
|
17
|
+
const titel = soort === "vangnet" ? "Vaste vervoerder" : "Aanmelden bij vervoerders";
|
|
18
|
+
if (!s || s.beschikbaar === false)
|
|
19
|
+
return { ok: null, tekst: `${titel}: nog niet beschikbaar in deze omgeving.` };
|
|
20
|
+
if (s.ok) {
|
|
21
|
+
return {
|
|
22
|
+
ok: true,
|
|
23
|
+
tekst: soort === "vangnet" ? `${titel}: ${s.naam ?? "ingesteld"} is compleet.` : `${titel}: de aanmeldtaak draait en het postvak is gekoppeld.`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return { ok: false, tekst: `${titel}: ${s.reden ?? "niet in orde."}` };
|
|
27
|
+
}
|
|
28
|
+
export function GereedheidCard() {
|
|
29
|
+
const [tz, setTz] = useState(null);
|
|
30
|
+
const [fout, setFout] = useState(null);
|
|
31
|
+
const [afh, setAfh] = useState(null);
|
|
32
|
+
const [afhFout, setAfhFout] = useState(null);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
let actief = true;
|
|
35
|
+
void (async () => {
|
|
36
|
+
const { data, error } = await supabase.rpc("logistics_tz_status");
|
|
37
|
+
if (!actief)
|
|
38
|
+
return;
|
|
39
|
+
if (error)
|
|
40
|
+
setFout(error.message);
|
|
41
|
+
else
|
|
42
|
+
setTz((data ?? {}));
|
|
43
|
+
const afhRes = await supabase.rpc("logistics_afhandeling_gereedheid");
|
|
44
|
+
if (!actief)
|
|
45
|
+
return;
|
|
46
|
+
if (afhRes.error)
|
|
47
|
+
setAfhFout(afhRes.error.message);
|
|
48
|
+
else
|
|
49
|
+
setAfh((afhRes.data ?? {}));
|
|
50
|
+
})();
|
|
51
|
+
return () => {
|
|
52
|
+
actief = false;
|
|
53
|
+
};
|
|
54
|
+
}, []);
|
|
55
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Gereedheid" }), _jsx(CardDescription, { children: "Instellingen die de Engine nodig heeft. Een waarschuwing houdt niets tegen." })] }), _jsxs(CardContent, { className: "space-y-2 text-sm", children: [fout && _jsxs("p", { className: "text-destructive", children: ["Gereedheid kon niet worden gelezen: ", fout] }), tz && (_jsxs("div", { className: "flex items-start gap-2", children: [tz.ok ? (_jsx(CheckCircle2, { className: "mt-0.5 h-4 w-4 text-primary", "aria-hidden": true })) : (_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 text-destructive", "aria-hidden": true })), _jsxs("p", { children: [_jsx("span", { className: "font-medium", children: "Tijdzone: " }), tz.ok ? `ingesteld (${tz.ingesteld}).` : `waarschuwing — ${tz.melding}. Stel de tijdzone in bij Werktijden.`] })] })), afhFout && _jsxs("p", { className: "text-destructive", children: ["Afhandeling kon niet worden gelezen: ", afhFout] }), afh &&
|
|
56
|
+
["vangnet", "aanmeldtaak"].map((soort) => {
|
|
57
|
+
const r = afhRegel(soort, afh[soort]);
|
|
58
|
+
return (_jsxs("div", { className: "flex items-start gap-2", children: [r.ok === true ? (_jsx(CheckCircle2, { className: "mt-0.5 h-4 w-4 text-primary", "aria-hidden": true })) : r.ok === false ? (_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 text-destructive", "aria-hidden": true })) : (_jsx(Info, { className: "mt-0.5 h-4 w-4 text-muted-foreground", "aria-hidden": true })), _jsx("p", { children: r.tekst })] }, soort));
|
|
59
|
+
})] })] }));
|
|
60
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LadingdragersPage.d.ts","sourceRoot":"","sources":["../../src/components/LadingdragersPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LadingdragersPage.d.ts","sourceRoot":"","sources":["../../src/components/LadingdragersPage.tsx"],"names":[],"mappings":"AAwIA,wBAAgB,iBAAiB,gCA4VhC"}
|
|
@@ -27,6 +27,7 @@ const LEEG = {
|
|
|
27
27
|
max_boxes: "",
|
|
28
28
|
max_weight_kg: "",
|
|
29
29
|
max_height_cm: "",
|
|
30
|
+
overstek_cm: "2",
|
|
30
31
|
max_orders: "",
|
|
31
32
|
max_customers: "",
|
|
32
33
|
allow_mixing: true,
|
|
@@ -47,6 +48,7 @@ function toForm(row) {
|
|
|
47
48
|
max_boxes: t(row.max_boxes),
|
|
48
49
|
max_weight_kg: t(row.max_weight_kg),
|
|
49
50
|
max_height_cm: t(row.max_height_cm),
|
|
51
|
+
overstek_cm: row.overstek_cm == null ? "2" : String(row.overstek_cm),
|
|
50
52
|
max_orders: t(row.max_orders),
|
|
51
53
|
max_customers: t(row.max_customers),
|
|
52
54
|
allow_mixing: row.allow_mixing !== false,
|
|
@@ -68,6 +70,8 @@ function toPayload(form) {
|
|
|
68
70
|
max_boxes: n(form.max_boxes),
|
|
69
71
|
max_weight_kg: n(form.max_weight_kg),
|
|
70
72
|
max_height_cm: n(form.max_height_cm),
|
|
73
|
+
// Golf 1 / 11: leeg = standaard 2 cm; nooit negatief.
|
|
74
|
+
overstek_cm: form.overstek_cm.trim() === "" ? 2 : Math.max(0, Number(form.overstek_cm.replace(",", ".")) || 0),
|
|
71
75
|
max_orders: n(form.max_orders),
|
|
72
76
|
max_customers: n(form.max_customers),
|
|
73
77
|
allow_mixing: form.allow_mixing,
|
|
@@ -104,5 +108,5 @@ export function LadingdragersPage() {
|
|
|
104
108
|
};
|
|
105
109
|
const set = (key, value) => setForm((prev) => ({ ...prev, [key]: value }));
|
|
106
110
|
const toonLagen = form.capacity_model === "layered" || form.capacity_model === "stacked";
|
|
107
|
-
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(Container, { className: "h-6 w-6 text-primary" }), "Ladingdragers"] }), _jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: "Hier staat hoe groot elke ladingdrager is. De Beladingindeling gebruikt deze maten om te bepalen hoeveel fusten er per laag en per drager passen. In de Rule Engine bepaal je per strategie welke ladingdragers gebruikt mogen worden." })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: reload, disabled: loading, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] }), _jsxs(Button, { size: "sm", onClick: openNieuw, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "Ladingdrager"] }), _jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsx(Link, { to: "/logistiek-engine", children: "Terug" }) })] })] }), _jsx(LadingdragerVoorstellenCard, { onKlaar: reload }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Capaciteit per ladingdrager" }), _jsx(CardDescription, { children: "De capaciteit van een kar is het hoogste aantal lagen per kar van de producten op die kar. \"Lagen\" hieronder is de standaard als het product geen eigen lagen per kar heeft." })] }), _jsx(CardContent, { children: loading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-10 w-full" }), _jsx(Skeleton, { className: "h-10 w-full" }), _jsx(Skeleton, { className: "h-10 w-full" })] })) : safeItems.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen ladingdragers ingesteld." })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Ladingdrager" }), _jsx(TableHead, { children: "Model" }), _jsx(TableHead, { className: "text-right", children: "Lagen" }), _jsx(TableHead, { className: "text-right", children: "Laagmaat" }), _jsx(TableHead, { className: "text-right", children: "Max dozen" }), _jsx(TableHead, { className: "text-right", children: "Max kg" }), _jsx(TableHead, { children: "Mengen" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsx(TableBody, { children: safeItems.map((row) => (_jsxs(TableRow, { className: row.is_active ? "" : "opacity-50", children: [_jsxs(TableCell, { children: [_jsx("div", { className: "font-medium", children: ladingdragerNaam(row.code, floricodeNamen, row.name) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: row.code }), row.is_default ? _jsx(Badge, { variant: "secondary", children: "Standaard" }) : null, !row.is_active ? _jsx(Badge, { variant: "outline", children: "Uit" }) : null] })] }), _jsx(TableCell, { className: "text-sm", children: CAPACITY_MODEL_LABELS[row.capacity_model] }), _jsx(TableCell, { className: "text-right", children: row.layers_per_carrier }), _jsxs(TableCell, { className: "text-right text-sm text-muted-foreground", children: [row.layer_length_cm, " \u00D7 ", row.layer_width_cm, " cm"] }), _jsx(TableCell, { className: "text-right", children: row.max_boxes ?? "—" }), _jsx(TableCell, { className: "text-right", children: row.max_weight_kg ?? "—" }), _jsx(TableCell, { children: _jsx(Badge, { variant: row.allow_mixing === false ? "outline" : "secondary", children: row.allow_mixing === false ? "Nooit mengen" : "Mengen mag" }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx(Button, { variant: "ghost", size: "sm", onClick: () => openBewerk(row), children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => remove(row.id), children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }, row.id))) })] })) })] }), _jsx(Dialog, { open: open, onOpenChange: setOpen, children: _jsxs(DialogContent, { className: "max-h-[85vh] overflow-y-auto sm:max-w-lg", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: bewerkId ? "Ladingdrager bewerken" : "Nieuwe ladingdrager" }), _jsx(DialogDescription, { children: "Deze maten bepalen hoeveel er per laag en per drager past." })] }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "code", children: "Code" }), _jsx(Input, { id: "code", value: form.code, onChange: (e) => set("code", e.target.value), placeholder: "pallet", disabled: Boolean(bewerkId) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "name", children: "Naam" }), _jsx(Input, { id: "name", value: form.name, onChange: (e) => set("name", e.target.value) })] })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { children: "Capaciteitsmodel" }), _jsxs(Select, { value: form.capacity_model, onValueChange: (v) => set("capacity_model", v), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: Object.entries(CAPACITY_MODEL_LABELS).map(([value, label]) => (_jsx(SelectItem, { value: value, children: label }, value))) })] })] }), toonLagen ? (_jsxs("div", { className: "grid grid-cols-3 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "lagen", children: "Lagen" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Standaard als het product geen eigen lagen per kar heeft." }), _jsx(Input, { id: "lagen", type: "number", min: 1, value: form.layers_per_carrier, onChange: (e) => set("layers_per_carrier", Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "lengte", children: "Lengte (cm)" }), _jsx(Input, { id: "lengte", type: "number", min: 0, value: form.layer_length_cm, onChange: (e) => set("layer_length_cm", Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "breedte", children: "Breedte (cm)" }), _jsx(Input, { id: "breedte", type: "number", min: 0, value: form.layer_width_cm, onChange: (e) => set("layer_width_cm", Number(e.target.value)) })] })] })) : null, _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxfust", children: "Max fusten per laag" }), _jsx(Input, { id: "maxfust", type: "number", min: 1, value: form.max_crates_per_layer, onChange: (e) => set("max_crates_per_layer", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxdozen", children: "Max dozen / fusten totaal" }), _jsx(Input, { id: "maxdozen", type: "number", min: 1, value: form.max_boxes, onChange: (e) => set("max_boxes", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxkg", children: "Max gewicht (kg)" }), _jsx(Input, { id: "maxkg", type: "number", min: 0, value: form.max_weight_kg, onChange: (e) => set("max_weight_kg", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxhoogte", children: "Max hoogte (cm)" }), _jsx(Input, { id: "maxhoogte", type: "number", min: 0, value: form.max_height_cm, onChange: (e) => set("max_height_cm", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxorders", children: "Max orders" }), _jsx(Input, { id: "maxorders", type: "number", min: 1, value: form.max_orders, onChange: (e) => set("max_orders", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxklanten", children: "Max klanten" }), _jsx(Input, { id: "maxklanten", type: "number", min: 1, value: form.max_customers, onChange: (e) => set("max_customers", e.target.value), placeholder: "Geen grens" })] })] }), _jsxs("div", { className: "space-y-3 rounded-lg border p-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "mengen", children: "Mengen van partijen toestaan" }), _jsx(Switch, { id: "mengen", checked: form.allow_mixing, onCheckedChange: (v) => set("allow_mixing", v) })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "actief", children: "Actief" }), _jsx(Switch, { id: "actief", checked: form.is_active, onCheckedChange: (v) => set("is_active", v) })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "standaard", children: "Standaard ladingdrager" }), _jsx(Switch, { id: "standaard", checked: form.is_default, onCheckedChange: (v) => set("is_default", v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Label, { htmlFor: "volgorde", children: "Volgorde" }), _jsx(Input, { id: "volgorde", type: "number", className: "w-24", value: form.sort_order, onChange: (e) => set("sort_order", Number(e.target.value)) })] })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => setOpen(false), children: "Annuleren" }), _jsx(Button, { onClick: opslaan, disabled: saving || !form.code || !form.name, children: "Opslaan" })] })] }) })] }));
|
|
111
|
+
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(Container, { className: "h-6 w-6 text-primary" }), "Ladingdragers"] }), _jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: "Hier staat hoe groot elke ladingdrager is. De Beladingindeling gebruikt deze maten om te bepalen hoeveel fusten er per laag en per drager passen. In de Rule Engine bepaal je per strategie welke ladingdragers gebruikt mogen worden." })] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: reload, disabled: loading, children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4" }), "Vernieuwen"] }), _jsxs(Button, { size: "sm", onClick: openNieuw, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "Ladingdrager"] }), _jsx(Button, { asChild: true, variant: "ghost", size: "sm", children: _jsx(Link, { to: "/logistiek-engine", children: "Terug" }) })] })] }), _jsx(LadingdragerVoorstellenCard, { onKlaar: reload }), _jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Capaciteit per ladingdrager" }), _jsx(CardDescription, { children: "De capaciteit van een kar is het hoogste aantal lagen per kar van de producten op die kar. \"Lagen\" hieronder is de standaard als het product geen eigen lagen per kar heeft." })] }), _jsx(CardContent, { children: loading ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-10 w-full" }), _jsx(Skeleton, { className: "h-10 w-full" }), _jsx(Skeleton, { className: "h-10 w-full" })] })) : safeItems.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "Nog geen ladingdragers ingesteld." })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: "Ladingdrager" }), _jsx(TableHead, { children: "Model" }), _jsx(TableHead, { className: "text-right", children: "Lagen" }), _jsx(TableHead, { className: "text-right", children: "Laagmaat" }), _jsx(TableHead, { className: "text-right", children: "Max dozen" }), _jsx(TableHead, { className: "text-right", children: "Max kg" }), _jsx(TableHead, { children: "Mengen" }), _jsx(TableHead, { className: "text-right", children: "Acties" })] }) }), _jsx(TableBody, { children: safeItems.map((row) => (_jsxs(TableRow, { className: row.is_active ? "" : "opacity-50", children: [_jsxs(TableCell, { children: [_jsx("div", { className: "font-medium", children: ladingdragerNaam(row.code, floricodeNamen, row.name) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: row.code }), row.is_default ? _jsx(Badge, { variant: "secondary", children: "Standaard" }) : null, !row.is_active ? _jsx(Badge, { variant: "outline", children: "Uit" }) : null] })] }), _jsx(TableCell, { className: "text-sm", children: CAPACITY_MODEL_LABELS[row.capacity_model] }), _jsx(TableCell, { className: "text-right", children: row.layers_per_carrier }), _jsxs(TableCell, { className: "text-right text-sm text-muted-foreground", children: [row.layer_length_cm, " \u00D7 ", row.layer_width_cm, " cm"] }), _jsx(TableCell, { className: "text-right", children: row.max_boxes ?? "—" }), _jsx(TableCell, { className: "text-right", children: row.max_weight_kg ?? "—" }), _jsx(TableCell, { children: _jsx(Badge, { variant: row.allow_mixing === false ? "outline" : "secondary", children: row.allow_mixing === false ? "Nooit mengen" : "Mengen mag" }) }), _jsx(TableCell, { className: "text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx(Button, { variant: "ghost", size: "sm", onClick: () => openBewerk(row), children: _jsx(Pencil, { className: "h-4 w-4" }) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => remove(row.id), children: _jsx(Trash2, { className: "h-4 w-4" }) })] }) })] }, row.id))) })] })) })] }), _jsx(Dialog, { open: open, onOpenChange: setOpen, children: _jsxs(DialogContent, { className: "max-h-[85vh] overflow-y-auto sm:max-w-lg", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: bewerkId ? "Ladingdrager bewerken" : "Nieuwe ladingdrager" }), _jsx(DialogDescription, { children: "Deze maten bepalen hoeveel er per laag en per drager past." })] }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "code", children: "Code" }), _jsx(Input, { id: "code", value: form.code, onChange: (e) => set("code", e.target.value), placeholder: "pallet", disabled: Boolean(bewerkId) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "name", children: "Naam" }), _jsx(Input, { id: "name", value: form.name, onChange: (e) => set("name", e.target.value) })] })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { children: "Capaciteitsmodel" }), _jsxs(Select, { value: form.capacity_model, onValueChange: (v) => set("capacity_model", v), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: Object.entries(CAPACITY_MODEL_LABELS).map(([value, label]) => (_jsx(SelectItem, { value: value, children: label }, value))) })] })] }), toonLagen ? (_jsxs("div", { className: "grid grid-cols-3 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "lagen", children: "Lagen" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Standaard als het product geen eigen lagen per kar heeft." }), _jsx(Input, { id: "lagen", type: "number", min: 1, value: form.layers_per_carrier, onChange: (e) => set("layers_per_carrier", Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "lengte", children: "Lengte (cm)" }), _jsx(Input, { id: "lengte", type: "number", min: 0, value: form.layer_length_cm, onChange: (e) => set("layer_length_cm", Number(e.target.value)) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "breedte", children: "Breedte (cm)" }), _jsx(Input, { id: "breedte", type: "number", min: 0, value: form.layer_width_cm, onChange: (e) => set("layer_width_cm", Number(e.target.value)) })] })] })) : null, _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxfust", children: "Max fusten per laag" }), _jsx(Input, { id: "maxfust", type: "number", min: 1, value: form.max_crates_per_layer, onChange: (e) => set("max_crates_per_layer", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxdozen", children: "Max dozen / fusten totaal" }), _jsx(Input, { id: "maxdozen", type: "number", min: 1, value: form.max_boxes, onChange: (e) => set("max_boxes", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxkg", children: "Max gewicht (kg)" }), _jsx(Input, { id: "maxkg", type: "number", min: 0, value: form.max_weight_kg, onChange: (e) => set("max_weight_kg", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxhoogte", children: "Max hoogte (cm)" }), _jsx(Input, { id: "maxhoogte", type: "number", min: 0, value: form.max_height_cm, onChange: (e) => set("max_height_cm", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "overstek", children: "Overstek (cm)" }), _jsx(Input, { id: "overstek", type: "number", min: 0, step: 0.5, value: form.overstek_cm, onChange: (e) => set("overstek_cm", e.target.value), placeholder: "2" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Hoeveel een fust over de rand van de laag mag uitsteken bij het berekenen van fusten per laag. Standaard 2 cm." })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxorders", children: "Max orders" }), _jsx(Input, { id: "maxorders", type: "number", min: 1, value: form.max_orders, onChange: (e) => set("max_orders", e.target.value), placeholder: "Geen grens" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "maxklanten", children: "Max klanten" }), _jsx(Input, { id: "maxklanten", type: "number", min: 1, value: form.max_customers, onChange: (e) => set("max_customers", e.target.value), placeholder: "Geen grens" })] })] }), _jsxs("div", { className: "space-y-3 rounded-lg border p-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "mengen", children: "Mengen van partijen toestaan" }), _jsx(Switch, { id: "mengen", checked: form.allow_mixing, onCheckedChange: (v) => set("allow_mixing", v) })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "actief", children: "Actief" }), _jsx(Switch, { id: "actief", checked: form.is_active, onCheckedChange: (v) => set("is_active", v) })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Label, { htmlFor: "standaard", children: "Standaard ladingdrager" }), _jsx(Switch, { id: "standaard", checked: form.is_default, onCheckedChange: (v) => set("is_default", v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(Label, { htmlFor: "volgorde", children: "Volgorde" }), _jsx(Input, { id: "volgorde", type: "number", className: "w-24", value: form.sort_order, onChange: (e) => set("sort_order", Number(e.target.value)) })] })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => setOpen(false), children: "Annuleren" }), _jsx(Button, { onClick: opslaan, disabled: saving || !form.code || !form.name, children: "Opslaan" })] })] }) })] }));
|
|
108
112
|
}
|
|
@@ -30,7 +30,7 @@ export function MinuutrondeCard() {
|
|
|
30
30
|
const kleur = status === "groen" ? "text-primary" : status === "rood" ? "text-destructive" : "text-muted-foreground";
|
|
31
31
|
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" }), _jsxs("dd", { children: [stand?.laatsteAntwoordVersie ?? laatste.module_version ?? "onbekend", !laatste.module_version && stand?.laatsteAntwoordVersie ? " (allerlaatste ronde gaf geen antwoord)" : ""] }), _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
|
|
32
32
|
? " — er kwam wel een antwoord, maar zonder herkenning: een oudere moduleversie (vóór 1.0.107) of een andere pagina op dit adres"
|
|
33
|
-
: "", stand && stand.misluktOpRij > 0 ? ` (${stand.misluktOpRij} rondes op rij mislukt)` : ""] })] }))] })), stand && (stand.mislukt24u > 0 || stand.stapfout24u > 0) && (_jsxs("p", { className: "mt-3 text-sm text-destructive", children: ["De minuutronde is de laatste 24 uur ", stand.mislukt24u + stand.stapfout24u, " keer niet afgerond", stand.laatsteMislukt ? ` (laatst ${tijd(stand.laatsteMislukt)})` : "", ". Volgende rondes pakken het werk vanzelf op."] })), status === "oranje" && laatste?.module_project && (_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." })), _jsx(ShellAdresBlok, {})] }));
|
|
33
|
+
: "", stand && stand.misluktOpRij > 0 ? ` (${stand.misluktOpRij} rondes op rij mislukt)` : ""] })] }))] })), stand && (stand.mislukt24u > 0 || stand.stapfout24u > 0) && (_jsxs("p", { className: "mt-3 text-sm text-destructive", children: ["De minuutronde is de laatste 24 uur ", stand.mislukt24u + stand.stapfout24u, " keer niet afgerond", stand.laatsteMislukt ? ` (laatst ${tijd(stand.laatsteMislukt)})` : "", ". Volgende rondes pakken het werk vanzelf op."] })), status === "oranje" && laatste?.module_project === true && (_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." })), _jsx(ShellAdresBlok, {})] }));
|
|
34
34
|
}
|
|
35
35
|
function ShellAdresBlok() {
|
|
36
36
|
const { stand, fout, bezig, controleer } = useShellAdres();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartlijstCard.d.ts","sourceRoot":"","sources":["../../src/components/StartlijstCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"StartlijstCard.d.ts","sourceRoot":"","sources":["../../src/components/StartlijstCard.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,cAAc,gCA8G7B"}
|
|
@@ -48,8 +48,11 @@ export function StartlijstCard() {
|
|
|
48
48
|
};
|
|
49
49
|
const Stap = ({ klaar, titel, tekst, naar }) => (_jsxs("div", { className: "flex items-start gap-3", children: [klaar ? _jsx(CheckCircle2, { className: "mt-0.5 h-5 w-5 text-primary" }) : _jsx(Circle, { className: "mt-0.5 h-5 w-5 text-muted-foreground" }), _jsxs("div", { className: "text-sm", children: [_jsx("p", { className: "font-medium", children: titel }), _jsxs("p", { className: "text-muted-foreground", children: [tekst, naar && (_jsxs(_Fragment, { children: [" ", _jsx(Link, { to: naar, className: "underline", children: "Openen" })] }))] })] })] }));
|
|
50
50
|
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: "Startlijst" }), _jsx(CardDescription, { children: "Wat er nodig is om karren te kunnen indelen, in deze volgorde." })] }), _jsxs(CardContent, { className: "space-y-3", children: [fout && _jsx("p", { className: "text-sm text-destructive", children: fout }), _jsx(Stap, { klaar: s?.ladingdragers?.klaar, titel: "1. Ladingdragers", tekst: `${s?.ladingdragers?.aantal ?? 0} actief, ${s?.ladingdragers?.onvolledig ?? 0} zonder volledige maten.`, naar: "/logistiek-engine/ladingdragers" }), _jsx(Stap, { klaar: s?.werkwijze?.klaar, titel: "2. Werkwijze", tekst: s?.werkwijze?.klaar ? "Ingesteld." : "Nog niet ingesteld in de Rule Engine.", naar: "/logistiek-engine/rule-engine" }), _jsx(Stap, { klaar: s?.gereedheid?.klaar, titel: "3. Gereedheid per product", tekst: `${s?.gereedheid?.onvolledig ?? 0} van ${s?.gereedheid?.producten ?? 0} producten in open orders missen gegevens.` +
|
|
51
|
+
((s?.gereedheid?.wachtOpBelading ?? 0) > 0
|
|
52
|
+
? ` ${s?.gereedheid?.wachtOpBelading} order(s) wachten op belading (zie Vastgelopen orders).`
|
|
53
|
+
: "") +
|
|
51
54
|
((s?.gereedheid?.waarschuwing ?? 0) > 0
|
|
52
|
-
? ` ${s?.gereedheid?.waarschuwing}
|
|
55
|
+
? ` ${s?.gereedheid?.waarschuwing} met een waarschuwing.`
|
|
53
56
|
: ""), naar: "/logistiek-engine/beheer" }), _jsxs("div", { className: "flex flex-wrap gap-2 border-t pt-3", children: [_jsx(Button, { variant: "outline", size: "sm", disabled: bezig, onClick: () => void overnemen(false), children: "Alles overnemen uit Floricode/Floriday" }), voor && !voor.uitgevoerd && voor.aantal > 0 && (_jsxs(Button, { size: "sm", disabled: bezig, onClick: () => void overnemen(true), children: ["Bevestigen: ", voor.aantal, " veld(en) invullen"] }))] }), voor && (_jsxs("div", { className: "space-y-1 text-sm", children: [_jsxs("p", { children: [voor.uitgevoerd ? "Ingevuld" : "Voorvertoning", ": ", voor.aantal, " leeg veld(en)", Object.keys(voor.per_bron).length > 0 &&
|
|
54
57
|
` (${Object.entries(voor.per_bron)
|
|
55
58
|
.map(([b, n]) => `${n} uit ${b}`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuleFieldInput.d.ts","sourceRoot":"","sources":["../../../src/components/rule-engine/RuleFieldInput.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQ3E,UAAU,KAAK;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"RuleFieldInput.d.ts","sourceRoot":"","sources":["../../../src/components/rule-engine/RuleFieldInput.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQ3E,UAAU,KAAK;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,sCAuW3E"}
|
|
@@ -76,7 +76,7 @@ export function RuleFieldInput({ field, value, onChange, stepValues }) {
|
|
|
76
76
|
return (_jsxs("div", { className: "space-y-2", children: [_jsx(FieldLabel, { label: field.label, help: help }), _jsxs(Select, { value: String(value ?? ""), onValueChange: (v) => onChange(v), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: "Kies een optie" }) }), _jsx(SelectContent, { children: options.map((option) => (_jsx(SelectItem, { value: option.value, children: option.label }, option.value))) })] })] }));
|
|
77
77
|
}
|
|
78
78
|
if (field.type === "number") {
|
|
79
|
-
return (_jsxs("div", { className: "space-y-2", children: [_jsx(FieldLabel, { label: field.label, help: help, unit: field.unit }), _jsx(Input, { type: "number", min: field.min, max: field.max, value: value === undefined || value === null ? "" : String(value), onChange: (e) => onChange(e.target.value === "" ? "" : Number(e.target.value)) })] }));
|
|
79
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx(FieldLabel, { label: field.label, help: help, unit: field.unit }), _jsx(Input, { type: "number", min: field.min, max: field.max, step: field.step, value: value === undefined || value === null ? "" : String(value), onChange: (e) => onChange(e.target.value === "" ? "" : Number(e.target.value)) })] }));
|
|
80
80
|
}
|
|
81
81
|
if (field.type === "textarea") {
|
|
82
82
|
return (_jsxs("div", { className: "space-y-2", children: [_jsx(FieldLabel, { label: field.label, help: help }), _jsx(Textarea, { rows: 3, value: String(value ?? ""), onChange: (e) => onChange(e.target.value), placeholder: "naam@bedrijf.nl, inkoop@bedrijf.nl" })] }));
|
|
@@ -18,8 +18,21 @@ export declare const REDEN_LABEL: Record<string, string>;
|
|
|
18
18
|
export declare const REDEN_UITLEG: Record<string, string>;
|
|
19
19
|
export declare function redenUitleg(code: string | null | undefined): string | null;
|
|
20
20
|
export declare function redenLabel(code: string | null | undefined): string;
|
|
21
|
+
/** Golf 1 / 11: openstaande vraag "Klopt N?" per product + fust + ladingdrager. */
|
|
22
|
+
export interface LaagVraag {
|
|
23
|
+
orderId: string;
|
|
24
|
+
productId: string;
|
|
25
|
+
product: string;
|
|
26
|
+
fustSleutel: string;
|
|
27
|
+
ladingdragerCode: string;
|
|
28
|
+
ladingdrager: string;
|
|
29
|
+
opgegeven: number;
|
|
30
|
+
berekend: number | null;
|
|
31
|
+
tekst: string;
|
|
32
|
+
}
|
|
21
33
|
export declare function useGeblokkeerdeOrders(): {
|
|
22
34
|
rows: GeblokkeerdeOrder[];
|
|
35
|
+
laagVragen: LaagVraag[];
|
|
23
36
|
overzicht: BlokkadeOverzicht | null;
|
|
24
37
|
loading: boolean;
|
|
25
38
|
error: string | null;
|
|
@@ -34,6 +47,7 @@ export declare function useGeblokkeerdeOrders(): {
|
|
|
34
47
|
meerTeDoen: boolean;
|
|
35
48
|
}>;
|
|
36
49
|
beladingBevestigen: (orderId: string) => Promise<number>;
|
|
50
|
+
laagBevestigen: (v: LaagVraag) => Promise<number>;
|
|
37
51
|
};
|
|
38
52
|
export interface GearchiveerdeOrder {
|
|
39
53
|
queueId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGeblokkeerdeOrders.d.ts","sourceRoot":"","sources":["../../src/hooks/useGeblokkeerdeOrders.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB9C,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW/C,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,UAGzD;AAED,wBAAgB,qBAAqB
|
|
1
|
+
{"version":3,"file":"useGeblokkeerdeOrders.d.ts","sourceRoot":"","sources":["../../src/hooks/useGeblokkeerdeOrders.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoB9C,CAAC;AAGF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAW/C,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAE1E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,UAGzD;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB;;;;;;;;sBAuEhB,MAAM,EAAE;gCAwBT,MAAM;;;;;;;kCA8BN,MAAM;wBA6BZ,SAAS;EAqBtB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB;;;;;;iCAsCjB,MAAM,EAAE;EAmB5B"}
|
|
@@ -27,7 +27,7 @@ export const REDEN_LABEL = {
|
|
|
27
27
|
};
|
|
28
28
|
// Wat is er mis en wat moet de gebruiker doen — in gewone taal.
|
|
29
29
|
export const REDEN_UITLEG = {
|
|
30
|
-
belading_onwaarschijnlijk: "De belading van een of meer producten lijkt niet te kloppen
|
|
30
|
+
belading_onwaarschijnlijk: "De belading van een of meer producten wijkt af van wat volgens de maten past, of lijkt niet te kloppen (bijvoorbeeld 1 stuk per fust). Controleer het en bevestig; je hoeft dit per product, fust en ladingdrager maar één keer te doen. Daarna wordt de order vanzelf ingedeeld.",
|
|
31
31
|
belading_onvolledig: "Bij een of meer producten ontbreekt een deel van de belading (stuks per fust, fusten per laag of lagen per kar). Vul die aan; daarna wordt de order vanzelf ingedeeld.",
|
|
32
32
|
belading_onbekend: "Van een of meer producten is de belading niet bekend. Vul de belading in bij het product; daarna wordt de order vanzelf ingedeeld.",
|
|
33
33
|
gewicht_onbekend: "Het gewicht per fust ontbreekt. Vul het in bij het product.",
|
|
@@ -45,6 +45,7 @@ export function redenLabel(code) {
|
|
|
45
45
|
}
|
|
46
46
|
export function useGeblokkeerdeOrders() {
|
|
47
47
|
const [rows, setRows] = useState([]);
|
|
48
|
+
const [laagVragen, setLaagVragen] = useState([]);
|
|
48
49
|
const [overzicht, setOverzicht] = useState(null);
|
|
49
50
|
const [loading, setLoading] = useState(true);
|
|
50
51
|
const [error, setError] = useState(null);
|
|
@@ -53,14 +54,30 @@ export function useGeblokkeerdeOrders() {
|
|
|
53
54
|
setLoading(true);
|
|
54
55
|
setError(null);
|
|
55
56
|
try {
|
|
56
|
-
const [list, summary] = await Promise.all([
|
|
57
|
+
const [list, summary, vragen] = await Promise.all([
|
|
57
58
|
supabase.rpc("logistics_blocked_orders"),
|
|
58
59
|
supabase.rpc("logistics_blocked_overview"),
|
|
60
|
+
supabase.rpc("logistics_laag_vragen"),
|
|
59
61
|
]);
|
|
60
62
|
if (list.error)
|
|
61
63
|
throw new Error(list.error.message);
|
|
62
64
|
if (summary.error)
|
|
63
65
|
throw new Error(summary.error.message);
|
|
66
|
+
// Golf 1 / 11: vragen niet kunnen lezen is een zichtbare fout, geen lege lijst.
|
|
67
|
+
if (vragen.error)
|
|
68
|
+
throw new Error(`Vragen over fusten per laag konden niet worden gelezen: ${vragen.error.message}`);
|
|
69
|
+
const safeVragen = Array.isArray(vragen.data) ? vragen.data : [];
|
|
70
|
+
setLaagVragen(safeVragen.map((v) => ({
|
|
71
|
+
orderId: String(v.order_id),
|
|
72
|
+
productId: String(v.product_id),
|
|
73
|
+
product: String(v.product ?? ""),
|
|
74
|
+
fustSleutel: String(v.fust_sleutel),
|
|
75
|
+
ladingdragerCode: String(v.ladingdrager_code),
|
|
76
|
+
ladingdrager: String(v.ladingdrager ?? v.ladingdrager_code),
|
|
77
|
+
opgegeven: Number(v.opgegeven),
|
|
78
|
+
berekend: v.berekend == null ? null : Number(v.berekend),
|
|
79
|
+
tekst: String(v.tekst ?? ""),
|
|
80
|
+
})));
|
|
64
81
|
const safe = Array.isArray(list.data) ? list.data : [];
|
|
65
82
|
setRows(safe.map((r) => ({
|
|
66
83
|
queueId: String(r.queue_id),
|
|
@@ -169,7 +186,27 @@ export function useGeblokkeerdeOrders() {
|
|
|
169
186
|
setBusy(false);
|
|
170
187
|
}
|
|
171
188
|
}, [load]);
|
|
172
|
-
|
|
189
|
+
/** Golf 1 / 11: één keer bevestigen per product + fust + ladingdrager; daarna nooit meer vragen. */
|
|
190
|
+
const laagBevestigen = useCallback(async (v) => {
|
|
191
|
+
setBusy(true);
|
|
192
|
+
try {
|
|
193
|
+
const { data, error: rpcError } = await supabase.rpc("logistics_laag_bevestig", {
|
|
194
|
+
p_product_id: v.productId,
|
|
195
|
+
p_fust_sleutel: v.fustSleutel,
|
|
196
|
+
p_ladingdrager_code: v.ladingdragerCode,
|
|
197
|
+
p_fusten_per_laag: v.opgegeven,
|
|
198
|
+
p_berekend: v.berekend,
|
|
199
|
+
});
|
|
200
|
+
if (rpcError)
|
|
201
|
+
throw new Error(rpcError.message);
|
|
202
|
+
await load();
|
|
203
|
+
return Number((data ?? {})["opnieuw"] ?? 0);
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
setBusy(false);
|
|
207
|
+
}
|
|
208
|
+
}, [load]);
|
|
209
|
+
return { rows, laagVragen, overzicht, loading, error, busy, refresh: load, retry, dubbelenOpruimen, beladingBevestigen, laagBevestigen };
|
|
173
210
|
}
|
|
174
211
|
/** Lijst "Niet geleverd en gearchiveerd" en "Opnieuw aanbieden" (op order-id). */
|
|
175
212
|
export function useGearchiveerdeOrders() {
|
package/dist-lib/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export { WerkwijzeHerindelingCard } from './components/WerkwijzeHerindelingCard.
|
|
|
22
22
|
export { HerindelingMeldingCard } from './components/HerindelingMeldingCard.js';
|
|
23
23
|
export { GeblokkeerdeStickersCard } from './components/GeblokkeerdeStickersCard.js';
|
|
24
24
|
export { DataGereedheidCard } from './components/DataGereedheidCard.js';
|
|
25
|
+
export { GereedheidCard } from './components/GereedheidCard.js';
|
|
25
26
|
export { StartlijstCard } from './components/StartlijstCard.js';
|
|
26
27
|
export { LadingdragerVoorstellenCard } from './components/LadingdragerVoorstellenCard.js';
|
|
27
28
|
export { EtiketInstellenMelding } from './components/EtiketInstellenMelding.js';
|
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
|
@@ -25,6 +25,7 @@ export { WerkwijzeHerindelingCard } from './components/WerkwijzeHerindelingCard.
|
|
|
25
25
|
export { HerindelingMeldingCard } from './components/HerindelingMeldingCard.js';
|
|
26
26
|
export { GeblokkeerdeStickersCard } from './components/GeblokkeerdeStickersCard.js';
|
|
27
27
|
export { DataGereedheidCard } from './components/DataGereedheidCard.js';
|
|
28
|
+
export { GereedheidCard } from './components/GereedheidCard.js';
|
|
28
29
|
export { StartlijstCard } from './components/StartlijstCard.js';
|
|
29
30
|
export { LadingdragerVoorstellenCard } from './components/LadingdragerVoorstellenCard.js';
|
|
30
31
|
export { EtiketInstellenMelding } from './components/EtiketInstellenMelding.js';
|