*/ class Mage_Weee_Helper_Data extends Mage_Core_Helper_Abstract { const XML_PATH_FPT_ENABLED = 'tax/weee/enable'; protected $_storeDisplayConfig = array(); /** * Get weee amount display type on product view page * * @param mixed $store * @return int */ public function getPriceDisplayType($store = null) { return Mage::getStoreConfig('tax/weee/display', $store); } /** * Get weee amount display type on product list page * * @param mixed $store * @return int */ public function getListPriceDisplayType($store = null) { return Mage::getStoreConfig('tax/weee/display_list', $store); } /** * Get weee amount display type in sales modules * * @param mixed $store * @return int */ public function getSalesPriceDisplayType($store = null) { return Mage::getStoreConfig('tax/weee/display_sales', $store); } /** * Get weee amount display type in email templates * * @param mixed $store * @return int */ public function getEmailPriceDisplayType($store = null) { return Mage::getStoreConfig('tax/weee/display_email', $store); } /** * Check if weee tax amount should be discounted * * @param mixed $store * @return bool */ public function isDiscounted($store = null) { return Mage::getStoreConfigFlag('tax/weee/discount', $store); } /** * Check if weee tax amount should be taxable * * @param mixed $store * @return bool */ public function isTaxable($store = null) { return Mage::getStoreConfigFlag('tax/weee/apply_vat', $store); } /** * Check if weee tax amount should be included to subtotal * * @param mixed $store * @return bool */ public function includeInSubtotal($store = null) { return Mage::getStoreConfigFlag('tax/weee/include_in_subtotal', $store); } /** * Get weee tax amount for product based on shipping and billing addresses, website and tax settings * * @param Mage_Catalog_Model_Product $product * @param null|Mage_Customer_Model_Address_Abstract $shipping * @param null|Mage_Customer_Model_Address_Abstract $billing * @param mixed $website * @param bool $calculateTaxes * @return float */ public function getAmount($product, $shipping = null, $billing = null, $website = null, $calculateTaxes = false) { if ($this->isEnabled()) { return Mage::getSingleton('weee/tax')-> getWeeeAmount($product, $shipping, $billing, $website, $calculateTaxes); } return 0; } /** * Returns diaplay type for price accordingly to current zone * * @param Mage_Catalog_Model_Product $product * @param array|null $compareTo * @param string $zone * @param Mage_Core_Model_Store $store * @return bool|int */ public function typeOfDisplay($product, $compareTo = null, $zone = null, $store = null) { if (!$this->isEnabled($store)) { return false; } switch ($zone) { case 'product_view': $type = $this->getPriceDisplayType($store); break; case 'product_list': $type = $this->getListPriceDisplayType($store); break; case 'sales': $type = $this->getSalesPriceDisplayType($store); break; case 'email': $type = $this->getEmailPriceDisplayType($store); break; default: if (Mage::registry('current_product')) { $type = $this->getPriceDisplayType($store); } else { $type = $this->getListPriceDisplayType($store); } break; } if (is_null($compareTo)) { return $type; } else { if (is_array($compareTo)) { return in_array($type, $compareTo); } else { return $type == $compareTo; } } } /** * Proxy for Mage_Weee_Model_Tax::getProductWeeeAttributes() * * @param Mage_Catalog_Model_Product $product * @param null|false|Varien_Object $shipping * @param null|false|Varien_Object $billing * @param Mage_Core_Model_Website $website * @param bool $calculateTaxes * @return array */ public function getProductWeeeAttributes($product, $shipping = null, $billing = null, $website = null, $calculateTaxes = false) { return Mage::getSingleton('weee/tax') ->getProductWeeeAttributes($product, $shipping, $billing, $website, $calculateTaxes); } /** * Returns applied weee taxes * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return array */ public function getApplied($item) { if ($item instanceof Mage_Sales_Model_Quote_Item_Abstract) { if ($item->getHasChildren() && $item->isChildrenCalculated()) { $result = array(); foreach ($item->getChildren() as $child) { $childData = $this->getApplied($child); if (is_array($childData)) { $result = array_merge($result, $childData); } } return $result; } } /** * if order item data is old enough then weee_tax_applied cab be * not valid serialized data */ $data = $item->getWeeeTaxApplied(); if (empty($data)){ return array(); } return unserialize($item->getWeeeTaxApplied()); } /** * Sets applied weee taxes * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param array $value * @return Mage_Weee_Helper_Data */ public function setApplied($item, $value) { $item->setWeeeTaxApplied(serialize($value)); return $this; } /** * Returns array of weee attributes allowed for display * * @param Mage_Catalog_Model_Product $product * @return array */ public function getProductWeeeAttributesForDisplay($product) { if ($this->isEnabled()) { return $this->getProductWeeeAttributes($product, null, null, null, $this->typeOfDisplay($product, 1)); } return array(); } /** * Get Product Weee attributes for price renderer * * @param Mage_Catalog_Model_Product $product * @param null|false|Varien_Object $shipping Shipping Address * @param null|false|Varien_Object $billing Billing Address * @param null|Mage_Core_Model_Website $website * @param mixed $calculateTaxes * @return array */ public function getProductWeeeAttributesForRenderer($product, $shipping = null, $billing = null, $website = null, $calculateTaxes = false) { if ($this->isEnabled()) { return $this->getProductWeeeAttributes( $product, $shipping, $billing, $website, $calculateTaxes ? $calculateTaxes : $this->typeOfDisplay($product, 1) ); } return array(); } /** * Returns amount to display * * @param Mage_Catalog_Model_Product $product * @return int */ public function getAmountForDisplay($product) { if ($this->isEnabled()) { return Mage::getModel('weee/tax') ->getWeeeAmount($product, null, null, null, $this->typeOfDisplay($product, 1)); } return 0; } /** * Returns original amount * * @param Mage_Catalog_Model_Product $product * @return int */ public function getOriginalAmount($product) { if ($this->isEnabled()) { return Mage::getModel('weee/tax')->getWeeeAmount($product, null, null, null, false, true); } return 0; } /** * Adds HTML containers and formats tier prices accordingly to the currency used * * @param Mage_Catalog_Model_Product $product * @param array $tierPrices * @return Mage_Weee_Helper_Data */ public function processTierPrices($product, &$tierPrices) { $weeeAmount = $this->getAmountForDisplay($product); $store = Mage::app()->getStore(); foreach ($tierPrices as $index => &$tier) { $html = $store->formatPrice($store->convertPrice( Mage::helper('tax')->getPrice($product, $tier['website_price'], true)+$weeeAmount), false); $tier['formated_price_incl_weee'] = '' . $html . ''; $html = $store->formatPrice($store->convertPrice( Mage::helper('tax')->getPrice($product, $tier['website_price'])+$weeeAmount), false); $tier['formated_price_incl_weee_only'] = '' . $html . ''; $tier['formated_weee'] = $store->formatPrice($store->convertPrice($weeeAmount)); } return $this; } /** * Check if fixed taxes are used in system * * @param Mage_Core_Model_Store $store * @return bool */ public function isEnabled($store = null) { return Mage::getStoreConfig(self::XML_PATH_FPT_ENABLED, $store); } /** * Returns all summed WEEE taxes with all local taxes applied * * @throws Mage_Exception * @param array $attributes Array of Varien_Object, result from getProductWeeeAttributes() * @return float */ public function getAmountInclTaxes($attributes) { if (is_array($attributes)) { $amount = 0; foreach ($attributes as $attribute) { /* @var $attribute Varien_Object */ $amount += $attribute->getAmount() + $attribute->getTaxAmount(); } } else { throw new Mage_Exception('$attributes must be an array'); } return (float)$amount; } }