Refactor getTargetItems method to include customer and department parameters for improved item normalization

This commit is contained in:
Jeppe Bundgaard
2026-07-08 10:35:39 +02:00
parent dcef993f12
commit ff225ff5e7
@@ -40,11 +40,15 @@ class orderBookingRoute
$reference = self::getTargetReference(); // String | Null $reference = self::getTargetReference(); // String | Null
$po = self::getTargetPo(); // String | Null $po = self::getTargetPo(); // String | Null
$pickup = self::getTargetPickup(); // Bool | Null $pickup = self::getTargetPickup(); // Bool | Null
$items = self::getTargetItems(); // Array of order_items_o objects
$this->requireOrderBookingCreateAccess( $this->requireOrderBookingCreateAccess(
(int)$customer_number->customer_number->value(), (int)$customer_number->customer_number->value(),
(int)$department->id (int)$department->id
); );
$items = self::getTargetItems(
true,
$customer_number,
(int)$department->id
); // Array of order_items_o objects
/** /**
* Input data * Input data
*/ */
@@ -257,7 +261,6 @@ class orderBookingRoute
$reference = self::getTargetReference(false); // String | Null $reference = self::getTargetReference(false); // String | Null
$po = self::getTargetPo(false); // String | Null $po = self::getTargetPo(false); // String | Null
$pickup = self::getTargetPickup(false); // Bool | Null $pickup = self::getTargetPickup(false); // Bool | Null
$items = self::getTargetItems(false); // Array of order_items_o objects
$order_id_was_set = self::isParametersSet(['order_id']); $order_id_was_set = self::isParametersSet(['order_id']);
$order_id = self::getTargetOrderId(false); // Int | Null $order_id = self::getTargetOrderId(false); // Int | Null
/** Authentication */ /** Authentication */
@@ -284,6 +287,11 @@ class orderBookingRoute
$ownGuard, $ownGuard,
'You do not have permission to edit this order booking.' 'You do not have permission to edit this order booking.'
); );
$items = self::getTargetItems(
false,
$customer_number ?: (new users_o())->getUserByCustomerNumber((int)$object->customer_number->value()),
$department !== null ? (int)$department->id : (int)$object->department->value()
); // Array of order_items_o objects
/** /**
* Update the object * Update the object
*/ */
@@ -796,7 +804,11 @@ class orderBookingRoute
/** /**
* @throws Exception * @throws Exception
*/ */
private function getTargetItems(bool $required = true): array|null { private function getTargetItems(
bool $required = true,
?users_o $customer = null,
?int $department_id = null
): array|null {
global $response; global $response;
$parameter = 'items'; $parameter = 'items';
$error = 'Invalid items'; $error = 'Invalid items';
@@ -811,11 +823,52 @@ class orderBookingRoute
foreach ($items as $key => $item) { foreach ($items as $key => $item) {
self::requireType($item, self::type_array()); self::requireType($item, self::type_array());
self::requireValidItem((array)$item, $key); self::requireValidItem((array)$item, $key);
$items[$key]['name'] = (new products_o())->select((int)$item['id'])->name->value(); $items[$key] = $this->normalizeBookingItem((array)$item, $customer, $department_id);
} }
return $items; return $items;
} }
/**
* @throws Exception
*/
private function normalizeBookingItem(array $item, ?users_o $customer, ?int $department_id): array
{
global $response;
$product = (new products_o())->select((int)$item['id']);
if (!$product->exists()) {
$response->error('Invalid item id', 400);
}
$price = (int)$product->price->value();
if ($department_id !== null) {
$priceResolution = $product->getDepartmentPriceResolution($department_id);
$price = (int)$priceResolution['price'];
if (
$customer !== null
&& $customer->exists()
&& !products_o::priceResolutionIsCustomMissing($priceResolution)
) {
$price = $customer->applyProductCustomerPricing(
(int)$product->id,
$price,
true,
$department_id
);
}
} elseif ($customer !== null && $customer->exists()) {
$price = $customer->applyProductCustomerPricing((int)$product->id, $price);
}
return [
...$item,
'id' => (int)$product->id,
'name' => (string)$product->name->value(),
'quantity' => (int)$item['quantity'],
'price' => $price,
];
}
private function cleanReg(string $reg): string private function cleanReg(string $reg): string
{ {
// Remove all non-alphanumeric characters // Remove all non-alphanumeric characters