266 lines
9.0 KiB
JavaScript
266 lines
9.0 KiB
JavaScript
/**
|
||
* 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();
|
||
}
|