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;