mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 22:18:12 +00:00
- New UNLOADED inventory status (train-arrival landing state) + transitions + unloaded_at column
(idempotent migration 1791000000003) + INVENTORY_UNLOADED activity type
- POST /warehouse-inventory/import/auto-unload-arrived-bookings { scheduleId }: validates ARRIVED
IMPORT train, unloads all eligible assigned bookings (IN_TRANSIT/ARRIVED_AT_*) into UNLOADED,
records unloadedAt + activity. Does NOT store and does NOT inspect. Reuses allocation + inventory
plumbing. Returns { unloadedCount, skippedCount, failedCount, results }.
- Arrive Queue "Auto Unload Arrived Bookings" button now calls the new endpoint (was per-booking loop)
- Import → Unloaded Queue tab: lists UNLOADED items via InventoryWorkbench (existing actions preserved:
Inspect/Store/Move/History) + a Last Mile action shown ONLY when booking requested door delivery
- Batch8TestDataSeeder: sets seed import train bookings to IN_TRANSIT (unload-eligible)
- Verified: auto-unload → 1 UNLOADED (unloadedAt set, not stored, not inspected); ineligible skipped;
idempotent re-run skips already-unloaded
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
1.1 KiB
TypeScript
28 lines
1.1 KiB
TypeScript
import { MigrationInterface, QueryRunner, TableColumn } from 'typeorm';
|
|
|
|
/**
|
|
* Batch 8 — train-arrival unload landing state on warehouse_inventory:
|
|
* - unloaded_at: when the goods were unloaded off the arrived train (before storage/inspection)
|
|
*
|
|
* The `status` column is a free varchar, so the new 'UNLOADED' value needs no schema change.
|
|
* Idempotent: the shared dev DB may already carry this column (added by another checkout).
|
|
*/
|
|
export class AddInventoryUnloadedAt1791000000003 implements MigrationInterface {
|
|
private readonly table = 'freight.warehouse_inventory';
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
if (!(await queryRunner.hasColumn(this.table, 'unloaded_at'))) {
|
|
await queryRunner.addColumn(
|
|
this.table,
|
|
new TableColumn({ name: 'unloaded_at', type: 'timestamptz', isNullable: true }),
|
|
);
|
|
}
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
if (await queryRunner.hasColumn(this.table, 'unloaded_at')) {
|
|
await queryRunner.dropColumn(this.table, 'unloaded_at');
|
|
}
|
|
}
|
|
}
|