/**
  * Collect order data and call service method to transfer PV to customer account.
  *
  * @param \Magento\Sales\Api\Data\OrderInterface $order
  */
 public function accountPv(\Magento\Sales\Api\Data\OrderInterface $order)
 {
     $state = $order->getState();
     if ($state == \Magento\Sales\Model\Order::STATE_PROCESSING) {
         /* transfer PV if order is paid */
         $orderId = $order->getEntityId();
         $itemsData = $this->_subCollector->getServiceItemsForMageSaleOrder($order);
         /** @var \Praxigento\Pv\Service\Sale\Request\AccountPv $req */
         $req = $this->_manObj->create(\Praxigento\Pv\Service\Sale\Request\AccountPv::class);
         $req->setSaleOrderId($orderId);
         $req->setOrderItems($itemsData);
         $this->_callSale->accountPv($req);
     }
 }
 /**
  * Save gift message for items of order
  *
  * @param \Magento\Sales\Api\Data\OrderInterface $order
  * @return \Magento\Sales\Api\Data\OrderInterface
  */
 protected function saveOrderItemGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
 {
     if (null !== $order->getItems()) {
         /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
         foreach ($order->getItems() as $orderItem) {
             if (null !== $orderItem->getExtensionAttributes() && null !== $orderItem->getExtensionAttributes()->getGiftMessage()) {
                 /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
                 $giftMessage = $orderItem->getExtensionAttributes()->getGiftMessage();
                 try {
                     $this->giftMessageOrderItemRepository->save($order->getEntityId(), $orderItem->getItemId(), $giftMessage);
                 } catch (\Exception $e) {
                     throw new CouldNotSaveException(__('Could not add gift message to order\'s item: "%1"', $e->getMessage()), $e);
                 }
             }
         }
     }
     return $order;
 }
 /**
  * @param OrderInterface $order
  * @return void
  */
 private function setShippingAssignments(OrderInterface $order)
 {
     /** @var OrderExtensionInterface $extensionAttributes */
     $extensionAttributes = $order->getExtensionAttributes();
     if ($extensionAttributes === null) {
         $extensionAttributes = $this->getOrderExtensionDependency();
     } elseif ($extensionAttributes->getShippingAssignments() !== null) {
         return;
     }
     /** @var ShippingAssignmentInterface $shippingAssignment */
     $shippingAssignments = $this->getShippingAssignmentBuilderDependency();
     $shippingAssignments->setOrderId($order->getEntityId());
     $extensionAttributes->setShippingAssignments($shippingAssignments->create());
     $order->setExtensionAttributes($extensionAttributes);
 }
 /**
  * Get gift message for items of order
  *
  * @param \Magento\Sales\Api\Data\OrderInterface $order
  * @return \Magento\Sales\Api\Data\OrderInterface
  */
 protected function getOrderItemGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order)
 {
     if (null !== $order->getItems()) {
         /** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
         foreach ($order->getItems() as $orderItem) {
             if ($orderItem->getExtensionAttributes() && $orderItem->getExtensionAttributes()->getGiftMessage()) {
                 continue;
             }
             try {
                 /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
                 $giftMessage = $this->giftMessageOrderItemRepository->get($order->getEntityId(), $orderItem->getItemId());
             } catch (NoSuchEntityException $e) {
                 continue;
             }
             /** @var \Magento\Sales\Api\Data\OrderItemExtension $orderItemExtension */
             $orderItemExtension = $this->orderItemExtensionFactory->create();
             $orderItemExtension->setGiftMessage($giftMessage);
             $orderItem->setExtensionAttributes($orderItemExtension);
         }
     }
     return $order;
 }
Exemple #5
0
 /**
  * @param \Magento\Sales\Api\Data\OrderInterface $order
  * @return $this
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 protected function saveOrderTax(\Magento\Sales\Api\Data\OrderInterface $order)
 {
     $extensionAttribute = $order->getExtensionAttributes();
     if (!$extensionAttribute || !$extensionAttribute->getConvertingFromQuote() || $order->getAppliedTaxIsSaved()) {
         return;
     }
     /** @var \Magento\Tax\Api\Data\OrderTaxDetailsAppliedTaxInterface[]|null $taxes */
     $taxes = $extensionAttribute->getAppliedTaxes();
     if ($taxes == null) {
         $taxes = [];
     }
     /** @var \Magento\Tax\Api\Data\OrderTaxDetailsItemInterface[]|null $taxesForItems */
     $taxesForItems = $extensionAttribute->getItemAppliedTaxes();
     if ($taxesForItems == null) {
         $taxesForItems = [];
     }
     $ratesIdQuoteItemId = [];
     foreach ($taxesForItems as $taxesArray) {
         foreach ($taxesArray['applied_taxes'] as $rates) {
             if (isset($rates['extension_attributes'])) {
                 /** @var \Magento\Tax\Api\Data\AppliedTaxRateInterface[] $taxRates */
                 $taxRates = $rates['extension_attributes']->getRates();
                 if (is_array($taxRates)) {
                     if (count($taxRates) == 1) {
                         $ratesIdQuoteItemId[$rates['id']][] = ['id' => $taxesArray['item_id'], 'percent' => $rates['percent'], 'code' => $taxRates[0]['code'], 'associated_item_id' => $taxesArray['associated_item_id'], 'item_type' => $taxesArray['type'], 'amount' => $rates['amount'], 'base_amount' => $rates['base_amount'], 'real_amount' => $rates['amount'], 'real_base_amount' => $rates['base_amount']];
                     } else {
                         $percentSum = 0;
                         foreach ($taxRates as $rate) {
                             $realAmount = $rates['amount'] * $rate['percent'] / $rates['percent'];
                             $realBaseAmount = $rates['base_amount'] * $rate['percent'] / $rates['percent'];
                             $ratesIdQuoteItemId[$rates['id']][] = ['id' => $taxesArray['item_id'], 'percent' => $rate['percent'], 'code' => $rate['code'], 'associated_item_id' => $taxesArray['associated_item_id'], 'item_type' => $taxesArray['type'], 'amount' => $rates['amount'], 'base_amount' => $rates['base_amount'], 'real_amount' => $realAmount, 'real_base_amount' => $realBaseAmount];
                             $percentSum += $rate['percent'];
                         }
                     }
                 }
             }
         }
     }
     foreach ($taxes as $row) {
         $id = $row['id'];
         if (isset($row['extension_attributes'])) {
             /** @var \Magento\Tax\Api\Data\AppliedTaxRateInterface[] $taxRates */
             $taxRates = $row['extension_attributes']->getRates();
             if (is_array($taxRates)) {
                 foreach ($taxRates as $tax) {
                     if ($row['percent'] == null) {
                         $baseRealAmount = $row['base_amount'];
                     } else {
                         if ($row['percent'] == 0 || $tax['percent'] == 0) {
                             continue;
                         }
                         $baseRealAmount = $row['base_amount'] / $row['percent'] * $tax['percent'];
                     }
                     $hidden = isset($row['hidden']) ? $row['hidden'] : 0;
                     $priority = isset($tax['priority']) ? $tax['priority'] : 0;
                     $position = isset($tax['position']) ? $tax['position'] : 0;
                     $process = isset($row['process']) ? $row['process'] : 0;
                     $data = ['order_id' => $order->getEntityId(), 'code' => $tax['code'], 'title' => $tax['title'], 'hidden' => $hidden, 'percent' => $tax['percent'], 'priority' => $priority, 'position' => $position, 'amount' => $row['amount'], 'base_amount' => $row['base_amount'], 'process' => $process, 'base_real_amount' => $baseRealAmount];
                     /** @var $orderTax \Magento\Tax\Model\Sales\Order\Tax */
                     $orderTax = $this->orderTaxFactory->create();
                     $result = $orderTax->setData($data)->save();
                     if (isset($ratesIdQuoteItemId[$id])) {
                         foreach ($ratesIdQuoteItemId[$id] as $quoteItemId) {
                             if ($quoteItemId['code'] == $tax['code']) {
                                 $itemId = null;
                                 $associatedItemId = null;
                                 if (isset($quoteItemId['id'])) {
                                     //This is a product item
                                     $item = $order->getItemByQuoteItemId($quoteItemId['id']);
                                     $itemId = $item->getId();
                                 } elseif (isset($quoteItemId['associated_item_id'])) {
                                     //This item is associated with a product item
                                     $item = $order->getItemByQuoteItemId($quoteItemId['associated_item_id']);
                                     $associatedItemId = $item->getId();
                                 }
                                 $data = ['item_id' => $itemId, 'tax_id' => $result->getTaxId(), 'tax_percent' => $quoteItemId['percent'], 'associated_item_id' => $associatedItemId, 'amount' => $quoteItemId['amount'], 'base_amount' => $quoteItemId['base_amount'], 'real_amount' => $quoteItemId['real_amount'], 'real_base_amount' => $quoteItemId['real_base_amount'], 'taxable_item_type' => $quoteItemId['item_type']];
                                 /** @var $taxItem \Magento\Sales\Model\Order\Tax\Item */
                                 $taxItem = $this->taxItemFactory->create();
                                 $taxItem->setData($data)->save();
                             }
                         }
                     }
                 }
             }
         }
     }
     $order->setAppliedTaxIsSaved(true);
     return $this;
 }
Exemple #6
0
 /**
  * Returns order id
  *
  * @return int
  */
 public function getId()
 {
     return $this->order->getEntityId();
 }