v1.36: Mieterverwaltung (Mieter 1:1 pro Wohnung, Kaution/Vertrag/Dokumente) + v1.37: KI-Assistent (N8N + Kimi, 6 Portal-Tools)
This commit is contained in:
@@ -66,19 +66,27 @@ async function abrechnungsDaten(pool, unitId, jahr) {
|
||||
}
|
||||
|
||||
const summe = [...jeArt.values()].reduce((s, p) => s + p.betrag, 0)
|
||||
const vorauszahlung = (Number(einheit.warm_rent) - Number(einheit.cold_rent)) * 12
|
||||
// Vorauszahlung aus dem Mieterobjekt (seit v1.36, vorher am Wohnungsobjekt)
|
||||
const { rows: mieterRows } = await pool.query(
|
||||
'SELECT name, vorname, kaltmiete, warmmiete FROM mieter WHERE unit_id = $1', [einheit.id],
|
||||
)
|
||||
const nkVorauszahlung = mieterRows.length
|
||||
? Number(mieterRows[0].warmmiete) - Number(mieterRows[0].kaltmiete)
|
||||
: 0
|
||||
const mieterName = mieterRows.length ? `${mieterRows[0].vorname} ${mieterRows[0].name}`.trim() : ''
|
||||
const vorauszahlung = nkVorauszahlung * 12
|
||||
const differenz = summe - vorauszahlung
|
||||
|
||||
const { rows: zaehler } = await pool.query(
|
||||
`SELECT nummer, art, stand, stand_am FROM meters WHERE unit_id = $1 ORDER BY art, nummer`,
|
||||
[einheit.id],
|
||||
)
|
||||
return { einheit, jahr, positionen: [...jeArt.values()], summe, vorauszahlung, differenz, zaehler }
|
||||
return { einheit, jahr, positionen: [...jeArt.values()], summe, vorauszahlung, differenz, zaehler, nkVorauszahlung, mieterName }
|
||||
}
|
||||
|
||||
/** Zeichnet das PDF und liefert den Dateinamen (im UPLOAD_DIR). */
|
||||
async function bauePdf(daten) {
|
||||
const { einheit, jahr, positionen, summe, vorauszahlung, differenz, zaehler } = daten
|
||||
const { einheit, jahr, positionen, summe, vorauszahlung, differenz, zaehler, nkVorauszahlung, mieterName } = daten
|
||||
const dateiName = `ab-${einheit.id}-${jahr}.pdf`
|
||||
const vollerPfad = path.join(UPLOAD_DIR, dateiName)
|
||||
|
||||
@@ -111,7 +119,7 @@ async function bauePdf(daten) {
|
||||
y += 16
|
||||
doc.text(`Objekt: ${einheit.building} · Wohnung ${einheit.number} · ${zahl(einheit.size)} m²`, 50, y)
|
||||
y += 16
|
||||
doc.text(`Mieter: ${einheit.tenant || '–'}`, 50, y)
|
||||
doc.text(`Mieter: ${mieterName || '–'}`, 50, y)
|
||||
y += 16
|
||||
doc.text(`Erstellt am ${dDatum()}`, 50, y)
|
||||
y += 26
|
||||
@@ -152,7 +160,7 @@ async function bauePdf(daten) {
|
||||
y += 17
|
||||
}
|
||||
zeile('Summe umlagefähige Kosten', eur(summe), true)
|
||||
zeile(`Nebenkostenvorauszahlung (${eur(Number(einheit.warm_rent) - Number(einheit.cold_rent))}/Monat × 12)`, '- ' + eur(vorauszahlung))
|
||||
zeile(`Nebenkostenvorauszahlung (${eur(nkVorauszahlung)}/Monat × 12)`, '- ' + eur(vorauszahlung))
|
||||
y += 4
|
||||
doc.moveTo(320, y - 4).lineTo(545, y - 4).lineWidth(0.5).strokeColor('#cbd5e1').stroke()
|
||||
const nachzahlung = differenz > 0
|
||||
|
||||
Reference in New Issue
Block a user