const { Pool } = require('pg'); // Verbindung zur Datenbank const pool = new Pool({ host: '192.168.0.141', port: 5432, database: 'buchhaltung', user: 'postgres', password: 'postgres' }); // Alle Nebenkosten-Abrechnungen aus Excel extrahiert const abrechnungen = [ // Körger 2020 (Zingelstr. 14, nur 31 Tage - umgezogen) { jahr: 2020, wohnung: 'Zingelstr. 14', mieter: 'Kevin Körger', kaltmiete: null, versicherung: 16.73, // Geb. Vers. heizkosten: null, // Noch keine Heizung 2020 wasser: 2.86, // Niederschlagwasser muell: 7.23, // Müllabfuhr sonstiges: 1.52, // Grundsteuer nebenkosten: 28.34 // Summe "Ihr Anteil" }, // Krohn/Welling 2020 (Zingelstr. 14, nur 31 Tage - umgezogen) { jahr: 2020, wohnung: 'Zingelstr. 14', mieter: 'Johanna Krohn / Tobias Welling', kaltmiete: null, versicherung: 16.73, heizkosten: null, wasser: 6.67, muell: 7.23, sonstiges: 3.56, nebenkosten: 34.19 }, // Körger 2021 (Zingelstr. 14, ganzes Jahr) { jahr: 2021, wohnung: 'Zingelstr. 14', mieter: 'Kevin Körger', kaltmiete: null, versicherung: 214.35, heizkosten: 75.29, // Wartung Heizung wasser: 33.68, muell: 130.64, sonstiges: 17.95, nebenkosten: 471.91 }, // Krohn/Welling 2021 (Zingelstr. 14, ganzes Jahr) { jahr: 2021, wohnung: 'Zingelstr. 14', mieter: 'Johanna Krohn / Tobias Welling', kaltmiete: null, versicherung: 203.70, heizkosten: 75.29, wasser: 78.59, muell: 130.64, sonstiges: 41.89, nebenkosten: 530.10 }, // Körger 2022 (Ahornweg 6, ganzes Jahr) { jahr: 2022, wohnung: 'Ahornweg 6', mieter: 'Kevin Körger', kaltmiete: null, versicherung: 230.00, heizkosten: 52.73, wasser: 33.68, muell: 153.36, sonstiges: 17.95, nebenkosten: 487.72 }, // Krohn/Welling 2022 (Ahornweg 6, ganzes Jahr) { jahr: 2022, wohnung: 'Ahornweg 6', mieter: 'Johanna Krohn / Tobias Welling', kaltmiete: null, versicherung: 230.00, heizkosten: 52.73, wasser: 78.59, muell: 153.36, sonstiges: 41.89, nebenkosten: 556.56 }, // Körger 2023 (Ahornweg 6, nur 120 Tage) { jahr: 2023, wohnung: 'Ahornweg 6', mieter: 'Kevin Körger', kaltmiete: null, versicherung: 63.47, heizkosten: 17.34, wasser: 11.07, muell: 50.42, sonstiges: 5.90, nebenkosten: 148.20 }, // Krohn/Welling 2023 (Ahornweg 6, nur 120 Tage) { jahr: 2023, wohnung: 'Ahornweg 6', mieter: 'Johanna Krohn / Tobias Welling', kaltmiete: null, versicherung: 63.47, heizkosten: 17.34, wasser: 25.84, muell: 50.42, sonstiges: 13.77, nebenkosten: 170.83 }, // Brandt 2023 (Zingelstr. 14, Korrektur - 245 Tage) { jahr: 2023, wohnung: 'Zingelstr. 14', mieter: 'Yvonne Brandt', kaltmiete: null, versicherung: 129.58, heizkosten: 102.53, wasser: 75.36, muell: 153.85, sonstiges: 40.17, nebenkosten: 501.48 }, // Brandt 2024 (Zingelstr. 14, ganzes Jahr) { jahr: 2024, wohnung: 'Zingelstr. 14', mieter: 'Yvonne Brandt', kaltmiete: null, versicherung: 115.41, heizkosten: 175.76, wasser: 112.27, muell: 212.28, sonstiges: 59.84, nebenkosten: 675.56 } ]; async function importAll() { const client = await pool.connect(); const results = []; try { console.log('=== NEBENKOSTEN IMPORT - ALLE ABRECHNUNGEN ===\n'); // Prüfe vorhandene Einträge const checkResult = await client.query('SELECT COUNT(*) FROM nebenkosten'); console.log(`Vorhandene Nebenkosten-Einträge: ${checkResult.rows[0].count}\n`); const query = ` INSERT INTO nebenkosten (jahr, wohnung, mieter, kaltmiete, nebenkosten, heizkosten, wasser, muell, versicherung, sonstiges) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) RETURNING * `; for (const data of abrechnungen) { const values = [ data.jahr, data.wohnung, data.mieter, data.kaltmiete, data.nebenkosten, data.heizkosten, data.wasser, data.muell, data.versicherung, data.sonstiges ]; try { const result = await client.query(query, values); results.push(result.rows[0]); console.log(`✓ ${data.mieter} ${data.jahr} (${data.wohnung}): ${data.nebenkosten} €`); } catch (err) { console.error(`✗ Fehler bei ${data.mieter} ${data.jahr}:`, err.message); } } // Verifiziere alle Importe console.log('\n=== VERIFIZIERUNG ==='); const verifyResult = await client.query(` SELECT jahr, wohnung, mieter, nebenkosten, versicherung, heizkosten, wasser, muell, sonstiges FROM nebenkosten ORDER BY jahr, mieter `); console.log(`\nInsgesamt ${verifyResult.rows.length} Einträge in Datenbank:\n`); let jahrGruppe = null; for (const row of verifyResult.rows) { if (row.jahr !== jahrGruppe) { jahrGruppe = row.jahr; console.log(`\n--- ${jahrGruppe} ---`); } console.log(` ${row.mieter.split('/')[0].trim()} (${row.wohnung}):`); console.log(` Nebenkosten: ${parseFloat(row.nebenkosten).toFixed(2)} €`); console.log(` Versicherung: ${parseFloat(row.versicherung || 0).toFixed(2)} €`); console.log(` Heizkosten: ${parseFloat(row.heizkosten || 0).toFixed(2)} €`); console.log(` Wasser: ${parseFloat(row.wasser || 0).toFixed(2)} €`); console.log(` Müll: ${parseFloat(row.muell || 0).toFixed(2)} €`); console.log(` Sonstiges: ${parseFloat(row.sonstiges || 0).toFixed(2)} €`); } // Summen pro Jahr console.log('\n=== SUMMEN PRO JAHR ==='); const sumResult = await client.query(` SELECT jahr, COUNT(*) as anzahl, SUM(nebenkosten) as summe FROM nebenkosten GROUP BY jahr ORDER BY jahr `); for (const row of sumResult.rows) { console.log(` ${row.jahr}: ${row.anzahl} Abrechnungen, Summe: ${parseFloat(row.summe).toFixed(2)} €`); } console.log(`\n✅ IMPORT ABGESCHLOSSEN: ${results.length} von ${abrechnungen.length} Abrechnungen importiert`); } catch (error) { console.error('\n❌ FEHLER:', error.message); throw error; } finally { client.release(); await pool.end(); } } // Führe Import aus importAll().catch(err => { console.error('\nImport fehlgeschlagen:', err); process.exit(1); });