public function collect(Mage_Sales_Model_Quote_Address $address) { $address->setData('zitec_dpd_cashondelivery_surcharge', 0); $address->setData('base_zitec_dpd_cashondelivery_surcharge', 0); $address->setData('zitec_dpd_cashondelivery_surcharge_tax', 0); $address->setData('base_zitec_dpd_cashondelivery_surcharge_tax', 0); $paymentMethod = $address->getQuote()->getPayment()->getMethod(); if ($paymentMethod == Mage::helper('zitec_dpd')->getDpdPaymentCode() && $address->getAddressType() == 'shipping') { $quote = $address->getQuote(); /* @var $quote Mage_Sales_Model_Quote */ $shippingAddress = $quote->getShippingAddress(); $request = new Varien_Object(); $request->setWebsiteId(Mage::helper('zitec_dpd/payment')->getWebsiteId()); $request->setDestCountryId($shippingAddress->getCountryId()); $request->setDestRegionId($shippingAddress->getRegionId()); $request->setDestPostcode($shippingAddress->getPostcode()); $request->setPackageWeight($shippingAddress->getWeight()); if ($this->_getTaxHelper()->shippingPriceIncludesTax($address->getQuote()->getStoreId())) { $request->setData('zitec_table_price', $shippingAddress->getBaseSubtotalInclTax()); } else { $request->setData('zitec_table_price', $shippingAddress->getBaseSubtotal()); } $request->setMethod(str_replace(Mage::helper('zitec_dpd')->getDPDCarrierCode() . '_', '', $shippingAddress->getShippingMethod())); $tablerateSurcharge = Mage::getResourceModel('zitec_dpd/carrier_tablerate')->getCashOnDeliverySurcharge($request); if (is_null($tablerateSurcharge)) { return $this; } elseif (!empty($tablerateSurcharge)) { $baseCashondeliverySurcharge = $this->_getHelper()->calculateQuoteBaseCashOnDeliverySurcharge($quote, $tablerateSurcharge); } else { $baseCashondeliverySurcharge = $this->_getHelper()->returnDefaultBaseCashOnDeliverySurcharge($quote); } if (!isset($baseCashondeliverySurcharge)) { return $this; } $baseCurrencyCode = $quote->getStore()->getBaseCurrencyCode(); $currentCurrencyCode = $quote->getStore()->getCurrentCurrencyCode(); $cashondeliverySurcharge = Mage::helper('directory')->currencyConvert($baseCashondeliverySurcharge, $baseCurrencyCode, $currentCurrencyCode); $address->setData('zitec_dpd_cashondelivery_surcharge', $cashondeliverySurcharge); $address->setData('base_zitec_dpd_cashondelivery_surcharge', $baseCashondeliverySurcharge); $this->_calculateSurchargeSalesTax($address); $quote->save(); } $address->setGrandTotal($address->getGrandTotal() + $address->getData('zitec_dpd_cashondelivery_surcharge')); $address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getData('base_zitec_dpd_cashondelivery_surcharge')); return $this; }
public function getSurchage() { if ($this->_surcharge === null) { $order = $this->fetchOrder(); if ($order) { $this->_surcharge = $order->getData('base_zitec_dpd_cashondelivery_surcharge'); } else { $quote = Mage::helper('zitec_dpd/payment')->getQuote(); /* @var $quote Mage_Sales_Model_Quote */ if ($quote) { $shippingAddress = $quote->getShippingAddress(); $request = new Varien_Object(); $request->setWebsiteId(Mage::helper('zitec_dpd/payment')->getWebsiteId()); $request->setDestCountryId($shippingAddress->getCountryId()); $request->setDestRegionId($shippingAddress->getRegionId()); $request->setDestPostcode($shippingAddress->getPostcode()); $request->setPackageWeight($shippingAddress->getWeight()); if ($this->_getTaxHelper()->shippingPriceIncludesTax($quote->getStoreId())) { $request->setData('zitec_table_price', $shippingAddress->getBaseSubtotalInclTax()); } else { $request->setData('zitec_table_price', $shippingAddress->getBaseSubtotal()); } $request->setMethod(str_replace(Mage::helper('zitec_dpd')->getDPDCarrierCode() . '_', '', $shippingAddress->getShippingMethod())); $tablerateSurcharge = Mage::getResourceModel('zitec_dpd/carrier_tablerate')->getCashOnDeliverySurcharge($request); if (is_null($tablerateSurcharge) || is_array($tablerateSurcharge) && is_null($tablerateSurcharge['cashondelivery_surcharge'])) { return null; } elseif (!empty($tablerateSurcharge)) { $this->_surcharge = $this->_getHelper()->calculateQuoteBaseCashOnDeliverySurcharge($quote, $tablerateSurcharge); } else { $this->_surcharge = $this->_getHelper()->returnDefaultBaseCashOnDeliverySurcharge($quote); } } } } return $this->_surcharge; }