241 lines
6.5 KiB
JavaScript
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);
|
|
});
|