public function testCalculateWithTaxInPrice() { $mockItem = $this->getMockItem(); $mockItem->expects($this->atLeastOnce())->method('getIsTaxIncluded')->will($this->returnValue(true)); $this->mockConfig->expects($this->atLeastOnce())->method('crossBorderTradeEnabled')->will($this->returnValue(false)); $this->mockConfig->expects($this->atLeastOnce())->method('applyTaxAfterDiscount')->will($this->returnValue(true)); $this->mockCalculationTool->expects($this->atLeastOnce())->method('getRate')->with($this->addressRateRequest)->will($this->returnValue(self::RATE)); $this->mockCalculationTool->expects($this->atLeastOnce())->method('getStoreRate')->with($this->addressRateRequest, self::STORE_ID)->will($this->returnValue(self::STORE_RATE)); $this->mockCalculationTool->expects($this->atLeastOnce())->method('getAppliedRates')->withAnyParameters()->will($this->returnValue([])); $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY)); $this->assertSame(self::CODE, $this->taxDetailsItem->getCode()); $this->assertSame(self::TYPE, $this->taxDetailsItem->getType()); $this->assertSame(self::ROW_TAX_ROUNDED, $this->taxDetailsItem->getRowTax()); $this->assertEquals(self::PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax()); $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY, false)); $this->assertSame(self::CODE, $this->taxDetailsItem->getCode()); $this->assertSame(self::TYPE, $this->taxDetailsItem->getType()); $this->assertSame(self::ROW_TAX, $this->taxDetailsItem->getRowTax()); $this->assertEquals(self::PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax()); }
/** * Update tax related fields for quote item * * @param AbstractItem $quoteItem * @param TaxDetailsItemInterface $itemTaxDetails * @param TaxDetailsItemInterface $baseItemTaxDetails * @param Store $store * @return $this */ public function updateItemTaxInfo($quoteItem, $itemTaxDetails, $baseItemTaxDetails, $store) { //The price should be base price $quoteItem->setPrice($baseItemTaxDetails->getPrice()); $quoteItem->setConvertedPrice($itemTaxDetails->getPrice()); $quoteItem->setPriceInclTax($itemTaxDetails->getPriceInclTax()); $quoteItem->setRowTotal($itemTaxDetails->getRowTotal()); $quoteItem->setRowTotalInclTax($itemTaxDetails->getRowTotalInclTax()); $quoteItem->setTaxAmount($itemTaxDetails->getRowTax()); $quoteItem->setTaxPercent($itemTaxDetails->getTaxPercent()); $quoteItem->setDiscountTaxCompensationAmount($itemTaxDetails->getDiscountTaxCompensationAmount()); $quoteItem->setBasePrice($baseItemTaxDetails->getPrice()); $quoteItem->setBasePriceInclTax($baseItemTaxDetails->getPriceInclTax()); $quoteItem->setBaseRowTotal($baseItemTaxDetails->getRowTotal()); $quoteItem->setBaseRowTotalInclTax($baseItemTaxDetails->getRowTotalInclTax()); $quoteItem->setBaseTaxAmount($baseItemTaxDetails->getRowTax()); $quoteItem->setTaxPercent($baseItemTaxDetails->getTaxPercent()); $quoteItem->setBaseDiscountTaxCompensationAmount($baseItemTaxDetails->getDiscountTaxCompensationAmount()); //Set discount calculation price, this may be needed by discount collector if ($this->_config->discountTax($store)) { $quoteItem->setDiscountCalculationPrice($itemTaxDetails->getPriceInclTax()); $quoteItem->setBaseDiscountCalculationPrice($baseItemTaxDetails->getPriceInclTax()); } else { $quoteItem->setDiscountCalculationPrice($itemTaxDetails->getPrice()); $quoteItem->setBaseDiscountCalculationPrice($baseItemTaxDetails->getPrice()); } return $this; }