89 lines
3.5 KiB
MySQL
89 lines
3.5 KiB
MySQL
|
|
-- Migration 174: Supplier invoice line handling fields
|
||
|
|
-- Created: 2026-04-13
|
||
|
|
|
||
|
|
ALTER TABLE supplier_invoice_lines
|
||
|
|
ADD COLUMN IF NOT EXISTS handling_type VARCHAR(40),
|
||
|
|
ADD COLUMN IF NOT EXISTS target_customer_id INTEGER REFERENCES customers(id) ON DELETE SET NULL,
|
||
|
|
ADD COLUMN IF NOT EXISTS target_sag_id INTEGER REFERENCES sag_sager(id) ON DELETE SET NULL,
|
||
|
|
ADD COLUMN IF NOT EXISTS target_employee_id INTEGER REFERENCES users(user_id) ON DELETE SET NULL,
|
||
|
|
ADD COLUMN IF NOT EXISTS requires_serial BOOLEAN NOT NULL DEFAULT FALSE,
|
||
|
|
ADD COLUMN IF NOT EXISTS serial_number VARCHAR(120),
|
||
|
|
ADD COLUMN IF NOT EXISTS asset_id INTEGER REFERENCES hardware_assets(id) ON DELETE SET NULL,
|
||
|
|
ADD COLUMN IF NOT EXISTS resale_ready BOOLEAN NOT NULL DEFAULT FALSE;
|
||
|
|
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (
|
||
|
|
SELECT 1
|
||
|
|
FROM pg_constraint
|
||
|
|
WHERE conname = 'chk_supplier_invoice_lines_handling_type'
|
||
|
|
) THEN
|
||
|
|
ALTER TABLE supplier_invoice_lines
|
||
|
|
ADD CONSTRAINT chk_supplier_invoice_lines_handling_type
|
||
|
|
CHECK (
|
||
|
|
handling_type IS NULL
|
||
|
|
OR handling_type IN (
|
||
|
|
'fakturer_videre',
|
||
|
|
'asset',
|
||
|
|
'intern_brug',
|
||
|
|
'projekt_omkostning',
|
||
|
|
'lager',
|
||
|
|
'retur_reklamation'
|
||
|
|
)
|
||
|
|
);
|
||
|
|
END IF;
|
||
|
|
END $$;
|
||
|
|
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (
|
||
|
|
SELECT 1
|
||
|
|
FROM pg_constraint
|
||
|
|
WHERE conname = 'chk_supplier_invoice_lines_serial_requirement'
|
||
|
|
) THEN
|
||
|
|
ALTER TABLE supplier_invoice_lines
|
||
|
|
ADD CONSTRAINT chk_supplier_invoice_lines_serial_requirement
|
||
|
|
CHECK (
|
||
|
|
requires_serial = FALSE
|
||
|
|
OR (serial_number IS NOT NULL AND btrim(serial_number) <> '')
|
||
|
|
);
|
||
|
|
END IF;
|
||
|
|
END $$;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_handling_type
|
||
|
|
ON supplier_invoice_lines(handling_type)
|
||
|
|
WHERE handling_type IS NOT NULL;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_target_customer_id
|
||
|
|
ON supplier_invoice_lines(target_customer_id)
|
||
|
|
WHERE target_customer_id IS NOT NULL;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_target_sag_id
|
||
|
|
ON supplier_invoice_lines(target_sag_id)
|
||
|
|
WHERE target_sag_id IS NOT NULL;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_target_employee_id
|
||
|
|
ON supplier_invoice_lines(target_employee_id)
|
||
|
|
WHERE target_employee_id IS NOT NULL;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_asset_id
|
||
|
|
ON supplier_invoice_lines(asset_id)
|
||
|
|
WHERE asset_id IS NOT NULL;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_resale_ready
|
||
|
|
ON supplier_invoice_lines(resale_ready)
|
||
|
|
WHERE resale_ready = TRUE;
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_supplier_invoice_lines_serial_number
|
||
|
|
ON supplier_invoice_lines(serial_number)
|
||
|
|
WHERE serial_number IS NOT NULL;
|
||
|
|
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.handling_type IS 'Line handling: fakturer_videre, asset, intern_brug, projekt_omkostning, lager, retur_reklamation';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.target_customer_id IS 'Customer target for line allocation';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.target_sag_id IS 'Case target for line allocation';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.target_employee_id IS 'Employee target for line allocation';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.requires_serial IS 'Whether serial number is required';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.serial_number IS 'Serial number when required';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.asset_id IS 'Linked hardware asset id';
|
||
|
|
COMMENT ON COLUMN supplier_invoice_lines.resale_ready IS 'Whether line is ready for resale flow';
|