コード例 #1
0
ファイル: OrderTaxService.php プロジェクト: aiesh/magento2
 /**
  * {@inheritdoc}
  */
 public function getOrderTaxDetails($orderId)
 {
     $order = $this->orderFactory->create()->load($orderId);
     if (!$order) {
         throw new NoSuchEntityException(NoSuchEntityException::MESSAGE_DOUBLE_FIELDS, ['fieldName' => 'orderId', 'fieldValue' => $orderId]);
     }
     $appliedTaxBuilder = $this->orderTaxDetailsBuilder->getAppliedTaxBuilder();
     $orderItemAppliedTaxes = $this->orderItemTaxFactory->create()->getTaxItemsByOrderId($orderId);
     $itemsData = [];
     foreach ($orderItemAppliedTaxes as $itemAppliedTax) {
         //group applied taxes by item
         if (isset($itemAppliedTax['item_id'])) {
             //The taxable is a product
             $itemId = $itemAppliedTax['item_id'];
             if (!isset($itemsData[$itemId])) {
                 $itemsData[$itemId] = [Item::KEY_ITEM_ID => $itemAppliedTax['item_id'], Item::KEY_TYPE => $itemAppliedTax['taxable_item_type'], Item::KEY_ASSOCIATED_ITEM_ID => null];
             }
             $itemsData[$itemId]['applied_taxes'][$itemAppliedTax['code']] = $this->convertToAppliedTaxDataObject($appliedTaxBuilder, $itemAppliedTax);
         } elseif (isset($itemAppliedTax['associated_item_id'])) {
             //The taxable is associated with a product, e.g., weee, gift wrapping etc.
             $itemId = $itemAppliedTax['associated_item_id'];
             $key = $itemAppliedTax['taxable_item_type'] . $itemId;
             if (!isset($itemsData[$key])) {
                 $itemsData[$key] = [Item::KEY_ITEM_ID => null, Item::KEY_TYPE => $itemAppliedTax['taxable_item_type'], Item::KEY_ASSOCIATED_ITEM_ID => $itemId];
             }
             $itemsData[$key]['applied_taxes'][$itemAppliedTax['code']] = $this->convertToAppliedTaxDataObject($appliedTaxBuilder, $itemAppliedTax);
         } else {
             //The taxable is not associated with a product, e.g., shipping
             //Use item type as key
             $key = $itemAppliedTax['taxable_item_type'];
             if (!isset($itemsData[$key])) {
                 $itemsData[$key] = [Item::KEY_TYPE => $itemAppliedTax['taxable_item_type'], Item::KEY_ITEM_ID => null, Item::KEY_ASSOCIATED_ITEM_ID => null];
             }
             $itemsData[$key][Item::KEY_APPLIED_TAXES][$itemAppliedTax['code']] = $this->convertToAppliedTaxDataObject($appliedTaxBuilder, $itemAppliedTax);
         }
     }
     $itemBuilder = $this->orderTaxDetailsBuilder->getItemBuilder();
     $items = [];
     foreach ($itemsData as $itemData) {
         $itemBuilder->setType($itemData[Item::KEY_TYPE]);
         $itemBuilder->setItemId($itemData[Item::KEY_ITEM_ID]);
         $itemBuilder->setAssociatedItemId($itemData[Item::KEY_ASSOCIATED_ITEM_ID]);
         $itemBuilder->setAppliedTaxes($itemData[Item::KEY_APPLIED_TAXES]);
         $items[] = $itemBuilder->create();
     }
     $this->orderTaxDetailsBuilder->setItems($items);
     $orderAppliedTaxesDOs = $this->aggregateAppliedTaxes($appliedTaxBuilder, $items);
     $this->orderTaxDetailsBuilder->setAppliedTaxes($orderAppliedTaxesDOs);
     return $this->orderTaxDetailsBuilder->create();
 }