mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 15:18:11 +00:00
fix issue
This commit is contained in:
@@ -154,10 +154,46 @@ const shortageFor = (
|
||||
),
|
||||
)
|
||||
: Math.max(1, containerWagonsForLines(booking.bookingContainers ?? []));
|
||||
const wagonsAvailable = candidates.reduce(
|
||||
(sum, wt) => sum + availableOf(wt.id),
|
||||
0,
|
||||
);
|
||||
|
||||
const freeByType = candidates.map((wt) => ({ wt, free: availableOf(wt.id) }));
|
||||
const wagonsAvailable = freeByType.reduce((sum, c) => sum + c.free, 0);
|
||||
|
||||
// PER_TON bulk: a bare wagon COUNT lies when the types carry different
|
||||
// tonnage for this cargo. 14 NW5 (30T) + 10 PW2 (20T) is "24 wagons free"
|
||||
// against a 24-wagon need, yet only 620T of the 695T booking fits — which
|
||||
// is how a deferral could read "needs 24, 24 available (short 1)". Size the
|
||||
// shortfall in the wagons the cargo's OWN caps require: how many more
|
||||
// wagons of the best remaining type would carry the leftover tonnage.
|
||||
const tons = bookingCargoTons(booking);
|
||||
const perItem =
|
||||
Number(booking.bulkTotalWeightTons ?? 0) > 0 &&
|
||||
Number(booking.cargoTotalWeightVgm ?? 0) > 0;
|
||||
if (booking.freightType === 'BULK' && !perItem && tons > 0) {
|
||||
let seatable = 0;
|
||||
let usedWagons = 0;
|
||||
for (const { wt, free } of freeByType) {
|
||||
const perWagon = bulkTonsPerWagon(booking.cargoType, wt.id, Number(wt.capacityTons));
|
||||
if (!(perWagon > 0) || free <= 0) continue;
|
||||
seatable += free * perWagon;
|
||||
usedWagons += free;
|
||||
}
|
||||
if (seatable < tons) {
|
||||
const bestPerWagon = Math.max(
|
||||
1,
|
||||
...candidates.map((wt) =>
|
||||
bulkTonsPerWagon(booking.cargoType, wt.id, Number(wt.capacityTons)),
|
||||
),
|
||||
);
|
||||
return {
|
||||
wagonTypeCodes: [...new Set(candidates.map((wt) => wt.code))].join('/'),
|
||||
wagonsNeeded,
|
||||
wagonsAvailable: usedWagons,
|
||||
// Wagons of the best type still missing to carry the leftover tonnage.
|
||||
wagonsShort: Math.max(1, Math.ceil((tons - seatable) / bestPerWagon)),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
wagonTypeCodes: [...new Set(candidates.map((wt) => wt.code))].join('/'),
|
||||
wagonsNeeded,
|
||||
|
||||
Reference in New Issue
Block a user