const express = require('express'); const db = require('../db'); const asyncHandler = require('../middleware/asyncHandler'); const router = express.Router(); router.get('/', asyncHandler(async (req, res) => { const rows = await db.all( `SELECT a.*, v.nummer AS default_vo_nummer, v.bezeichnung AS default_vo_bezeichnung FROM anbieter a LEFT JOIN vos v ON a.default_vo_id = v.id ORDER BY a.name` ); res.json(rows); })); // Set or clear the default VO for a provider. Pass vo_id=null to clear. router.put('/:id/default-vo', asyncHandler(async (req, res) => { const { id } = req.params; const { vo_id } = req.body || {}; const anbieter = await db.get('SELECT id FROM anbieter WHERE id = ?', [id]); if (!anbieter) return res.status(404).json({ error: 'Anbieter nicht gefunden' }); if (vo_id) { const vo = await db.get('SELECT anbieter_id FROM vos WHERE id = ?', [vo_id]); if (!vo) return res.status(400).json({ error: 'VO nicht gefunden' }); if (vo.anbieter_id !== Number(id)) { return res.status(400).json({ error: 'VO gehört nicht zu diesem Anbieter' }); } } await db.run('UPDATE anbieter SET default_vo_id = ? WHERE id = ?', [vo_id || null, id]); res.json({ message: 'Standard-VO aktualisiert', default_vo_id: vo_id || null }); })); router.post('/', asyncHandler(async (req, res) => { const { name } = req.body || {}; if (!name || !name.trim()) { return res.status(400).json({ error: 'Name ist erforderlich' }); } try { const result = await db.run('INSERT INTO anbieter (name) VALUES (?)', [name.trim()]); res.json({ id: result.lastID, name: name.trim() }); } catch (err) { if (/UNIQUE/.test(err.message)) { return res.status(400).json({ error: 'Anbieter mit diesem Namen existiert bereits' }); } throw err; } })); router.delete('/:id', asyncHandler(async (req, res) => { const { id } = req.params; const [tariffeRow, schaltungenRow] = await Promise.all([ db.get('SELECT COUNT(*) AS n FROM tarife WHERE anbieter_id = ?', [id]), db.get('SELECT COUNT(*) AS n FROM schaltungen WHERE anbieter_id = ?', [id]), ]); if (tariffeRow.n + schaltungenRow.n > 0) { const reasons = []; if (tariffeRow.n > 0) reasons.push(`${tariffeRow.n} Tarif(e)`); if (schaltungenRow.n > 0) reasons.push(`${schaltungenRow.n} Schaltung(en)`); return res.status(400).json({ error: `Anbieter kann nicht gelöscht werden: ${reasons.join(', ')} verwenden diesen Anbieter`, }); } const deletedRules = await db.run('DELETE FROM anbieter_provisionsregeln WHERE anbieter_id = ?', [id]); const result = await db.run('DELETE FROM anbieter WHERE id = ?', [id]); if (result.changes === 0) { return res.status(404).json({ error: 'Anbieter nicht gefunden' }); } let message = 'Anbieter erfolgreich gelöscht'; if (deletedRules.changes > 0) { message += ` (${deletedRules.changes} Provisionsregel(n) wurden mit gelöscht)`; } res.json({ message }); })); // Global commission rules for this provider router.get('/:id/provisionsregeln', asyncHandler(async (req, res) => { const { id } = req.params; const rows = await db.all( `SELECT apr.*, a.name AS anbieter_name FROM anbieter_provisionsregeln apr JOIN anbieter a ON apr.anbieter_id = a.id WHERE apr.anbieter_id = ? AND apr.aktiv = 1 ORDER BY apr.gueltig_ab DESC`, [id] ); res.json(rows); })); // Mitarbeiter-Prozentsätze for this provider router.get('/:id/mitarbeiter-prozentsaetze', asyncHandler(async (req, res) => { const { id } = req.params; const rows = await db.all( 'SELECT * FROM mitarbeiter_prozentsaetze WHERE anbieter_id = ? ORDER BY gueltig_ab DESC', [id] ); res.json(rows); })); module.exports = router;