Dieser Commit ist enthalten in:
Claude Project Manager
2025-10-16 09:05:11 +02:00
Ursprung 4d509d255f
Commit 4b5fec1903
2 geänderte Dateien mit 51 neuen und 11 gelöschten Zeilen

Datei anzeigen

@ -11,6 +11,7 @@ import { FieldEncryption } from '../services/encryption'
import { emailService } from '../services/emailService'
import { logger } from '../utils/logger'
import { createDepartmentResolver } from '../utils/department'
import { decodeHtmlEntities } from '../utils/html'
const router = Router()
@ -205,6 +206,23 @@ router.get('/', authenticate, requirePermission('employees:read'), async (req: A
primaryUnitId: emp.primary_unit_id,
})
// Prefer freshly stored department path if it differs from resolver (e.g., after profile update but before assignment sync)
const storedDeptRaw = (decodeHtmlEntities(emp.department) ?? emp.department ?? '').trim()
const splitStored = (() => {
const sep = ' -> '
const idx = storedDeptRaw.lastIndexOf(sep)
if (idx === -1) return { path: storedDeptRaw, task: undefined as string | undefined }
return { path: storedDeptRaw.slice(0, idx) || storedDeptRaw, task: storedDeptRaw.slice(idx + sep.length) || undefined }
})()
const resolvedLabel = (departmentInfo.label || '').trim()
const last = (s: string) => s.split(' -> ').map(p => p.trim()).filter(Boolean).pop() || ''
const storedLast = last(splitStored.path)
const resolvedLast = last(resolvedLabel)
const finalLabel = (storedLast && resolvedLast && storedLast !== resolvedLast)
? splitStored.path
: (resolvedLabel || splitStored.path)
const finalTasks = splitStored.task || departmentInfo.tasks
const employee: Employee = {
id: emp.id,
firstName: emp.first_name,
@ -213,9 +231,9 @@ router.get('/', authenticate, requirePermission('employees:read'), async (req: A
photo: emp.photo,
position: emp.position,
officialTitle: emp.official_title || undefined,
department: departmentInfo.label || emp.department,
department: finalLabel,
departmentDescription: departmentInfo.description,
departmentTasks: departmentInfo.tasks,
departmentTasks: finalTasks,
email: emp.email,
phone: emp.phone,
mobile: emp.mobile,
@ -298,6 +316,23 @@ router.get('/public', authenticate, async (req: AuthRequest, res, next) => {
primaryUnitId: emp.primary_unit_id,
})
// Prefer freshly stored department path if it differs from resolver (e.g., after profile update but before assignment sync)
const storedDeptRaw = (decodeHtmlEntities(emp.department) ?? emp.department ?? '').trim()
const splitStored = (() => {
const sep = ' -> '
const idx = storedDeptRaw.lastIndexOf(sep)
if (idx === -1) return { path: storedDeptRaw, task: undefined as string | undefined }
return { path: storedDeptRaw.slice(0, idx) || storedDeptRaw, task: storedDeptRaw.slice(idx + sep.length) || undefined }
})()
const resolvedLabel = (departmentInfo.label || '').trim()
const last = (s: string) => s.split(' -> ').map(p => p.trim()).filter(Boolean).pop() || ''
const storedLast = last(splitStored.path)
const resolvedLast = last(resolvedLabel)
const finalLabel = (storedLast && resolvedLast && storedLast !== resolvedLast)
? splitStored.path
: (resolvedLabel || splitStored.path)
const finalTasks = splitStored.task || departmentInfo.tasks
const employee: Employee = {
id: emp.id,
firstName: emp.first_name,
@ -306,9 +341,9 @@ router.get('/public', authenticate, async (req: AuthRequest, res, next) => {
photo: emp.photo,
position: emp.position,
officialTitle: emp.official_title || undefined,
department: departmentInfo.label || emp.department,
department: finalLabel,
departmentDescription: departmentInfo.description,
departmentTasks: departmentInfo.tasks,
departmentTasks: finalTasks,
email: emp.email,
phone: emp.phone,
mobile: emp.mobile,