示例#1
0
 /**
  * @return array
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testGetCalculatedTaxesInvoiceCreditmemoDataProvider()
 {
     /** @var  \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\Store */
     $store = $this->getMockBuilder('\\Magento\\Store\\Model\\Store')->disableOriginalConstructor()->getMock();
     $objectManager = new ObjectManager($this);
     $this->orderTaxDetailsBuilder = $objectManager->getObject('Magento\\Tax\\Service\\V1\\Data\\OrderTaxDetailsBuilder');
     $orderTaxDetails = $this->orderTaxDetailsBuilder->populateWithArray([OrderTaxDetails::KEY_ITEMS => [[Item::KEY_TYPE => 'product', Item::KEY_ITEM_ID => 53, Item::KEY_ASSOCIATED_ITEM_ID => null, Item::KEY_APPLIED_TAXES => ['US-CA-*-Rate 1' => [AppliedTax::KEY_CODE => 'US-CA-*-Rate 1', AppliedTax::KEY_TITLE => 'US-CA-*-Rate 1', AppliedTax::KEY_PERCENT => '8.25', AppliedTax::KEY_AMOUNT => '6.1889', AppliedTax::KEY_BASE_AMOUNT => '12.3779'], 'SanJose City Tax' => [AppliedTax::KEY_CODE => 'SanJose City Tax', AppliedTax::KEY_TITLE => 'SanJose City Tax', AppliedTax::KEY_PERCENT => '6', AppliedTax::KEY_AMOUNT => '4.5011', AppliedTax::KEY_BASE_AMOUNT => '9.0021'], 'SST' => [AppliedTax::KEY_CODE => 'SST', AppliedTax::KEY_TITLE => 'SST', AppliedTax::KEY_PERCENT => '5.7125', AppliedTax::KEY_AMOUNT => '4.28', AppliedTax::KEY_BASE_AMOUNT => '8.57']]], [Item::KEY_TYPE => 'product', Item::KEY_ITEM_ID => 54, Item::KEY_ASSOCIATED_ITEM_ID => null, Item::KEY_APPLIED_TAXES => ['US-CA-*-Rate 1' => [AppliedTax::KEY_CODE => 'US-CA-*-Rate 1', AppliedTax::KEY_TITLE => 'US-CA-*-Rate 1', AppliedTax::KEY_PERCENT => '8.25', AppliedTax::KEY_AMOUNT => '12.3721', AppliedTax::KEY_BASE_AMOUNT => '24.7500'], 'SanJose City Tax' => [AppliedTax::KEY_CODE => 'SanJose City Tax', AppliedTax::KEY_TITLE => 'SanJose City Tax', AppliedTax::KEY_PERCENT => '6', AppliedTax::KEY_AMOUNT => '8.9979', AppliedTax::KEY_BASE_AMOUNT => '18'], 'SST' => [AppliedTax::KEY_CODE => 'SST', AppliedTax::KEY_TITLE => 'SST', AppliedTax::KEY_PERCENT => '5.7125', AppliedTax::KEY_AMOUNT => '8.57', AppliedTax::KEY_BASE_AMOUNT => '17.14']]], [Item::KEY_TYPE => 'weee', Item::KEY_ITEM_ID => null, Item::KEY_ASSOCIATED_ITEM_ID => 54, Item::KEY_APPLIED_TAXES => ['US-CA-*-Rate 1' => [AppliedTax::KEY_CODE => 'US-CA-*-Rate 1', AppliedTax::KEY_TITLE => 'US-CA-*-Rate 1', AppliedTax::KEY_PERCENT => '8.25', AppliedTax::KEY_AMOUNT => '1.2389', AppliedTax::KEY_BASE_AMOUNT => '2.4721'], 'SanJose City Tax' => [AppliedTax::KEY_CODE => 'SanJose City Tax', AppliedTax::KEY_TITLE => 'SanJose City Tax', AppliedTax::KEY_PERCENT => '6', AppliedTax::KEY_AMOUNT => '0.9011', AppliedTax::KEY_BASE_AMOUNT => '1.7979'], 'SST' => [AppliedTax::KEY_CODE => 'SST', AppliedTax::KEY_TITLE => 'SST', AppliedTax::KEY_PERCENT => '5.7125', AppliedTax::KEY_AMOUNT => '0.86', AppliedTax::KEY_BASE_AMOUNT => '1.71']]], [Item::KEY_TYPE => 'shipping', Item::KEY_ITEM_ID => null, Item::KEY_ASSOCIATED_ITEM_ID => null, Item::KEY_APPLIED_TAXES => ['Shipping' => [AppliedTax::KEY_CODE => 'Shipping', AppliedTax::KEY_TITLE => 'Shipping', AppliedTax::KEY_PERCENT => '21', AppliedTax::KEY_AMOUNT => '2.6', AppliedTax::KEY_BASE_AMOUNT => '5.21']]]], OrderTaxDetails::KEY_APPLIED_TAXES => [[AppliedTax::KEY_CODE => 'US-CA-*-Rate 1', AppliedTax::KEY_TITLE => 'US-CA-*-Rate 1', AppliedTax::KEY_PERCENT => '8.25', AppliedTax::KEY_AMOUNT => '19.7999', AppliedTax::KEY_BASE_AMOUNT => '39.6'], [AppliedTax::KEY_CODE => 'SanJose City Tax', AppliedTax::KEY_TITLE => 'SanJose City Tax', AppliedTax::KEY_PERCENT => '6', AppliedTax::KEY_AMOUNT => '14.4001', AppliedTax::KEY_BASE_AMOUNT => '28.8'], [AppliedTax::KEY_CODE => 'SST', AppliedTax::KEY_TITLE => 'SST', AppliedTax::KEY_PERCENT => '5.7125', AppliedTax::KEY_AMOUNT => '13.71', AppliedTax::KEY_BASE_AMOUNT => '27.42'], [AppliedTax::KEY_CODE => 'Shipping', AppliedTax::KEY_TITLE => 'Shipping', AppliedTax::KEY_PERCENT => '21', AppliedTax::KEY_AMOUNT => '2.6', AppliedTax::KEY_BASE_AMOUNT => '5.21']]])->create();
     $data = ['qty_not_changed' => ['source' => new \Magento\Framework\Object(['shipping_tax_amount' => '2.6', 'id' => '19', 'store' => $store]), 'current' => new \Magento\Framework\Object(['shipping_tax_amount' => '2.6', 'base_shipping_tax_amount' => '5.21', 'items_collection' => ['53' => new \Magento\Framework\Object(['order_item' => new \Magento\Framework\Object(['id' => 53, 'tax_amount' => 14.97]), 'tax_amount' => 14.97]), '54' => new \Magento\Framework\Object(['order_item' => new \Magento\Framework\Object(['id' => 54, 'tax_amount' => 29.94]), 'tax_amount' => 29.94])]]), 'orderTaxDetails' => $orderTaxDetails, 'expectedResults' => [['tax_amount' => '2.6', 'base_tax_amount' => '5.21', 'title' => 'Shipping', 'percent' => '21'], ['title' => 'US-CA-*-Rate 1', 'percent' => '8.25', 'tax_amount' => '19.80', 'base_tax_amount' => '39.6'], ['title' => 'SanJose City Tax', 'percent' => '6', 'tax_amount' => '14.40', 'base_tax_amount' => '28.8'], ['title' => 'SST', 'percent' => '5.7125', 'tax_amount' => '13.71', 'base_tax_amount' => '27.42']]]];
     return $data;
 }
示例#2
0
 /**
  * {@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();
 }