@flowselections/logistiek-engine 1.0.206 → 1.0.211
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 +895 -1
- package/dist-lib/integrations/supabase/types.d.ts +375 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.d.ts +4 -0
- package/dist-lib/lib/beladingRegels.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.js +11 -1
- package/dist-lib/lib/dimensionPlanner.d.ts +8 -1
- package/dist-lib/lib/dimensionPlanner.d.ts.map +1 -1
- package/dist-lib/lib/dimensionPlanner.js +25 -1
- package/dist-lib/lib/hoofdverpakking.d.ts +7 -0
- package/dist-lib/lib/hoofdverpakking.d.ts.map +1 -0
- package/dist-lib/lib/hoofdverpakking.js +19 -0
- package/dist-lib/lib/loadCarrierPlanner.d.ts +13 -1
- package/dist-lib/lib/loadCarrierPlanner.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanner.js +68 -8
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +26 -2
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/package.json +1 -1
|
@@ -100,6 +100,10 @@ export interface FysiekeInvoer {
|
|
|
100
100
|
layers_per_cart: number;
|
|
101
101
|
fust_hoogte_cm: number | null;
|
|
102
102
|
plant_hoogte_cm: number | null;
|
|
103
|
+
/** 1.0.210: bron van de planthoogte; begint met "floricode" → alleen waarschuwen bij te hoog. */
|
|
104
|
+
plant_hoogte_bron?: string | null;
|
|
105
|
+
/** 1.0.210: LayerSpace zonder tolerantie; ligt crates_per_layer daartussen, dan melden dat de tolerantie nodig was. */
|
|
106
|
+
layerspace_strikt?: number | null;
|
|
103
107
|
/** LayerSpace-uitkomst uit fustmaat × laagmaat; null = maten onbekend. */
|
|
104
108
|
layerspace_max: number | null;
|
|
105
109
|
ladingdrager: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beladingRegels.d.ts","sourceRoot":"","sources":["../../src/lib/beladingRegels.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"beladingRegels.d.ts","sourceRoot":"","sources":["../../src/lib/beladingRegels.ts"],"names":[],"mappings":"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"}
|
|
@@ -177,7 +177,13 @@ export function fysiekeBelading(i) {
|
|
|
177
177
|
if (pos(i.fust_hoogte_cm) && pos(i.plant_hoogte_cm) && pos(i.ladingdrager_hoogte_cm)) {
|
|
178
178
|
const laag = Math.max(i.fust_hoogte_cm, i.plant_hoogte_cm);
|
|
179
179
|
const nodig = i.layers_per_cart * laag;
|
|
180
|
-
|
|
180
|
+
const plantBepaalt = i.plant_hoogte_cm >= i.fust_hoogte_cm;
|
|
181
|
+
const alleenFloricode = plantBepaalt && (i.plant_hoogte_bron ?? "").toLowerCase().startsWith("floricode");
|
|
182
|
+
if (nodig > i.ladingdrager_hoogte_cm + 1e-9 && alleenFloricode) {
|
|
183
|
+
waarschuwen.push(`${i.product}: planthoogte volgens Floricode; controleer: ${i.layers_per_cart} lagen × ${r1(laag)} cm = ${r1(nodig)} cm, ` +
|
|
184
|
+
`hoger dan ${i.ladingdrager} (${r1(i.ladingdrager_hoogte_cm)} cm)`);
|
|
185
|
+
}
|
|
186
|
+
else if (nodig > i.ladingdrager_hoogte_cm + 1e-9) {
|
|
181
187
|
const past = Math.floor(i.ladingdrager_hoogte_cm / laag);
|
|
182
188
|
blokkeren.push(`${i.product}: ${i.layers_per_cart} lagen (bron: ${i.bron}) × ${r1(laag)} cm (grootste van fust ${r1(i.fust_hoogte_cm)} cm en plant inclusief pot ${r1(i.plant_hoogte_cm)} cm) = ${r1(nodig)} cm, ` +
|
|
183
189
|
`terwijl ${i.ladingdrager} ${r1(i.ladingdrager_hoogte_cm)} cm hoog is; er passen maximaal ${past} lagen`);
|
|
@@ -195,6 +201,10 @@ export function fysiekeBelading(i) {
|
|
|
195
201
|
if (i.layerspace_max != null && i.crates_per_layer > i.layerspace_max) {
|
|
196
202
|
blokkeren.push(`${i.product}: ${i.crates_per_layer} fust per laag (bron: ${i.bron}), maar op een laag van ${i.ladingdrager} passen er volgens fustmaat × laagmaat maximaal ${i.layerspace_max}`);
|
|
197
203
|
}
|
|
204
|
+
if (i.layerspace_max != null && i.layerspace_strikt != null &&
|
|
205
|
+
i.crates_per_layer <= i.layerspace_max && i.crates_per_layer > i.layerspace_strikt) {
|
|
206
|
+
waarschuwen.push(`${i.product}: ${i.crates_per_layer} per laag past alleen met overstek (binnen 1 % tolerantie)`);
|
|
207
|
+
}
|
|
198
208
|
if (pos(i.max_crates_per_layer) && i.crates_per_layer > i.max_crates_per_layer) {
|
|
199
209
|
blokkeren.push(`${i.product}: ${i.crates_per_layer} fust per laag (bron: ${i.bron}), maar ${i.ladingdrager} staat maximaal ${i.max_crates_per_layer} fust per laag toe`);
|
|
200
210
|
}
|
|
@@ -102,5 +102,12 @@ export declare function planByDimensions(items: DimensionItem[], carrier: Dimens
|
|
|
102
102
|
* 1.0.197: hoeveel fusten van één maat maximaal op één laag passen, met dezelfde
|
|
103
103
|
* LayerSpace-indeling als de planner (incl. rotatie). null bij onbekende maten.
|
|
104
104
|
*/
|
|
105
|
-
|
|
105
|
+
/**
|
|
106
|
+
* 1.0.210: tolerantie op de laagmaten van de ladingdrager bij de controle "maximaal per laag".
|
|
107
|
+
* Eén benoemde regel; SQL-tegenhanger: public.logistics_laag_tolerantie() (zelfde waarde, test bewaakt dat).
|
|
108
|
+
*/
|
|
109
|
+
export declare const LAAG_TOLERANTIE = 0.01;
|
|
110
|
+
export declare function maxFustenPerLaag(laagLengteCm: number | null | undefined, laagBreedteCm: number | null | undefined, fustLengteCm: number | null | undefined, fustBreedteCm: number | null | undefined, tolerantie?: number): number | null;
|
|
111
|
+
/** 1.0.210: overstek in mm (op de laagbreedte) die nodig is om n fusten te laten passen; null als het strikt al past of niet binnen de tolerantie. */
|
|
112
|
+
export declare function overstekMm(laagLengteCm: number, laagBreedteCm: number, fustLengteCm: number, fustBreedteCm: number, n: number): number | null;
|
|
106
113
|
//# sourceMappingURL=dimensionPlanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dimensionPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/dimensionPlanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dimensionPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/dimensionPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -259,10 +259,17 @@ function round1(n) {
|
|
|
259
259
|
* 1.0.197: hoeveel fusten van één maat maximaal op één laag passen, met dezelfde
|
|
260
260
|
* LayerSpace-indeling als de planner (incl. rotatie). null bij onbekende maten.
|
|
261
261
|
*/
|
|
262
|
-
|
|
262
|
+
/**
|
|
263
|
+
* 1.0.210: tolerantie op de laagmaten van de ladingdrager bij de controle "maximaal per laag".
|
|
264
|
+
* Eén benoemde regel; SQL-tegenhanger: public.logistics_laag_tolerantie() (zelfde waarde, test bewaakt dat).
|
|
265
|
+
*/
|
|
266
|
+
export const LAAG_TOLERANTIE = 0.01;
|
|
267
|
+
export function maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm, tolerantie = LAAG_TOLERANTIE) {
|
|
263
268
|
const ok = (n) => typeof n === "number" && Number.isFinite(n) && n > 0;
|
|
264
269
|
if (!ok(laagLengteCm) || !ok(laagBreedteCm) || !ok(fustLengteCm) || !ok(fustBreedteCm))
|
|
265
270
|
return null;
|
|
271
|
+
laagLengteCm = laagLengteCm * (1 + tolerantie);
|
|
272
|
+
laagBreedteCm = laagBreedteCm * (1 + tolerantie);
|
|
266
273
|
// Beide startoriëntaties proberen: blokkeren mag alleen bij aantoonbaar onmogelijk,
|
|
267
274
|
// dus nooit een te lage uitkomst gebruiken.
|
|
268
275
|
const tel = (a, b) => {
|
|
@@ -274,3 +281,20 @@ export function maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fust
|
|
|
274
281
|
};
|
|
275
282
|
return Math.max(tel(fustLengteCm, fustBreedteCm), tel(fustBreedteCm, fustLengteCm));
|
|
276
283
|
}
|
|
284
|
+
/** 1.0.210: overstek in mm (op de laagbreedte) die nodig is om n fusten te laten passen; null als het strikt al past of niet binnen de tolerantie. */
|
|
285
|
+
export function overstekMm(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm, n) {
|
|
286
|
+
const strikt = maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm, 0) ?? 0;
|
|
287
|
+
if (strikt >= n)
|
|
288
|
+
return null;
|
|
289
|
+
if ((maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm) ?? 0) < n)
|
|
290
|
+
return null;
|
|
291
|
+
let lo = 0, hi = LAAG_TOLERANTIE;
|
|
292
|
+
for (let k = 0; k < 30; k++) {
|
|
293
|
+
const mid = (lo + hi) / 2;
|
|
294
|
+
if ((maxFustenPerLaag(laagLengteCm, laagBreedteCm, fustLengteCm, fustBreedteCm, mid) ?? 0) >= n)
|
|
295
|
+
hi = mid;
|
|
296
|
+
else
|
|
297
|
+
lo = mid;
|
|
298
|
+
}
|
|
299
|
+
return Math.max(1, Math.ceil(hi * laagBreedteCm * 10 - 1e-6));
|
|
300
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const BELADING_NIET_INGESTELD = "belading niet ingesteld";
|
|
2
|
+
/**
|
|
3
|
+
* Haalt de beladingwaarden van het product weg als het product geen hoofdverpakking heeft.
|
|
4
|
+
* `metHoofdverpakking` null = Voorraad-verpakkingen bestaan niet in deze shell: niets wijzigen.
|
|
5
|
+
*/
|
|
6
|
+
export declare function zonderStandaardBelading<T extends Record<string, any>>(product: T | null | undefined, productId: string | null | undefined, metHoofdverpakking: Set<string> | null): T | null | undefined;
|
|
7
|
+
//# sourceMappingURL=hoofdverpakking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hoofdverpakking.d.ts","sourceRoot":"","sources":["../../src/lib/hoofdverpakking.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAIjE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnE,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GACrC,CAAC,GAAG,IAAI,GAAG,SAAS,CAMtB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// 1.0.208: een product zonder hoofdverpakking (product_packings.is_primary) heeft geen ingestelde
|
|
2
|
+
// belading. De kolomstandaarden van products (1/10/4) tellen dan niet als belading: de planner
|
|
3
|
+
// gebruikt ze niet, zodat de regel met "belading niet ingesteld" blijft wachten (fail closed).
|
|
4
|
+
export const BELADING_NIET_INGESTELD = "belading niet ingesteld";
|
|
5
|
+
const VELDEN = ["plants_per_crate", "crates_per_layer", "layers_per_cart"];
|
|
6
|
+
/**
|
|
7
|
+
* Haalt de beladingwaarden van het product weg als het product geen hoofdverpakking heeft.
|
|
8
|
+
* `metHoofdverpakking` null = Voorraad-verpakkingen bestaan niet in deze shell: niets wijzigen.
|
|
9
|
+
*/
|
|
10
|
+
export function zonderStandaardBelading(product, productId, metHoofdverpakking) {
|
|
11
|
+
if (!product || !metHoofdverpakking || !productId)
|
|
12
|
+
return product;
|
|
13
|
+
if (metHoofdverpakking.has(String(productId)))
|
|
14
|
+
return product;
|
|
15
|
+
const kopie = { ...product, belading_niet_ingesteld: true };
|
|
16
|
+
for (const v of VELDEN)
|
|
17
|
+
kopie[v] = null;
|
|
18
|
+
return kopie;
|
|
19
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LOAD_CARRIER_PLANNER_VERSION =
|
|
1
|
+
export declare const LOAD_CARRIER_PLANNER_VERSION = 5;
|
|
2
2
|
export type CapacityModel = "layered" | "stacked" | "single" | "none";
|
|
3
3
|
export interface CarrierProfile {
|
|
4
4
|
id?: string | null;
|
|
@@ -89,6 +89,8 @@ export interface LaagRegel {
|
|
|
89
89
|
klantId: string | null;
|
|
90
90
|
crates: number;
|
|
91
91
|
cpl: number;
|
|
92
|
+
/** 1.0.208: lagen per kar van deze regel (voor de vulgraad zoals Floriday). */
|
|
93
|
+
lpc?: number;
|
|
92
94
|
}
|
|
93
95
|
/**
|
|
94
96
|
* 1.0.205: lagen op een kar volgens de mengregels.
|
|
@@ -101,6 +103,16 @@ export declare function karLagen(regels: LaagRegel[], menging?: "vrij" | "per_re
|
|
|
101
103
|
klantenPerLaag?: number | null;
|
|
102
104
|
beladingenPerLaag?: number | null;
|
|
103
105
|
} | null): number;
|
|
106
|
+
/**
|
|
107
|
+
* 1.0.208: vulgraad van een kar zoals Floriday (fractie, 1 = vol):
|
|
108
|
+
* Σ per regel (lagen van de regel ÷ lagen per kar van die regel).
|
|
109
|
+
* Mengregels blijven: een afgeronde laag (tussen groepen die geen laag mogen delen)
|
|
110
|
+
* telt met de kleinste lagen-per-kar binnen die groep.
|
|
111
|
+
*/
|
|
112
|
+
export declare function karVulgraadFractie(regels: LaagRegel[], menging?: "vrij" | "per_regel", groepen?: {
|
|
113
|
+
klantenPerLaag?: number | null;
|
|
114
|
+
beladingenPerLaag?: number | null;
|
|
115
|
+
} | null): number;
|
|
104
116
|
/** Lagen van één regel op een kar volgens de menging per laag. */
|
|
105
117
|
export declare function regelLagen(crates: number, cpl: number, menging?: "vrij" | "per_regel"): number;
|
|
106
118
|
export interface PlannedLoadUnitItem {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loadCarrierPlanner.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
// - verticaal : totalHeightPct <= 100
|
|
10
10
|
// - horizontaal: crateShare per laag <= 1
|
|
11
11
|
// ============================================================================
|
|
12
|
-
export const LOAD_CARRIER_PLANNER_VERSION =
|
|
12
|
+
export const LOAD_CARRIER_PLANNER_VERSION = 5;
|
|
13
13
|
/** Grens vanaf waar "beladingen per laag" als onbeperkt geldt (instelling 999 = onbeperkt). */
|
|
14
14
|
export const BELADINGEN_ONBEPERKT = 999;
|
|
15
15
|
/**
|
|
@@ -77,6 +77,48 @@ export function karLagen(regels, menging = "vrij", groepen) {
|
|
|
77
77
|
return units.reduce((s, u) => s + u, 0);
|
|
78
78
|
return units.reduce((s, u) => s + Math.ceil(u - 1e-9), 0);
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* 1.0.208: vulgraad van een kar zoals Floriday (fractie, 1 = vol):
|
|
82
|
+
* Σ per regel (lagen van de regel ÷ lagen per kar van die regel).
|
|
83
|
+
* Mengregels blijven: een afgeronde laag (tussen groepen die geen laag mogen delen)
|
|
84
|
+
* telt met de kleinste lagen-per-kar binnen die groep.
|
|
85
|
+
*/
|
|
86
|
+
export function karVulgraadFractie(regels, menging = "vrij", groepen) {
|
|
87
|
+
const f = (r) => r.crates / Math.max(1, r.cpl);
|
|
88
|
+
const l = (r) => Math.max(1, Number(r.lpc) || 1);
|
|
89
|
+
if (menging === "per_regel")
|
|
90
|
+
return regels.reduce((s, r) => s + Math.ceil(f(r) - 1e-9) / l(r), 0);
|
|
91
|
+
const N = groepen?.klantenPerLaag ?? null;
|
|
92
|
+
const M = groepen?.beladingenPerLaag ?? null;
|
|
93
|
+
if (N == null && M == null)
|
|
94
|
+
return regels.reduce((s, r) => s + f(r) / l(r), 0);
|
|
95
|
+
const perKlant = new Map();
|
|
96
|
+
for (const r of regels) {
|
|
97
|
+
const k = r.klantId ?? `regel:${r.regelId}`;
|
|
98
|
+
const lijst = perKlant.get(k) ?? [];
|
|
99
|
+
lijst.push(r);
|
|
100
|
+
perKlant.set(k, lijst);
|
|
101
|
+
}
|
|
102
|
+
const klanten = [...perKlant.keys()].sort();
|
|
103
|
+
const units = [];
|
|
104
|
+
if (M != null) {
|
|
105
|
+
for (const k of klanten) {
|
|
106
|
+
const lijst = perKlant.get(k).sort((a, b) => a.regelId.localeCompare(b.regelId));
|
|
107
|
+
for (let i = 0; i < lijst.length; i += M)
|
|
108
|
+
units.push(lijst.slice(i, i + M));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
for (let i = 0; i < klanten.length; i += N)
|
|
113
|
+
units.push(klanten.slice(i, i + N).flatMap((k) => perKlant.get(k)));
|
|
114
|
+
}
|
|
115
|
+
if (units.length <= 1)
|
|
116
|
+
return regels.reduce((s, r) => s + f(r) / l(r), 0);
|
|
117
|
+
return units.reduce((s, u) => {
|
|
118
|
+
const lagen = u.reduce((t, r) => t + f(r), 0);
|
|
119
|
+
return s + Math.ceil(lagen - 1e-9) / Math.min(...u.map(l));
|
|
120
|
+
}, 0);
|
|
121
|
+
}
|
|
80
122
|
/** Lagen van één regel op een kar volgens de menging per laag. */
|
|
81
123
|
export function regelLagen(crates, cpl, menging = "vrij") {
|
|
82
124
|
const f = crates / Math.max(1, cpl);
|
|
@@ -196,6 +238,23 @@ function accepteert(kar, rest, crates, r) {
|
|
|
196
238
|
}
|
|
197
239
|
/** Hoeveel fusten van deze rest passen nog op de kar (0 = niets). */
|
|
198
240
|
/** Lagen van een kar volgens de mengregels, optioneel met extra fusten van een rest. */
|
|
241
|
+
function regelsVan(kar, rests, extra) {
|
|
242
|
+
const per = new Map();
|
|
243
|
+
for (const e of kar.entries)
|
|
244
|
+
per.set(e.restIdx, (per.get(e.restIdx) ?? 0) + e.crates);
|
|
245
|
+
if (extra)
|
|
246
|
+
per.set(extra.restIdx, (per.get(extra.restIdx) ?? 0) + extra.crates);
|
|
247
|
+
return [...per.entries()].map(([i, crates]) => ({
|
|
248
|
+
regelId: rests[i].input.order_item_id,
|
|
249
|
+
klantId: rests[i].input.customer_id ?? rests[i].input.order_id ?? null,
|
|
250
|
+
crates,
|
|
251
|
+
cpl: rests[i].cpl,
|
|
252
|
+
lpc: rests[i].lpc,
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
function vulVan(kar, rests, r, extra) {
|
|
256
|
+
return karVulgraadFractie(regelsVan(kar, rests, extra), r.opts.laagMenging, r.opts.laagGroepen);
|
|
257
|
+
}
|
|
199
258
|
function lagenVan(kar, rests, r, extra) {
|
|
200
259
|
const per = new Map();
|
|
201
260
|
for (const e of kar.entries)
|
|
@@ -215,11 +274,11 @@ function pastErop(kar, rest, r, rests, restIdx) {
|
|
|
215
274
|
(rest.input.product_id ? r.opts.neverMixProductIds.has(rest.input.product_id) : false);
|
|
216
275
|
if (kar.entries.length > 0 && (neverMix || kar.neverMix))
|
|
217
276
|
return 0;
|
|
218
|
-
|
|
219
|
-
const vrij =
|
|
277
|
+
// 1.0.208: vol = vulgraad 100 % (Σ lagen van regel ÷ lagen per kar van die regel).
|
|
278
|
+
const vrij = 1 - kar.vul;
|
|
220
279
|
if (vrij <= LAGEN_MARGE)
|
|
221
280
|
return 0;
|
|
222
|
-
let n = Math.min(rest.crates, Math.floor((vrij + LAGEN_MARGE) * rest.cpl));
|
|
281
|
+
let n = Math.min(rest.crates, Math.floor((vrij + LAGEN_MARGE) * rest.lpc * rest.cpl + 1e-9));
|
|
223
282
|
const c = r.opts.carrier;
|
|
224
283
|
if (typeof c.max_boxes === "number" && c.max_boxes > 0)
|
|
225
284
|
n = Math.min(n, c.max_boxes - kar.boxes);
|
|
@@ -229,7 +288,7 @@ function pastErop(kar, rest, r, rests, restIdx) {
|
|
|
229
288
|
n = Math.min(n, Math.floor((c.max_weight_kg - kar.weightKg + EPS) / pc));
|
|
230
289
|
}
|
|
231
290
|
// Mengregels: grootste n waarbij de kar binnen de capaciteit blijft (monotoon → binair zoeken).
|
|
232
|
-
const past = (m) =>
|
|
291
|
+
const past = (m) => vulVan(kar, rests, r, { restIdx, crates: m }) <= 1 + LAGEN_MARGE;
|
|
233
292
|
if (n > 0 && !past(n)) {
|
|
234
293
|
let lo = 0, hi = n;
|
|
235
294
|
while (lo < hi) {
|
|
@@ -259,9 +318,10 @@ function zetErop(kar, rest, restIdx, crates, r, rests) {
|
|
|
259
318
|
kar.neverMix = true;
|
|
260
319
|
rest.crates -= crates;
|
|
261
320
|
kar.lagen = lagenVan(kar, rests, r);
|
|
321
|
+
kar.vul = vulVan(kar, rests, r);
|
|
262
322
|
}
|
|
263
323
|
function nieuweKar() {
|
|
264
|
-
return { entries: [], lagen: 0, capaciteit: 0, boxes: 0, weightKg: 0, orderIds: new Set(), customerIds: new Set(), neverMix: false, eigen: false };
|
|
324
|
+
return { entries: [], lagen: 0, vul: 0, capaciteit: 0, boxes: 0, weightKg: 0, orderIds: new Set(), customerIds: new Set(), neverMix: false, eigen: false };
|
|
265
325
|
}
|
|
266
326
|
function samenvatten(kar, rests, nr, r) {
|
|
267
327
|
const per = new Map();
|
|
@@ -299,8 +359,8 @@ function samenvatten(kar, rests, nr, r) {
|
|
|
299
359
|
carrier_type: r.opts.carrier.code,
|
|
300
360
|
carrier_type_id: r.opts.carrier.id ?? null,
|
|
301
361
|
source: "auto",
|
|
302
|
-
is_complete: kar.
|
|
303
|
-
occupancy_pct: Math.round(
|
|
362
|
+
is_complete: kar.vul >= 1 - LAGEN_MARGE,
|
|
363
|
+
occupancy_pct: Math.round(10000 * kar.vul) / 100,
|
|
304
364
|
total_layers_used: lagen,
|
|
305
365
|
max_layers: kar.capaciteit,
|
|
306
366
|
weight_kg: weight > 0 ? Math.round(weight * 100) / 100 : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EAEtB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"loadCarrierPlanning.server.d.ts","sourceRoot":"","sources":["../../src/lib/loadCarrierPlanning.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { planLoadUnits, LOAD_CARRIER_PLANNER_VERSION, bepaalLaagMenging, } from "./loadCarrierPlanner.js";
|
|
9
9
|
import { traceBatch } from "./trace.server.js";
|
|
10
10
|
import { zonderQuarantaine } from "./quarantaine.js";
|
|
11
|
+
import { zonderStandaardBelading } from "./hoofdverpakking.js";
|
|
11
12
|
import { MODULE_VERSION } from "./moduleVersion.js";
|
|
12
13
|
import { fallbackCarrierProfile } from "./loadCarrierTypes.js";
|
|
13
14
|
import { WAAR_INVULLEN, gewichtOnbekendTekst, ladingdragerNietInBeheerTekst } from "./invoerTeksten.js";
|
|
@@ -208,6 +209,24 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
|
|
|
208
209
|
.flat()
|
|
209
210
|
.filter((l) => l.unit_kind === "groepslid" && l.product_id)
|
|
210
211
|
.map((l) => String(l.product_id))));
|
|
212
|
+
// 1.0.208: welke producten hebben een hoofdverpakking? Zonder hoofdverpakking telt 1/10/4 niet.
|
|
213
|
+
const alleProductIds = Array.from(new Set([...memberIds, ...rows.map((r) => (r.product_id ? String(r.product_id) : "")).filter(Boolean)]));
|
|
214
|
+
let metHoofdverpakking = null;
|
|
215
|
+
if (alleProductIds.length > 0) {
|
|
216
|
+
const { data: pp, error: ppError } = await sb
|
|
217
|
+
.from("product_packings")
|
|
218
|
+
.select("product_id, is_primary")
|
|
219
|
+
.in("product_id", alleProductIds);
|
|
220
|
+
if (ppError) {
|
|
221
|
+
const ontbreekt = /does not exist|42P01|PGRST205|schema cache/i.test(`${ppError.code ?? ""} ${ppError.message}`);
|
|
222
|
+
if (!ontbreekt) {
|
|
223
|
+
throw new Error(`Indeling geblokkeerd: hoofdverpakkingen konden niet worden gelezen (${ppError.message}).`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
metHoofdverpakking = new Set((Array.isArray(pp) ? pp : []).filter((r) => r.is_primary === true).map((r) => String(r.product_id)));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
211
230
|
const prodById = new Map();
|
|
212
231
|
if (memberIds.length > 0) {
|
|
213
232
|
const { data: prods, error } = await sb
|
|
@@ -216,9 +235,11 @@ export async function expandOrderItemsForPlanner(sb, rows, options = {}) {
|
|
|
216
235
|
.in("id", memberIds);
|
|
217
236
|
if (error)
|
|
218
237
|
throw new Error(`Indeling geblokkeerd: groepsleden konden niet worden gelezen (${error.message}).`);
|
|
219
|
-
for (const p of Array.isArray(prods) ? prods : [])
|
|
220
|
-
prodById.set(String(p.id), p);
|
|
238
|
+
for (const p of Array.isArray(prods) ? prods : []) {
|
|
239
|
+
prodById.set(String(p.id), zonderStandaardBelading(p, String(p.id), metHoofdverpakking));
|
|
240
|
+
}
|
|
221
241
|
}
|
|
242
|
+
rows = rows.map((r) => r.products ? { ...r, products: zonderStandaardBelading(r.products, r.product_id, metHoofdverpakking) } : r);
|
|
222
243
|
for (const row of rows) {
|
|
223
244
|
const orderKey = row.order_id ? String(row.order_id) : null;
|
|
224
245
|
const packing = orderKey ? options.packingByOrder?.get(orderKey) ?? null : null;
|
|
@@ -343,6 +364,7 @@ async function beladingOnwaarschijnlijk(sb, inputs, rawRows, profile, profielPer
|
|
|
343
364
|
width_mm: getal(m.fust_width_mm),
|
|
344
365
|
height_mm: getal(m.fust_height_mm),
|
|
345
366
|
plant: getal(m.plant_height_cm),
|
|
367
|
+
plantBron: typeof m.height_source === "string" ? m.height_source : null,
|
|
346
368
|
});
|
|
347
369
|
}
|
|
348
370
|
}
|
|
@@ -401,7 +423,9 @@ async function beladingOnwaarschijnlijk(sb, inputs, rawRows, profile, profielPer
|
|
|
401
423
|
layers_per_cart: i.layers_per_cart,
|
|
402
424
|
fust_hoogte_cm: mt?.height_mm ? mt.height_mm / 10 : null,
|
|
403
425
|
plant_hoogte_cm: mt?.plant ?? null,
|
|
426
|
+
plant_hoogte_bron: mt?.plantBron ?? null,
|
|
404
427
|
layerspace_max: maxFustenPerLaag(d?.l, d?.b, mt?.length_mm ? mt.length_mm / 10 : null, mt?.width_mm ? mt.width_mm / 10 : null),
|
|
428
|
+
layerspace_strikt: maxFustenPerLaag(d?.l, d?.b, mt?.length_mm ? mt.length_mm / 10 : null, mt?.width_mm ? mt.width_mm / 10 : null, 0),
|
|
405
429
|
ladingdrager: d?.naam ?? prof.name,
|
|
406
430
|
ladingdrager_hoogte_cm: d?.h ?? null,
|
|
407
431
|
max_crates_per_layer: d?.maxPerLaag ?? (prof.max_crates_per_layer ?? null),
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MODULE_VERSION = "1.0.
|
|
1
|
+
export declare const MODULE_VERSION = "1.0.211";
|
|
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.211";
|