-- Migration: Tilføj felter til custom/manuelle installation opgaver -- Dato: 2025-10-29 -- Formål: Gøre det muligt at oprette manuelle opgaver med timer pr. enhed -- Tilføj time_unit og time_per_unit til smart_package_tasks ALTER TABLE smart_package_tasks ADD COLUMN time_unit ENUM('per_sqm', 'per_meter', 'per_piece', 'per_project', 'per_hour') DEFAULT 'per_project' COMMENT 'Enhed for tidsestimering (pr. m², pr. løbende meter, pr. styk, pr. projekt, pr. time)', ADD COLUMN time_per_unit DECIMAL(10,2) DEFAULT 0 COMMENT 'Timer pr. enhed (fx 0.17 timer pr. løbende meter = 10 min)', ADD COLUMN is_custom BOOLEAN DEFAULT 0 COMMENT 'Indikerer om opgaven er manuelt oprettet (ikke fra montage vejledning)', ADD COLUMN material_varenr VARCHAR(50) NULL COMMENT 'Varenummer på materialet opgaven relaterer til', ADD INDEX idx_material_varenr (material_varenr); -- Opdater eksisterende tasks til at bruge per_project som default UPDATE smart_package_tasks SET time_unit = 'per_project', time_per_unit = hours WHERE time_unit IS NULL OR time_unit = 'per_project'; -- Eksempel: Lægter opsætning (som tømmeren nævnte) INSERT INTO smart_package_tasks ( package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, hourly_rate, is_custom, material_varenr, required_tools, created_at ) VALUES ( (SELECT id FROM material_packages WHERE name LIKE '%B7 Tag%' LIMIT 1), 'Opsætning af lægter', 'Præcis montage af lægter med korrekt afstand (cc 370mm). Inkluderer skruearbejde og kontrol af vaterpas.', 4, 0, -- Beregnes dynamisk baseret på løbende meter 'per_meter', -- Timer pr. løbende meter 0.17, -- 10 minutter pr. løbende meter (10/60 = 0.166667) 580, 1, -- Custom/manuelt oprettet '147072', -- Varenr for lægter (hvis kendt) '["skruemaskine", "vaterpas", "målebånd", "snor"]', NOW() ); -- Eksempel: Spær opsætning INSERT INTO smart_package_tasks ( package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, hourly_rate, is_custom, required_tools, created_at ) VALUES ( (SELECT id FROM material_packages WHERE name LIKE '%B7 Tag%' LIMIT 1), 'Montage af spær', 'Præcis opsætning af bærende spær med korrekt afstand og vinkel. Kontrol af niveau og lodrethed.', 2, 0, -- Beregnes dynamisk 'per_piece', -- Timer pr. spær 0.75, -- 45 minutter pr. spær 580, 1, -- Custom '["boremaskine", "vaterpas", "vinkelmåler", "sav"]', NOW() ); -- View til at få overblik over custom tasks CREATE OR REPLACE VIEW custom_installation_tasks AS SELECT t.id, t.task_name, t.task_description, t.time_unit, t.time_per_unit, CASE WHEN t.time_unit = 'per_meter' THEN CONCAT(ROUND(t.time_per_unit * 60, 0), ' min pr. løbende meter') WHEN t.time_unit = 'per_sqm' THEN CONCAT(ROUND(t.time_per_unit * 60, 0), ' min pr. m²') WHEN t.time_unit = 'per_piece' THEN CONCAT(ROUND(t.time_per_unit * 60, 0), ' min pr. styk') WHEN t.time_unit = 'per_hour' THEN CONCAT(t.time_per_unit, ' timer pr. time') ELSE CONCAT(t.estimated_hours, ' timer totalt') END as time_display, t.hourly_rate, t.material_varenr, m.material_name, p.name as package_name, t.required_tools, t.created_at, t.updated_at FROM smart_package_tasks t LEFT JOIN material_packages p ON t.package_id = p.id LEFT JOIN materials m ON t.material_varenr = m.varenr WHERE t.is_custom = 1 ORDER BY t.created_at DESC; -- Kommenter på tabel og kolonner ALTER TABLE smart_package_tasks COMMENT = 'Installation opgaver for smart pakker - både auto-genererede fra montage vejledninger og manuelt oprettede custom tasks';