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; }