Files
buchhaltung/import_nebenkosten_complete.js
2026-04-26 07:51:39 +02:00

241 lines
6.5 KiB
JavaScript

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);
});