Vertragsverwaltung_Plusfit24/routes/sepa.js
2026-02-10 15:29:29 +00:00

68 lines
1.8 KiB
JavaScript

const express = require('express');
const PDFDocument = require('pdfkit');
const Database = require('better-sqlite3');
const { decrypt } = require('../utils/crypto');
const auth = require('../middleware/authMiddleware');
const router = express.Router();
const db = new Database('plusfit.db');
router.get('/mandat/:id', auth, (req, res) => {
const u = db.prepare(`
SELECT *
FROM users
WHERE id = ?
AND status = 'aktiv'
AND gesperrt = 0
`).get(req.params.id);
if (!u) {
return res
.status(404)
.send('SEPA-Mandat nicht verfügbar (Vertrag nicht aktiv).');
}
if (!u.iban || !u.bic || !u.mandatsreferenz) {
return res
.status(400)
.send('SEPA-Daten unvollständig.');
}
const iban = decrypt(u.iban);
const bic = decrypt(u.bic);
const doc = new PDFDocument({ margin: 50 });
res.setHeader('Content-Type', 'application/pdf');
res.setHeader(
'Content-Disposition',
`inline; filename=sepa_mandat_${u.vertragsnummer}.pdf`
);
doc.pipe(res);
doc.fontSize(18).text('SEPA-Lastschriftmandat', { align: 'center' });
doc.moveDown(2);
doc.fontSize(12).text(`Name: ${u.vorname} ${u.nachname}`);
doc.text(`Vertragsnummer: ${u.vertragsnummer}`);
doc.text(`Adresse: ${u.strasse} ${u.hausnummer}, ${u.plz} ${u.ort}`);
doc.moveDown();
doc.text(`IBAN: ${iban}`);
doc.text(`BIC: ${bic}`);
doc.text(`Mandatsreferenz: ${u.mandatsreferenz}`);
doc.moveDown(2);
doc.text('Ich ermächtige Plusfit, Zahlungen von meinem Konto mittels Lastschrift einzuziehen.');
doc.moveDown(2);
doc.text('Unterschrift Kunde: ________________________________');
doc.text('Datum: ________________________________');
doc.end();
});
module.exports = router;