Beispiel #1
0
 /**
  * Collect the order total
  *
  * @param object $address The address instance to collect from
  *
  * @return Sisow_Model_Quote_TaxTotal
  */
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $quote = $address->getQuote();
     if ($quote->getId() == null || $address->getAddressType() != "shipping") {
         return $this;
     }
     $payment = $quote->getPayment();
     if (substr($payment->getMethod(), 0, 6) != 'sisow_' && (!count($quote->getPaymentsCollection()) || !$payment->hasMethodInstance())) {
         return $this;
     }
     $methodInstance = $payment->getMethodInstance();
     if (substr($methodInstance->getCode(), 0, 6) != 'sisow_') {
         return $this;
     }
     $helper = Mage::helper('sisow/paymentfee');
     $fee = $helper->getPaymentFeeArray($methodInstance->getCode(), $quote);
     if (!is_array($fee)) {
         return $this;
     }
     $address->setTaxAmount($address->getTaxAmount() + $fee['taxamount']);
     $address->setBaseTaxAmount($address->getBaseTaxAmount() + $fee['base_taxamount']);
     $address->setInvoiceTaxAmount($fee['taxamount']);
     $address->setBaseInvoiceTaxAmount($fee['base_taxamount']);
     return $this;
 }
Beispiel #2
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $store = $address->getQuote()->getStore();
     $address->setTaxAmount(0);
     $address->setBaseTaxAmount(0);
     $tax = Mage::getModel('tax/rate_data')->setCustomerClassId($address->getQuote()->getCustomerTaxClassId());
     /* @var $tax Mage_Tax_Model_Rate_Data */
     $taxAddress = $address;
     switch (Mage::getStoreConfig('sales/tax/based_on')) {
         case 'billing':
             $taxAddress = $address->getQuote()->getBillingAddress();
         case 'shipping':
             $tax->setCountryId($taxAddress->getCountryId())->setRegionId($taxAddress->getRegionId())->setPostcode($taxAddress->getPostcode());
             break;
         case 'origin':
             $tax->setCountryId(Mage::getStoreConfig('shipping/origin/country_id', $store))->setRegionId(Mage::getStoreConfig('shipping/origin/region_id', $store))->setPostcode(Mage::getStoreConfig('shipping/origin/postcode', $store));
             break;
     }
     foreach ($address->getAllItems() as $item) {
         $tax->setProductClassId($item->getProduct()->getTaxClassId());
         $rate = $tax->getRate();
         $item->setTaxPercent($rate);
         $item->calcTaxAmount();
         $address->setTaxAmount($address->getTaxAmount() + $item->getTaxAmount());
         $address->setBaseTaxAmount($address->getBaseTaxAmount() + $item->getBaseTaxAmount());
     }
     $shippingTaxClass = Mage::getStoreConfig('sales/tax/shipping_tax_class', $store);
     if ($shippingTaxClass) {
         $tax->setProductClassId($shippingTaxClass);
         if ($rate = $tax->getRate()) {
             $shippingTax = $address->getShippingAmount() * $rate / 100;
             $shippingBaseTax = $address->getBaseShippingAmount() * $rate / 100;
             $shippingTax = $store->roundPrice($shippingTax);
             $shippingBaseTax = $store->roundPrice($shippingBaseTax);
             $address->setTaxAmount($address->getTaxAmount() + $shippingTax);
             $address->setBaseTaxAmount($address->getBaseTaxAmount() + $shippingBaseTax);
         }
     }
     $address->setGrandTotal($address->getGrandTotal() + $address->getTaxAmount());
     $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseTaxAmount());
     return $this;
 }
Beispiel #3
0
 /**
  * Does nothing, calculates no taxes.
  *
  * @param   Mage_Sales_Model_Quote_Address $address
  * @return  Mage_Tax_Model_Sales_Total_Quote
  */
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     // parent::collect($address);
     $store = $address->getQuote()->getStore();
     $address->setTaxAmount(0);
     $address->setBaseTaxAmount(0);
     //$address->setShippingTaxAmount(0);
     //$address->setBaseShippingTaxAmount(0);
     $address->setAppliedTaxes(array());
     return $this;
 }
Beispiel #4
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $address->setPaymentCharge(0);
     $address->setBasePaymentCharge(0);
     $storeId = Mage::app()->getStore()->getId();
     $items = $address->getAllItems();
     if (!count($items)) {
         return $this;
     }
     $paymentMethod = $address->getQuote()->getPayment()->getMethod();
     $quote = $address->getQuote();
     if ($paymentMethod && substr($paymentMethod, 0, 11) == 'pay_payment') {
         $baseAmount = Mage::helper('pay_payment')->getPaymentCharge($paymentMethod, $address->getQuote());
         $amount = Mage::helper('directory')->currencyConvert($baseAmount, Mage::app()->getWebsite()->getConfig('currency/options/default'), Mage::app()->getStore()->getCurrentCurrencyCode());
         $address->setPaymentCharge($amount);
         $address->setBasePaymentCharge($baseAmount);
         $taxClass = Mage::helper('pay_payment')->getPaymentChargeTaxClass($paymentMethod);
         $taxCalculationModel = Mage::getSingleton('tax/calculation');
         $request = $taxCalculationModel->getRateRequest($quote->getShippingAddress(), $quote->getBillingAddress(), null, $storeId);
         $request->setStore(Mage::app()->getStore());
         $rate = $taxCalculationModel->getRate($request->setProductClassId($taxClass));
         //$rate = 21;
         if ($rate > 0) {
             //                $includesTax = Mage::getStoreConfig('tax/calculation/price_includes_tax');
             $baseChargeTax = round($address->getBasePaymentCharge() / (1 + $rate / 100) * ($rate / 100), 2);
             $chargeTax = round($address->getPaymentCharge() / (1 + $rate / 100) * ($rate / 100), 2);
         } else {
             $baseChargeTax = 0;
             $chargeTax = 0;
         }
         $rates = array();
         $applied = false;
         foreach ($address->getAppliedTaxes() as $arrRate) {
             // maximaal 1 keer de btw voor de extra kosten toevoegen
             if ($arrRate['percent'] == $rate && !$applied) {
                 $applied = true;
                 $arrRate['amount'] = $arrRate['amount'] + $chargeTax;
                 $arrRate['base_amount'] = $arrRate['base_amount'] + $baseChargeTax;
             }
             $rates[] = $arrRate;
         }
         $address->setAppliedTaxes($rates);
         $address->setBaseTaxAmount($address->getBaseTaxAmount() + $baseChargeTax);
         $address->setTaxAmount($address->getTaxAmount() + $chargeTax);
         $address->setGrandTotal($address->getGrandTotal() + $address->getPaymentCharge());
         $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBasePaymentCharge());
     }
     return $this;
 }
Beispiel #5
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     if (!Mage::getSingleton('checkout/session')->getQuoteId()) {
         return $this;
     }
     $_helper = Mage::helper('msp_cashondelivery');
     $_model = Mage::getModel('msp_cashondelivery/cashondelivery');
     $_subtotal = $address->getSubtotal();
     $quote = $address->getQuote();
     $baseAmount = $_model->getBaseExtraFee($_subtotal);
     $amount = $_model->getExtraFee($_subtotal);
     $codTax = $_helper->getTaxAmount($amount);
     $codBaseTax = $_helper->getTaxAmount($baseAmount);
     if ($quote->getPayment()->getMethod() == $_model->getCode() && $address->getAddressType() == Mage_Sales_Model_Quote_Address::TYPE_SHIPPING) {
         $address->setTaxAmount($address->getTaxAmount() + $codTax);
         $address->setBaseTaxAmount($address->getBaseTaxAmount() + $codBaseTax);
         $this->_saveAppliedTaxes($address, $_helper->getAppliedRates(), $codTax, $codBaseTax, $_helper->getRate());
         $address->setGrandTotal($address->getGrandTotal() + $codTax);
         $address->setBaseGrandTotal($address->getBaseGrandTotal() + $codBaseTax);
     }
     return $this;
 }
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $store = $address->getQuote()->getStore();
     $session = Mage::getSingleton('checkout/session');
     $discount = $session->getData('webpos_admin_discount');
     if (!$discount) {
         return $this;
     }
     $items = $address->getAllItems();
     if (!count($items)) {
         return $this;
     }
     $session->setData('webpos_admin_discount', $discount);
     $address->setWebposDiscountAmount($discount);
     $address->setData('webpos_discount_amount', $discount);
     /* Daniel - tax for discount */
     $afterDiscount = Mage::getStoreConfig('tax/calculation/apply_after_discount');
     if ($afterDiscount) {
         $country = Mage::getModel('checkout/session')->getQuote()->getShippingAddress()->getCountry();
         $oldTax = $address->getTaxAmount();
         $oldBaseTax = $address->getBaseTaxAmount();
         if ($country) {
             $rateTax = Mage::getModel('tax/calculation_rate')->getCollection()->addFieldToFilter('tax_country_id', $country)->setOrder('rate', 'DESC')->getFirstItem();
             $address->setTaxAmount(($address->getBaseSubtotal() - $discount + $address->getShippingAmount() + $address->getDiscountAmount()) * $rateTax->getRate() / 100)->setBaseTaxAmount(($address->getBaseSubtotal() - $discount + $address->getShippingAmount() + $address->getDiscountAmount()) * $rateTax->getRate() / 100);
             $taxCalculationModel = Mage::getSingleton('tax/calculation');
             $request = Mage::getSingleton('tax/calculation')->getRateRequest($address, $address->getQuote()->getBillingAddress(), $address->getQuote()->getCustomerTaxClassId(), $store);
             $rate = Mage::getSingleton('tax/calculation')->getRate($request);
             $this->_saveAppliedTaxes($address, $taxCalculationModel->getAppliedRates($request), $address->getTaxAmount(), $address->getBaseTaxAmount(), $rate);
         }
         $address->setGrandTotal($address->getGrandTotal() - $address->getWebposDiscountAmount());
         $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getWebposDiscountAmount());
     } else {
         $address->setGrandTotal($address->getGrandTotal() - $address->getWebposDiscountAmount());
         $address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getWebposDiscountAmount());
     }
     /* end */
     return $this;
 }
Beispiel #7
0
 public function collect(Mage_Sales_Model_Quote_Address $address)
 {
     $store = $address->getQuote()->getStore();
     $address->setTaxAmount(0);
     $address->setBaseTaxAmount(0);
     //$address->setShippingTaxAmount(0);
     //$address->setBaseShippingTaxAmount(0);
     $address->setAppliedTaxes(array());
     $items = $address->getAllItems();
     if (!count($items)) {
         return $this;
     }
     $custTaxClassId = $address->getQuote()->getCustomerTaxClassId();
     $taxCalculationModel = Mage::getSingleton('tax/calculation');
     /* @var $taxCalculationModel Mage_Tax_Model_Calculation */
     $request = $taxCalculationModel->getRateRequest($address, $address->getQuote()->getBillingAddress(), $custTaxClassId, $store);
     foreach ($items as $item) {
         /**
          * Child item's tax we calculate for parent
          */
         if ($item->getParentItemId()) {
             continue;
         }
         /**
          * We calculate parent tax amount as sum of children's tax amounts
          */
         if ($item->getHasChildren() && $item->isChildrenCalculated()) {
             foreach ($item->getChildren() as $child) {
                 $discountBefore = $item->getDiscountAmount();
                 $baseDiscountBefore = $item->getBaseDiscountAmount();
                 $rate = $taxCalculationModel->getRate($request->setProductClassId($child->getProduct()->getTaxClassId()));
                 $child->setTaxPercent($rate);
                 $child->calcTaxAmount();
                 if ($discountBefore != $item->getDiscountAmount()) {
                     $address->setDiscountAmount($address->getDiscountAmount() + ($item->getDiscountAmount() - $discountBefore));
                     $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + ($item->getBaseDiscountAmount() - $baseDiscountBefore));
                     $address->setGrandTotal($address->getGrandTotal() - ($item->getDiscountAmount() - $discountBefore));
                     $address->setBaseGrandTotal($address->getBaseGrandTotal() - ($item->getBaseDiscountAmount() - $baseDiscountBefore));
                 }
                 $this->_saveAppliedTaxes($address, $taxCalculationModel->getAppliedRates($request), $child->getTaxAmount(), $child->getBaseTaxAmount(), $rate);
             }
             $address->setTaxAmount($address->getTaxAmount() + $item->getTaxAmount());
             $address->setBaseTaxAmount($address->getBaseTaxAmount() + $item->getBaseTaxAmount());
         } else {
             $discountBefore = $item->getDiscountAmount();
             $baseDiscountBefore = $item->getBaseDiscountAmount();
             $rate = $taxCalculationModel->getRate($request->setProductClassId($item->getProduct()->getTaxClassId()));
             $item->setTaxPercent($rate);
             $item->calcTaxAmount();
             if ($discountBefore != $item->getDiscountAmount()) {
                 $address->setDiscountAmount($address->getDiscountAmount() + ($item->getDiscountAmount() - $discountBefore));
                 $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + ($item->getBaseDiscountAmount() - $baseDiscountBefore));
                 $address->setGrandTotal($address->getGrandTotal() - ($item->getDiscountAmount() - $discountBefore));
                 $address->setBaseGrandTotal($address->getBaseGrandTotal() - ($item->getBaseDiscountAmount() - $baseDiscountBefore));
             }
             $address->setTaxAmount($address->getTaxAmount() + $item->getTaxAmount());
             $address->setBaseTaxAmount($address->getBaseTaxAmount() + $item->getBaseTaxAmount());
             $applied = $taxCalculationModel->getAppliedRates($request);
             $this->_saveAppliedTaxes($address, $applied, $item->getTaxAmount(), $item->getBaseTaxAmount(), $rate);
         }
     }
     $shippingTaxClass = Mage::getStoreConfig(Mage_Tax_Model_Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS, $store);
     $shippingTax = 0;
     $shippingBaseTax = 0;
     if ($shippingTaxClass) {
         if ($rate = $taxCalculationModel->getRate($request->setProductClassId($shippingTaxClass))) {
             if (!Mage::helper('tax')->shippingPriceIncludesTax()) {
                 $shippingTax = $address->getShippingAmount() * $rate / 100;
                 $shippingBaseTax = $address->getBaseShippingAmount() * $rate / 100;
             } else {
                 $shippingTax = $address->getShippingTaxAmount();
                 $shippingBaseTax = $address->getBaseShippingTaxAmount();
             }
             $shippingTax = $store->roundPrice($shippingTax);
             $shippingBaseTax = $store->roundPrice($shippingBaseTax);
             $address->setTaxAmount($address->getTaxAmount() + $shippingTax);
             $address->setBaseTaxAmount($address->getBaseTaxAmount() + $shippingBaseTax);
             $this->_saveAppliedTaxes($address, $taxCalculationModel->getAppliedRates($request), $shippingTax, $shippingBaseTax, $rate);
         }
     }
     if (!Mage::helper('tax')->shippingPriceIncludesTax()) {
         $address->setShippingTaxAmount($shippingTax);
         $address->setBaseShippingTaxAmount($shippingBaseTax);
     }
     $address->setGrandTotal($address->getGrandTotal() + $address->getTaxAmount());
     $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseTaxAmount());
     return $this;
 }
Beispiel #8
0
 /**
  * Reset address values
  *
  * @param \Mage_Sales_Model_Quote_Address $address
  * @return $this
  */
 protected function _resetAddressValues(Mage_Sales_Model_Quote_Address $address)
 {
     $address->setTotalAmount($this->getCode(), 0);
     $address->setBaseTotalAmount($this->getCode(), 0);
     $address->setTaxAmount(0);
     $address->setBaseTaxAmount(0);
     $address->setShippingTaxAmount(0);
     $address->setBaseShippingTaxAmount(0);
     $address->setSubtotal(0);
     $address->setSubtotalInclTax(0);
     $address->setBaseSubtotalInclTax(0);
     $address->setTotalAmount('subtotal', 0);
     $address->setBaseTotalAmount('subtotal', 0);
     $address->setGwItemsTaxAmount(0);
     $address->setGwItemsBaseTaxAmount(0);
     $address->setGwBaseTaxAmount(0);
     $address->setGwTaxAmount(0);
     $address->setGwCardBaseTaxAmount(0);
     $address->setGwCardTaxAmount(0);
     return $this;
 }
 /**
  * Convert totals from ROPE request to quote address
  *
  * @param  Mage_Sales_Model_Quote_Address $address
  * @return void
  */
 protected function _convertTotals($address)
 {
     $address->setTaxAmount((double) $this->_request->total_tax_amount);
     $address->setBaseTaxAmount((double) $this->_request->total_tax_amount);
     /** @var $taxConfig Mage_Tax_Model_Config */
     $taxConfig = Mage::getSingleton('tax/config');
     $taxConfig->setShippingPriceIncludeTax(true);
     $method = 'rakuten_tablerate';
     $carrierTitle = 'Rakuten Checkout';
     $methodTitle = 'Tablerate';
     $rate = $this->_createShippingRate($method, $carrierTitle, $methodTitle)->setPrice((double) $this->_request->shipping);
     $address->addShippingRate($rate)->setShippingMethod($method)->setShippingAmountForDiscount(0);
     $address->setGrandTotal((double) $this->_request->total);
     $address->setBaseGrandTotal((double) $this->_request->total);
 }