rework internal order system
This commit is contained in:
@@ -208,6 +208,20 @@ class AusruestungsanfrageController {
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Users (for "order on behalf of" autocomplete)
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
async getAllUsers(_req: Request, res: Response): Promise<void> {
|
||||
try {
|
||||
const users = await ausruestungsanfrageService.getAllUsers();
|
||||
res.status(200).json({ success: true, data: users });
|
||||
} catch (error) {
|
||||
logger.error('AusruestungsanfrageController.getAllUsers error', { error });
|
||||
res.status(500).json({ success: false, message: 'Benutzer konnten nicht geladen werden' });
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Requests
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -251,11 +265,12 @@ class AusruestungsanfrageController {
|
||||
|
||||
async createRequest(req: Request, res: Response): Promise<void> {
|
||||
try {
|
||||
const { items, notizen, bezeichnung, fuer_benutzer_id } = req.body as {
|
||||
const { items, notizen, bezeichnung, fuer_benutzer_id, fuer_benutzer_name } = req.body as {
|
||||
items?: { artikel_id?: number; bezeichnung: string; menge: number; notizen?: string; eigenschaften?: { eigenschaft_id: number; wert: string }[] }[];
|
||||
notizen?: string;
|
||||
bezeichnung?: string;
|
||||
fuer_benutzer_id?: string;
|
||||
fuer_benutzer_name?: string;
|
||||
};
|
||||
|
||||
if (!items || items.length === 0) {
|
||||
@@ -276,6 +291,7 @@ class AusruestungsanfrageController {
|
||||
|
||||
// Determine anfrager: self or on behalf of another user
|
||||
let anfragerId = req.user!.id;
|
||||
let storedFuerBenutzerName: string | undefined;
|
||||
if (fuer_benutzer_id && fuer_benutzer_id !== req.user!.id) {
|
||||
const groups = req.user?.groups ?? [];
|
||||
const canOrderForUser = groups.includes('dashboard_admin') || permissionService.hasPermission(groups, 'ausruestungsanfrage:order_for_user');
|
||||
@@ -284,9 +300,18 @@ class AusruestungsanfrageController {
|
||||
return;
|
||||
}
|
||||
anfragerId = fuer_benutzer_id;
|
||||
} else if (fuer_benutzer_name && !fuer_benutzer_id) {
|
||||
// Custom name for user not in system — keep anfrager_id as current user
|
||||
const groups = req.user?.groups ?? [];
|
||||
const canOrderForUser = groups.includes('dashboard_admin') || permissionService.hasPermission(groups, 'ausruestungsanfrage:order_for_user');
|
||||
if (!canOrderForUser) {
|
||||
res.status(403).json({ success: false, message: 'Keine Berechtigung für Bestellung im Auftrag' });
|
||||
return;
|
||||
}
|
||||
storedFuerBenutzerName = fuer_benutzer_name;
|
||||
}
|
||||
|
||||
const request = await ausruestungsanfrageService.createRequest(anfragerId, items, notizen, bezeichnung);
|
||||
const request = await ausruestungsanfrageService.createRequest(anfragerId, items, notizen, bezeichnung, storedFuerBenutzerName);
|
||||
res.status(201).json({ success: true, data: request });
|
||||
} catch (error) {
|
||||
logger.error('AusruestungsanfrageController.createRequest error', { error });
|
||||
|
||||
Reference in New Issue
Block a user