diff --git a/routes/billing.js b/routes/billing.js index 97f7fc6..781c7d8 100644 --- a/routes/billing.js +++ b/routes/billing.js @@ -57,7 +57,7 @@ router.get('/', requireAdmin, async (req, res) => { FROM invoices i JOIN memberships m ON i.membership_id = m.id LEFT JOIN tariffs t ON m.tariff_id = t.id - WHERE i.period = ? + WHERE CONVERT(i.period USING utf8mb4) = CONVERT(? USING utf8mb4) ORDER BY m.last_name ASC `, [period]); @@ -69,7 +69,7 @@ router.get('/', requireAdmin, async (req, res) => { SUM(CASE WHEN status='paid' THEN 1 ELSE 0 END) as paid_count, SUM(CASE WHEN status='open' THEN amount ELSE 0 END) as open_amount, SUM(CASE WHEN status='paid' THEN amount ELSE 0 END) as paid_amount - FROM invoices WHERE period = ? + FROM invoices WHERE CONVERT(period USING utf8mb4) = CONVERT(? USING utf8mb4) `, [period]); // Vorschau: Mitglieder die noch keine Rechnung für diese Periode haben @@ -81,7 +81,7 @@ router.get('/', requireAdmin, async (req, res) => { AND m.contract_start <= LAST_DAY(STR_TO_DATE(CONCAT(?, '-01'), '%Y-%m-%d')) AND m.contract_end >= STR_TO_DATE(CONCAT(?, '-01'), '%Y-%m-%d') AND m.id NOT IN ( - SELECT membership_id FROM invoices WHERE period = ? + SELECT membership_id FROM invoices WHERE CONVERT(period USING utf8mb4) = CONVERT(? USING utf8mb4) ) `, [period, period, period]); @@ -111,7 +111,7 @@ router.post('/run', requireAdmin, async (req, res) => { try { // Bereits existierende Rechnungen für diesen Monat prüfen const [existing] = await db.query( - 'SELECT COUNT(*) as c FROM invoices WHERE period = ?', [period] + 'SELECT COUNT(*) as c FROM invoices WHERE CONVERT(period USING utf8mb4) = CONVERT(? USING utf8mb4)', [period] ); if (existing[0].c > 0) { return res.redirect(`/admin/billing?period=${period}&error=Abrechnungslauf+für+${period}+wurde+bereits+durchgeführt`); @@ -193,7 +193,7 @@ router.post('/mark-all-paid', requireAdmin, async (req, res) => { const period = req.body.period || currentPeriod(); try { const [result] = await db.query( - "UPDATE invoices SET status='paid', paid_at=NOW() WHERE period=? AND status='open'", + "UPDATE invoices SET status='paid', paid_at=NOW() WHERE CONVERT(period USING utf8mb4) = CONVERT(? USING utf8mb4) AND status='open'", [period] ); res.redirect(`/admin/billing?period=${period}&success=${result.affectedRows}+Rechnungen+als+bezahlt+markiert`); @@ -212,7 +212,7 @@ router.get('/export/csv', requireAdmin, async (req, res) => { SELECT i.*, m.first_name, m.last_name, m.email FROM invoices i JOIN memberships m ON i.membership_id = m.id - WHERE i.period = ? AND i.status = 'open' AND i.amount > 0 + WHERE CONVERT(i.period USING utf8mb4) = CONVERT(? USING utf8mb4) AND i.status = 'open' AND i.amount > 0 ORDER BY m.last_name ASC `, [period]);