/** * Mage_Sales_Model_Quote_Address caches items after each collectTotals call. Some extensions calls collectTotals * after adding new item to quote in observers. So we need clear this cache before adding new item to quote. */ private function clearQuoteItemsCache() { foreach ($this->quote->getAllAddresses() as $address) { $address->unsetData('cached_items_all'); $address->unsetData('cached_items_nominal'); $address->unsetData('cached_items_nonominal'); } }
public function testGetAllAddresses() { $id = 1; $this->quoteAddressCollectionMock->expects($this->once())->method('setQuoteFilter')->with($id)->will($this->returnSelf()); $this->quoteAddressMock->expects($this->once())->method('isDeleted')->will($this->returnValue(false)); $iterator = new \ArrayIterator([$this->quoteAddressMock]); $this->quoteAddressCollectionMock->expects($this->any())->method('getIterator')->will($this->returnValue($iterator)); $this->quote->setId($id); $result = $this->quote->getAllAddresses(); $this->assertEquals([$this->quoteAddressMock], $result); }
/** * Adds minimal tax information to the "total" data structure * * @param \Magento\Quote\Model\Quote $quote * @param Address\Total $total * @return null */ protected function enhanceTotalData(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total) { $taxAmount = 0; $shippingTaxAmount = 0; $discountTaxCompensation = 0; $subtotalInclTax = $total->getSubtotalInclTax(); $computeSubtotalInclTax = true; if ($total->getSubtotalInclTax() > 0) { $computeSubtotalInclTax = false; } /** @var \Magento\Quote\Model\Quote\Address $address */ foreach ($quote->getAllAddresses() as $address) { $taxAmount += $address->getTaxAmount(); $shippingTaxAmount += $address->getShippingTaxAmount(); $discountTaxCompensation += $address->getDiscountTaxCompensationAmount(); if ($computeSubtotalInclTax) { $subtotalInclTax += $address->getSubtotalInclTax(); } } $total->setTaxAmount($taxAmount); $total->setShippingTaxAmount($shippingTaxAmount); $total->setDiscountTaxCompensationAmount($discountTaxCompensation); // accessed via 'discount_tax_compensation' $total->setSubtotalInclTax($subtotalInclTax); return; }
/** * @param \Magento\Quote\Model\Quote $quote * @return $this */ protected function _validateCouponCode(\Magento\Quote\Model\Quote $quote) { $code = $quote->getData('coupon_code'); if (strlen($code)) { $addressHasCoupon = false; $addresses = $quote->getAllAddresses(); if (count($addresses) > 0) { foreach ($addresses as $address) { if ($address->hasCouponCode()) { $addressHasCoupon = true; } } if (!$addressHasCoupon) { $quote->setCouponCode(''); } } } return $this; }