123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- <?php
- /**
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\GiftMessage\Model;
- use Magento\Framework\Exception\CouldNotSaveException;
- use Magento\Framework\Exception\NoSuchEntityException;
- use Magento\Framework\Exception\State\InvalidTransitionException;
- /**
- * Order item gift message repository object.
- */
- class OrderItemRepository implements \Magento\GiftMessage\Api\OrderItemRepositoryInterface
- {
- /**
- * Order factory.
- *
- * @var \Magento\Sales\Model\OrderFactory
- */
- protected $orderFactory;
- /**
- * Cached orders data.
- *
- * @var \Magento\Sales\Api\Data\OrderInterface[]
- */
- private $orders;
- /**
- * Store manager interface.
- *
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- protected $storeManager;
- /**
- * Gift message save model.
- *
- * @var \Magento\GiftMessage\Model\Save
- */
- protected $giftMessageSaveModel;
- /**
- * Message helper.
- *
- * @var \Magento\GiftMessage\Helper\Message
- */
- protected $helper;
- /**
- * Message factory.
- *
- * @var \Magento\GiftMessage\Model\MessageFactory
- */
- protected $messageFactory;
- /**
- * @param \Magento\Sales\Model\OrderFactory $orderFactory
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\GiftMessage\Model\Save $giftMessageSaveModel
- * @param \Magento\GiftMessage\Helper\Message $helper
- * @param MessageFactory $messageFactory
- */
- public function __construct(
- \Magento\Sales\Model\OrderFactory $orderFactory,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\GiftMessage\Model\Save $giftMessageSaveModel,
- \Magento\GiftMessage\Helper\Message $helper,
- \Magento\GiftMessage\Model\MessageFactory $messageFactory
- ) {
- $this->orderFactory = $orderFactory;
- $this->giftMessageSaveModel = $giftMessageSaveModel;
- $this->storeManager = $storeManager;
- $this->helper = $helper;
- $this->messageFactory = $messageFactory;
- }
- /**
- * @inheritdoc
- */
- public function get($orderId, $orderItemId)
- {
- /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
- if (!$orderItem = $this->getItemById($orderId, $orderItemId)) {
- throw new NoSuchEntityException(
- __('No item with the provided ID was found in the Order. Verify the ID and try again.')
- );
- }
- if (!$this->helper->isMessagesAllowed('order_item', $orderItem, $this->storeManager->getStore())) {
- throw new NoSuchEntityException(
- __(
- "No item with the provided ID was found in the Order, or a gift message isn't allowed. "
- . "Verify and try again."
- )
- );
- }
- $messageId = $orderItem->getGiftMessageId();
- if (!$messageId) {
- throw new NoSuchEntityException(
- __('No item with the provided ID was found in the Order. Verify the ID and try again.')
- );
- }
- return $this->messageFactory->create()->load($messageId);
- }
- /**
- * @inheritdoc
- */
- public function save($orderId, $orderItemId, \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage)
- {
- /** @var \Magento\Sales\Api\Data\OrderInterface $order */
- $order = $this->orderFactory->create()->load($orderId);
- /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
- if (!$orderItem = $this->getItemById($orderId, $orderItemId)) {
- throw new NoSuchEntityException(
- __('No item with the provided ID was found in the Order. Verify the ID and try again.')
- );
- }
- if ($order->getIsVirtual()) {
- throw new InvalidTransitionException(__("Gift messages can't be used for virtual products."));
- }
- if (!$this->helper->isMessagesAllowed('order_item', $orderItem, $this->storeManager->getStore())) {
- throw new CouldNotSaveException(__("The gift message isn't available."));
- }
- $message = [];
- $message[$orderItemId] = [
- 'type' => 'order_item',
- 'sender' => $giftMessage->getSender(),
- 'recipient' => $giftMessage->getRecipient(),
- 'message' => $giftMessage->getMessage(),
- ];
- $this->giftMessageSaveModel->setGiftmessages($message);
- try {
- $this->giftMessageSaveModel->saveAllInOrder();
- unset($this->orders[$orderId]);
- } catch (\Exception $e) {
- throw new CouldNotSaveException(
- __('The gift message couldn\'t be added to the "%1" order.', $e->getMessage()),
- $e
- );
- }
- return true;
- }
- /**
- * Get order item by id
- *
- * @param int $orderId
- * @param int $orderItemId
- * @return \Magento\Sales\Api\Data\OrderItemInterface|bool
- */
- protected function getItemById($orderId, $orderItemId)
- {
- if (!isset($this->orders[$orderId])) {
- $this->orders[$orderId] = $this->orderFactory->create()->load($orderId);
- }
- /** @var \Magento\Sales\Api\Data\OrderInterface $item */
- $order = $this->orders[$orderId];
- /** @var \Magento\Sales\Api\Data\OrderItemInterface $item */
- $item = $order->getItemById($orderItemId);
- if ($item !== null) {
- return $item;
- }
- return false;
- }
- }
|