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

147 lines
4.5 KiB
JavaScript

const { Pool } = require('pg');
// Datenbankverbindung
const pool = new Pool({
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || 'buchhaltung',
user: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || 'postgres',
});
// Extrahierte Daten aus Excel
const nebenkostenData = [
// KrohnWelling - Zingelstr. 14
{
jahr: 2020,
wohnung: 'Zingelstr. 14',
mieter: 'Johanna Krohn / Tobias Welling',
versicherung: 16.73,
sonstiges: 3.56 + 6.67, // Grundsteuer + Niederschlagwasser
muell: 7.23,
heizkosten: null,
wasser: null,
nebenkosten: 16.73 + 3.56 + 6.67 + 7.23 // Summe
},
{
jahr: 2021,
wohnung: 'Zingelstr. 14',
mieter: 'Johanna Krohn / Tobias Welling',
versicherung: 203.70,
sonstiges: 41.89 + 78.59, // Grundsteuer + Niederschlagwasser
heizkosten: 75.29,
muell: 130.63,
wasser: null,
nebenkosten: 203.70 + 41.89 + 78.59 + 75.29 + 130.63
},
// Brandt - Zingelstr. 14
{
jahr: 2023,
wohnung: 'Zingelstr. 14',
mieter: 'Yvonne Brandt',
versicherung: 129.58,
sonstiges: 40.17 + 75.36, // Grundsteuer + Niederschlagwasser
heizkosten: 102.53,
muell: 153.85,
wasser: null,
nebenkosten: 129.58 + 40.17 + 75.36 + 102.53 + 153.85
},
{
jahr: 2024,
wohnung: 'Zingelstr. 14',
mieter: 'Yvonne Brandt',
versicherung: 115.41,
sonstiges: 59.84 + 112.27, // Grundsteuer + Niederschlagwasser
heizkosten: 175.76,
muell: 212.28,
wasser: null,
nebenkosten: 115.41 + 59.84 + 112.27 + 175.76 + 212.28
}
];
async function importNebenkosten() {
const client = await pool.connect();
try {
console.log('=== NEBENKOSTEN IMPORT ZINGELSTR. 14 ===\n');
// Prüfe vorhandene Einträge
const checkResult = await client.query('SELECT COUNT(*) FROM nebenkosten WHERE wohnung = $1', ['Zingelstr. 14']);
const existingCount = parseInt(checkResult.rows[0].count);
console.log(`Vorhandene Einträge für Zingelstr. 14: ${existingCount}`);
if (existingCount > 0) {
console.log('\nLösche vorhandene Einträge...');
await client.query('DELETE FROM nebenkosten WHERE wohnung = $1', ['Zingelstr. 14']);
console.log('✓ Alte Einträge gelöscht');
}
console.log('\n=== IMPORT STARTET ===\n');
const insertedRecords = [];
for (const data of nebenkostenData) {
const query = `
INSERT INTO nebenkosten
(jahr, wohnung, mieter, nebenkosten, heizkosten, wasser, muell, versicherung, sonstiges)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
RETURNING *
`;
const values = [
data.jahr,
data.wohnung,
data.mieter,
data.nebenkosten,
data.heizkosten,
data.wasser,
data.muell,
data.versicherung,
data.sonstiges
];
const result = await client.query(query, values);
insertedRecords.push(result.rows[0]);
console.log(`${data.jahr}: ${data.mieter} - ${data.nebenkosten.toFixed(2)}`);
}
console.log('\n=== IMPORT ABGESCHLOSSEN ===');
console.log(`\n${insertedRecords.length} Datensätze importiert:`);
for (const record of insertedRecords) {
console.log(`\n Jahr: ${record.jahr}`);
console.log(` Mieter: ${record.mieter}`);
console.log(` Wohnung: ${record.wohnung}`);
console.log(` Gesamtkosten: ${record.nebenkosten}`);
console.log(` - Versicherung: ${record.versicherung}`);
console.log(` - Heizkosten: ${record.heizkosten || '-'}`);
console.log(` - Wasser: ${record.wasser || '-'}`);
console.log(` - Müll: ${record.muell}`);
console.log(` - Sonstiges: ${record.sonstiges}`);
}
// Verifiziere Import
const verifyResult = await client.query('SELECT * FROM nebenkosten WHERE wohnung = $1 ORDER BY jahr', ['Zingelstr. 14']);
console.log(`\n=== VERIFIZIERUNG ===`);
console.log(`In Datenbank gefunden: ${verifyResult.rows.length} Einträge`);
for (const row of verifyResult.rows) {
console.log(` - ${row.jahr}: ${row.mieter} (${row.nebenkosten} €)`);
}
} catch (error) {
console.error('❌ Fehler beim Import:', error.message);
throw error;
} finally {
client.release();
await pool.end();
}
}
// Führe Import aus
importNebenkosten().catch(err => {
console.error('Import fehlgeschlagen:', err);
process.exit(1);
});