mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 15:18:11 +00:00
Export cargo reaches a train two ways, but the platform only modelled one. Direct truck-to-train cargo loads straight onto the wagon, never enters a warehouse and so never has a GRN — yet assertExportReceivedWithGrn required one before the carriage acceptance sheet could be issued or the booking loaded from inside its schedule. Adds export_handover_mode to freight.bookings (null = WAREHOUSE, so existing bookings are unaffected) and teaches the shared gate to skip DIRECT_TO_TRAIN. Both call sites are fixed by that single early return. For direct bookings the carriage acceptance sheet builds its lines from the booking's own containers, falling back to the declared bulk tonnage, and is issuable as soon as the mode is chosen. Direct bookings are also removed from the warehouse receive queue, since that cargo is never coming to the shed. Staff choose the mode from the booking detail page via a new endpoint reusing bookings:operations. Switching to direct is refused once warehouse inventory exists, so the two flows cannot cross. Warehouse-then-train keeps every gate it had.
29 lines
1.0 KiB
TypeScript
29 lines
1.0 KiB
TypeScript
import { MigrationInterface, QueryRunner } from "typeorm";
|
|
|
|
/**
|
|
* Export cargo reaches a train two ways, and until now only one was modelled.
|
|
*
|
|
* DIRECT_TO_TRAIN — the customer's truck pulls alongside and the cargo goes
|
|
* straight onto the wagon. It never enters a warehouse, so no GRN is ever
|
|
* raised; the Carriage Acceptance Sheet is the only document handed over.
|
|
*
|
|
* WAREHOUSE — cargo is received into the warehouse, GRN'd, then loaded. This is
|
|
* the existing flow and stays gated on the GRN.
|
|
*
|
|
* NULL means WAREHOUSE, so existing rows keep today's behaviour with no backfill.
|
|
*/
|
|
export class BookingExportHandoverMode3370000000000 implements MigrationInterface {
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.bookings
|
|
ADD COLUMN IF NOT EXISTS export_handover_mode varchar(20)
|
|
`);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.query(`
|
|
ALTER TABLE freight.bookings DROP COLUMN IF EXISTS export_handover_mode
|
|
`);
|
|
}
|
|
}
|