/** * Class constructor/ * Init JavaScript */ public function __construct() { parent::__construct(); $this->_objectId = 'id'; $this->_blockGroup = 'referafriend'; $this->_controller = 'adminhtml_rules'; $this->_updateButton('save', 'label', Mage::helper('referafriend')->__('Save Rule')); $this->_updateButton('delete', 'label', Mage::helper('referafriend')->__('Delete Rule')); $this->_addButton('saveandcontinue', array('label' => Mage::helper('adminhtml')->__('Save And Continue Edit'), 'onclick' => 'saveAndContinueEdit()', 'class' => 'save'), -100); $this->_formScripts[] = "\n \n document.observe('dom:loaded', function() { \n \n if(\$('target_type').getValue() == " . AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY . ") { \n processOptionsForSignUp('none'); \n }\n \n }); \n \n\n function processOptionsForSignUp(type) { \n\n var actionOpt = \$('action_type').options;\n\n var addOption = true;\n for(i in actionOpt) { \n try{ \n if(actionOpt[i].value == " . AW_Referafriend_Model_Rule::TARGET_PURCHASE_AMOUNT . ") { \n addOption = false; \n if(type == 'none') { \$(actionOpt[i]).remove(); }\n } \n } catch(e) { }\n } \n \n if(type == 'block' && addOption === true) { \n var option= document.createElement('option');\n option.text= '" . AW_Referafriend_Model_Rule::getSignUpTargetAction() . "';\n option.value = " . AW_Referafriend_Model_Rule::TARGET_PURCHASE_AMOUNT . ";\n try\n {\n // for IE earlier than version 8\n actionOpt.add(option,actionOpt.options[null]);\n }\n catch (e)\n {\n actionOpt.add(option,null);\n } \n } \n \n if(type == 'none') { \n var orderTrig = document.getElementsByName('pre_trig_count');\n\n for(e in orderTrig) {\n if(orderTrig[e].type == 'text') {\n orderTrig[e].value = '0'; \n } \n } \n\n \$('pre_trig_count').up(1).hide();\n }\n else {\n \$('pre_trig_count').up(1).show();\n } \n \n }\n \n\n function saveAndContinueEdit(){\n editForm.submit(\$('edit_form').action+'back/edit/');\n }\n checkTarget = function(){\n \n if(\$('target_type').getValue() == " . AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY . ") { \n processOptionsForSignUp('none');\n }\n else { \n processOptionsForSignUp('block');\n }\n \n if ( ( \$('target_type').getValue() == " . AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY . " )\n || (\$('action_type').getValue() == " . AW_Referafriend_Model_Rule::ACTION_PERCENT_REF_FLATRATE . ") ){\n \$('applies').value = " . AW_Referafriend_Model_Rule::APPLY_ALL_CUSTOMERS . ";\n \$('applies').up(1).hide();\n } else {\n \$('applies').up(1).show();\n }\n if ( \$('target_type').getValue() == " . AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY . " ){\n \$('orders_limit').value = '0';\n \$('orders_limit').up(1).hide();\n } else {\n \$('orders_limit').up(1).show();\n } \n explainRule();\n };\n checkAction = function(){\n checkTarget();\n explainRule();\n };\n checkAction();\n "; }
public function calculate(AW_Referafriend_Model_Rule $rule, $signups, $amount, $qty, $trig = 0, $referrerId = null, $referralId = null) { /* * This is the switch of the logic below for: all customers and per customer * In per customer filter we simply add referralId to filter * Rule applies 1, means per customer * #8855 - Per customer rule doesn't work */ if ($rule->getApplies() != 1) { if ($trig && $referrerId && Mage::getResourceModel('referafriend/discount')->getDiscountEarnedCount($referrerId, $rule->getId()) >= $trig) { return 0; } } else { // Rule applies per customer, so we should consider not only referrarId and ruleId, but also referralId if ($trig && $referrerId && $referralId && Mage::getResourceModel('referafriend/discount')->getDiscountEarnedCountPerCustomer($referrerId, $referralId, $rule->getId()) >= $trig) { return 0; } } /***************************************************/ if (!$amount && $rule->getTargetType() != AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY) { return 0; } if ($amount) { $usedOrders = $amount; $amam = 0; foreach ($amount as $key => $am) { if ($qty[$key]['purchase_qty'] > 0) { $amam += $am['purchase_amount']; } } $amount = $amam; } if ($rule->getTargetAmount() > 0) { switch ($rule->getTargetType()) { case AW_Referafriend_Model_Rule::TARGET_SIGNUPS_QTY: $m = floor($signups / $rule->getTargetAmount()); $rest = fmod($signups, $rule->getTargetAmount()); $UsedSignups = $signups - $rest; if ($UsedSignups > 0) { $usedsignupModel = Mage::getModel('referafriend/usedsignups'); $usedsignupModel->saveUsedSignups($referrerId, $rule->getId(), $UsedSignups); } break; case AW_Referafriend_Model_Rule::TARGET_PURCHASED_QTY: $usedOrders = $qty; $qt = 0; foreach ($qty as $q) { $qt += $q['purchase_qty']; } $qty = $qt; $m = floor($qty / $rule->getTargetAmount()); $rest = fmod($qty, $rule->getTargetAmount()); $UsedQty = $qty - $rest; if ($UsedQty > 0) { foreach ($usedOrders as $order) { if ($UsedQty - $order['purchase_qty'] >= 0) { $usedByOrder = $order['purchase_qty']; $UsedQty = $UsedQty - $usedByOrder; } else { $usedByOrder = $order['purchase_qty'] - ($order['purchase_qty'] - $UsedQty); $UsedQty = 0; } $usedordersModel = Mage::getModel('referafriend/usedorders'); $usedordersModel->saveUsedOrder($order['order_id'], $rule->getId(), null, $usedByOrder); } } break; case AW_Referafriend_Model_Rule::TARGET_PURCHASE_AMOUNT: $m = floor($amount / $rule->getTargetAmount()); if ($rule->getPreTrigCount() != 0 && $m > $rule->getPreTrigCount()) { $m = $rule->getPreTrigCount(); } $rest = fmod($amount, $rule->getTargetAmount()); $UsedAmount = $amount - $rest; if ($UsedAmount > 0) { foreach ($usedOrders as $order) { if ($UsedAmount - $order['purchase_amount'] >= 0) { $usedByOrder = $order['purchase_amount']; $UsedAmount = $UsedAmount - $usedByOrder; } else { $usedByOrder = $order['purchase_amount'] - ($order['purchase_amount'] - $UsedAmount); $UsedAmount = 0; } $usedordersModel = Mage::getModel('referafriend/usedorders'); $usedordersModel->saveUsedOrder($order['order_id'], $rule->getId(), $usedByOrder); } } break; } } else { if ($amount > 0 && $rule->getTargetAmount() == 0 && $rule->getActionType() == AW_Referafriend_Model_Rule::ACTION_PERCENT_REF_FLATRATE) { if (!empty($amount)) { $discount = round($amount * $rule->getActionAmount() / 100, 2); } else { $discount = 0; } foreach ($usedOrders as $order) { $usedordersModel = Mage::getModel('referafriend/usedorders'); $usedordersModel->saveUsedOrder($order['order_id'], $rule->getId(), $order['purchase_amount']); } return $discount; } else { return 0; } } if ($m > 0) { switch ($rule->getActionType()) { case AW_Referafriend_Model_Rule::ACTION_PERCENT_REF_FLATRATE: if ($rule->getActionAmount() > 0 && count($amount)) { $discount = round($amount * $rule->getActionAmount() / 100, 2); } else { $discount = 0; } break; default: $discount = $m * $rule->getActionAmount(); } } else { $discount = 0; } return $discount; }