Ejemplo n.º 1
0
 public static function getLogin()
 {
     if (!self::$user && isset($_SESSION[self::KEY_USER_ID])) {
         self::$user = \MemberQuery::create()->findOneById($_SESSION[self::KEY_USER_ID]);
     }
     return self::$user;
 }
Ejemplo n.º 2
0
 public function action_changeShort()
 {
     echo 'test2';
     return;
     $member = \MemberQuery::create()->findOneById(1);
     $con = \Propel::getConnection();
     if (!$con->beginTransaction()) {
         throw new \Exception('Could not begin transaction');
     }
     try {
         $transfer = \TransferQuery::create()->findOneById(1);
         if (!$transfer) {
             $transfer = new \Transfer();
             $transfer->setMemberId($member->getId());
             $transfer->save($con);
             $transfer = \TransferQuery::create()->findOneById(1);
         }
         $transfer->setAmount($transfer->getAmount() + 2);
         $transfer->save($con);
         if (!$con->commit()) {
             throw new \Exception('Could not commit transaction');
         }
     } catch (\Exception $e) {
         $con->rollBack();
         throw $e;
     }
     print_r('<pre>');
     print_r($transfer->toArray());
     print_r('</pre>');
 }
Ejemplo n.º 3
0
 public function action_allinvoices()
 {
     $members = \MemberQuery::create()->filterByDeletionDate(null, \Criteria::ISNULL)->filterByNum('101', \Criteria::NOT_EQUAL)->orderBy('num')->find();
     $result = '<div class="container"><div class="row sheet">
   <table class="table2Debug">
     <tbody>
         <tr>
           <th>Member</th>
           <th>Total</th>
           <th>Reasons Total</th>
           <th>Quantity</th>
           <th>Reasons</th>
         </tr>';
     $reasons = \Tbmt\Localizer::get('view.account.tabs.invoice.transaction_reasons');
     foreach ($members as $member) {
         $result .= '<tr>';
         $result .= '<td>' . $member->getNum() . ' - ' . $member->getFirstName() . ' - ' . $member->getLastName() . '</td>';
         $result .= '<td>' . \Tbmt\view\Factory::currencyArrToString($member->getOutstandingTotal()) . '</td>';
         $result .= '<td colspan="3"></td>';
         $result .= '</tr>';
         $transactions = \TransactionQuery::create()->join('Transfer')->useTransferQuery()->filterByMember($member)->endUse()->select(['Reason'])->withColumn('count(*)', 'Quantity')->withColumn('sum(Transaction.Amount)', 'Total')->groupBy('Transfer.Currency')->groupBy('Transaction.Reason')->find();
         foreach ($transactions as $transaction) {
             $result .= '<tr>';
             $result .= '<td colspan="2"></td>';
             $result .= '<td>' . \Tbmt\Localizer::numFormat($transaction['Total']) . '</td>';
             $result .= '<td>' . $transaction['Quantity'] . '</td>';
             $result .= '<td>' . $reasons[$transaction['Reason']] . '</td>';
             $result .= '</tr>';
         }
     }
     $result .= '</tbody></table></div></div>';
     return $result;
 }
 public function render(array $params = array())
 {
     if (!isset($params['member']) && !$params['member'] instanceof \Member) {
         throw new \Exception('Invalid param member for account index view.');
     }
     $this->members = \MemberQuery::create()->filterByPaidDate(null, \Criteria::ISNULL)->filterByDeletionDate(null, \Criteria::ISNULL)->find();
     return $this->renderFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tab.dev_paying.account.html', $params);
 }
Ejemplo n.º 5
0
 public static function validatePasswordResetForm(array $data = array())
 {
     $data = self::initPasswordResetForm($data);
     $res = \Tbmt\Validator::getErrors($data, self::$PASSWORD_RESET_FORM_FILTERS);
     if ($res !== false) {
         return [false, $res, null];
     }
     $recipient = \MemberQuery::create()->filterByDeletionDate(null, \Criteria::ISNULL)->findOneByNum($data['num']);
     if ($recipient == null) {
         return [false, ['num' => \Tbmt\Localizer::get('error.member_num')], null];
     }
     return [true, $data, $recipient];
 }
 public function render(array $params = array())
 {
     if (!isset($params['member']) && !$params['member'] instanceof \Member) {
         throw new \Exception('Invalid param "member" for account index view.');
     }
     $this->totalMemberCount = \MemberQuery::create()->count();
     $this->totalPaidMemberCount = \MemberQuery::create()->filterByPaidDate(null, \Criteria::ISNOTNULL)->count();
     $this->absoluteTransferredTotal = '';
     // $this->absoluteTransferredTotal = \MemberQuery::create()
     //   ->withColumn('count(*)', 'nbComments')
     //   ->count();
     $this->member = $params['member'];
     $this->members = \MemberQuery::create()->filterByType(-1, \Criteria::NOT_EQUAL)->orderBy(\MemberPeer::ID, \Criteria::ASC)->limit(300)->find();
     return $this->renderFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tab.total_invoice.account.html', $params);
 }
Ejemplo n.º 7
0
 /**
  * Remind all unpaid members after 7 days.
  *
  * @return
  */
 public static function emailReminder($now = null, $allowedDays = '-7 days')
 {
     $con = \Propel::getConnection();
     if (!$con->beginTransaction()) {
         throw new \Exception('Could not begin transaction');
     }
     if ($now === null) {
         $now = time();
     }
     $before7Days = strtotime($allowedDays, $now);
     $result = '';
     try {
         $unpaidMembers = \MemberQuery::create()->filterByIsExtended(1)->filterByPaidDate(null, \Criteria::ISNULL)->filterBySignupDate($before7Days, \Criteria::LESS_EQUAL)->filterByDeletionDate(null, \Criteria::ISNULL)->joinReservedPaidEventRelatedByPaidId(null, \Criteria::LEFT_JOIN)->where(\ReservedPaidEventPeer::PAID_ID . ' is null', null)->joinMemberData(null, \Criteria::LEFT_JOIN)->with('MemberData')->condition('reminderMailIsNull', 'MemberData.FeeReminderEmail is null', null)->condition('reminderMailEqualZero', 'MemberData.FeeReminderEmail = ?', 0)->where(array('reminderMailIsNull', 'reminderMailEqualZero'), \Criteria::LOGICAL_OR)->find();
         $result .= "7 days reminder email job:\n\n";
         if (count($unpaidMembers) > 0) {
             $result .= "Found " . count($unpaidMembers) . " members:\n\n";
         } else {
             $result .= "No member to remind found.";
         }
         foreach ($unpaidMembers as $member) {
             $totalAdvertised = $member->getAdvertisedCountTotal();
             $result .= "Member: " . $member->getNum() . "\n";
             $result .= "Advertised count: " . $totalAdvertised . "\n";
             if ($totalAdvertised === 0) {
                 MailHelper::sendFeeReminder($member);
                 MailHelper::sendFeeReminderReferrer($member->getReferrerMember(), $member);
             } else {
                 MailHelper::sendFeeReminderWithAdvertisings($member);
                 MailHelper::sendFeeReminderWithAdvertisingsReferrer($member->getReferrerMember(), $member);
             }
             $data = $member->getMemberData();
             if (!$data) {
                 $data = new \MemberData();
                 $data->setMemberId($member->getId());
             }
             $data->setFeeReminderEmail(1);
             $data->save($con);
             $result .= "---------\n\n";
         }
         if (!$con->commit()) {
             throw new \Exception('Could not commit transaction');
         }
     } catch (\Exception $e) {
         $con->rollBack();
         throw $e;
     }
     return $result;
 }
Ejemplo n.º 8
0
 public static function validateBonusTransactionForm(array $data = array())
 {
     $data = self::initBonusTransactionForm($data);
     $res = \Tbmt\Validator::getErrors($data, self::$BONUS_TRANSACTION_FORM_FILTERS);
     if ($res !== false) {
         return [false, $res, null];
     }
     $recipient = \MemberQuery::create()->filterByDeletionDate(null, Criteria::ISNULL)->findOneByNum($data['recipient_num']);
     if ($recipient == null) {
         return [false, ['recipient_num' => \Tbmt\Localizer::get('error.member_num')], null];
     }
     if (!$recipient->hadPaid()) {
         return [false, ['recipient_num' => \Tbmt\Localizer::get('error.member_num_unpaid')], null];
     }
     return [true, $data, $recipient];
 }
Ejemplo n.º 9
0
 public static function validateInvitationForm(array $data = array())
 {
     $data = self::initInvitationForm($data);
     if ($data['type'] !== \Member::TYPE_SUB_PROMOTER) {
         $data['promoter_num'] = '';
     }
     if ($data['type'] === \Member::TYPE_SUB_PROMOTER && !$data['promoter_num']) {
         return [false, ['promoter_num' => \Tbmt\Localizer::get('error.empty')], null];
     }
     $recipient = \MemberQuery::create()->filterByDeletionDate(null, Criteria::ISNULL)->findOneByNum($data['promoter_num']);
     if ($recipient == null) {
         return [false, ['promoter_num' => \Tbmt\Localizer::get('error.member_num')], null];
     }
     if ($recipient->getType() !== \Member::TYPE_PROMOTER) {
         return [false, ['promoter_num' => \Tbmt\Localizer::get('error.sub_promoter_to_promoter')], null];
     }
     if (!$recipient->hadPaid()) {
         return [false, ['promoter_num' => \Tbmt\Localizer::get('error.member_num_unpaid')], null];
     }
     return [true, $data, $recipient];
 }
Ejemplo n.º 10
0
 public static function pushRootAccounts()
 {
     $con = \Propel::getConnection();
     if (!$con->beginTransaction()) {
         throw new \Exception('Could not begin transaction');
     }
     $now = time();
     try {
         $rootAccountNums = \SystemStats::$ROOT_ACCOUNTS_NUM;
         $rootAccounts = \MemberQuery::create()->filterByNum($rootAccountNums, \Criteria::IN)->filterByDeletionDate(null, \Criteria::ISNULL)->find();
         $arrRootAccounts = [];
         foreach ($rootAccounts as $account) {
             $transfers = $account->getOpenCollectingTransfers($con);
             $arrTransfers = [];
             foreach ($transfers as $transfer) {
                 $transfer->executeTransfer($account);
                 $transfer->save($con);
                 $arrTransfers[] = $transfer->toArray();
             }
             if (count($arrTransfers) === 0) {
                 continue;
             }
             $account->save($con);
             $arrRootAccounts[] = $account->toArray() + ['Transfers' => $arrTransfers];
         }
         $client = new ApiClient();
         print_r('<pre>');
         print_r([$client->pushRootAccounts($arrRootAccounts)]);
         print_r('</pre>');
         throw new \Exception('test');
         if (!$con->commit()) {
             throw new \Exception('Could not commit transaction');
         }
     } catch (\Exception $e) {
         $con->rollBack();
         throw $e;
     }
 }
 public function render(array $params = array())
 {
     if (!isset($params['member']) && !$params['member'] instanceof \Member) {
         throw new \Exception('Invalid param member for account index view.');
     }
     $this->member = $params['member'];
     $this->recipient = isset($params['recipient']) ? $params['recipient'] : null;
     $this->formVal = \Member::initBonusLevelForm(isset($params['formVal']) ? $params['formVal'] : $_REQUEST);
     $this->formErrors = isset($params['formErrors']) ? $params['formErrors'] : [];
     $this->successmsg = isset($params['successmsg']) ? true : false;
     $query = \MemberQuery::create()->joinActivity()->select(['Num', 'BonusLevel', 'Activity.Meta', 'Activity.Date'])->where('Activity.MemberId = ?', $this->member->getId())->orderBy('Activity.Date', \Criteria::DESC)->limit(100);
     $objBonusMembers = $query->find();
     $arrBonusMembers = [];
     $currencySymbol = \Tbmt\Localizer::get('currency_symbol.' . \Transaction::$BASE_CURRENCY);
     $dateFormat = \Tbmt\Localizer::get('datetime_format_php.long');
     foreach ($objBonusMembers as $bonusMembers) {
         $meta = json_decode($bonusMembers['Activity.Meta'], true);
         $amount = isset($meta[\Activity::MK_BONUS_PAYMENT_AMOUNT]) ? \Tbmt\Localizer::currencyFormat($meta[\Activity::MK_BONUS_PAYMENT_AMOUNT], $currencySymbol) : ' - ';
         $arrBonusMembers[] = [$bonusMembers['Num'], $amount, (new \DateTime($bonusMembers['Activity.Date']))->format($dateFormat)];
     }
     $this->bonusMembers = $arrBonusMembers;
     return $this->renderFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tab.bonus_levels.account.html', $params);
 }
Ejemplo n.º 12
0
 public function validateSignupForm(array $data = array())
 {
     $data['referral_member_num'] = Session::hasValidToken();
     $data = $this->initSignupForm($data);
     if ($data['password'] !== $data['password2']) {
         return [false, ['password' => \Tbmt\Localizer::get('error.password_unequal')], null, null];
     }
     $res = \Tbmt\Validator::getErrors($data, $this->SIGNUP_FORM_FILTERS);
     if ($res !== false) {
         return [false, $res, null, null];
     }
     // Validate member number exists
     $parentMember = \MemberQuery::create()->filterByDeletionDate(null, \Criteria::ISNULL)->filterByType(\Member::TYPE_SYSTEM, \Criteria::NOT_EQUAL)->findOneByHash($data['referral_member_num'])->findOneByIsExtended(1);
     if ($parentMember == null || $parentMember->getNum() == 0) {
         return [false, ['referral_member_num' => \Tbmt\Localizer::get('error.referral_member_num')], null, null];
     }
     // else if ( $parentMember->hadPaid() ) {
     //   return [false, ['referral_member_num' => \Tbmt\Localizer::get('error.referrer_paiment_outstanding')], null];
     // }
     $invitation = null;
     if ($data['invitation_code'] !== '') {
         $invitation = \InvitationQuery::create()->findOneByHash($data['invitation_code']);
         if ($parentMember == null) {
             return [false, ['invitation_code' => \Tbmt\Localizer::get('error.invitation_code_inexisting')], null, null];
         }
         if ($invitation->getMemberId() != $parentMember->getId()) {
             return [false, ['invitation_code' => \Tbmt\Localizer::get('error.invitation_code_invalid')], null, null];
         }
         if ($invitation->getAcceptedMemberId()) {
             return [false, ['invitation_code' => \Tbmt\Localizer::get('error.invitation_code_used')], null, null];
         }
     }
     if (!isset($data['email'])) {
         $data['email'] = '';
     }
     return [true, $data, $parentMember, $invitation];
 }
Ejemplo n.º 13
0
 public static function setUpBonusMembers($doReset = true, $options = false)
 {
     if (!\MemberQuery::create()->findOneByNum(SystemStats::ACCOUNT_NUM_SYSTEM)) {
         \Tbmt\SystemSetup::setCon(self::$con);
         \Tbmt\SystemSetup::doSetup();
     }
     $options = array_merge(['IT' => true, 'VL' => true, 'OL' => true, 'PM' => true, 'VS2' => true, 'VS1' => true], $options ? $options : []);
     $currentParent = null;
     $currentBonusIds = '[]';
     /* it specialists
        ---------------------------------------------*/
     $IT_t = 0;
     $IT = null;
     if ($options['IT']) {
         if ($doReset === true || self::$it_member === null) {
             $IT_t = 0;
             $IT = self::$it_member = DbEntityHelper::createMember($currentParent, ['Type' => Member::TYPE_ITSPECIALIST, 'FundsLevel' => Member::FUNDS_LEVEL2]);
         } else {
             $IT = self::$it_member;
             $IT_t = self::$it_member->getOutstandingTotal()[DbEntityHelper::$currency];
         }
         $currentBonusIds = MemberBonusIds::populate($IT, '[]');
     }
     /* marketing leader
        ---------------------------------------------*/
     $VL_t = 0;
     $VL = null;
     if ($options['VL']) {
         $VL = DbEntityHelper::createMember($currentParent, ['Type' => Member::TYPE_MARKETINGLEADER, 'FundsLevel' => Member::FUNDS_LEVEL2, 'BonusIds' => $currentBonusIds]);
         $currentBonusIds = MemberBonusIds::populate($VL, $VL->getBonusIds());
         $currentParent = $VL;
     }
     /* org leader
        ---------------------------------------------*/
     $OL_t = 0;
     $OL = null;
     if ($options['OL']) {
         $OL = DbEntityHelper::createMember($currentParent, ['Type' => Member::TYPE_ORGLEADER, 'FundsLevel' => Member::FUNDS_LEVEL2, 'BonusIds' => $currentBonusIds]);
         $currentBonusIds = MemberBonusIds::populate($OL, $OL->getBonusIds());
         $currentParent = $OL;
     }
     /* promoter
        ---------------------------------------------*/
     $PM_t = 0;
     $PM = null;
     if ($options['PM']) {
         $IT_t += Transaction::getAmountForReason(Transaction::REASON_IT_BONUS);
         $VL_t += Transaction::getAmountForReason(Transaction::REASON_VL_BONUS);
         if (!$OL) {
             $OL_t =& $VL_t;
         }
         $OL_t += Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_LVL2) + Transaction::getAmountForReason(Transaction::REASON_OL_BONUS) + Transaction::getAmountForReason(Transaction::REASON_PM_BONUS);
         // TODO question:
         // kriegt der ol in diesem fall 22 oder 21 euro ?
         // 22 weil der ja den bonus der promoters kriegt wenn er jemand
         // wirbt ohne das ein promoter dazwischen ist?
         if ($currentParent) {
             $PM = DbEntityHelper::createSignupMember($currentParent);
         } else {
             $PM = DbEntityHelper::createMember($currentParent, ['BonusIds' => $currentBonusIds]);
             $IT_t -= Transaction::getAmountForReason(Transaction::REASON_IT_BONUS);
             $VL_t -= Transaction::getAmountForReason(Transaction::REASON_VL_BONUS);
             $OL_t -= Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_LVL2) + Transaction::getAmountForReason(Transaction::REASON_OL_BONUS) + Transaction::getAmountForReason(Transaction::REASON_PM_BONUS);
         }
         $PM->setType(Member::TYPE_PROMOTER)->setFundsLevel(Member::FUNDS_LEVEL2)->save(self::$con);
         $currentParent = $PM;
     }
     /* funds level 2
        ---------------------------------------------*/
     $VS2_t = 0;
     $VS2 = null;
     if ($options['VS2']) {
         $IT_t += Transaction::getAmountForReason(Transaction::REASON_IT_BONUS) * 3;
         $VL_t += Transaction::getAmountForReason(Transaction::REASON_VL_BONUS) * 3;
         if (!$OL) {
             $OL_t =& $VL_t;
         }
         $OL_t += Transaction::getAmountForReason(Transaction::REASON_OL_BONUS) * 3;
         if (!$PM) {
             $PM_t =& $OL_t;
         }
         $PM_t += Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_LVL2) + Transaction::getAmountForReason(Transaction::REASON_PM_BONUS) + 2 * (Transaction::getAmountForReason(Transaction::REASON_PM_BONUS) + Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_INDIRECT));
         $VS2_t += 2 * Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_LVL1);
         $VS2 = DbEntityHelper::createSignupMember($currentParent);
         DbEntityHelper::createSignupMember($VS2);
         DbEntityHelper::createSignupMember($VS2);
         $currentParent = $VS2;
     }
     /* funds level 1
        ---------------------------------------------*/
     $VS1_t = 0;
     $VS1 = null;
     if ($options['VS1']) {
         $IT_t += Transaction::getAmountForReason(Transaction::REASON_IT_BONUS);
         $VL_t += Transaction::getAmountForReason(Transaction::REASON_VL_BONUS);
         if (!$OL) {
             $OL_t =& $VL_t;
         }
         $OL_t += Transaction::getAmountForReason(Transaction::REASON_OL_BONUS);
         if (!$PM) {
             $PM_t =& $OL_t;
         }
         $PM_t += Transaction::getAmountForReason(Transaction::REASON_PM_BONUS);
         if (!$VS2) {
             $VS2_t =& $PM_t;
         }
         $VS2_t += Transaction::getAmountForReason(Transaction::REASON_ADVERTISED_LVL2);
         $VS1 = DbEntityHelper::createSignupMember($currentParent);
     }
     return [[$IT, $VL, $OL, $PM, $VS2, $VS1], [$IT_t, $VL_t, $OL_t, $PM_t, $VS2_t, $VS1_t]];
 }
Ejemplo n.º 14
0
<?php

echo 'test1';
include dirname(__FILE__) . '/bootstrap.php';
$member = \MemberQuery::create()->findOneById(1);
$con = \Propel::getConnection();
if (!$con->beginTransaction()) {
    throw new \Exception('Could not begin transaction');
}
try {
    $transfer = \TransferQuery::create()->findOneById(1);
    if (!$transfer) {
        $transfer = new \Transfer();
        $transfer->setMemberId($member->getId());
        $transfer->save($con);
        $transfer = \TransferQuery::create()->findOneById(1);
    }
    $transfer->setAmount($transfer->getAmount() + 2);
    $transfer->save($con);
    if (!$con->commit()) {
        throw new \Exception('Could not commit transaction');
    }
} catch (\Exception $e) {
    $con->rollBack();
    throw $e;
}
print_r('<pre>');
print_r($transfer->toArray());
print_r('</pre>');
echo "\n CONSISTENCY 2\n";
Ejemplo n.º 15
0
 public function action_ajax_tree(array $params = array())
 {
     $ids = Arr::init($_REQUEST, 'ids', TYPE_ARRAY);
     $bonusOnly = Arr::init($_REQUEST, 'bonusOnly', TYPE_BOOL);
     $rowCount = Arr::init($_REQUEST, 'count', TYPE_INT, 100);
     $byColumn = Arr::init($_REQUEST, 'column', TYPE_STRING, 'ParentId');
     $filterByColumn = "filterBy{$byColumn}";
     $comparisonOperator = \Criteria::IN;
     $memberTypes = Localizer::get('common.member_types');
     $rows = [];
     for ($i = 0; $i < $rowCount; $i++) {
         $members = \MemberQuery::create()->{$filterByColumn}($ids, $comparisonOperator)->orderBy(\MemberPeer::SIGNUP_DATE, \Criteria::ASC);
         if ($bonusOnly) {
             $members->filterByType(\Member::TYPE_MEMBER, \Criteria::GREATER_THAN);
         }
         $members = $members->find();
         if (count($members) === 0) {
             break;
         }
         $row = $members->toArray();
         $newIds = [];
         foreach ($members as $i => $member) {
             $row[$i]['TypeTranslated'] = $memberTypes[$member->getType()];
             $newIds[] = $member->getId();
         }
         $rows[] = $row;
         $ids = $newIds;
     }
     return new ControllerActionAjax($rows);
 }
Ejemplo n.º 16
0
    shuffle($numbers);
    $shuffledIds = array_slice($numbers, 0, PM_PER_RUN_SELECT_NUM);
    $pms = MemberQuery::create()->filterById($shuffledIds)->orderBy('Id', Criteria::DESC)->limit(PM_PER_RUN_SELECT_NUM)->find($con);
    foreach ($pms as $pm) {
        for ($i = 0; $i < MEMBER_PER_PM_CREATE_NUM; $i++) {
            if (!$con->beginTransaction()) {
                throw new Exception('Could not begin transaction');
            }
            try {
                DbEntityHelper::createSignupMember($pm);
                if (!$con->commit()) {
                    throw new Exception('Could not commit transaction');
                }
            } catch (Exception $e) {
                $con->rollBack();
                throw $e;
            }
            $currentCount++;
            $tempPercent = intval($currentCount * 100 / $totalCount);
            if ($tempPercent != $currentPercent) {
                $timeTaken = time() - $now;
                $minutesTaken = $timeTaken / 60;
                echo "{$currentPercent} % - done - {$currentCount} / {$totalCount} - {$timeTaken} seconds - {$minutesTaken} minutes\n";
                $currentPercent = $tempPercent;
            }
        }
    }
}
$count = MemberQuery::create()->count() - $count;
$timeTaken = time() - $now;
echo "done in {$timeTaken} seconds, populated - {$count} - new data.";
Ejemplo n.º 17
0
 public static function payBonuses(\Tbmt\MemberFee $memberFee, Member $payingMember, $currency, $when, PropelPDO $con)
 {
     $bonusByIds = self::toArray($payingMember->getBonusIds());
     if (!is_array($bonusByIds)) {
         return;
     }
     $bonusIds = array_keys($bonusByIds);
     if (count($bonusIds) === 0) {
         return;
     }
     $relatedId = $payingMember->getId();
     $bonusMembers = MemberQuery::create()->filterByDeletionDate(null, Criteria::ISNULL)->filterById($bonusIds, Criteria::IN)->find($con);
     $spreadBonuses = [];
     $membersByType = [];
     $toBeSaved = [];
     foreach ($bonusMembers as $member) {
         $type = $member->getType();
         $transfer = self::doPay($memberFee, null, $member, $member->getBonusReason(), $relatedId, $currency, $when, $con);
         // lazy save all these objects later to prevent multiple
         // database update's cause there might get more bonuses spread.
         $toBeSaved[] = $member;
         $toBeSaved[] = $transfer;
         $spreadBonuses[$type] = [$member, $transfer];
     }
     $inheritBonuses = [];
     $add_OL = null;
     $add_VL = [];
     $vl = null;
     if (!isset($spreadBonuses[Member::TYPE_PROMOTER])) {
         // if promoter does not exist give org leader his bonus
         $add_OL = Transaction::REASON_PM_BONUS;
     }
     if (!isset($spreadBonuses[Member::TYPE_ORGLEADER])) {
         // if org leader does not exist give marketing leader his bonus
         $add_VL[] = Transaction::REASON_OL_BONUS;
         if ($add_OL) {
             $add_VL[] = $add_OL;
             $add_OL = null;
         }
     }
     if (!isset($spreadBonuses[Member::TYPE_MARKETINGLEADER])) {
         $add_VL = [];
     } else {
         $vl = $spreadBonuses[Member::TYPE_MARKETINGLEADER];
     }
     if ($add_OL) {
         $ol = $spreadBonuses[Member::TYPE_ORGLEADER];
         self::doPay($memberFee, $ol[1], $ol[0], $add_OL, $relatedId, $currency, $when, $con);
     }
     foreach ($add_VL as $params) {
         self::doPay($memberFee, $vl[1], $vl[0], $params, $relatedId, $currency, $when, $con);
     }
     foreach ($toBeSaved as $row) {
         $row->save($con);
     }
 }
Ejemplo n.º 18
0
 public static function payBonuses(\Tbmt\MemberFee $memberFee, Member $payingMember, $currency, $when, PropelPDO $con)
 {
     $bonusByIds = self::toArray($payingMember->getBonusIds());
     if (!is_array($bonusByIds)) {
         return;
     }
     // Each member carries all members which receive bonus for his signup
     $bonusIds = array_keys($bonusByIds);
     if (count($bonusIds) === 0) {
         return;
     }
     $relatedId = $payingMember->getId();
     // Select all bonus members
     $bonusMembers = MemberQuery::create()->filterByDeletionDate(null, Criteria::ISNULL)->filterById($bonusIds, Criteria::IN)->find($con);
     $spreadBonuses = [];
     $toBeSaved = [];
     foreach ($bonusMembers as $member) {
         $type = $member->getType();
         $transfer = null;
         // Even so the system still supporting this, it was declarated deprecated by marcus sheffold
         if ($member->getBonusLevel() > 0) {
             // Pay the individual bonus set for this member
             $transfer = self::doPay($memberFee, $transfer, $member, \Transaction::REASON_CUSTOM_BONUS_LEVEL, $relatedId, $currency, $when, $con);
         }
         $reasonByType = $member->getTransactionReasonByType($type);
         if ($reasonByType !== null) {
             $transfer = self::doPay($memberFee, $transfer, $member, $reasonByType, $relatedId, $currency, $when, $con);
         }
         $reasonByMemberNum = $member->getTransactionReasonByMemberNum();
         if ($reasonByMemberNum !== null) {
             $transfer = self::doPay($memberFee, $transfer, $member, $reasonByMemberNum, $relatedId, $currency, $when, $con);
         }
         // lazy save all these objects later to prevent multiple
         // database update's cause there might get more bonuses spread.
         if ($transfer) {
             $toBeSaved[] = $member;
             $toBeSaved[] = $transfer;
             // Save the payed bonuses by type
             $spreadBonuses[$type] = [$transfer, $member, $reasonByType];
         }
     }
     $propagateBonuses = [Member::TYPE_PROMOTER, Member::TYPE_ORGLEADER, Member::TYPE_MARKETINGLEADER, Member::TYPE_SALES_MANAGER, Member::TYPE_CEO];
     $collectUnspreadBonusus = [];
     foreach ($propagateBonuses as $memberType) {
         if (!isset($spreadBonuses[$memberType])) {
             // This bonus is unspread, so collect it to give it to the next higher
             // existing member type
             $collectUnspreadBonusus[] = $memberType;
         } else {
             $memberObjects = $spreadBonuses[$memberType];
             foreach ($collectUnspreadBonusus as $memberType) {
                 self::doPay($memberFee, $memberObjects[0], $memberObjects[1], \Member::getTransactionReasonByType($memberType), $relatedId, $currency, $when, $con);
             }
             // Reset
             $collectUnspreadBonusus = [];
         }
     }
     foreach ($toBeSaved as $row) {
         $row->save($con);
     }
 }
Ejemplo n.º 19
0
 public function action_ajax_tree(array $params = array())
 {
     $ids = Arr::init($_REQUEST, 'ids', TYPE_ARRAY);
     $rowCount = Arr::init($_REQUEST, 'count', TYPE_INT, 5);
     $byColumn = Arr::init($_REQUEST, 'column', TYPE_STRING, 'ParentId');
     $filterByColumn = "filterBy{$byColumn}";
     $rows = [];
     for ($i = 0; $i < $rowCount; $i++) {
         $members = \MemberQuery::create()->{$filterByColumn}($ids, \Criteria::IN)->find();
         if (count($members) === 0) {
             break;
         }
         $rows[] = $members->toArray();
         $newIds = [];
         foreach ($members as $member) {
             $newIds[] = $member->getId();
         }
         $ids = $newIds;
     }
     return new ControllerActionAjax($rows);
 }