Example #1
0
 /**
  * Перевод денег на другой аккаунт
  *
  * @param integer $uid					UID переводящего
  * @param integer $gid					UID кому переводят
  * @param integer $sum					сумма
  * @param integer $transaction_id		идентификатор транзакции
  * @param string  $comments				комментарии переводящего
  * @return integer						1 - все ок, 0 - иначе
  */
 function transfer($uid, $gid, $sum, $transaction_id, $comments, $commit = true, $trs_sum = 0)
 {
     global $DB;
     $user_transfer = $gid;
     if (!$transaction_id || $transaction_id != $this->check_transaction($transaction_id, $uid)) {
         $this->view_error("Невозможно завершить транзакцию");
     } else {
         $res = $DB->query("SELECT account.sum, account.id FROM account WHERE account.uid=?", $uid);
         if ($DB->error) {
             return "Ошибка при получении информации о счете!";
         }
         list($ac_sum, $bill_id) = pg_fetch_row($res);
         if ($sum > $ac_sum) {
             return "Недостаточно средств на счету!";
         }
         $ok = $this->GetInfo($gid);
         if (!$ok) {
             $this->CreateNew($gid);
             $this->GetInfo($gid);
         }
         if ($sum < 0) {
             return "Перевод на отрицательную сумму!";
         }
         $descr = '';
         $res = $DB->query("SELECT gid, id FROM MakeGift(?, ?, ?, ?, ?, ?, ?, ?, ?, ?) as (gid integer, id integer)", $bill_id, $this->id, 23, $sum, $descr, $comments, $uid, $gid, $sum, $trs_sum);
         if ($DB->error) {
             return "Ошибка при записи счета!";
         } else {
             $_SESSION['ac_sum'] = $_SESSION['ac_sum'] - $sum;
         }
         list($gid, $id) = pg_fetch_row($res);
         if ($commit) {
             $this->commit_transaction($transaction_id, $uid, $id);
         }
         // для счетчика everesttech.net (см. engine/templates/footer.tpl)
         if ($sum > 0) {
             $_SESSION['everesttech_conter'] = 1;
         }
         $user = new users();
         $user->GetUserByUID($user_transfer);
         // Обновляем сессию пользователю сразу при поступлении денежных средств
         $session = new session();
         $session->UpdateAccountSum($user->login);
         // уведомление в юзербаре
         require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/bar_notify.php";
         $bar_notify = new bar_notify($user->uid);
         $bar_notify->addNotify('bill', null, "На счет зачислено {$sum} руб.");
         return 1;
     }
     return 0;
 }
Example #2
0
 /**
  * для имитация окончания PRO у пользователя
  *
  * @param $attempt текущая попытка продления
  */
 function checkAutoProTest($login, $attempt = 1)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/bar_notify.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/wallet/wallet.php";
     global $DB;
     if ($attempt <= 0) {
         $attempt = 1;
     }
     $sql = "\n            SELECT users.uid, a.id as acc_id, email, login, uname, usurname, subscr, role, substr(subscr::text,16,1) = '1' as bill_subscribe\n            FROM users\n            INNER JOIN account a ON a.uid = users.uid\n            WHERE users.login = ?";
     $user = $DB->row($sql, $login);
     if (!$user) {
         return;
     }
     $user['date_end'] = date('Y-m-d H:i:s', time());
     $op_code = !is_emp($user['role']) ? 48 : 15;
     $price = !is_emp($user['role']) ? self::PRICE_FRL_PRO : self::PRICE_EMP_PRO;
     $billing = new billing($user['uid']);
     $queueID = $billing->create($op_code, 1);
     if (!$queueID) {
         return;
     }
     //Проталкиваем дальше автопродление для оплаты
     $billing->preparePayments($price, false, array($queueID));
     $complete = billing::autoPayed($billing, $price);
     // @todo отключать ли автопродление или нет при второй попытке ( по идее на систему никак влиять не будет )
     // Автопродление не будет куплено уведомляем об этом пользователя
     $barNotify = new bar_notify($user['uid']);
     $mail = new smail();
     if ($complete) {
         $barNotify->addNotify('bill', '', 'Услуга успешно продлена.');
         $mail->successAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         //$mail->sendAutoPROEnding(( $user['role'] == 'freelancer' ? 'FRL' : 'EMP' ), array($user));
     } else {
         if ($attempt == 1) {
             $barNotify->addNotify('bill', '', 'Ошибка списания, услуга не продлена.');
             $mail->attemptAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         } else {
             $barNotify->addNotify('bill', '', 'Ошибка списания, автопродление отключено.');
             $mail->failAutoprolong(array('user' => $user, 'sum_cost' => $price), 'pro');
         }
     }
 }
Example #3
0
    }
}
unset($historyItem);
if ($nSbr) {
    $sbrSchemes = sbr_meta::getShemesSbr($sbrIds);
    if ($sbrSchemes) {
        foreach ($history['items'] as &$historyItem) {
            if ((int) $historyItem["sbrId"]) {
                $historyItem['comments'] = sbr_meta::parseOpComment($historyItem['comments'], null, null, $sbrSchemes[$historyItem["sbrId"]]);
            }
        }
    }
}
unset($historyItem);
// делаем уведомления прочитанными
$barNotify = new bar_notify($_SESSION['uid']);
$barNotify->delNotifies(array('page' => 'bill'));
if ($page > 1 && $page > $history['pagesCount']) {
    header_location_exit('/404.php');
}
$events = account::searchBillEvent($startTime ? $startTime : '2000-01-01', time());
$js_file = array('billing.js');
$is_jury = sbr_meta::isFtJuri($uid);
$is_emp = is_emp();
$isAllowAddFunds = !$is_emp && !$is_jury;
if ($isAllowAddFunds) {
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/quick_payment/quickPaymentPopupAccount.php';
    quickPaymentPopupAccount::getInstance()->init(array('acc_sum' => $bill->getAccSum()));
}
//Пользователь юрик с заполненными реквизитами?
$isAllowBillInvoice = $is_jury;
Example #4
0
 /**
  * ищет фрилансеров у которых заканчивается срок размещения объявления
  */
 public static function autoPayedReminder($days = 1, $interval = 'days', $test = false)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/bar_notify.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php";
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php";
     global $DB;
     $sql = "\n                SELECT ufa.*, a.sum, a.id as acc_id, p.name as prof_name, u.uname, u.login, u.email, u.usurname, u.subscr, u.is_banned, substr(u.subscr::text,16,1) = '1' as bill_subscribe, ufl.to_date\n                FROM users_first_page_autopay ufa\n                INNER JOIN (\n                    SELECT user_id, profession, MAX(from_date + to_date) as to_date\n                    FROM users_first_page\n                    WHERE payed = true\n                        AND ordered = true\n                    GROUP BY user_id, profession\n                ) as ufl\n                ON ufl.user_id = ufa.user_id\n                AND ufl.profession = ufa.profession ";
     if (!$test && $interval == 'days') {
         $sql .= "\n                AND  ufl.to_date >= now()::date + interval '{$days} days' AND  ufl.to_date < now()::date + interval '" . ($days + 1) . " days'";
     } elseif (!$test && $interval == 'hour') {
         $sql .= "\n                AND  ufl.to_date >= now() + interval '{$days} hour' AND  ufl.to_date < now() + interval '" . ($days + 1) . " hour'";
     } else {
         $uid = $DB->val("SELECT uid FROM users WHERE login = ?", $test);
         $sql .= $DB->parse(" AND  ufl.to_date >= now()::date AND ufl.user_id = ?", $uid);
     }
     $sql .= "\n                INNER JOIN account a ON a.uid = ufa.user_id\n                INNER JOIN professions p ON p.id = ufa.profession\n                INNER JOIN users u ON u.uid = ufa.user_id AND u.is_banned = B'0'";
     $res = $DB->rows($sql);
     if (!$res) {
         return false;
     }
     $price = self::getPrice();
     $users = array();
     foreach ($res as $user) {
         $cost = $price[$user['profession']] ? $price[$user['profession']] : $price['n'];
         $users[$user['user_id']]['profs'][] = array('id' => $user['profession'], 'cost' => $cost, 'name' => $user['prof_name'], 'to_date' => $user['to_date']);
         $users[$user['user_id']]['userData'] = $user;
         $users[$user['user_id']]['user'] = $user;
         $users[$user['user_id']]['sum_cost'] += $cost;
     }
     if (!$users) {
         return;
     }
     // если остается от 1 до 2 дней до окончания, то формируем списки заказов
     if ($days == 1) {
         $mail = new smail();
         foreach ($users as $uid => $user) {
             $bill = new billing($uid);
             $bill->cancelAllNewAndReserved();
             $barNotify = new bar_notify($uid);
             // отдельный блок для каждой профессии
             foreach ($user['profs'] as $userProf) {
                 $tarif = self::getBillingTarif($userProf['id']);
                 $options = array('prof_id' => $userProf['id'], 'week' => 1);
                 $bill->setOptions($options);
                 $create = $bill->create($tarif, true, false);
                 if (!$create) {
                     continue;
                 }
                 $queue[] = $create;
             }
             $billing = new billing($uid);
             if (!empty($queue)) {
                 //Проталкиваем дальше автопродление для оплаты
                 $billing->preparePayments($user['sum_cost'], false, $queue);
                 $complete = billing::autoPayed($billing, $user['sum_cost']);
                 $user['prof'] = $user['profs'];
                 if ($complete) {
                     $barNotify->addNotify('bill', '', 'Услуга успешно продлена.');
                 } else {
                     if ($interval == 'days') {
                         // Первая попытка
                         $barNotify->addNotify('bill', '', 'Ошибка списания, услуга не продлена.');
                     } else {
                         // Вторая попытка не удачная
                         $barNotify->addNotify('bill', '', 'Ошибка списания, автопродление отключено.');
                     }
                 }
             }
         }
     }
 }
Example #5
0
            $out['msg']['success'] = true;
            $out['msg']['count'] = $tip['count'];
            $out['msg']['count_html'] = view_event_count_format($tip['count']);
            $out['msg']['tip'] = iconv('CP1251', 'UTF-8', $tip['tip']);
        }
    }
    // события в сбр
    if (in_array('sbr', $op)) {
        $tip = notifications::getAllSbrTip();
        if ($tip === null) {
            $out['sbr']['success'] = false;
        } else {
            $out['sbr']['success'] = true;
            $out['sbr']['count'] = $tip['count'];
            $out['sbr']['count_html'] = view_event_count_format($tip['count']);
            $out['sbr']['alert'] = $tip['alert'];
            $out['sbr']['tip'] = iconv('CP1251', 'UTF-8', $tip['tip']);
        }
    }
    // новые события через класс bar_notify
    $barNotify = new bar_notify(get_uid(0));
    $barNotifies = $barNotify->getNotifies();
    if (in_array('bill', $op)) {
        $out['bill']['success'] = true;
        $out['bill']['count'] = (int) $barNotifies['bill']['count'];
        $out['bill']['count_html'] = view_event_count_format($tip['count']);
        $out['bill']['tip'] = iconv('CP1251', 'UTF-8', $barNotifies['bill']['message']);
    }
    $out['success'] = true;
}
echo json_encode($out);