This commit is contained in:
cay 2026-03-27 13:04:15 +00:00
parent 19287836a4
commit cf732a1559

View File

@ -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]);