Add persistent production plans
This commit is contained in:
@@ -170,6 +170,31 @@ const initDB = async () => {
|
||||
);
|
||||
`);
|
||||
|
||||
// A production plan is the PCP container above the individual OPs. The
|
||||
// calculated cut screen may change tomorrow; a confirmed plan must not.
|
||||
await pool.query(`
|
||||
CREATE TABLE IF NOT EXISTS production_plans (
|
||||
id SERIAL PRIMARY KEY,
|
||||
number VARCHAR(40) UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
status VARCHAR(30) NOT NULL DEFAULT 'open',
|
||||
contractor TEXT,
|
||||
planned_start_date DATE,
|
||||
expected_date DATE,
|
||||
notes TEXT,
|
||||
source VARCHAR(40) NOT NULL DEFAULT 'cut_plan',
|
||||
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
|
||||
completed_at TIMESTAMPTZ
|
||||
);
|
||||
`);
|
||||
|
||||
await pool.query(`
|
||||
ALTER TABLE production_orders
|
||||
ADD COLUMN IF NOT EXISTS production_plan_id INTEGER REFERENCES production_plans(id) ON DELETE SET NULL,
|
||||
ADD COLUMN IF NOT EXISTS contractor TEXT;
|
||||
`).catch(() => {});
|
||||
|
||||
await pool.query(`
|
||||
CREATE TABLE IF NOT EXISTS production_order_markers (
|
||||
id SERIAL PRIMARY KEY,
|
||||
@@ -447,6 +472,7 @@ const initDB = async () => {
|
||||
CREATE TABLE IF NOT EXISTS cut_plan_lot_reservations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
cut_plan_reference TEXT NOT NULL,
|
||||
production_plan_id INTEGER REFERENCES production_plans(id) ON DELETE SET NULL,
|
||||
supply_lot_id INTEGER NOT NULL REFERENCES supply_stock_lots(id) ON DELETE RESTRICT,
|
||||
material_key VARCHAR(255) NOT NULL,
|
||||
quantity NUMERIC(14, 4) NOT NULL CHECK (quantity > 0),
|
||||
@@ -460,6 +486,7 @@ const initDB = async () => {
|
||||
|
||||
await pool.query(`CREATE INDEX IF NOT EXISTS idx_cut_plan_lot_reservations_lot_status ON cut_plan_lot_reservations (supply_lot_id, status);`);
|
||||
await pool.query(`CREATE INDEX IF NOT EXISTS idx_cut_plan_lot_reservations_reference ON cut_plan_lot_reservations (cut_plan_reference, status);`);
|
||||
await pool.query(`CREATE INDEX IF NOT EXISTS idx_cut_plan_lot_reservations_plan ON cut_plan_lot_reservations (production_plan_id, status);`);
|
||||
|
||||
await pool.query(`
|
||||
CREATE TABLE IF NOT EXISTS supply_movements (
|
||||
|
||||
Reference in New Issue
Block a user