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 FROM invoices i
JOIN memberships m ON i.membership_id = m.id JOIN memberships m ON i.membership_id = m.id
LEFT JOIN tariffs t ON m.tariff_id = t.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 ORDER BY m.last_name ASC
`, [period]); `, [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='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='open' THEN amount ELSE 0 END) as open_amount,
SUM(CASE WHEN status='paid' THEN amount ELSE 0 END) as paid_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]); `, [period]);
// Vorschau: Mitglieder die noch keine Rechnung für diese Periode haben // 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_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.contract_end >= STR_TO_DATE(CONCAT(?, '-01'), '%Y-%m-%d')
AND m.id NOT IN ( 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]); `, [period, period, period]);
@ -111,7 +111,7 @@ router.post('/run', requireAdmin, async (req, res) => {
try { try {
// Bereits existierende Rechnungen für diesen Monat prüfen // Bereits existierende Rechnungen für diesen Monat prüfen
const [existing] = await db.query( 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) { if (existing[0].c > 0) {
return res.redirect(`/admin/billing?period=${period}&error=Abrechnungslauf+für+${period}+wurde+bereits+durchgeführt`); 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(); const period = req.body.period || currentPeriod();
try { try {
const [result] = await db.query( 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] [period]
); );
res.redirect(`/admin/billing?period=${period}&success=${result.affectedRows}+Rechnungen+als+bezahlt+markiert`); 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 SELECT i.*, m.first_name, m.last_name, m.email
FROM invoices i FROM invoices i
JOIN memberships m ON i.membership_id = m.id 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 ORDER BY m.last_name ASC
`, [period]); `, [period]);