From 4e986a8a34a613170d95e9505d1199c3a0235175 Mon Sep 17 00:00:00 2001 From: Cay Date: Sat, 28 Feb 2026 10:25:39 +0000 Subject: [PATCH] Restore contracts.js from commit 5830534 --- routes/contracts.js | 446 +++++++++++++------------------------------- 1 file changed, 128 insertions(+), 318 deletions(-) diff --git a/routes/contracts.js b/routes/contracts.js index 23eed58..8ec6504 100644 --- a/routes/contracts.js +++ b/routes/contracts.js @@ -1,325 +1,135 @@ -<%- include('partials/header') %> +const express = require('express'); +const Database = require('better-sqlite3'); +const auth = require('../middleware/authMiddleware'); - - -
- -<% if (typeof error !== 'undefined') { %> -
- ⚠️ <%= error %> -
-<% } %> - -

Mitglied werden

- -
-
-
-
- -
- Daten - Bank - Prüfen -
- -
- - -
- -

Mitgliedsdaten

- - - - - - - - - -
Adresse
- - - - - - - - - -
- - -
- -

Bankdaten

- - - - - - -
- - -
- -
- - - -
- -
- - -
- -

Zusammenfassung

- -
-
-
- -
Vertrag
- - - -
Rechtliches
- -
- - -
- -
- - -
- -
- - - -
- -
- -
-
- - + db.prepare(` + INSERT INTO vertragsarten + (name, beschreibung, laufzeit, betrag, aktiv) + VALUES (?, ?, ?, ?, ?) +`).run( + name, + beschreibung, + laufzeit, + betrag, + aktiv ? 1 : 0 +); -<%- include('partials/footer') %>
\ No newline at end of file + + 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;