feat(admin): add reset-atemschutz option to data management tab
This commit is contained in:
@@ -290,6 +290,7 @@ router.delete('/cleanup/reset-buchhaltung-konten', authenticate, requirePermissi
|
|||||||
router.delete('/cleanup/reset-buchhaltung-bankkonten', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-buchhaltung-bankkonten'; return resetHandler(req, res); });
|
router.delete('/cleanup/reset-buchhaltung-bankkonten', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-buchhaltung-bankkonten'; return resetHandler(req, res); });
|
||||||
router.delete('/cleanup/reset-checklist-history', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-checklist-history'; return resetHandler(req, res); });
|
router.delete('/cleanup/reset-checklist-history', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-checklist-history'; return resetHandler(req, res); });
|
||||||
router.delete('/cleanup/reset-persoenliche-ausruestung', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-persoenliche-ausruestung'; return resetHandler(req, res); });
|
router.delete('/cleanup/reset-persoenliche-ausruestung', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-persoenliche-ausruestung'; return resetHandler(req, res); });
|
||||||
|
router.delete('/cleanup/reset-atemschutz', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'reset-atemschutz'; return resetHandler(req, res); });
|
||||||
router.delete('/cleanup/issues-all', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'issues-all'; return resetHandler(req, res); });
|
router.delete('/cleanup/issues-all', authenticate, requirePermission('admin:write'), (req, res) => { req.params.resetTarget = 'issues-all'; return resetHandler(req, res); });
|
||||||
|
|
||||||
router.delete(
|
router.delete(
|
||||||
@@ -334,6 +335,7 @@ const RESET_TARGETS: Record<string, (confirm: boolean) => Promise<{ count: numbe
|
|||||||
'reset-buchhaltung-konten': (c) => cleanupService.resetBuchhaltungKonten(c),
|
'reset-buchhaltung-konten': (c) => cleanupService.resetBuchhaltungKonten(c),
|
||||||
'reset-buchhaltung-bankkonten': (c) => cleanupService.resetBuchhaltungBankkonten(c),
|
'reset-buchhaltung-bankkonten': (c) => cleanupService.resetBuchhaltungBankkonten(c),
|
||||||
'reset-persoenliche-ausruestung': (c) => cleanupService.resetPersoenlicheAusruestung(c),
|
'reset-persoenliche-ausruestung': (c) => cleanupService.resetPersoenlicheAusruestung(c),
|
||||||
|
'reset-atemschutz': (c) => cleanupService.resetAtemschutz(c),
|
||||||
};
|
};
|
||||||
|
|
||||||
const resetHandler = async (req: Request, res: Response): Promise<void> => {
|
const resetHandler = async (req: Request, res: Response): Promise<void> => {
|
||||||
|
|||||||
@@ -239,6 +239,18 @@ class CleanupService {
|
|||||||
return { count, deleted: true };
|
return { count, deleted: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async resetAtemschutz(confirm: boolean): Promise<CleanupResult> {
|
||||||
|
if (!confirm) {
|
||||||
|
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM atemschutz_traeger');
|
||||||
|
return { count: rows[0].count, deleted: false };
|
||||||
|
}
|
||||||
|
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM atemschutz_traeger');
|
||||||
|
const count = rows[0].count;
|
||||||
|
await pool.query('TRUNCATE atemschutz_traeger CASCADE');
|
||||||
|
logger.info(`Cleanup: truncated atemschutz_traeger (${count} rows)`);
|
||||||
|
return { count, deleted: true };
|
||||||
|
}
|
||||||
|
|
||||||
async resetPersoenlicheAusruestung(confirm: boolean): Promise<CleanupResult> {
|
async resetPersoenlicheAusruestung(confirm: boolean): Promise<CleanupResult> {
|
||||||
if (!confirm) {
|
if (!confirm) {
|
||||||
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM persoenliche_ausruestung WHERE geloescht_am IS NULL');
|
const { rows } = await pool.query('SELECT COUNT(*)::int AS count FROM persoenliche_ausruestung WHERE geloescht_am IS NULL');
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ const TAB_CLEANUP: Record<string, CleanupSection[]> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const TAB_RESET: Record<string, ResetSection[]> = {
|
const TAB_RESET: Record<string, ResetSection[]> = {
|
||||||
|
atemschutz: [
|
||||||
|
{ key: 'reset-atemschutz', label: 'Atemschutz-Daten zuruecksetzen', description: 'Alle Atemschutz-Eintraege (G26-Untersuchungen, Leistungstests, Lehrgaenge) fuer alle Benutzer loeschen.' },
|
||||||
|
],
|
||||||
fahrzeuge: [
|
fahrzeuge: [
|
||||||
{ key: 'reset-persoenliche-ausruestung', label: 'Persoenliche Ausruestung zuruecksetzen', description: 'Alle persoenlichen Ausruestungszuweisungen loeschen. Zuordnungen in Anfragen werden zurueckgesetzt.' },
|
{ key: 'reset-persoenliche-ausruestung', label: 'Persoenliche Ausruestung zuruecksetzen', description: 'Alle persoenlichen Ausruestungszuweisungen loeschen. Zuordnungen in Anfragen werden zurueckgesetzt.' },
|
||||||
],
|
],
|
||||||
@@ -82,6 +85,7 @@ const TABS = [
|
|||||||
{ key: 'system', label: 'System' },
|
{ key: 'system', label: 'System' },
|
||||||
{ key: 'kalender', label: 'Kalender' },
|
{ key: 'kalender', label: 'Kalender' },
|
||||||
{ key: 'fahrzeuge', label: 'Fahrzeuge & Ausruestung' },
|
{ key: 'fahrzeuge', label: 'Fahrzeuge & Ausruestung' },
|
||||||
|
{ key: 'atemschutz', label: 'Atemschutz' },
|
||||||
{ key: 'bestellungen', label: 'Bestellungen' },
|
{ key: 'bestellungen', label: 'Bestellungen' },
|
||||||
{ key: 'buchhaltung', label: 'Buchhaltung' },
|
{ key: 'buchhaltung', label: 'Buchhaltung' },
|
||||||
{ key: 'checklisten', label: 'Checklisten & Issues' },
|
{ key: 'checklisten', label: 'Checklisten & Issues' },
|
||||||
|
|||||||
Reference in New Issue
Block a user