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

136 lines
3.0 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const Database = require('better-sqlite3');
const auth = require('../middleware/authMiddleware');
const router = express.Router();
const db = new Database('plusfit.db');
/* Übersicht */
router.get('/', auth, (req, res) => {
const vertragsarten = db
.prepare('SELECT * FROM vertragsarten ORDER BY id ASC')
.all();
res.render('contracts', { vertragsarten });
});
/* Neu anlegen */
router.post('/create', auth, (req, res) => {
const { name, laufzeit, betrag, aktiv, beschreibung } = req.body;
db.prepare(`
INSERT INTO vertragsarten
(name, beschreibung, laufzeit, betrag, aktiv)
VALUES (?, ?, ?, ?, ?)
`).run(
name,
beschreibung,
laufzeit,
betrag,
aktiv ? 1 : 0
);
res.redirect('/contracts');
});
// Vertragsart aktiv / inaktiv setzen
router.post('/toggle/:id', auth, (req, res) => {
const { id } = req.params;
db.prepare(`
UPDATE vertragsarten
SET aktiv = CASE
WHEN aktiv = 1 THEN 0
ELSE 1
END
WHERE id = ?
`).run(id);
res.redirect('/contracts');
});
// Vertragsart deaktivieren + User migrieren
router.post('/deactivate/:id', auth, (req, res) => {
const oldId = req.params.id;
const { newContractId } = req.body;
if (!newContractId) {
return res.status(400).send('Neue Vertragsart fehlt');
}
const tx = db.transaction(() => {
// 1⃣ Alle User auf neue Vertragsart umstellen
db.prepare(`
UPDATE users
SET vertragsvariante = ?
WHERE vertragsvariante = ?
`).run(newContractId, oldId);
// 2⃣ Alte Vertragsart deaktivieren
db.prepare(`
UPDATE vertragsarten
SET aktiv = 0
WHERE id = ?
`).run(oldId);
});
tx();
res.redirect('/contracts');
});
// Öffentliche Vertragsauswahl für ALLE Besucher
router.get('/select', (req, res) => {
const vertragsarten = db.prepare(`
SELECT *
FROM vertragsarten
WHERE aktiv = 1
ORDER BY betrag ASC
`).all();
res.render('contractsSelect', { vertragsarten });
});
const PDFDocument = require('pdfkit');
router.get('/pdf/:id', (req, res) => {
const v = db.prepare(`
SELECT *
FROM vertragsarten
WHERE id = ? AND aktiv = 1
`).get(req.params.id);
if (!v) {
return res.status(404).send('Vertrag nicht gefunden');
}
const doc = new PDFDocument();
res.setHeader('Content-Type', 'application/pdf');
res.setHeader(
'Content-Disposition',
`inline; filename=vertrag_${v.name}.pdf`
);
doc.pipe(res);
doc.fontSize(20).text(`Vertrag: ${v.name}`, { align: 'center' });
doc.moveDown();
doc.fontSize(12)
.text(`Laufzeit: ${v.laufzeit} Monate`)
.text(`Betrag: ${v.betrag.toFixed(2)} € / Monat`)
.moveDown();
doc.text(v.beschreibung || 'Keine weitere Beschreibung.');
doc.end();
});
module.exports = router;