mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
fix(warehouses): free warehouse/yard/zone capacity on export dispatch
dispatch() (LOADED -> DISPATCHED) routed through the shared transition() helper, which only flipped status/timestamp and never called applyCapacityDelta. deliver() (import pickup) already decrements correctly, so export cargo leaving by train inflated currentWeight/ currentVolume/currentContainers forever instead of freeing capacity. Add optional freeCapacity hook to transition(), wire dispatch() to it, mirroring the negative-delta pattern already used in deliver().
This commit is contained in:
@@ -5161,6 +5161,7 @@ export class WarehouseInventoryService {
|
||||
activityType: 'INVENTORY_DISPATCHED',
|
||||
description: 'Inventory dispatched',
|
||||
performedBy,
|
||||
freeCapacity: true,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -5445,6 +5446,8 @@ export class WarehouseInventoryService {
|
||||
description: string;
|
||||
performedBy?: string;
|
||||
preloaded?: WarehouseInventory;
|
||||
/** Cargo physically leaves the warehouse on this transition — free up capacity (mirrors deliver()). */
|
||||
freeCapacity?: boolean;
|
||||
},
|
||||
): Promise<WarehouseInventory> {
|
||||
const item = opts.preloaded ?? (await this.findById(id));
|
||||
@@ -5455,6 +5458,20 @@ export class WarehouseInventoryService {
|
||||
status: to,
|
||||
[opts.timestampField]: new Date(),
|
||||
});
|
||||
|
||||
if (opts.freeCapacity) {
|
||||
const weight = Number(item.weight) || 0;
|
||||
const volume = Number(item.volume) || 0;
|
||||
const containerCount = item.containerId ? Math.round(Number(item.quantity) || 0) : 0;
|
||||
await this.applyCapacityDelta(
|
||||
manager,
|
||||
{ warehouseId: item.warehouseId, yardId: item.yardId, zoneId: item.zoneId },
|
||||
-weight,
|
||||
-volume,
|
||||
-containerCount,
|
||||
);
|
||||
}
|
||||
|
||||
await this.activityLog.record(
|
||||
{
|
||||
activityType: opts.activityType,
|
||||
|
||||
Reference in New Issue
Block a user