/** * @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; }
/** * {@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(); }