@flowselections/logistiek-engine 1.0.189 → 1.0.193
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 +1468 -0
- package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
- package/dist-lib/components/BeladingIndelingCard.js +4 -2
- package/dist-lib/components/GeblokkeerdeOrdersCard.d.ts.map +1 -1
- package/dist-lib/components/GeblokkeerdeOrdersCard.js +43 -4
- package/dist-lib/components/InplanVoortgangCard.d.ts +16 -0
- package/dist-lib/components/InplanVoortgangCard.d.ts.map +1 -0
- package/dist-lib/components/InplanVoortgangCard.js +34 -0
- package/dist-lib/components/LadingdragersPage.d.ts.map +1 -1
- package/dist-lib/components/LadingdragersPage.js +4 -1
- package/dist-lib/components/OrdersZonderKarCard.d.ts +2 -0
- package/dist-lib/components/OrdersZonderKarCard.d.ts.map +1 -0
- package/dist-lib/components/OrdersZonderKarCard.js +36 -0
- package/dist-lib/components/RegiePage.d.ts.map +1 -1
- package/dist-lib/components/RegiePage.js +3 -1
- package/dist-lib/components/RuleEnginePage.js +8 -3
- package/dist-lib/hooks/useFloricodeLadingdragers.d.ts +2 -0
- package/dist-lib/hooks/useFloricodeLadingdragers.d.ts.map +1 -0
- package/dist-lib/hooks/useFloricodeLadingdragers.js +25 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts +1 -0
- package/dist-lib/hooks/useGeblokkeerdeOrders.d.ts.map +1 -1
- package/dist-lib/hooks/useGeblokkeerdeOrders.js +38 -1
- package/dist-lib/hooks/useRecalcJob.d.ts +1 -0
- package/dist-lib/hooks/useRecalcJob.d.ts.map +1 -1
- package/dist-lib/hooks/useRecalcJob.js +11 -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/types.d.ts +580 -1
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.d.ts +18 -0
- package/dist-lib/lib/beladingRegels.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.js +28 -0
- package/dist-lib/lib/handlers/logistics-tick.server.d.ts.map +1 -1
- package/dist-lib/lib/handlers/logistics-tick.server.js +14 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts +3 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanner.js +18 -13
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +16 -0
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +394 -24
- package/dist-lib/lib/loadCarrierTypes.d.ts +7 -0
- package/dist-lib/lib/loadCarrierTypes.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierTypes.js +17 -0
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts +1 -0
- package/dist-lib/lib/logisticsRecalcJob.server.d.ts.map +1 -1
- package/dist-lib/lib/logisticsRecalcJob.server.js +5 -2
- package/dist-lib/lib/logisticsRecalculate.functions.js +2 -2
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/planQueue.server.js +8 -2
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +9 -0
- package/dist-lib/lib/scheduleTasks.server.d.ts +24 -0
- package/dist-lib/lib/scheduleTasks.server.d.ts.map +1 -0
- package/dist-lib/lib/scheduleTasks.server.js +113 -0
- package/dist-lib/lib/voorraadFouten.d.ts +14 -0
- package/dist-lib/lib/voorraadFouten.d.ts.map +1 -0
- package/dist-lib/lib/voorraadFouten.js +18 -0
- package/package.json +1 -1
|
@@ -104,13 +104,15 @@ export async function tickJob(sb) {
|
|
|
104
104
|
const { data: current } = await sb.from(TABLE).select("*").eq("id", job.id).maybeSingle();
|
|
105
105
|
return (current ?? null);
|
|
106
106
|
}
|
|
107
|
+
export { scheduleTasksPerOrder } from "./scheduleTasks.server.js";
|
|
108
|
+
import { scheduleTasksPerOrder } from "./scheduleTasks.server.js";
|
|
109
|
+
import { voorraadFoutTekst } from "./voorraadFouten.js";
|
|
107
110
|
/** Draait de afsluitende herberekenstappen (planning, tellingen, capaciteit). */
|
|
108
111
|
export async function runFinalSteps(sb, days = 21) {
|
|
109
112
|
const today = new Date();
|
|
110
113
|
const until = new Date(today.getTime() + days * 24 * 60 * 60 * 1000);
|
|
111
114
|
const iso = (d) => d.toISOString().slice(0, 10);
|
|
112
115
|
const calls = [
|
|
113
|
-
{ step: "Taken opnieuw inplannen", fn: "logistics_schedule_tasks", args: {} },
|
|
114
116
|
{ step: "Ladingdragers tellen", fn: "logistics_sync_task_carriers", args: { p_order_ref: null } },
|
|
115
117
|
{ step: "Pickwachtrij bijwerken", fn: "logistics_sync_pick_queue", args: {} },
|
|
116
118
|
{ step: "Dubbele bufferregels opruimen", fn: "logistics_prune_buffer_member_queue", args: {} },
|
|
@@ -122,9 +124,10 @@ export async function runFinalSteps(sb, days = 21) {
|
|
|
122
124
|
},
|
|
123
125
|
];
|
|
124
126
|
const steps = [];
|
|
127
|
+
steps.push(await scheduleTasksPerOrder(sb));
|
|
125
128
|
for (const call of calls) {
|
|
126
129
|
const { error } = await sb.rpc(call.fn, call.args);
|
|
127
|
-
steps.push({ step: call.step, ok: !error, ...(error ? { error: error
|
|
130
|
+
steps.push({ step: call.step, ok: !error, ...(error ? { error: voorraadFoutTekst(error) } : {}) });
|
|
128
131
|
}
|
|
129
132
|
return steps;
|
|
130
133
|
}
|
|
@@ -17,7 +17,6 @@ export const recalculateLogistics = createServerFn({ method: "POST" })
|
|
|
17
17
|
const until = new Date(today.getTime() + days * 24 * 60 * 60 * 1000);
|
|
18
18
|
const iso = (d) => d.toISOString().slice(0, 10);
|
|
19
19
|
const calls = [
|
|
20
|
-
{ step: "Taken opnieuw inplannen", fn: "logistics_schedule_tasks", args: {} },
|
|
21
20
|
{ step: "Ladingdragers tellen", fn: "logistics_sync_task_carriers", args: { p_order_ref: null } },
|
|
22
21
|
{ step: "Pickwachtrij bijwerken", fn: "logistics_sync_pick_queue", args: {} },
|
|
23
22
|
{ step: "Dubbele bufferregels opruimen", fn: "logistics_prune_buffer_member_queue", args: {} },
|
|
@@ -28,7 +27,8 @@ export const recalculateLogistics = createServerFn({ method: "POST" })
|
|
|
28
27
|
args: { p_from: iso(today), p_to: iso(until) },
|
|
29
28
|
},
|
|
30
29
|
];
|
|
31
|
-
const
|
|
30
|
+
const { scheduleTasksPerOrder } = await import("./scheduleTasks.server.js");
|
|
31
|
+
const steps = [await scheduleTasksPerOrder(context.supabase)];
|
|
32
32
|
for (const call of calls) {
|
|
33
33
|
const { error } = await context.supabase.rpc(call.fn, call.args);
|
|
34
34
|
steps.push({ step: call.step, ok: !error, ...(error ? { error: error.message } : {}) });
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MODULE_VERSION = "1.0.
|
|
1
|
+
export declare const MODULE_VERSION = "1.0.193";
|
|
2
2
|
//# sourceMappingURL=moduleVersion.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatisch gegenereerd door prebuild:lib; niet handmatig aanpassen.
|
|
2
|
-
export const MODULE_VERSION = "1.0.
|
|
2
|
+
export const MODULE_VERSION = "1.0.193";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CA8S1B;AAmCD,iGAAiG;AACjG,eAAO,MAAM,eAAe,0EAA2E,CAAC;AAgCxG,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
|
|
@@ -13,6 +13,8 @@ import { trace, newTraceId, classifyError } from "./trace.server.js";
|
|
|
13
13
|
import { FLOW_NODE } from "./flowNodes.js";
|
|
14
14
|
import { completePlannerDiffRuns, skipPlannerDiffRuns } from "./plannerDiff.server.js";
|
|
15
15
|
import { opnieuwOverSeconden } from "./beladingRegels.js";
|
|
16
|
+
import { scheduleTasksPerOrder } from "./scheduleTasks.server.js";
|
|
17
|
+
import { voorraadFoutTekst } from "./voorraadFouten.js";
|
|
16
18
|
const EMPTY = {
|
|
17
19
|
claimed: 0,
|
|
18
20
|
planned: 0,
|
|
@@ -319,7 +321,6 @@ async function runDayLevelSteps(sb, dates, result) {
|
|
|
319
321
|
const from = sorted[0] && sorted[0] < today ? sorted[0] : today;
|
|
320
322
|
const to = sorted.length > 0 ? sorted[sorted.length - 1] : today;
|
|
321
323
|
const calls = [
|
|
322
|
-
{ fn: "logistics_schedule_tasks", args: {} },
|
|
323
324
|
{ fn: "logistics_sync_task_carriers", args: { p_order_ref: null } },
|
|
324
325
|
{ fn: "logistics_sync_pick_queue", args: {} },
|
|
325
326
|
{ fn: "logistics_prune_buffer_member_queue", args: {} },
|
|
@@ -329,10 +330,15 @@ async function runDayLevelSteps(sb, dates, result) {
|
|
|
329
330
|
// picken, controle, afgehandeld). Alleen meekijkend.
|
|
330
331
|
{ fn: "logistics_trace_progress", args: { p_limit: 200 } },
|
|
331
332
|
];
|
|
333
|
+
{
|
|
334
|
+
const r = await scheduleTasksPerOrder(sb);
|
|
335
|
+
if (!r.ok && result.errors.length < 10)
|
|
336
|
+
result.errors.push(`logistics_schedule_tasks: ${r.error}`);
|
|
337
|
+
}
|
|
332
338
|
for (const call of calls) {
|
|
333
339
|
const { error } = await sb.rpc(call.fn, call.args);
|
|
334
340
|
if (error && result.errors.length < 10)
|
|
335
|
-
result.errors.push(`${call.fn}: ${error
|
|
341
|
+
result.errors.push(`${call.fn}: ${voorraadFoutTekst(error)}`);
|
|
336
342
|
}
|
|
337
343
|
await runCartAndTaskFollowUp(sb, result);
|
|
338
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,UAAU,GACV,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,QAAQ,GACR,aAAa,GACb,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAMf,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,wGAAwG;IACxG,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;CAC/C;AAGD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAID,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAQzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAK5C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAI9D,eAAO,MAAM,UAAU,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,6 +64,15 @@ export const RULE_STEPS = [
|
|
|
64
64
|
description: "Staat dit uit, dan blijven reserveringen altijd los. Staat het aan, dan gelden voor reserveringen exact dezelfde combineerregels; nog onbekende gegevens tellen niet mee.",
|
|
65
65
|
dependsOn: { key: "buffer_enabled", in: [true] },
|
|
66
66
|
},
|
|
67
|
+
{
|
|
68
|
+
// 1.0.190: zichtbare instelling; vervangt de onzichtbare omgevingsinstelling.
|
|
69
|
+
key: "rebuffer_on_change",
|
|
70
|
+
label: "Opnieuw indelen bij wijziging",
|
|
71
|
+
type: "toggle",
|
|
72
|
+
default: true,
|
|
73
|
+
description: "Staat dit aan, dan worden bestaande open orders opnieuw gecombineerd zodra de combineerregels veranderen. Vrijgegeven orders, orders in de pickrij en orders met een geprinte of gescande kar worden nooit verplaatst.",
|
|
74
|
+
dependsOn: { key: "buffer_enabled", in: [true] },
|
|
75
|
+
},
|
|
67
76
|
{
|
|
68
77
|
key: "buffer_match",
|
|
69
78
|
label: "Orders combineren wanneer deze gegevens gelijk zijn",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { SupabaseClient } from "@supabase/supabase-js";
|
|
2
|
+
/**
|
|
3
|
+
* 1.0.192: "Taken opnieuw inplannen" in porties via logistics_schedule_tasks_batch.
|
|
4
|
+
* - Eén ronde = werklijst van alle orders met open taken (zelfde selectie als 1.0.190).
|
|
5
|
+
* - Per portie een eigen databaseaanroep met tijdsbudget; per order een eigen
|
|
6
|
+
* subtransactie, dus een fout laat de oude planning staan.
|
|
7
|
+
* - Ongewijzigde orders (vingerafdruk incl. algemene invoer) worden overgeslagen.
|
|
8
|
+
* - Wat niet binnen het totale budget past, loopt de volgende minuutronde verder
|
|
9
|
+
* (de werklijst blijft staan; voortgang "x van y" in Overzicht & meldingen).
|
|
10
|
+
* Ontbreekt de nieuwe functie (Shell zonder 1.0.192-schema), dan valt hij terug
|
|
11
|
+
* op het inplannen per order van 1.0.190.
|
|
12
|
+
*/
|
|
13
|
+
export declare const PORTIE_ORDERS = 25;
|
|
14
|
+
export declare const PORTIE_BUDGET_MS = 20000;
|
|
15
|
+
export declare const TOTAAL_BUDGET_MS = 110000;
|
|
16
|
+
export declare function isOntbrekendeFunctie(msg: string): boolean;
|
|
17
|
+
export type InplanStap = {
|
|
18
|
+
step: string;
|
|
19
|
+
ok: boolean;
|
|
20
|
+
error?: string;
|
|
21
|
+
voortgang?: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function scheduleTasksPerOrder(sb: SupabaseClient, nu?: () => number): Promise<InplanStap>;
|
|
24
|
+
//# sourceMappingURL=scheduleTasks.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduleTasks.server.d.ts","sourceRoot":"","sources":["../../src/lib/scheduleTasks.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,gBAAgB,QAAS,CAAC;AACvC,eAAO,MAAM,gBAAgB,SAAU,CAAC;AAUxC,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,GAAE,MAAM,MAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoChH"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { voorraadFoutTekst } from "./voorraadFouten.js";
|
|
2
|
+
/**
|
|
3
|
+
* 1.0.192: "Taken opnieuw inplannen" in porties via logistics_schedule_tasks_batch.
|
|
4
|
+
* - Eén ronde = werklijst van alle orders met open taken (zelfde selectie als 1.0.190).
|
|
5
|
+
* - Per portie een eigen databaseaanroep met tijdsbudget; per order een eigen
|
|
6
|
+
* subtransactie, dus een fout laat de oude planning staan.
|
|
7
|
+
* - Ongewijzigde orders (vingerafdruk incl. algemene invoer) worden overgeslagen.
|
|
8
|
+
* - Wat niet binnen het totale budget past, loopt de volgende minuutronde verder
|
|
9
|
+
* (de werklijst blijft staan; voortgang "x van y" in Overzicht & meldingen).
|
|
10
|
+
* Ontbreekt de nieuwe functie (Shell zonder 1.0.192-schema), dan valt hij terug
|
|
11
|
+
* op het inplannen per order van 1.0.190.
|
|
12
|
+
*/
|
|
13
|
+
export const PORTIE_ORDERS = 25;
|
|
14
|
+
export const PORTIE_BUDGET_MS = 20000;
|
|
15
|
+
export const TOTAAL_BUDGET_MS = 110000;
|
|
16
|
+
export function isOntbrekendeFunctie(msg) {
|
|
17
|
+
return /could not find the function|does not exist|PGRST202/i.test(msg);
|
|
18
|
+
}
|
|
19
|
+
export async function scheduleTasksPerOrder(sb, nu = Date.now) {
|
|
20
|
+
const step = "Taken opnieuw inplannen";
|
|
21
|
+
const start = nu();
|
|
22
|
+
try {
|
|
23
|
+
let runId = null;
|
|
24
|
+
let laatste = {};
|
|
25
|
+
const fouten = [];
|
|
26
|
+
for (;;) {
|
|
27
|
+
const opties = { max_orders: PORTIE_ORDERS, budget_ms: PORTIE_BUDGET_MS };
|
|
28
|
+
if (runId)
|
|
29
|
+
opties.run_id = runId;
|
|
30
|
+
else
|
|
31
|
+
opties.start = true;
|
|
32
|
+
const { data, error } = await sb.rpc("logistics_schedule_tasks_batch", { p_opties: opties });
|
|
33
|
+
if (error) {
|
|
34
|
+
if (!runId && isOntbrekendeFunctie(error.message))
|
|
35
|
+
return await perOrderOud(sb, step);
|
|
36
|
+
throw new Error(voorraadFoutTekst(error));
|
|
37
|
+
}
|
|
38
|
+
laatste = (data ?? {});
|
|
39
|
+
runId = laatste.runId ?? runId;
|
|
40
|
+
for (const f of Array.isArray(laatste.fouten) ? laatste.fouten : []) {
|
|
41
|
+
fouten.push(`${f.order ?? "?"}: ${voorraadFoutTekst({ message: String(f.fout ?? "") })}`);
|
|
42
|
+
}
|
|
43
|
+
if (!laatste.resterend || laatste.resterend <= 0)
|
|
44
|
+
break;
|
|
45
|
+
if (nu() - start > TOTAAL_BUDGET_MS) {
|
|
46
|
+
return {
|
|
47
|
+
step,
|
|
48
|
+
ok: true,
|
|
49
|
+
voortgang: `${laatste.verwerkt ?? 0} van ${laatste.totaal ?? 0} opnieuw ingepland; de rest volgt in de volgende ronde`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return fouten.length === 0
|
|
54
|
+
? { step, ok: true }
|
|
55
|
+
: { step, ok: false, error: `${fouten.length} van ${laatste.totaal ?? 0} order(s) niet ingepland: ${fouten.slice(0, 3).join(" | ")}` };
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
return { step, ok: false, error: e?.message ? String(e.message) : String(e) };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** 1.0.190-gedrag: per order logistics_schedule_tasks aanroepen. */
|
|
62
|
+
async function perOrderOud(sb, step) {
|
|
63
|
+
const { data: ts } = await sb
|
|
64
|
+
.from("logistics_time_settings")
|
|
65
|
+
.select("departure_rule_since, rule_160_since")
|
|
66
|
+
.order("updated_at", { ascending: false, nullsFirst: false })
|
|
67
|
+
.limit(1);
|
|
68
|
+
const since = ts?.[0]?.departure_rule_since ?? null;
|
|
69
|
+
const r160 = ts?.[0]?.rule_160_since ?? null;
|
|
70
|
+
const refs = new Set();
|
|
71
|
+
for (let from = 0;; from += 1000) {
|
|
72
|
+
const { data, error } = await sb
|
|
73
|
+
.from("logistics_tasks")
|
|
74
|
+
.select("order_ref")
|
|
75
|
+
.in("status", ["planned", "ready"])
|
|
76
|
+
.not("order_ref", "is", null)
|
|
77
|
+
.range(from, from + 999);
|
|
78
|
+
if (error)
|
|
79
|
+
throw new Error(error.message);
|
|
80
|
+
const rows = Array.isArray(data) ? data : [];
|
|
81
|
+
for (const r of rows)
|
|
82
|
+
if (r.order_ref)
|
|
83
|
+
refs.add(String(r.order_ref));
|
|
84
|
+
if (rows.length < 1000)
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
const lijst = [...refs];
|
|
88
|
+
const toegestaan = [];
|
|
89
|
+
for (let s = 0; s < lijst.length; s += 200) {
|
|
90
|
+
const { data, error } = await sb
|
|
91
|
+
.from("orders")
|
|
92
|
+
.select("order_number, created_at")
|
|
93
|
+
.in("order_number", lijst.slice(s, s + 200))
|
|
94
|
+
.is("deleted_at", null);
|
|
95
|
+
if (error)
|
|
96
|
+
throw new Error(error.message);
|
|
97
|
+
for (const o of Array.isArray(data) ? data : []) {
|
|
98
|
+
const c = String(o.created_at ?? "");
|
|
99
|
+
const inVenster = since && r160 && c >= since && c < r160;
|
|
100
|
+
if (!inVenster)
|
|
101
|
+
toegestaan.push(String(o.order_number));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const fouten = [];
|
|
105
|
+
for (const ref of toegestaan) {
|
|
106
|
+
const { error } = await sb.rpc("logistics_schedule_tasks", { p_order_ref: ref });
|
|
107
|
+
if (error)
|
|
108
|
+
fouten.push(`${ref}: ${voorraadFoutTekst(error)}`);
|
|
109
|
+
}
|
|
110
|
+
return fouten.length === 0
|
|
111
|
+
? { step, ok: true }
|
|
112
|
+
: { step, ok: false, error: `${fouten.length} van ${toegestaan.length} order(s) niet ingepland: ${fouten.slice(0, 3).join(" | ")}` };
|
|
113
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1.0.192 (Voorraad 1.0.107): foutcodes van get_stock_context() in gewone taal.
|
|
3
|
+
* VR001 = meer dan één actieve Floriday-koppeling (voor de gekozen omgeving).
|
|
4
|
+
* VR002 = de gekozen Floriday-omgeving heeft geen actieve koppeling, een andere wel.
|
|
5
|
+
* Andere fouten blijven ongewijzigd. Een connection_id is nooit bewijs van een
|
|
6
|
+
* Floriday-koppeling; alleen get_stock_context() bepaalt dat.
|
|
7
|
+
*/
|
|
8
|
+
export declare const VR001_TEKST = "Voorraad kan niet worden bijgewerkt: er staan meerdere Floriday-koppelingen aan. Zet er \u00E9\u00E9n uit in de Floriday-instellingen.";
|
|
9
|
+
export declare const VR002_TEKST = "Voorraad kan niet worden bijgewerkt: de gekozen Floriday-omgeving heeft geen actieve koppeling. Kies de juiste omgeving in de Floriday-instellingen.";
|
|
10
|
+
export declare function voorraadFoutTekst(err: {
|
|
11
|
+
code?: string | null;
|
|
12
|
+
message?: string | null;
|
|
13
|
+
} | null | undefined): string;
|
|
14
|
+
//# sourceMappingURL=voorraadFouten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voorraadFouten.d.ts","sourceRoot":"","sources":["../../src/lib/voorraadFouten.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,2IACwG,CAAC;AACjI,eAAO,MAAM,WAAW,yJACgI,CAAC;AAEzJ,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAMnH"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1.0.192 (Voorraad 1.0.107): foutcodes van get_stock_context() in gewone taal.
|
|
3
|
+
* VR001 = meer dan één actieve Floriday-koppeling (voor de gekozen omgeving).
|
|
4
|
+
* VR002 = de gekozen Floriday-omgeving heeft geen actieve koppeling, een andere wel.
|
|
5
|
+
* Andere fouten blijven ongewijzigd. Een connection_id is nooit bewijs van een
|
|
6
|
+
* Floriday-koppeling; alleen get_stock_context() bepaalt dat.
|
|
7
|
+
*/
|
|
8
|
+
export const VR001_TEKST = "Voorraad kan niet worden bijgewerkt: er staan meerdere Floriday-koppelingen aan. Zet er één uit in de Floriday-instellingen.";
|
|
9
|
+
export const VR002_TEKST = "Voorraad kan niet worden bijgewerkt: de gekozen Floriday-omgeving heeft geen actieve koppeling. Kies de juiste omgeving in de Floriday-instellingen.";
|
|
10
|
+
export function voorraadFoutTekst(err) {
|
|
11
|
+
const code = String(err?.code ?? "");
|
|
12
|
+
const msg = String(err?.message ?? "");
|
|
13
|
+
if (code === "VR001" || /\bVR001\b/.test(msg))
|
|
14
|
+
return VR001_TEKST;
|
|
15
|
+
if (code === "VR002" || /\bVR002\b/.test(msg))
|
|
16
|
+
return VR002_TEKST;
|
|
17
|
+
return msg;
|
|
18
|
+
}
|