* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Core\Domain\Order\Product\Command; use InvalidArgumentException; use PrestaShop\Decimal\DecimalNumber; use PrestaShop\PrestaShop\Core\Domain\Order\Exception\InvalidAmountException; use PrestaShop\PrestaShop\Core\Domain\Order\Exception\InvalidProductQuantityException; use PrestaShop\PrestaShop\Core\Domain\Order\ValueObject\OrderId; /** * Updates product in given order. */ class UpdateProductInOrderCommand { /** * @var OrderId */ private $orderId; /** * @var int */ private $orderDetailId; /** * @var DecimalNumber */ private $priceTaxIncluded; /** * @var DecimalNumber */ private $priceTaxExcluded; /** * @var int */ private $quantity; /** * @var int|null */ private $orderInvoiceId; /** * @param int $orderId * @param int $orderDetailId * @param string $priceTaxIncluded * @param string $priceTaxExcluded * @param int $quantity * @param int|null $orderInvoiceId */ public function __construct( int $orderId, int $orderDetailId, string $priceTaxIncluded, string $priceTaxExcluded, int $quantity, ?int $orderInvoiceId = null ) { $this->orderId = new OrderId($orderId); $this->orderDetailId = $orderDetailId; try { $this->priceTaxIncluded = new DecimalNumber($priceTaxIncluded); $this->priceTaxExcluded = new DecimalNumber($priceTaxExcluded); } catch (InvalidArgumentException $e) { throw new InvalidAmountException(); } $this->setQuantity($quantity); $this->orderInvoiceId = $orderInvoiceId; } /** * @return OrderId */ public function getOrderId() { return $this->orderId; } /** * @return int */ public function getOrderDetailId() { return $this->orderDetailId; } /** * @return DecimalNumber */ public function getPriceTaxIncluded() { return $this->priceTaxIncluded; } /** * @return DecimalNumber */ public function getPriceTaxExcluded() { return $this->priceTaxExcluded; } /** * @return int */ public function getQuantity() { return $this->quantity; } /** * @return int|null */ public function getOrderInvoiceId() { return $this->orderInvoiceId; } /** * @param int $quantity * * @throws InvalidProductQuantityException */ private function setQuantity(int $quantity): void { if ($quantity <= 0) { throw new InvalidProductQuantityException('When adding a product quantity must be strictly positive'); } $this->quantity = $quantity; } }