![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-inventory-reservations/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\InventoryReservations\Model; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Validation\ValidationException; use Magento\Framework\Validation\ValidationResult; use Magento\Framework\Validation\ValidationResultFactory; use Magento\InventoryReservationsApi\Model\ReservationInterface; use Magento\InventoryReservationsApi\Model\ReservationBuilderInterface; /** * @inheritdoc */ class ReservationBuilder implements ReservationBuilderInterface { /** * @var int */ private $stockId; /** * @var string */ private $sku; /** * @var float */ private $quantity; /** * @var string */ private $metadata; /** * @var ObjectManagerInterface */ private $objectManager; /** * @var SnakeToCamelCaseConverter */ private $snakeToCamelCaseConverter; /** * @var ValidationResultFactory */ private $validationResultFactory; /** * @param ObjectManagerInterface $objectManager * @param SnakeToCamelCaseConverter $snakeToCamelCaseConverter * @param ValidationResultFactory $validationResultFactory */ public function __construct( ObjectManagerInterface $objectManager, SnakeToCamelCaseConverter $snakeToCamelCaseConverter, ValidationResultFactory $validationResultFactory ) { $this->objectManager = $objectManager; $this->snakeToCamelCaseConverter = $snakeToCamelCaseConverter; $this->validationResultFactory = $validationResultFactory; } /** * @inheritdoc */ public function setStockId(int $stockId): ReservationBuilderInterface { $this->stockId = $stockId; return $this; } /** * @inheritdoc */ public function setSku(string $sku): ReservationBuilderInterface { $this->sku = $sku; return $this; } /** * @inheritdoc */ public function setQuantity(float $quantity): ReservationBuilderInterface { $this->quantity = $quantity; return $this; } /** * @inheritdoc */ public function setMetadata(string $metadata = null): ReservationBuilderInterface { $this->metadata = $metadata; return $this; } /** * @inheritdoc */ public function build(): ReservationInterface { /** @var ValidationResult $validationResult */ $validationResult = $this->validate(); if (!$validationResult->isValid()) { throw new ValidationException(__('Validation error'), null, 0, $validationResult); } $data = [ ReservationInterface::RESERVATION_ID => null, ReservationInterface::STOCK_ID => $this->stockId, ReservationInterface::SKU => $this->sku, ReservationInterface::QUANTITY => $this->quantity, ReservationInterface::METADATA => $this->metadata, ]; $arguments = $this->convertArrayKeysFromSnakeToCamelCase($data); $reservation = $this->objectManager->create(ReservationInterface::class, $arguments); $this->reset(); return $reservation; } /** * @return ValidationResult */ private function validate() { $errors = []; if (null === $this->stockId) { $errors[] = __('"%field" is expected to be a number.', ['field' => ReservationInterface::STOCK_ID]); } if (null === $this->sku || '' === trim($this->sku)) { $errors[] = __('"%field" can not be empty.', ['field' => ReservationInterface::SKU]); } if (null === $this->quantity) { $errors[] = __('"%field" can not be null.', ['field' => ReservationInterface::QUANTITY]); } return $this->validationResultFactory->create(['errors' => $errors]); } /** * Used to clean state after object creation * @return void */ private function reset() { $this->stockId = null; $this->sku = null; $this->quantity = null; $this->metadata = null; } /** * Used to convert database field names (that use snake case) into constructor parameter names (that use camel case) * to avoid to define them twice in domain model interface. * * @param array $array * @return array */ private function convertArrayKeysFromSnakeToCamelCase(array $array): array { $convertedArrayKeys = $this->snakeToCamelCaseConverter->convert(array_keys($array)); return array_combine($convertedArrayKeys, array_values($array)); } }