/** * Script til at oprette erfaringsbaserede SmartPackages * Version 2: Simpel version der opretter pakkerne med varenumre * Priser tilføjes senere når materialer importeres fra Bygma/leverandører */ const axios = require('axios'); const LOCAL_API = 'http://localhost:4031'; /** * Opret SmartPackage via API */ async function createSmartPackage(packageData) { try { const response = await axios.post(`${LOCAL_API}/api/smart-packages`, packageData); console.log(`✅ Oprettet pakke: ${packageData.name} (ID: ${response.data.id})`); return response.data; } catch (error) { console.error(`❌ Fejl ved oprettelse af ${packageData.name}:`, error.response?.data || error.message); return null; } } /** * PAKKE 1: Tagrende med Konsoljern */ async function createTagrendePakke() { const packageData = { name: 'Tagrende med Konsoljern (Lindab)', description: `Komplet tagrende system med konsoljern i stål fra Lindab. MATERIALELISTE: • 077424 - Tagrende 3 meter (beregnes fra facadelængde ÷ 3) • 107744 - Ende bund (4 stk generisk) • 077419 - Samle stykke (1 pr 3 meter tagrende) • 077407 - Konsol jern (maks 60cm mellem) • 077426 - Hjørne indvendig (1 stk til huskeliste) • 077431 - Hjørne udvendig (1 stk til huskeliste) ARBEJDSTID: 10 meter = 5 timer (0,5 time pr meter) GEOMETRI KRÆVET: facadelængde (meter)`, category: 'Tag - Tagrende', difficulty_level: 'mellem', estimated_hours: 5, hourly_rate: 580, installation_notes: 'Kræver facadelængde for beregning', is_template: true, created_by: 'system', materials: [ { name: 'Tagrende 3 meter (077424)', quantity: 1, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' }, { name: 'Ende bund (107744)', quantity: 4, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' }, { name: 'Samle stykke (077419)', quantity: 1, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' }, { name: 'Konsol jern (077407)', quantity: 1, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' }, { name: 'Hjørne indvendig (077426)', quantity: 1, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' }, { name: 'Hjørne udvendig (077431)', quantity: 1, unit: 'stk', unitPrice: 0, category: 'tagrende', supplier: '', notes: '' } ] }; return await createSmartPackage(packageData); } /** * PAKKE 2: Nedløb */ async function createNedløbPakke() { const packageData = { name: 'Nedløb komplet', description: `Komplet nedløbssystem med automatisk beregning af tilbehør. MATERIALELISTE (pr nedløb): • 077438 - Nedløb 3 meter (1 stk) • 184937 - Rørholder (2 stk) • 122214 - Tudstykke (1 stk) • 050043 - Silikone (1 stk) • 061637 - Brøndkrave (1 stk) • 076623 - Bøjning (2 stk - varierer efter behov) ARBEJDSTID: 1 nedløb = 1 time GEOMETRI KRÆVET: Antal nedløb`, category: 'Tag - Nedløb', package_type: 'installation', estimated_hours: 1, hourly_rate: 580, is_template: true, materials: [ { name: 'Nedløb 3 meter (077438)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Rørholder (184937)', quantity: 2, unit: 'stk', price: 0 }, { name: 'Tudstykke (122214)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Silikone (050043)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Brøndkrave (061637)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Bøjning (076623)', quantity: 2, unit: 'stk', price: 0 } ] }; return await createSmartPackage(packageData); } /** * PAKKE 3: Opretning af spær */ async function createSpærPakke() { const packageData = { name: 'Opretning af spær', description: `Komplet opretning af tagspær med materialer og værktøj. MATERIALELISTE: • 146304720010450 - Spær træ 200mm (LBM: (huslængde+1) × husbredde) • 310615 - Spånskruer 5,0x100 (5 skruer pr LBM) • 195408 - Muresnor (1 stk) • 224770 - Bits TX 20 (1 stk) • 064736 - Snorvatterpas (2 stk) • 182788 - Rundsavsklinge (1 stk) • 147761 - Stiksavsklinger (1 stk) ARBEJDSTID: 5 meter = 0,5 time (0,1 time pr meter) GEOMETRI KRÆVET: huslængde (meter), husbredde (meter)`, category: 'Tag - Spær', package_type: 'installation', estimated_hours: 2.5, hourly_rate: 580, is_template: true, materials: [ { name: 'Spær træ 200mm (146304720010450)', quantity: 10, unit: 'løbende meter', price: 0 }, { name: 'Spånskruer 5,0x100 (310615)', quantity: 50, unit: 'stk', price: 0 }, { name: 'Muresnor (195408)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Bits TX 20 (224770)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Snorvatterpas (064736)', quantity: 2, unit: 'stk', price: 0 }, { name: 'Rundsavsklinge (182788)', quantity: 1, unit: 'stk', price: 0 }, { name: 'Stiksavsklinger (147761)', quantity: 1, unit: 'stk', price: 0 } ] }; return await createSmartPackage(packageData); } /** * PAKKE 4: B7 montering inkl. lægter */ async function createB7Pakke() { const packageData = { name: 'B7 montering inkl. lægter', description: `Komplet B7 tagbeklædning med lægter og fastgørelse. MATERIALELISTE (pr m²): • 147072 - B7 Plade (2,13 plade pr m²) • 1632038073 - Lægter 46cm afstand (2,17 meter pr m²) • 119229 - Tagskruer (4,25 skruer pr m²) • 101933 - Ringsøm pakke 2880 stk (15 søm pr m²) • 029218 - EPDM bånd 30 meter (2,17 meter pr m²) ARBEJDSTID: 0,5 time pr m² GEOMETRI KRÆVET: tagflade (m²)`, category: 'Tag - B7', package_type: 'installation', estimated_hours: 10, hourly_rate: 580, is_template: true, materials: [ { name: 'B7 Plade (147072)', quantity: 21.3, unit: 'stk', price: 0, description: '2,13 pr m²' }, { name: 'Lægter (1632038073)', quantity: 21.7, unit: 'løbende meter', price: 0, description: '2,17m pr m²' }, { name: 'Tagskruer (119229)', quantity: 42.5, unit: 'stk', price: 0, description: '4,25 pr m²' }, { name: 'Ringsøm (101933)', quantity: 150, unit: 'stk', price: 0, description: '15 pr m²' }, { name: 'EPDM bånd (029218)', quantity: 21.7, unit: 'løbende meter', price: 0, description: '2,17m pr m²' } ] }; return await createSmartPackage(packageData); } /** * PAKKE 5: Rygning B7 */ async function createRygningB7Pakke() { const packageData = { name: 'Rygning B7', description: `Komplet rygningsløsning til B7 tag. MATERIALELISTE (pr løbende meter): • 057437 - Rygning (1 stk pr meter) • 038218 - Rygningselement (1 stk pr meter) • 144855 - Tagskruer 100 stk (4 skruer pr meter) • 029218 - EPDM bånd 30 meter (0,4 meter pr meter) ARBEJDSTID: Ca 0,25 time pr meter (estimeret) GEOMETRI KRÆVET: rygning_længde (meter)`, category: 'Tag - Rygning', package_type: 'installation', estimated_hours: 2.5, hourly_rate: 580, is_template: true, materials: [ { name: 'Rygning (057437)', quantity: 10, unit: 'løbende meter', price: 0 }, { name: 'Rygningselement (038218)', quantity: 10, unit: 'løbende meter', price: 0 }, { name: 'Tagskruer (144855)', quantity: 40, unit: 'stk', price: 0, description: '4 pr meter' }, { name: 'EPDM bånd (029218)', quantity: 4, unit: 'løbende meter', price: 0, description: '0,4m pr meter' } ] }; return await createSmartPackage(packageData); } /** * PAKKE 6: Taghætte B7 */ async function createTaghætteB7Pakke() { const packageData = { name: 'Taghætte B7', description: `Montering af taghætte til B7 tag. MATERIALELISTE: • 126813 - Taghætte (1 stk) ARBEJDSTID: Ca 1 time (estimeret)`, category: 'Tag - Taghætte', package_type: 'installation', estimated_hours: 1, hourly_rate: 580, is_template: true, materials: [ { name: 'Taghætte (126813)', quantity: 1, unit: 'stk', price: 0 } ] }; return await createSmartPackage(packageData); } /** * Hovedfunktion */ async function main() { console.log('🚀 Starter oprettelse af erfaringsbaserede SmartPackages...\n'); console.log('📌 Pakker oprettes med varenumre - priser tilføjes senere\n'); const results = []; // Opret alle pakker results.push(await createTagrendePakke()); results.push(await createNedløbPakke()); results.push(await createSpærPakke()); results.push(await createB7Pakke()); results.push(await createRygningB7Pakke()); results.push(await createTaghætteB7Pakke()); const successful = results.filter(r => r !== null).length; console.log(`\n✅ ${successful} af 6 pakker oprettet succesfuldt!`); console.log('\n📝 Næste skridt:'); console.log(' 1. Import materialer fra Bygma/leverandører med varenumre'); console.log(' 2. Implementer geometri-gemning i database'); console.log(' 3. Byg beregningslogik for automatisk materialemængder'); console.log(' 4. Implementer 20% avance på alle materialerpriser'); console.log(' 5. Test pakkerne i frontend'); console.log(' 6. Få manglende pakker fra kunde (B6, Betontegl, Velux osv.)'); } // Kør scriptet if (require.main === module) { main(); }