bmc_hub/migrations/174_supplier_invoice_line_handling.sql
Christian 8e8616c835 feat: Enhance vendor and customer linking functionality
- Added endpoints to link and unlink customers to vendors, including validation for relationship types.
- Implemented a UI for managing linked customers in the vendor detail view.
- Introduced a search feature for customers when linking to vendors.
- Updated database schema to support customer-vendor relationships with necessary constraints and indices.
- Added migration scripts for new tables and fields related to supplier invoices and customer-vendor links.
- Modified bottom bar visibility in the frontend for improved user experience.
2026-04-15 09:34:26 +02:00

89 lines
3.5 KiB
SQL

-- 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';