/** * Save gift message for order * * @param \Magento\Sales\Api\Data\OrderInterface $order * @return \Magento\Sales\Api\Data\OrderInterface */ protected function saveOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order) { if (null !== $order->getExtensionAttributes() && null !== $order->getExtensionAttributes()->getGiftMessage()) { /* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */ $giftMessage = $order->getExtensionAttributes()->getGiftMessage(); if (null !== $giftMessage) { try { $this->giftMessageOrderRepository->save($order->getEntityId(), $giftMessage); } catch (\Exception $e) { throw new CouldNotSaveException(__('Could not add gift message to order: "%1"', $e->getMessage()), $e); } } } return $order; }
/** * Get gift message for order * * @param \Magento\Sales\Api\Data\OrderInterface $order * @return \Magento\Sales\Api\Data\OrderInterface */ protected function getOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order) { if ($order->getExtensionAttributes() && $order->getExtensionAttributes()->getGiftMessage()) { return $order; } try { /** @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */ $giftMessage = $this->giftMessageOrderRepository->get($order->getEntityId()); } catch (NoSuchEntityException $e) { return $order; } /** @var \Magento\Sales\Api\Data\OrderExtension $orderExtension */ $orderExtension = $this->orderExtensionFactory->create(); $orderExtension->setGiftMessage($giftMessage); $order->setExtensionAttributes($orderExtension); return $order; }
/** * @param QuoteAddressToOrder $subject * @param OrderInterface $order * @return OrderInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterConvert(QuoteAddressToOrder $subject, OrderInterface $order) { /** @var \Magento\Sales\Model\Order $order */ $taxes = $this->quoteAddress->getAppliedTaxes(); $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes == null) { $extensionAttributes = $this->orderExtensionFactory->create(); } if (!empty($taxes)) { $extensionAttributes->setAppliedTaxes($taxes); $extensionAttributes->setConvertingFromQuote(true); } $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes(); if (!empty($itemAppliedTaxes)) { $extensionAttributes->setItemAppliedTaxes($itemAppliedTaxes); } $order->setExtensionAttributes($extensionAttributes); 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); }
/** * @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; }
/** * @param QuoteAddressToOrder $subject * @param OrderInterface $order * @return OrderInterface * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterConvert(QuoteAddressToOrder $subject, OrderInterface $order) { /** @var \Magento\Sales\Model\Order $order */ $taxes = $this->quoteAddress->getAppliedTaxes(); $extensionAttributes = $order->getExtensionAttributes(); if ($extensionAttributes == null) { $extensionAttributes = $this->orderExtensionFactory->create(); } if (!empty($taxes)) { foreach ($taxes as $key => $tax) { $tax['extension_attributes']['rates'] = $tax['rates']; unset($tax['rates']); $taxes[$key] = $tax; } $extensionAttributes->setAppliedTaxes($taxes); $extensionAttributes->setConvertingFromQuote(true); } $itemAppliedTaxes = $this->quoteAddress->getItemsAppliedTaxes(); $itemAppliedTaxesModified = []; if (!empty($itemAppliedTaxes)) { foreach ($itemAppliedTaxes as $key => $itemAppliedTaxItem) { if (is_array($itemAppliedTaxItem) && !empty($itemAppliedTaxItem)) { foreach ($itemAppliedTaxItem as $itemAppliedTax) { $itemAppliedTaxesModified[$key]['type'] = $itemAppliedTax['item_type']; $itemAppliedTaxesModified[$key]['item_id'] = $itemAppliedTax['item_id']; $itemAppliedTaxesModified[$key]['associated_item_id'] = $itemAppliedTax['associated_item_id']; $itemAppliedTax['extension_attributes']['rates'] = $itemAppliedTax['rates']; unset($itemAppliedTax['rates']); $itemAppliedTaxesModified[$key]['applied_taxes'][] = $itemAppliedTax; } } } $extensionAttributes->setItemAppliedTaxes($itemAppliedTaxesModified); } $order->setExtensionAttributes($extensionAttributes); return $order; }