Files
tilbudgivern/database/migrations/20260722_extend_smart_packages_for_excel.sql
T

48 lines
3.5 KiB
SQL

-- Extend SmartPakker schema to support the uploaded Excel workbook.
-- This migration only adds fields; it does not import Excel data.
ALTER TABLE material_packages
ADD COLUMN IF NOT EXISTS excel_source_file varchar(255) DEFAULT NULL AFTER difficulty_level,
ADD COLUMN IF NOT EXISTS excel_source_sheet varchar(120) DEFAULT NULL AFTER excel_source_file,
ADD COLUMN IF NOT EXISTS excel_source_row int(11) DEFAULT NULL AFTER excel_source_sheet,
ADD COLUMN IF NOT EXISTS excel_package_name varchar(255) DEFAULT NULL AFTER excel_source_row,
ADD COLUMN IF NOT EXISTS unit varchar(100) DEFAULT NULL AFTER excel_package_name,
ADD COLUMN IF NOT EXISTS time_per_unit decimal(10,2) DEFAULT NULL AFTER unit,
ADD COLUMN IF NOT EXISTS unit_price decimal(12,2) DEFAULT NULL AFTER time_per_unit,
ADD COLUMN IF NOT EXISTS price_per_unit decimal(12,2) DEFAULT NULL AFTER unit_price,
ADD COLUMN IF NOT EXISTS standard_price decimal(12,2) DEFAULT NULL AFTER price_per_unit,
ADD COLUMN IF NOT EXISTS price_basis_note text DEFAULT NULL AFTER standard_price,
ADD COLUMN IF NOT EXISTS raw_material_lines mediumtext DEFAULT NULL AFTER price_basis_note,
ADD COLUMN IF NOT EXISTS raw_task_lines mediumtext DEFAULT NULL AFTER raw_material_lines,
ADD COLUMN IF NOT EXISTS price_source varchar(120) DEFAULT NULL AFTER raw_task_lines,
ADD COLUMN IF NOT EXISTS price_source_value varchar(255) DEFAULT NULL AFTER price_source,
ADD COLUMN IF NOT EXISTS excel_raw_data longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (excel_raw_data IS NULL OR json_valid(excel_raw_data)) AFTER price_source_value;
ALTER TABLE package_materials
ADD COLUMN IF NOT EXISTS excel_source_sheet varchar(120) DEFAULT NULL AFTER waste_factor,
ADD COLUMN IF NOT EXISTS excel_source_row int(11) DEFAULT NULL AFTER excel_source_sheet,
ADD COLUMN IF NOT EXISTS source_line_order int(11) DEFAULT NULL AFTER excel_source_row,
ADD COLUMN IF NOT EXISTS raw_line text DEFAULT NULL AFTER source_line_order,
ADD COLUMN IF NOT EXISTS item_code varchar(100) DEFAULT NULL AFTER raw_line,
ADD COLUMN IF NOT EXISTS quantity_text varchar(100) DEFAULT NULL AFTER item_code,
ADD COLUMN IF NOT EXISTS unit_price_text varchar(100) DEFAULT NULL AFTER quantity_text,
ADD COLUMN IF NOT EXISTS price_note text DEFAULT NULL AFTER unit_price_text,
ADD COLUMN IF NOT EXISTS excel_raw_data longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (excel_raw_data IS NULL OR json_valid(excel_raw_data)) AFTER price_note;
ALTER TABLE smart_package_tasks
ADD COLUMN IF NOT EXISTS excel_source_sheet varchar(120) DEFAULT NULL AFTER material_varenr,
ADD COLUMN IF NOT EXISTS excel_source_row int(11) DEFAULT NULL AFTER excel_source_sheet,
ADD COLUMN IF NOT EXISTS source_line_order int(11) DEFAULT NULL AFTER excel_source_row,
ADD COLUMN IF NOT EXISTS raw_line text DEFAULT NULL AFTER source_line_order,
ADD COLUMN IF NOT EXISTS price_basis_note text DEFAULT NULL AFTER raw_line,
ADD COLUMN IF NOT EXISTS excel_raw_data longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (excel_raw_data IS NULL OR json_valid(excel_raw_data)) AFTER price_basis_note;
CREATE INDEX IF NOT EXISTS idx_material_packages_excel_source
ON material_packages (excel_source_sheet, excel_source_row);
CREATE INDEX IF NOT EXISTS idx_package_materials_excel_source
ON package_materials (excel_source_sheet, excel_source_row);
CREATE INDEX IF NOT EXISTS idx_smart_package_tasks_excel_source
ON smart_package_tasks (excel_source_sheet, excel_source_row);