105 lines
3.5 KiB
JavaScript
105 lines
3.5 KiB
JavaScript
/**
|
|
* Test script til at teste SmartPackage geometri-beregninger
|
|
*/
|
|
|
|
const axios = require('axios');
|
|
const mysql = require('mysql2/promise');
|
|
|
|
const LOCAL_API = 'http://localhost:4031';
|
|
|
|
const dbConfig = {
|
|
host: 'localhost',
|
|
user: 'tilbudgivern_service',
|
|
password: process.env.DB_PASSWORD,
|
|
database: 'tilbudgivern'
|
|
};
|
|
|
|
async function testPackageCalculation() {
|
|
console.log('🧪 Tester SmartPackage geometri-beregning...\n');
|
|
|
|
try {
|
|
// Test geometri (eksempel hus)
|
|
const testGeometry = {
|
|
length_main: 15, // 15 meter facadelængde
|
|
width_main: 10, // 10 meter husbredde
|
|
total_area: 85, // 85 m² tagflade
|
|
stern_to_ridge_height: 3.5,
|
|
roof_angle_degrees: 30,
|
|
nedløb_antal: 4
|
|
};
|
|
|
|
console.log('📐 Test geometri:');
|
|
console.log(` Facadelængde: ${testGeometry.length_main}m`);
|
|
console.log(` Husbredde: ${testGeometry.width_main}m`);
|
|
console.log(` Tagflade: ${testGeometry.total_area}m²`);
|
|
console.log(` Nedløb antal: ${testGeometry.nedløb_antal}\n`);
|
|
|
|
// Test hver pakke
|
|
const packageIds = [97, 98, 99, 100, 101, 102]; // Tagrende, Nedløb, Spær, B7, Rygning, Taghætte
|
|
const packageNames = [
|
|
'Tagrende med Konsoljern',
|
|
'Nedløb komplet',
|
|
'Opretning af spær',
|
|
'B7 montering inkl. lægter',
|
|
'Rygning B7',
|
|
'Taghætte B7'
|
|
];
|
|
|
|
for (let i = 0; i < packageIds.length; i++) {
|
|
const packageId = packageIds[i];
|
|
const packageName = packageNames[i];
|
|
|
|
console.log(`\n${'='.repeat(60)}`);
|
|
console.log(`📦 ${packageName} (ID: ${packageId})`);
|
|
console.log('='.repeat(60));
|
|
|
|
try {
|
|
const response = await axios.post(
|
|
`${LOCAL_API}/api/smart-packages/${packageId}/calculate-with-geometry`,
|
|
{ geometry: testGeometry }
|
|
);
|
|
|
|
if (response.data.success) {
|
|
const result = response.data;
|
|
|
|
console.log(`\n✅ Beregning gennemført!`);
|
|
console.log(`\n📊 Materialer (${result.materials.length} stk):`);
|
|
|
|
result.materials.forEach((m, idx) => {
|
|
console.log(` ${idx + 1}. ${m.name}`);
|
|
console.log(` Antal: ${m.quantity}`);
|
|
console.log(` Pris: ${m.price.toFixed(2)} kr (inkl. 20% avance)`);
|
|
console.log(` Formel: ${m.formula_used}`);
|
|
console.log(` Total: ${(m.quantity * m.price).toFixed(2)} kr\n`);
|
|
});
|
|
|
|
console.log(`\n⏱️ Arbejde:`);
|
|
console.log(` Timer: ${result.labor.hours.toFixed(2)}`);
|
|
console.log(` Timepris: ${result.labor.hourly_rate} kr`);
|
|
console.log(` Arbejdsløn: ${result.labor.cost.toFixed(2)} kr`);
|
|
|
|
console.log(`\n💰 Totaler:`);
|
|
console.log(` Materialer: ${result.totals.material_cost.toFixed(2)} kr`);
|
|
console.log(` Arbejde: ${result.totals.labor_cost.toFixed(2)} kr`);
|
|
console.log(` ────────────────────────────────`);
|
|
console.log(` TOTAL: ${result.totals.total_cost.toFixed(2)} kr`);
|
|
} else {
|
|
console.log(`❌ Fejl: ${response.data.error}`);
|
|
}
|
|
} catch (error) {
|
|
console.log(`❌ Kunne ikke beregne pakke ${packageId}:`, error.response?.data?.error || error.message);
|
|
}
|
|
}
|
|
|
|
console.log(`\n${'='.repeat(60)}`);
|
|
console.log('✅ Test gennemført!');
|
|
console.log('='.repeat(60));
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ Test fejlede:', error.message);
|
|
}
|
|
}
|
|
|
|
// Kør test
|
|
testPackageCalculation();
|