rework issue system

This commit is contained in:
Matthias Hochmeister
2026-03-24 15:30:24 +01:00
parent 65994286b2
commit d8d2730547
9 changed files with 316 additions and 186 deletions

View File

@@ -0,0 +1,20 @@
-- Migration 055: Ensure wissen:view and bestellungen:view are seeded for all dashboard groups
-- Re-seeds permissions that may be missing due to migration ordering or cascade deletes.
-- Uses ON CONFLICT DO NOTHING — safe to run multiple times.
DO $$
DECLARE
grp TEXT;
BEGIN
FOR grp IN
SELECT DISTINCT authentik_group FROM group_permissions WHERE authentik_group LIKE 'dashboard_%'
LOOP
INSERT INTO group_permissions (authentik_group, permission_id)
VALUES (grp, 'wissen:view'), (grp, 'wissen:widget_recent'), (grp, 'wissen:widget_search')
ON CONFLICT DO NOTHING;
INSERT INTO group_permissions (authentik_group, permission_id)
VALUES (grp, 'bestellungen:view')
ON CONFLICT DO NOTHING;
END LOOP;
END $$;

View File

@@ -117,7 +117,7 @@ async function getOrders(filters?: { status?: string; lieferant_id?: number; bes
const result = await pool.query(
`SELECT b.*,
l.name AS lieferant_name,
u.display_name AS besteller_name,
COALESCE(u.name, u.preferred_username, u.email) AS besteller_name,
COALESCE(pos.total_cost, 0) AS total_cost,
COALESCE(pos.items_count, 0) AS items_count
FROM bestellungen b
@@ -145,7 +145,7 @@ async function getOrderById(id: number) {
const orderResult = await pool.query(
`SELECT b.*,
l.name AS lieferant_name,
u.display_name AS besteller_name
COALESCE(u.name, u.preferred_username, u.email) AS besteller_name
FROM bestellungen b
LEFT JOIN lieferanten l ON l.id = b.lieferant_id
LEFT JOIN users u ON u.id = b.erstellt_von
@@ -158,7 +158,7 @@ async function getOrderById(id: number) {
pool.query(`SELECT * FROM bestellpositionen WHERE bestellung_id = $1 ORDER BY id`, [id]),
pool.query(`SELECT * FROM bestellung_dateien WHERE bestellung_id = $1 ORDER BY hochgeladen_am DESC`, [id]),
pool.query(`SELECT * FROM bestellung_erinnerungen WHERE bestellung_id = $1 ORDER BY faellig_am`, [id]),
pool.query(`SELECT h.*, u.display_name AS benutzer_name FROM bestellung_historie h LEFT JOIN users u ON u.id = h.erstellt_von WHERE h.bestellung_id = $1 ORDER BY h.erstellt_am DESC`, [id]),
pool.query(`SELECT h.*, COALESCE(u.name, u.preferred_username, u.email) AS benutzer_name FROM bestellung_historie h LEFT JOIN users u ON u.id = h.erstellt_von WHERE h.bestellung_id = $1 ORDER BY h.erstellt_am DESC`, [id]),
]);
return {
@@ -579,7 +579,7 @@ async function logAction(bestellungId: number, aktion: string, details: string,
async function getHistory(bestellungId: number) {
try {
const result = await pool.query(
`SELECT h.*, u.display_name AS benutzer_name
`SELECT h.*, COALESCE(u.name, u.preferred_username, u.email) AS benutzer_name
FROM bestellung_historie h
LEFT JOIN users u ON u.id = h.erstellt_von
WHERE h.bestellung_id = $1

View File

@@ -525,7 +525,7 @@ class EquipmentService {
async getStatusHistory(equipmentId: string) {
try {
const result = await pool.query(
`SELECT h.*, u.display_name AS geaendert_von_name
`SELECT h.*, COALESCE(u.name, u.preferred_username, u.email) AS geaendert_von_name
FROM ausruestung_status_historie h
LEFT JOIN users u ON u.id = h.geaendert_von
WHERE h.ausruestung_id = $1

View File

@@ -653,7 +653,7 @@ class VehicleService {
async getStatusHistory(fahrzeugId: string) {
try {
const result = await pool.query(
`SELECT h.*, u.display_name AS geaendert_von_name
`SELECT h.*, COALESCE(u.name, u.preferred_username, u.email) AS geaendert_von_name
FROM fahrzeug_status_historie h
LEFT JOIN users u ON u.id = h.geaendert_von
WHERE h.fahrzeug_id = $1