protected function recomputeCommissions() { $transactions = $this->getTransactionsSelect(); $this->rule->setTransactionsWhere($transactions->where, 't'); foreach ($transactions->getAllRowsIterator() as $record) { $newCommission = new Pap_Db_Commission(); $newCommission->setTypeId($record->get(Pap_Db_Table_Transactions::COMMISSIONTYPEID)); $newCommission->setTier($record->get(Pap_Db_Table_Transactions::TIER)); $newCommission->setGroupId($this->rule->getCommissionGroupId()); if ($record->get(Pap_Db_Table_Transactions::R_TYPE) == Pap_Common_Constants::TYPE_RECURRING) { $newCommission->setSubtype(Pap_Db_Table_Commissions::SUBTYPE_RECURRING); } else { $newCommission->setSubtype(Pap_Db_Table_Commissions::SUBTYPE_NORMAL); } try { $newCommission->loadFromData(); } catch (Exception $e) { $this->logMessage(sprintf("Error loading commission (%s)", $e->getMessage())); return; } $transaction = new Pap_Db_Transaction(); $transaction->fillFromRecord($record); $transaction->recompute($newCommission); $transaction->update(); $refundTransaction = $transaction->getRefundOrChargebackTransaction(); if (!is_null($refundTransaction) && $refundTransaction->getStatus() != Pap_Common_Constants::STATUS_DECLINED && $refundTransaction->getPayoutStatus() == Pap_Common_Constants::PSTATUS_UNPAID) { $refundTransaction->recompute($newCommission); $refundTransaction->update(); } } $this->logMessage(sprintf("Transactions were updated based on new commission group %s", $this->rule->getCommissionGroupId())); }
/** * returns commission object * * @param int $tier * @param string $commissionGroupId * @param string $commissionTypeId * @return Pap_Db_Commission */ public function getCommission($tier, $commissionGroupId, $commissionTypeId) { $commission = new Pap_Db_Commission(); $commission->setGroupId($commissionGroupId); $commission->setTypeId($commissionTypeId); $commission->setTier($tier); try { $commission->loadFromData(); } catch (Gpf_DbEngine_NoRowException $e) { throw new Gpf_Exception("Cannot load commission for tier=".$tier.", comgroupid=".$commissionGroupId.", commtypeid=".$commissionTypeId); } return $commission; }
private function saveCommissionRecord($tier, $subtype, $commissionType, $commissionValue) { $commission = new Pap_Db_Commission(); $commission->setTier($tier); $commission->setSubtype($subtype); $commission->setGroupId($this->commissionGroupId); $commission->setTypeId($this->commissionTypeId); if ($commissionValue == null) { $commissionValue = 0; } try { $commission->loadFromData(); // loaded, change commission value and save $commission->setCommType($commissionType); $commission->setCommission($commissionValue); $commission->save(); } catch(Gpf_DbEngine_NoRowException $e) { // doesn't exist, insert new record $commission->setCommType($commissionType); $commission->setCommission($commissionValue); $commission->insert(); } catch(Gpf_DbEngine_TooManyRowsException $e) { // there are multiple rows, it is a mistake $commission->deleteUnusedCommissions($tier, $subtype, $this->commissionGroupId, $this->commissionTypeId, 'exact'); $commission->setCommType($commissionType); $commission->setCommission($commissionValue); $commission->insert(); } }
/** * @param Pap_Db_Transaction $transaction * @return Pap_Db_Commission */ protected function getCommissionForTransaction(Pap_Db_Transaction $transaction) { $commission = new Pap_Db_Commission(); $commission->setCommissionTypeId($transaction->getCommissionTypeId()); $commission->setGroupId($transaction->getCommissionGroupId()); $commission->setTier($transaction->getTier()); try { $commission->loadFromData(array(Pap_Db_Table_Commissions::TYPE_ID, Pap_Db_Table_Commissions::GROUP_ID)); } catch (Gpf_Exception $e) { $userInGroup = Pap_Db_Table_UserInCommissionGroup::getInstance()->getUserCommissionGroup($transaction->getUserId(), $transaction->getCampaignId()); $commission->setGroupId($userInGroup->getCommissionGroupId()); try { $commission->loadFromData(array(Pap_Db_Table_Commissions::TYPE_ID, Pap_Db_Table_Commissions::GROUP_ID, Pap_Db_Table_Commissions::TIER)); } catch (Gpf_Exception $e) { throw new Gpf_Exception($this->_('Unable to find commision for transaction id=' . $transaction->getId())); } } return $commission; }