Пример #1
0
 /**
  * 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        ";
 }
Пример #2
0
 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;
 }