/** * Create a new rate * * @param MatheusGontijo_EasyShippingRules_Model_Custommethod $method * @param MatheusGontijo_EasyShippingRules_Model_Rule $rule * * @return Mage_Shipping_Model_Rate_Result_Method */ public function createRate(MatheusGontijo_EasyShippingRules_Model_Custommethod $method, MatheusGontijo_EasyShippingRules_Model_Rule $rule) { /** @var Mage_Shipping_Model_Rate_Result_Method $rate */ $rate = Mage::getModel('shipping/rate_result_method'); $rate->setCarrier(MatheusGontijo_EasyShippingRules_Model_Shipping_Carrier::EASY_SHIPPING_RULES_CODE . '_' . $method->getEasyshippingrulesCarrierId()); $rate->setCarrierTitle($method->getCarrierName()); $rate->setMethod(MatheusGontijo_EasyShippingRules_Model_Shipping_Carrier::EASY_SHIPPING_RULES_CODE . '_' . $method->getId() . '_' . $rule->getId()); $rate->setMethodTitle($method->getName()); $price = 0; if ($method->getPricePercentage()) { $price = $method->getPricePercentage(); } else { /** * it makes no sense apply all price conditions * because each iteration will replace last one. * In this case admin user should setting price in method, not in rules */ foreach ($method->getRules() as $rule) { $price = $rule->getPricePercentage(); break; } } if ($method->getPriceAction() == MatheusGontijo_EasyShippingRules_Helper_Data::FIXED_PER_ITEM_QTY_PRICE_ACTION) { $price = Mage::getSingleton('checkout/cart')->getQuote()->getItemsQty() * $price; } elseif ($method->getPriceAction() == MatheusGontijo_EasyShippingRules_Helper_Data::SUBTOTAL_PERCENTAGE_PRICE_ACTION) { $price = $this->_getSubtotal() * ($price / 100); } $rate->setPrice($price); return $rate; }