@flowselections/floriday-voorraad 1.0.34 → 1.0.36
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/TemplatePage.d.ts +1 -1
- package/dist-lib/components/TemplatePage.d.ts.map +1 -1
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts +2 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.d.ts.map +1 -0
- package/dist-lib/components/settings/VoorraadSettingsCard.js +39 -0
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts +1 -1
- package/dist-lib/components/voorraad/AdditionalPackagingDialog.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelCompositionCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts +1 -1
- package/dist-lib/components/voorraad/ArtikelWizard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/ConnectionBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts +8 -0
- package/dist-lib/components/voorraad/ConnectionPicker.d.ts.map +1 -0
- package/dist-lib/components/voorraad/ConnectionPicker.js +8 -0
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/EditArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts +1 -1
- package/dist-lib/components/voorraad/ExcelExportButton.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayInfoCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/FloridayStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts +1 -1
- package/dist-lib/components/voorraad/FustenPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ModuleHealthCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts +1 -1
- package/dist-lib/components/voorraad/NieuwArtikelPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts +1 -1
- package/dist-lib/components/voorraad/OrderHistoryCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts +1 -1
- package/dist-lib/components/voorraad/PriceStatusBadge.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductCustomFieldsCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts +1 -1
- package/dist-lib/components/voorraad/ProductLinkCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts +1 -1
- package/dist-lib/components/voorraad/PublicatiesPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishProgressCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts +1 -1
- package/dist-lib/components/voorraad/PublishReadinessCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts +1 -1
- package/dist-lib/components/voorraad/StepSamenstelling.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts +1 -1
- package/dist-lib/components/voorraad/StockBulkButtons.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts +1 -1
- package/dist-lib/components/voorraad/StockPushMonitor.d.ts.map +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts +1 -1
- package/dist-lib/components/voorraad/StockSyncStatus.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationOverviewTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts +1 -1
- package/dist-lib/components/voorraad/ValidationPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadDashboard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPage.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadPagination.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadStockCard.js +104 -5
- package/dist-lib/components/voorraad/VoorraadTable.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadTable.d.ts.map +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts +1 -1
- package/dist-lib/components/voorraad/VoorraadVeldenCard.d.ts.map +1 -1
- package/dist-lib/hooks/useFloriday.d.ts +6 -6
- package/dist-lib/hooks/useFloriday.d.ts.map +1 -1
- package/dist-lib/hooks/useFloridayVbnRequired.d.ts +2 -2
- package/dist-lib/hooks/useFloridayVbnRequired.d.ts.map +1 -1
- package/dist-lib/hooks/useStockPushJobs.d.ts +3 -3
- package/dist-lib/hooks/useStockPushJobs.d.ts.map +1 -1
- package/dist-lib/hooks/useStockSyncHealth.d.ts +1 -1
- package/dist-lib/hooks/useStockSyncHealth.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemStock.d.ts +7 -5
- package/dist-lib/hooks/useTradeItemStock.d.ts.map +1 -1
- package/dist-lib/hooks/useTradeItemStock.js +14 -18
- package/dist-lib/hooks/useTradeItemSupplyLine.d.ts +1 -1
- package/dist-lib/hooks/useTradeItemSupplyLine.d.ts.map +1 -1
- package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts +1 -1
- package/dist-lib/hooks/useVbnRegulatoryFeatures.d.ts.map +1 -1
- package/dist-lib/index.d.ts +2 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/lib/floricode-required-features.functions.d.ts +7 -1
- package/dist-lib/lib/floricode-required-features.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts +1 -3
- package/dist-lib/lib/floriday-customer-offer.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-env.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-gateway.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-vbn-required.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-warehouse.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/module-health.functions.d.ts.map +1 -1
- package/dist-lib/lib/module-health.functions.js +88 -0
- package/dist-lib/lib/stock-sync.functions.d.ts.map +1 -1
- package/package.json +13 -1
- package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts +0 -2
- package/dist-lib/components/voorraad/LogistiekTakenCard.d.ts.map +0 -1
- package/dist-lib/components/voorraad/LogistiekTakenCard.js +0 -54
- package/dist-lib/hooks/useLogisticsTasks.d.ts +0 -13
- package/dist-lib/hooks/useLogisticsTasks.d.ts.map +0 -1
- package/dist-lib/hooks/useLogisticsTasks.js +0 -155
- package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts +0 -2
- package/dist-lib/hooks/useRegisterModuleBaseUrl.d.ts.map +0 -1
- package/dist-lib/hooks/useRegisterModuleBaseUrl.js +0 -31
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowselections/floriday-voorraad",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.36",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist-lib/index.js",
|
|
@@ -95,6 +95,18 @@
|
|
|
95
95
|
"route": "voorraad_/$id",
|
|
96
96
|
"title": "Artikel bewerken",
|
|
97
97
|
"nav": false
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"export": "FustenPage",
|
|
101
|
+
"route": "voorraad_/fusten",
|
|
102
|
+
"title": "Fusten",
|
|
103
|
+
"nav": false
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"export": "PublicatiesPage",
|
|
107
|
+
"route": "voorraad_/publicaties",
|
|
108
|
+
"title": "Publicaties",
|
|
109
|
+
"nav": false
|
|
98
110
|
}
|
|
99
111
|
]
|
|
100
112
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LogistiekTakenCard.d.ts","sourceRoot":"","sources":["../../../src/components/voorraad/LogistiekTakenCard.tsx"],"names":[],"mappings":"AAqBA,wBAAgB,kBAAkB,uCAoIjC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Toont de taken die de Logistics Engine voor de voorraadmodule plande
|
|
4
|
-
* (public.logistics_tasks, owner_module = "voorraad").
|
|
5
|
-
*
|
|
6
|
-
* Deze module beslist niets zelf: ze voert `stock.reserve` uit en meldt de
|
|
7
|
-
* taak af. In schaduwmodus wordt alleen vergeleken, nooit geschreven.
|
|
8
|
-
*/
|
|
9
|
-
import { useState } from "react";
|
|
10
|
-
import { Button, Card } from "@flowselections/core";
|
|
11
|
-
import { AlertTriangle, Eye, Play, RefreshCw } from "lucide-react";
|
|
12
|
-
import { runStockReserveTask, useLogisticsTasks, } from "../../hooks/useLogisticsTasks";
|
|
13
|
-
import { useFloridayConnection } from "../../hooks/useFloridayConnection";
|
|
14
|
-
import { describeLoadCarriers, parseStockReservePlan, } from "../../lib/logistics-engine";
|
|
15
|
-
export function LogistiekTakenCard() {
|
|
16
|
-
const { tasks, loading, error, refetch } = useLogisticsTasks([
|
|
17
|
-
"planned",
|
|
18
|
-
"ready",
|
|
19
|
-
]);
|
|
20
|
-
const { activeId } = useFloridayConnection();
|
|
21
|
-
const [busyId, setBusyId] = useState(null);
|
|
22
|
-
const [results, setResults] = useState({});
|
|
23
|
-
const reserveTasks = tasks.filter((t) => t.task_type === "stock.reserve");
|
|
24
|
-
if (loading)
|
|
25
|
-
return null;
|
|
26
|
-
if (!error && reserveTasks.length === 0)
|
|
27
|
-
return null;
|
|
28
|
-
async function handleRun(taskId) {
|
|
29
|
-
const task = reserveTasks.find((t) => t.id === taskId);
|
|
30
|
-
if (!task)
|
|
31
|
-
return;
|
|
32
|
-
setBusyId(taskId);
|
|
33
|
-
try {
|
|
34
|
-
const result = await runStockReserveTask(task, activeId);
|
|
35
|
-
setResults((prev) => ({ ...prev, [taskId]: result }));
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
setResults((prev) => ({ ...prev, [taskId]: e?.message ?? String(e) }));
|
|
39
|
-
}
|
|
40
|
-
finally {
|
|
41
|
-
setBusyId(null);
|
|
42
|
-
refetch();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return (_jsxs(Card, { className: "p-4 space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold", children: "Logistics Engine \u2014 taken" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "De Engine plant; deze module voert alleen uit. Taken met schaduwmodus worden uitsluitend vergeleken." })] }), _jsx(Button, { variant: "outline", size: "sm", onClick: () => refetch(), children: _jsx(RefreshCw, { className: "h-4 w-4" }) })] }), error && (_jsxs("div", { className: "flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-sm text-amber-800", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0" }), _jsxs("span", { children: ["Taken niet leesbaar: ", error] })] })), _jsx("ul", { className: "space-y-2", children: reserveTasks.map((task) => {
|
|
46
|
-
const plan = parseStockReservePlan(task.payload);
|
|
47
|
-
const result = results[task.id];
|
|
48
|
-
return (_jsxs("li", { className: "rounded-md border border-border p-3 text-sm", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "font-medium", children: [task.task_type, " \u00B7 ", task.order_ref, task.shadow && (_jsx("span", { className: "ml-2 rounded bg-muted px-1.5 py-0.5 text-[10px] uppercase tracking-wide text-muted-foreground", children: "schaduw" }))] }), _jsxs("div", { className: "text-xs text-muted-foreground", children: [describeLoadCarriers(plan.loadCarriers), " \u00B7", " ", plan.lines.length, " regel(s) \u00B7 status ", task.status, task.rule_version != null
|
|
49
|
-
? ` · rule v${task.rule_version}`
|
|
50
|
-
: "", task.planned_start
|
|
51
|
-
? ` · ${new Date(task.planned_start).toLocaleString("nl-NL")}`
|
|
52
|
-
: ""] })] }), _jsx(Button, { size: "sm", variant: task.shadow ? "outline" : "default", onClick: () => handleRun(task.id), disabled: busyId === task.id, children: task.shadow ? (_jsxs(_Fragment, { children: [_jsx(Eye, { className: "mr-1 h-4 w-4" }), " Vergelijk"] })) : (_jsxs(_Fragment, { children: [_jsx(Play, { className: "mr-1 h-4 w-4" }), " Uitvoeren"] })) })] }), result && (_jsx("div", { className: "mt-2 rounded bg-muted/50 p-2 text-xs", children: typeof result === "string" ? (_jsx("span", { className: "text-destructive", children: result })) : (_jsxs(_Fragment, { children: [_jsx("div", { children: result.message }), result.diff.length > 0 && (_jsx("ul", { className: "mt-1 space-y-0.5", children: result.diff.map((d) => (_jsxs("li", { children: [d.tradeItemKey, ": ", d.currentReserved, " \u2192", " ", d.engineReserved, " (", d.delta >= 0 ? "+" : "", d.delta, ")"] }, d.tradeItemKey))) }))] })) }))] }, task.id));
|
|
53
|
-
}) })] }));
|
|
54
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type LogisticsTaskRow, type TaskExecutionResult } from "../lib/logistics-engine";
|
|
2
|
-
export declare function useLogisticsTasks(statuses?: string[]): {
|
|
3
|
-
tasks: LogisticsTaskRow[];
|
|
4
|
-
loading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
refetch: () => Promise<void>;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Voert één `stock.reserve` taak uit. De Engine bepaalt WAT er gereserveerd
|
|
10
|
-
* wordt; deze module rekent niets zelf uit.
|
|
11
|
-
*/
|
|
12
|
-
export declare function runStockReserveTask(task: LogisticsTaskRow, connectionId: string | null): Promise<TaskExecutionResult>;
|
|
13
|
-
//# sourceMappingURL=useLogisticsTasks.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLogisticsTasks.d.ts","sourceRoot":"","sources":["../../src/hooks/useLogisticsTasks.ts"],"names":[],"mappings":"AAUA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAKjC,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,EAAyB;;;;;EAuD1E;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,gBAAgB,EACtB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAoG9B"}
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Taken van de Logistics Engine voor deze module, rechtstreeks uit de
|
|
3
|
-
* gedeelde Supabase-database (public.logistics_tasks).
|
|
4
|
-
*
|
|
5
|
-
* De Engine plant; wij tonen, voeren `stock.reserve` uit en melden af.
|
|
6
|
-
* In schaduwmodus wordt alleen vergeleken en NIETS geschreven aan voorraad;
|
|
7
|
-
* de taak wordt dan ook niet afgemeld.
|
|
8
|
-
*/
|
|
9
|
-
import { useCallback, useEffect, useState } from "react";
|
|
10
|
-
import { supabase } from "../integrations/supabase/client";
|
|
11
|
-
import { OWNER_MODULE, describeLoadCarriers, parseStockReservePlan, } from "../lib/logistics-engine";
|
|
12
|
-
const TASK_COLUMNS = "id,order_ref,buffer_ref,task_type,sequence,depends_on,planned_start,planned_end,due_at,status,shadow,payload,result,rule_version";
|
|
13
|
-
export function useLogisticsTasks(statuses = ["planned", "ready"]) {
|
|
14
|
-
const key = statuses.join(",");
|
|
15
|
-
const [tasks, setTasks] = useState([]);
|
|
16
|
-
const [loading, setLoading] = useState(true);
|
|
17
|
-
const [error, setError] = useState(null);
|
|
18
|
-
const refetch = useCallback(async () => {
|
|
19
|
-
const { data, error } = await supabase
|
|
20
|
-
.from("logistics_tasks")
|
|
21
|
-
.select(TASK_COLUMNS)
|
|
22
|
-
.eq("owner_module", OWNER_MODULE)
|
|
23
|
-
.in("status", key.split(","))
|
|
24
|
-
.order("planned_start", { ascending: true });
|
|
25
|
-
if (error) {
|
|
26
|
-
setError(error.message);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
setError(null);
|
|
30
|
-
setTasks((data ?? []));
|
|
31
|
-
}, [key]);
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
let cancelled = false;
|
|
34
|
-
setLoading(true);
|
|
35
|
-
(async () => {
|
|
36
|
-
await refetch();
|
|
37
|
-
if (!cancelled)
|
|
38
|
-
setLoading(false);
|
|
39
|
-
})();
|
|
40
|
-
return () => {
|
|
41
|
-
cancelled = true;
|
|
42
|
-
};
|
|
43
|
-
}, [refetch]);
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
const channel = supabase
|
|
46
|
-
.channel(`logistics-tasks-${OWNER_MODULE}`)
|
|
47
|
-
.on("postgres_changes", {
|
|
48
|
-
event: "*",
|
|
49
|
-
schema: "public",
|
|
50
|
-
table: "logistics_tasks",
|
|
51
|
-
filter: `owner_module=eq.${OWNER_MODULE}`,
|
|
52
|
-
}, () => {
|
|
53
|
-
refetch();
|
|
54
|
-
})
|
|
55
|
-
.subscribe();
|
|
56
|
-
return () => {
|
|
57
|
-
supabase.removeChannel(channel);
|
|
58
|
-
};
|
|
59
|
-
}, [refetch]);
|
|
60
|
-
return { tasks, loading, error, refetch };
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Voert één `stock.reserve` taak uit. De Engine bepaalt WAT er gereserveerd
|
|
64
|
-
* wordt; deze module rekent niets zelf uit.
|
|
65
|
-
*/
|
|
66
|
-
export async function runStockReserveTask(task, connectionId) {
|
|
67
|
-
const plan = parseStockReservePlan(task.payload);
|
|
68
|
-
const shadow = task.shadow;
|
|
69
|
-
if (plan.lines.length === 0) {
|
|
70
|
-
return {
|
|
71
|
-
taskId: task.id,
|
|
72
|
-
applied: false,
|
|
73
|
-
shadow,
|
|
74
|
-
diff: [],
|
|
75
|
-
message: `Taak zonder regels (${describeLoadCarriers(plan.loadCarriers)}).`,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
const keys = plan.lines.map((l) => l.tradeItemKey);
|
|
79
|
-
let query = supabase
|
|
80
|
-
.from("trade_item_stock")
|
|
81
|
-
.select("trade_item_key,physical_stock,reserved_stock,connection_id")
|
|
82
|
-
.in("trade_item_key", keys);
|
|
83
|
-
if (connectionId)
|
|
84
|
-
query = query.eq("connection_id", connectionId);
|
|
85
|
-
const { data: rows, error: readError } = await query;
|
|
86
|
-
if (readError)
|
|
87
|
-
throw new Error(`voorraad lezen: ${readError.message}`);
|
|
88
|
-
const stock = (rows ?? []);
|
|
89
|
-
const diff = plan.lines.map((line) => {
|
|
90
|
-
const row = stock.find((r) => r.trade_item_key === line.tradeItemKey);
|
|
91
|
-
const currentReserved = row?.reserved_stock ?? 0;
|
|
92
|
-
return {
|
|
93
|
-
tradeItemKey: line.tradeItemKey,
|
|
94
|
-
currentReserved,
|
|
95
|
-
engineReserved: line.quantity,
|
|
96
|
-
delta: line.quantity - currentReserved,
|
|
97
|
-
};
|
|
98
|
-
});
|
|
99
|
-
if (shadow) {
|
|
100
|
-
return {
|
|
101
|
-
taskId: task.id,
|
|
102
|
-
applied: false,
|
|
103
|
-
shadow: true,
|
|
104
|
-
diff,
|
|
105
|
-
message: `Schaduwmodus: ${diff.length} regel(s) vergeleken, niets geschreven (${describeLoadCarriers(plan.loadCarriers)}).`,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
await supabase
|
|
109
|
-
.from("logistics_tasks")
|
|
110
|
-
.update({ status: "in_progress", started_at: new Date().toISOString() })
|
|
111
|
-
.eq("id", task.id);
|
|
112
|
-
try {
|
|
113
|
-
for (const line of plan.lines) {
|
|
114
|
-
const row = stock.find((r) => r.trade_item_key === line.tradeItemKey);
|
|
115
|
-
if (!row)
|
|
116
|
-
throw new Error(`Geen voorraadrij voor ${line.tradeItemKey}`);
|
|
117
|
-
const { error } = await supabase
|
|
118
|
-
.from("trade_item_stock")
|
|
119
|
-
.update({ reserved_stock: line.quantity })
|
|
120
|
-
.eq("connection_id", row.connection_id)
|
|
121
|
-
.eq("trade_item_key", line.tradeItemKey);
|
|
122
|
-
if (error) {
|
|
123
|
-
throw new Error(`reservering ${line.tradeItemKey}: ${error.message}`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
const message = e?.message ?? String(e);
|
|
129
|
-
await supabase
|
|
130
|
-
.from("logistics_tasks")
|
|
131
|
-
.update({
|
|
132
|
-
status: "failed",
|
|
133
|
-
result: { message, diff },
|
|
134
|
-
completed_at: new Date().toISOString(),
|
|
135
|
-
})
|
|
136
|
-
.eq("id", task.id);
|
|
137
|
-
throw new Error(message);
|
|
138
|
-
}
|
|
139
|
-
const result = {
|
|
140
|
-
taskId: task.id,
|
|
141
|
-
applied: true,
|
|
142
|
-
shadow: false,
|
|
143
|
-
diff,
|
|
144
|
-
message: `${plan.lines.length} regel(s) gereserveerd (${describeLoadCarriers(plan.loadCarriers)}).`,
|
|
145
|
-
};
|
|
146
|
-
await supabase
|
|
147
|
-
.from("logistics_tasks")
|
|
148
|
-
.update({
|
|
149
|
-
status: "done",
|
|
150
|
-
result: result,
|
|
151
|
-
completed_at: new Date().toISOString(),
|
|
152
|
-
})
|
|
153
|
-
.eq("id", task.id);
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRegisterModuleBaseUrl.d.ts","sourceRoot":"","sources":["../../src/hooks/useRegisterModuleBaseUrl.ts"],"names":[],"mappings":"AAUA,wBAAgB,wBAAwB,SA0BvC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Registreert eenmalig per sessie de basis-URL van de shell waarin deze
|
|
3
|
-
* module draait, zodat de Postgres-cron de voorraadsync-hooks kan aanroepen
|
|
4
|
-
* zonder hardgecodeerde host.
|
|
5
|
-
*/
|
|
6
|
-
import { useEffect, useRef } from "react";
|
|
7
|
-
import { registerModuleBaseUrl } from "../lib/module-runtime-config.functions";
|
|
8
|
-
let alreadyRegistered = false;
|
|
9
|
-
export function useRegisterModuleBaseUrl() {
|
|
10
|
-
const started = useRef(false);
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
if (alreadyRegistered || started.current)
|
|
13
|
-
return;
|
|
14
|
-
started.current = true;
|
|
15
|
-
alreadyRegistered = true;
|
|
16
|
-
registerModuleBaseUrl()
|
|
17
|
-
.then((res) => {
|
|
18
|
-
if (res?.ok) {
|
|
19
|
-
console.info(`[voorraad] basis-URL geregistreerd: ${res.baseUrl}${res.changed ? " (bijgewerkt)" : ""}`);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
alreadyRegistered = false;
|
|
23
|
-
console.warn(`[voorraad] basis-URL niet geregistreerd: ${res?.reason ?? "onbekende reden"}`);
|
|
24
|
-
}
|
|
25
|
-
})
|
|
26
|
-
.catch((e) => {
|
|
27
|
-
alreadyRegistered = false;
|
|
28
|
-
console.warn("[voorraad] kon basis-URL niet registreren:", e?.message ?? e);
|
|
29
|
-
});
|
|
30
|
-
}, []);
|
|
31
|
-
}
|