Esempio n. 1
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');
         }
     }
 }
Esempio n. 2
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', '', 'Ошибка списания, автопродление отключено.');
                     }
                 }
             }
         }
     }
 }