update
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { Request, Response } from 'express';
|
||||
import bestellungService from '../services/bestellung.service';
|
||||
import { permissionService } from '../services/permission.service';
|
||||
import logger from '../utils/logger';
|
||||
import fs from 'fs';
|
||||
|
||||
@@ -227,7 +228,34 @@ class BestellungController {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const order = await bestellungService.updateOrderStatus(id, status, req.user!.id, !!force);
|
||||
// For force override, require manage_orders
|
||||
if (force) {
|
||||
const canManage = permissionService.hasPermission(req.user!.groups || [], 'bestellungen:manage_orders');
|
||||
if (!canManage) {
|
||||
res.status(403).json({ success: false, message: 'Keine Berechtigung für manuelle Statusänderung' });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// For approval/rejection transitions, require bestellungen:approve
|
||||
if (status === 'bereit_zur_bestellung' || status === 'entwurf') {
|
||||
// Check if this is an approval/rejection (from wartet_auf_genehmigung)
|
||||
const currentOrder = await bestellungService.getOrderById(id);
|
||||
if (!currentOrder) {
|
||||
res.status(404).json({ success: false, message: 'Bestellung nicht gefunden' });
|
||||
return;
|
||||
}
|
||||
const currentStatus = currentOrder.bestellung.status;
|
||||
if (currentStatus === 'wartet_auf_genehmigung') {
|
||||
const canApprove = permissionService.hasPermission(req.user!.groups || [], 'bestellungen:approve');
|
||||
if (!canApprove) {
|
||||
res.status(403).json({ success: false, message: 'Keine Berechtigung zur Genehmigung/Ablehnung von Bestellungen' });
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const order = await bestellungService.updateOrderStatus(id, status, req.user!.id, !!force, req.user!.id);
|
||||
if (!order) {
|
||||
res.status(404).json({ success: false, message: 'Bestellung nicht gefunden' });
|
||||
return;
|
||||
@@ -327,7 +355,11 @@ class BestellungController {
|
||||
return;
|
||||
}
|
||||
res.status(200).json({ success: true, data: item });
|
||||
} catch (error) {
|
||||
} catch (error: any) {
|
||||
if (error.statusCode === 400) {
|
||||
res.status(400).json({ success: false, message: error.message });
|
||||
return;
|
||||
}
|
||||
logger.error('BestellungController.updateReceivedQuantity error', { error });
|
||||
res.status(500).json({ success: false, message: 'Liefermenge konnte nicht aktualisiert werden' });
|
||||
}
|
||||
@@ -501,6 +533,11 @@ class BestellungController {
|
||||
res.status(404).json({ success: false, message: 'Bestellung nicht gefunden' });
|
||||
return;
|
||||
}
|
||||
const orderStatus = order.bestellung.status;
|
||||
if (orderStatus === 'entwurf' || orderStatus === 'wartet_auf_genehmigung') {
|
||||
res.status(403).json({ success: false, message: 'Export nur nach Genehmigung verfügbar' });
|
||||
return;
|
||||
}
|
||||
res.status(200).json({ success: true, data: order });
|
||||
} catch (error) {
|
||||
logger.error('BestellungController.exportOrder error', { error });
|
||||
|
||||
Reference in New Issue
Block a user