Initial commit - Stand 26.04.2026
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user