-- ═══════════════════════════════════════════════════════════════════════════ -- TØMRER SMART PACKAGES - Komplet System v2 -- Oprettet: 2025-10-30 -- Tilpasset eksisterende material_packages struktur -- ═══════════════════════════════════════════════════════════════════════════ USE tilbudgivern; -- Cleanup: Slet eksisterende test packages hvis de findes DELETE FROM smart_package_tasks WHERE package_id IN ( SELECT id FROM material_packages WHERE created_by = 'system' AND name LIKE '%Tagrende%' OR name LIKE '%Nedløb%' ); DELETE FROM package_materials WHERE package_id IN ( SELECT id FROM material_packages WHERE created_by = 'system' AND name LIKE '%Tagrende%' OR name LIKE '%Nedløb%' ); -- ═══════════════════════════════════════════════════════════════════════════ -- PAKKE 1: Tagrende med Konsoljern i stål (Lindab materialer) -- ═══════════════════════════════════════════════════════════════════════════ INSERT INTO material_packages (name, description, category, difficulty_level, estimated_hours, hourly_rate, installation_notes, is_template, area_based, time_per_sqm, auto_calculated, created_by) VALUES ('Tagrende med Konsoljern - Lindab', 'Komplet tagrende system. Auto-beregner: Tagrende (facadelængde/3), Konsoljern (facadelængde/0.6), Samlestykker (antal-1).', 'Tagarbejde', 'mellem', 0.5, 580, 'Beregning: 5 timer per 10 meter facadelængde. Konsoljern maks 60cm afstand.', 1, 0, 0, 1, 'system'); SET @tagrende_pkg = LAST_INSERT_ID(); INSERT INTO package_materials (package_id, bygma_varenr, material_name, material_category, quantity, unit, unit_price, total_price) VALUES (@tagrende_pkg, '077424', 'LINDAB RAINLINE TAGRENDE 125MM 3M', 'Tagrende', 1, 'stk', 245.00, 245.00), (@tagrende_pkg, '107744', 'LINDAB RAINLINE ENDE BUND', 'Tagrende tilbehør', 4, 'stk', 45.00, 180.00), (@tagrende_pkg, '077419', 'LINDAB RAINLINE SAMLESTYKKE', 'Tagrende tilbehør', 1, 'stk', 35.00, 35.00), (@tagrende_pkg, '077407', 'LINDAB RAINLINE KONSOLJERN', 'Tagrende tilbehør', 1, 'stk', 28.00, 28.00), (@tagrende_pkg, '077426', 'LINDAB RAINLINE HJØRNE INDENVENDIG', 'Tagrende tilbehør', 1, 'stk', 125.00, 125.00), (@tagrende_pkg, '077431', 'LINDAB RAINLINE HJØRNE UDEVENDIG', 'Tagrende tilbehør', 1, 'stk', 125.00, 125.00); INSERT INTO smart_package_tasks (package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, is_custom) VALUES (@tagrende_pkg, 'Opmåling og markering', 'Præcis opmåling af facadelængde og markering af konsoljerrns placering med maks 60cm afstand', 1, 0.5, 'per_project', 0.5, 0), (@tagrende_pkg, 'Montering af konsoljern', 'Montering af konsoljern med korrekt fald (1-2mm per meter) mod nedløb. Sikring omkring skorsten - Sliske og stillads udføres omkring skorsten', 2, 2.0, 'per_meter', 0.15, 0), (@tagrende_pkg, 'Samling og montering af tagrende', 'Montering af tagrende-sektioner med samlestykker og tætning. Tagrende samles og monteres - Tagrende-sektioner monteres med samlestykker - Tætning udføres ved alle samlinger - Tilslutning til nedløb sikres', 3, 2.0, 'per_meter', 0.2, 0), (@tagrende_pkg, 'Montering af ende og hjørner', 'Montering af endeender, hjørner og tilslutning til nedløb. Alt affald bortkøres', 4, 0.5, 'per_project', 0.5, 0); -- ═══════════════════════════════════════════════════════════════════════════ -- PAKKE 2: Nedløb -- ═══════════════════════════════════════════════════════════════════════════ INSERT INTO material_packages (name, description, category, difficulty_level, estimated_hours, hourly_rate, installation_notes, is_template, area_based, time_per_sqm, auto_calculated, created_by) VALUES ('Nedløb - Komplet system', 'Komplet nedløb inkl. tilbehør. Auto-beregner: Nedløb (antal), Rørholder (antal*2), Tudstykke (antal), Silikone (antal), Brøndkrave (antal), Bøjninger (antal*2).', 'Tagarbejde', 'mellem', 1.0, 580, 'Beregning: 1 time per nedløb. Bøjninger kan tilpasses efter behov.', 1, 0, 0, 1, 'system'); SET @nedloeb_pkg = LAST_INSERT_ID(); INSERT INTO package_materials (package_id, bygma_varenr, material_name, material_category, quantity, unit, unit_price, total_price) VALUES (@nedloeb_pkg, '077438', 'LINDAB NEDLØB 3M', 'Nedløb', 1, 'stk', 185.00, 185.00), (@nedloeb_pkg, '184937', 'LINDAB RØRHOLDER', 'Nedløb tilbehør', 2, 'stk', 22.00, 44.00), (@nedloeb_pkg, '122214', 'LINDAB TUDSTYKKE', 'Nedløb tilbehør', 1, 'stk', 45.00, 45.00), (@nedloeb_pkg, '050043', 'SILIKONE TIL NEDLØB', 'Forsegling', 1, 'stk', 55.00, 55.00), (@nedloeb_pkg, '061637', 'BRØNDKRAVE', 'Nedløb tilbehør', 1, 'stk', 125.00, 125.00), (@nedloeb_pkg, '076623', 'LINDAB BØJNING 87 GRADER', 'Nedløb tilbehør', 2, 'stk', 48.00, 96.00); INSERT INTO smart_package_tasks (package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, is_custom) VALUES (@nedloeb_pkg, 'Opmåling og markering', 'Opmål lodret fra tagrende til brønd og markér rørholder-placering. Nedløbsrør opmåles - Lodret fra tagrende til jordniveau opmåles præcist - Rørholder placering markeres med maks 1.5m afstand', 1, 0.25, 'per_piece', 0.25, 0), (@nedloeb_pkg, 'Montering af rørholde', 'Fastgør rørholde til facade med korrekt afstand (maks 1.5m). Rørholde monteres - Fastgøres til facade med plugs og skruer - Afstand kontrolleres med vaterpas', 2, 0.25, 'per_piece', 0.25, 0), (@nedloeb_pkg, 'Montering af tudstykke', 'Montér tudstykke fra tagrende til nedløb med tætning. Tudstykke fastgøres - Tilslutning fra tagrende til nedløbsrør - Tættes med silikone', 3, 0.15, 'per_piece', 0.15, 0), (@nedloeb_pkg, 'Samling af nedløbsrør', 'Saml nedløbsrør med bøjninger og fastgør i rørholde. Nedløbsrør samles - Bøjninger monteres hvor nødvendigt - Fastgøres i alle rørholde', 4, 0.25, 'per_piece', 0.25, 0), (@nedloeb_pkg, 'Tilslutning til brønd', 'Montér brøndkrave og tilslut nedløb til afløbssystem. Nedløb afsluttes - Brøndkrave monteres - Tilsluttes til afløbssystem - Alt affald bortkøres', 5, 0.10, 'per_piece', 0.10, 0); -- ═══════════════════════════════════════════════════════════════════════════ -- PAKKE 3: Opretning af spær -- ═══════════════════════════════════════════════════════════════════════════ INSERT INTO material_packages (name, description, category, difficulty_level, estimated_hours, hourly_rate, installation_notes, is_template, area_based, time_per_sqm, auto_calculated, created_by) VALUES ('Opretning af spær', 'Opretning og forstærkning af tagspær. Auto-beregner: LBM spær ((huslængde+1)*husbredde), Skruer (LBM*5).', 'Tagarbejde', 'svær', 0.1, 580, 'Beregning: 0.5 time per 5 meter spær. Værktøj inkluderet i pakke.', 1, 0, 0, 1, 'system'); SET @spaer_pkg = LAST_INSERT_ID(); INSERT INTO package_materials (package_id, bygma_varenr, material_name, material_category, quantity, unit, unit_price, total_price) VALUES (@spaer_pkg, '146304720010450', 'SPÆR TRÆ 45x200MM TRYKIMPRÆGNERET', 'Tømmer', 1, 'lbm', 42.00, 42.00), (@spaer_pkg, '310615', 'SPÅNSKRUER 5,0X100MM 200 STK', 'Beslag', 1, 'pakke', 125.00, 125.00), (@spaer_pkg, '195408', 'MURESNOR 100M', 'Værktøj', 1, 'stk', 45.00, 45.00), (@spaer_pkg, '224770', 'BITS TX20 2-PACK', 'Værktøj', 1, 'stk', 35.00, 35.00), (@spaer_pkg, '064736', 'SNORVATTERPAS 2-PACK', 'Værktøj', 2, 'stk', 125.00, 250.00), (@spaer_pkg, '182788', 'RUNDSAVSKLINGE 190MM', 'Værktøj', 1, 'stk', 145.00, 145.00), (@spaer_pkg, '147761', 'STIKSAVSKLINGER T-SKAFT 5-PACK', 'Værktøj', 1, 'stk', 85.00, 85.00); INSERT INTO smart_package_tasks (package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, is_custom) VALUES (@spaer_pkg, 'Inspektion af eksisterende spær', 'Grundig inspektion for rød, svamp og skader på eksisterende spærkonstruktion. Spær inspiceres - Kontrol for rød og svamp - Vurdering af skader - Dokumentation af tilstand', 1, 1.0, 'per_project', 1.0, 0), (@spaer_pkg, 'Markering og opmåling', 'Spænd muresnor og markér eksakt placering af nye/forstærkende spær. Opmåling udføres - Muresnor spændes - Placering af forstærkninger markeres - Snorvatterpas bruges til præcision', 2, 0.5, 'per_project', 0.5, 0), (@spaer_pkg, 'Tilskæring af spær', 'Tilskær spær til præcis længde med korrekte vinkler. Spær tilskæres - Rundsav bruges til lige snit - Stiksav til præcise vinkler - Præcision sikres', 3, 1.0, 'per_meter', 0.05, 0), (@spaer_pkg, 'Montering og fastgørelse', 'Montér spær på plads og fastgør med spånskruer. Spær monteres - Fastgøres med spånskruer 5.0x100mm - Vaterpas kontrol løbende - Minimum 5 skruer per meter', 4, 2.0, 'per_meter', 0.15, 0), (@spaer_pkg, 'Kontrol og justering', 'Endelig kontrol af alle spær med snor og vaterpas, justér efter behov. Endelig kontrol - Snorvatterpas kontrol af alle spær - Justeringer foretages hvor nødvendigt - Dokumentation af udført arbejde', 5, 0.5, 'per_project', 0.5, 0); -- ═══════════════════════════════════════════════════════════════════════════ -- PAKKE 4: Montering af B7 inkl. lægter -- ═══════════════════════════════════════════════════════════════════════════ INSERT INTO material_packages (name, description, category, difficulty_level, estimated_hours, hourly_rate, installation_notes, is_template, area_based, time_per_sqm, auto_calculated, created_by) VALUES ('Montering af B7 inkl. lægter', 'Komplet B7 tagdækning. Auto-beregner per m²: B7 plader (2.13), Lægter (2.17), Tagskruer (4.25), Ringsøm (15), EPDM bånd (2.17).', 'Tagarbejde', 'svær', 0.5, 580, 'Beregning: 0.5 time per m². Lægteafstand 46cm. Kvalitetskontrol efter montering.', 1, 1, 0.5, 1, 'system'); SET @b7_pkg = LAST_INSERT_ID(); INSERT INTO package_materials (package_id, bygma_varenr, material_name, material_category, quantity, unit, unit_price, total_price) VALUES (@b7_pkg, '147072', 'ETERNIT B7 TAGPLADE 920X1320MM', 'Tagmateriale', 2.13, 'stk', 245.00, 521.85), (@b7_pkg, '1632038073', 'LÆGTE 30X50MM TRYKIMP. 420CM', 'Tømmer', 2.17, 'lbm', 18.50, 40.15), (@b7_pkg, '119229', 'ETERNIT TAGSKRUER 400 STK', 'Beslag', 0.011, 'pakke', 385.00, 4.24), (@b7_pkg, '101933', 'RINGSØM 2.8X65MM 2880 STK', 'Beslag', 0.005, 'pakke', 145.00, 0.73), (@b7_pkg, '029218', 'EPDM TÆTNINGSBÅND 30M', 'Tætning', 0.072, 'rulle', 285.00, 20.52); INSERT INTO smart_package_tasks (package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, is_custom) VALUES (@b7_pkg, 'Forberedelse og sikring', 'Etablér tagsikring, kontrollér undertag og forbered arbejdsområde. Sikring etableres - Sikkerhedssele og tagstiger opsættes - Undertag kontrolleres for skader - Arbejdsområde forberedes', 1, 2.0, 'per_project', 2.0, 0), (@b7_pkg, 'Montering af lægter', 'Montér lægter med præcis 46cm afstand. Lægter monteres - Afstand 46cm mellem lægter - Fastgøres med ringsøm (ca. 15 søm per m²) - Vaterpas kontrol løbende', 2, 0.2, 'per_sqm', 0.2, 0), (@b7_pkg, 'Udlægning af EPDM tætningsbånd', 'Anbring EPDM tætningsbånd på lægter før plademontering. EPDM bånd udlægges - 2.17 meter per m² tagflade - Anbringes på lægter før tagplader', 3, 0.05, 'per_sqm', 0.05, 0), (@b7_pkg, 'Montering af B7 tagplader', 'Montér B7 plader fra bund og op. B7 plader monteres - Starter fra tagfod og arbejdes op mod ryg - 2.13 plader per m² - Fastgøres med tagskruer (4.25 per m²) - Korrekt overlap sikres', 4, 0.2, 'per_sqm', 0.2, 0), (@b7_pkg, 'Kontrol og efterjustering', 'Kontrollér alle skruer er spændt, tjek tæthed. Kvalitetskontrol - Alle tagskruer kontrolleres - Tæthed ved overlaps tjekkes - Justeringer foretages efter behov - Alt affald bortkøres', 5, 0.05, 'per_sqm', 0.05, 0); -- ═══════════════════════════════════════════════════════════════════════════ -- PAKKE 5: Montering af rygning B7 -- ═══════════════════════════════════════════════════════════════════════════ INSERT INTO material_packages (name, description, category, difficulty_level, estimated_hours, hourly_rate, installation_notes, is_template, area_based, time_per_sqm, auto_calculated, created_by) VALUES ('Montering af rygning B7', 'Rygning til B7 tag. Auto-beregner per løbende meter: Rygning (1), Rygningselement (1), Tagskruer (4), EPDM bånd (0.4).', 'Tagarbejde', 'svær', 0.3, 580, 'Beregning: 0.3 time per løbende meter rygning. Vigtig tætning ved overlaps.', 1, 0, 0, 1, 'system'); SET @rygning_pkg = LAST_INSERT_ID(); INSERT INTO package_materials (package_id, bygma_varenr, material_name, material_category, quantity, unit, unit_price, total_price) VALUES (@rygning_pkg, '057437', 'ETERNIT RYGNING B7', 'Tagmateriale', 1, 'lbm', 125.00, 125.00), (@rygning_pkg, '038218', 'ETERNIT RYGNINGSELEMENT', 'Tagmateriale', 1, 'stk', 45.00, 45.00), (@rygning_pkg, '144855', 'ETERNIT TAGSKRUER 100 STK', 'Beslag', 0.04, 'pakke', 115.00, 4.60), (@rygning_pkg, '029218', 'EPDM TÆTNINGSBÅND 30M', 'Tætning', 0.013, 'rulle', 285.00, 3.71); INSERT INTO smart_package_tasks (package_id, task_name, task_description, task_order, estimated_hours, time_unit, time_per_unit, is_custom) VALUES (@rygning_pkg, 'Forberedelse af rygningslinje', 'Kontrollér at begge tagflader mødes korrekt. Rygningslinje forberedes - Begge tagflader kontrolleres for korrekt møde - Høje punkter justeres - Snorvatterpas kontrol', 1, 0.5, 'per_project', 0.5, 0), (@rygning_pkg, 'Montering af rygningselementer', 'Fastgør rygningselementer som underlag. Rygningselementer monteres - Fungerer som underlag for rygning - Fastgøres med skruer - 1 element per løbende meter', 2, 0.1, 'per_meter', 0.1, 0), (@rygning_pkg, 'Udlægning af EPDM tætningsbånd', 'Anbring EPDM bånd langs rygningslinjen. EPDM tætningsbånd udlægges - 0.4 meter per løbende meter rygning - Sikrer tæthed under rygning', 3, 0.05, 'per_meter', 0.05, 0), (@rygning_pkg, 'Montering af rygning', 'Montér rygningsstykker med overlap. Rygning monteres - Minimum 10cm overlap mellem stykker - Fastgøres med 4 tagskruer per meter - Tæthed kontrolleres løbende', 4, 0.15, 'per_meter', 0.15, 0); -- ═══════════════════════════════════════════════════════════════════════════ -- COMPLETION CHECK -- ═══════════════════════════════════════════════════════════════════════════ SELECT 'SMART PACKAGES OPRETTET' as status, COUNT(*) as antal FROM material_packages WHERE created_by = 'system' AND created_at > DATE_SUB(NOW(), INTERVAL 1 HOUR); SELECT 'TASKS OPRETTET' as status, COUNT(*) as antal FROM smart_package_tasks WHERE package_id IN (SELECT id FROM material_packages WHERE created_by = 'system'); SELECT 'MATERIALER OPRETTET' as status, COUNT(*) as antal FROM package_materials WHERE package_id IN (SELECT id FROM material_packages WHERE created_by = 'system');