Refactor customer default department routes to streamline customer number handling and permission checks

This commit is contained in:
Jepp9350
2025-05-27 10:02:19 +02:00
parent efc564c7f4
commit 96647c5792
@@ -25,13 +25,11 @@ class customerDefaultDepartmentRoute
$response->error('Invalid session', 400);
}
// Require the customer number parameter
self::requireParameters(['customer_number']);
// Check if the customer number is valid
$customer_number = (int)self::getParameter('customer_number');
self::requireMinLength('customer_number', 1);
self::requireMaxLength('customer_number', 255);
self::requireType($customer_number, self::type_int());
self::requireMinValue($customer_number, 1);
$customer_number = (int)$this->getCustomerNumberFromParameterOrUser($user);
// Check if the customer is its own customer number
if ($customer_number !== (int)$user->customer_number->value()) {
self::requirePermission('get_customer_default_department_other');
}
// Check if the customer number exists
$customer = (new users_o())->getUserByCustomerNumber((int)$customer_number);
if (!$customer->exists()) {
@@ -53,7 +51,8 @@ class customerDefaultDepartmentRoute
$response->success($customer_default_department_o->asArray());
},
[
'get_customer_default_department' => 'Get the default department for a customer',
'get_customer_default_department' => 'Get the default department for a customer (for its both own and other customers, depending on the get_customer_default_department_other permission)',
'get_customer_default_department_other' => 'Get the default department for other customers',
]
);
@@ -67,13 +66,13 @@ class customerDefaultDepartmentRoute
$response->error('Invalid session', 400);
}
// Require the customer number and department parameters
self::requireParameters(['customer_number', 'department']);
// Check if the customer number is valid
$customer_number = (int)self::getParameter('customer_number');
self::requireMinLength('customer_number', 1);
self::requireMaxLength('customer_number', 255);
self::requireType($customer_number, self::type_int());
self::requireMinValue($customer_number, 1);
self::requireParameters(['department']);
// Require the customer number parameter
$customer_number = $this->getCustomerNumberFromParameterOrUser($user);
// Check if the customer is its own customer number
if ($customer_number !== (int)$user->customer_number->value()) {
self::requirePermission('add_customer_default_department_other');
}
// Check if the department is valid
$department = (int)self::getParameter('department');
self::requireMinLength('department', 1);
@@ -108,7 +107,8 @@ class customerDefaultDepartmentRoute
$response->success($customer_default_department_o->asArray());
},
[
'add_customer_default_department' => 'Add a default department for a customer',
'add_customer_default_department' => 'Add a default department for a customer (for its both own and other customers, depending on the add_customer_default_department_other permission)',
'add_customer_default_department_other' => 'Add a default department for other customers',
]
);
@@ -122,13 +122,11 @@ class customerDefaultDepartmentRoute
$response->error('Invalid session', 400);
}
// Require the customer number parameter
self::requireParameters(['customer_number']);
// Check if the customer number is valid
$customer_number = (int)self::getParameter('customer_number');
self::requireMinLength('customer_number', 1);
self::requireMaxLength('customer_number', 255);
self::requireType($customer_number, self::type_int());
self::requireMinValue($customer_number, 1);
$customer_number = $this->getCustomerNumberFromParameterOrUser($user);
// Check if the customer is its own customer number
if ($customer_number !== (int)$user->customer_number->value()) {
self::requirePermission('delete_customer_default_department_other');
}
// Check if the customer number exists
$customer = (new users_o())->getUserByCustomerNumber((int)$customer_number);
if (!$customer->exists()) {
@@ -151,9 +149,32 @@ class customerDefaultDepartmentRoute
$response->success('Default department deleted');
},
[
'delete_customer_default_department' => 'Delete a default department for a customer',
'delete_customer_default_department' => 'Delete a default department for a customer (for its both own and other customers, depending on the delete_customer_default_department_other permission)',
'delete_customer_default_department_other' => 'Delete a default department for other customers',
]
);
}
/**
* @param users_o|false $user
* @return int
*/
private function getCustomerNumberFromParameterOrUser(users_o|false $user): int
{
if (self::isParametersSet(['customer_number'])) {
self::requireParameters(['customer_number']);
// Check if the customer number is valid
$customer_number = (int)self::getParameter('customer_number');
self::requireMinLength('customer_number', 1);
self::requireMaxLength('customer_number', 255);
self::requireType($customer_number, self::type_int());
} else {
// If the customer number is not set, use the user's customer number
$customer_number = (int)$user->customer_number->value();
// Make sure the customer number is valid
}
self::requireMinValue($customer_number, 1);
return $customer_number;
}
}