Esempio n. 1
0
 /**
  * Закрывает арбитраж.
  *
  * @param array $reserve_data данные резерва
  * @param array data Массив данных
  *
  * @return bool true если успешно
  */
 public function closeArbitrage($reserve_data, $data)
 {
     if (!$this->is_allowed()) {
         throw new ReservesArbitrageException(ReservesArbitrageException::NOT_ALLOWED);
     }
     $ok = $this->db()->update($this->TABLE, array('price' => (int) $data['price_pay'], 'allow_fb_frl' => $data['allow_fb_frl'], 'allow_fb_emp' => $data['allow_fb_emp'], 'status' => self::STATUS_CLOSED, 'date_close' => date('Y-m-d H:i:s')), 'reserve_id = ?i AND status = ' . self::STATUS_OPEN, (int) $reserve_data['id']);
     if ($ok) {
         $reserveInstance = ReservesModelFactory::getInstance($reserve_data['type']);
         $reserveInstance->setReserveData($reserve_data);
         $payStatusDone = true;
         $backStatusDone = true;
         if ($data['price_pay'] > 0) {
             $payStatusDone = $reserveInstance->changePayStatus(ReservesModel::SUBSTATUS_NEW);
         }
         if ($data['price_back'] > 0) {
             $backStatusDone = $reserveInstance->changeBackStatus(ReservesModel::SUBSTATUS_NEW);
             //Ставим задачу на возврат средств в очередь
             if ($backStatusDone && $reserve_data['invoice_id'] > 0) {
                 ReservesPayback::getInstance()->requestPayback($reserve_data['id'], $reserve_data['invoice_id'], $data['price_back']);
             }
         }
         if ($payStatusDone && $backStatusDone) {
             return true;
         }
     }
     throw new ReservesArbitrageException(ReservesArbitrageException::CLOSE_FAIL);
 }
Esempio n. 2
0
function parseFile($filename)
{
    //@todo: это не красиво :(
    ini_set('max_execution_time', 300);
    //ini_set('memory_limit', '512M');
    $uri = WDCPREFIX_LOCAL . '/reserves/factura/' . $filename;
    $list = array();
    $ids = array();
    $handle = fopen($uri, 'r');
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        if ($data[0] == 'order_id' || count($data) != 7) {
            continue;
        }
        //order_id;sf_num;sf_date;sf_summa;pp_num;pp_date;pp_type
        $res = array('id' => getOrderId($data[0]), 'sf_num' => $data[1], 'sf_date' => $data[2], 'sf_summa' => $data[3], 'pp_num' => $data[4], 'pp_date' => $data[5], 'pp_type' => $data[6]);
        $ids[] = $res['id'];
        $list[] = $res;
    }
    fclose($handle);
    //print_r($list);
    if ($list) {
        $reserveModel = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER);
        $empData = $reserveModel->getEmpByReserveIds($ids);
        print_r($empData);
        /*
                   foreach ($list as $data) {
        
                        if (!isset($empData[$data['id']])) {
                            continue;
                        }
        
                        $data['employer']['login'] = $empData[$data['id']]['login'];
                        $data['employer']['uid'] = $empData[$data['id']]['uid'];
        
                        try {
                            $doc = new DocGenReserves($data);
                            $doc->generateFactura();
                        } catch (Exception $e) {
                            require_once($_SERVER['DOCUMENT_ROOT'] . '/classes/log.php');
                            $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log');
                            $log->trace(sprintf("Order Id = %s: %s", $data['id'], $e->getMessage()));
                        }
                   } */
    }
}
 /**
  * Парсим реестр и генерируем счет-фактуры.
  * 
  * @param type $filename
  */
 public function parseFile($filename)
 {
     //@todo: это не красиво :(
     ini_set('max_execution_time', 300);
     //ini_set('memory_limit', '512M');
     $uri = WDCPREFIX_LOCAL . $this->path . $filename;
     $list = array();
     $ids = array();
     $handle = fopen($uri, 'r');
     while (($data = fgetcsv($handle, 1000, ';')) !== false) {
         if ($data[0] == 'order_id' || count($data) != 7) {
             continue;
         }
         //order_id;sf_num;sf_date;sf_summa;pp_num;pp_date;pp_type
         $res = array('id' => $this->getOrderId($data[0]), 'sf_num' => $data[1], 'sf_date' => $data[2], 'sf_summa' => $data[3], 'pp_num' => $data[4], 'pp_date' => $data[5], 'pp_type' => $data[6]);
         $ids[] = $res['id'];
         $list[] = $res;
     }
     fclose($handle);
     if ($list) {
         $reserveModel = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER);
         $empData = $reserveModel->getEmpByReserveIds($ids);
         foreach ($list as $key => $data) {
             if (!isset($empData[$data['id']])) {
                 continue;
             }
             $data['employer']['login'] = $empData[$data['id']]['login'];
             $data['employer']['uid'] = $empData[$data['id']]['uid'];
             $reserveModel->getReserve($ids[$key]);
             $data['employer']['reqv'] = $reserveModel->getEmpReqv();
             try {
                 $doc = new DocGenReserves($data);
                 $doc->generateFactura();
             } catch (Exception $e) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/log.php';
                 $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log', 'a', '%d.%m.%Y %H:%M:%S: ');
                 $log->writeln(sprintf('Order Id = %s: %s', $data['id'], iconv('CP1251', 'UTF-8', $e->getMessage())));
             }
         }
     }
 }
Esempio n. 4
0
 /**
  * Вызвать запрос к сервису на возврат средств.
  * 
  * @param int $reserve_id
  *
  * @return bool
  *
  * @throws ReservesPaybackException
  */
 public function doPayback($reserve_id)
 {
     $paybackData = $this->db()->row("\n            SELECT *\n            FROM {$this->TABLE}\n            WHERE reserve_id = ?i\n        ", $reserve_id);
     //Если запроса не существует
     if (!$paybackData) {
         throw new ReservesPaybackException(ReservesPaybackException::PAYBACK_NOTFOUND);
     }
     //Если запрос уже успешно обработан
     //(урал так как если вдруг неполучится сменить статус резерва возврата а возврат пройдет то можно повторить)
     //if($paybackData['status'] == self::STATUS_SUCCESS)
     //    throw new ReservesPaybackException(ReservesPaybackException::ALREADY_PAYBACK_MSG);
     $is_timeout = $this->isTimeout($paybackData['cnt'], $paybackData['last']);
     //Таймаут еще не вышел нужно поставить в очередь
     if (!$is_timeout) {
         return false;
     }
     //Превышен лимит прерываем цикл для этого запроса
     if ($is_timeout === -1) {
         throw new ReservesPaybackException(ReservesPaybackException::REQUEST_LIMIT);
     }
     //Если не существует самого резерва
     $reserveInstance = ReservesModelFactory::getInstanceById($paybackData['reserve_id']);
     if (!$reserveInstance) {
         throw new ReservesPaybackException(ReservesPaybackException::PAYBACK_NOTFOUND);
     }
     $data['cnt'] = $paybackData['cnt'] + 1;
     $data['last'] = 'NOW()';
     try {
         //Готовим запрос
         $returnPaymentRequest = new ReturnPaymentRequest();
         $returnPaymentRequest->setShopId(yandex_kassa::SHOPID_SBR);
         $returnPaymentRequest->setClientOrderId($paybackData['id']);
         $returnPaymentRequest->setInvoiceId($paybackData['invoice_id']);
         $returnPaymentRequest->setCurrency($this->getCurrency());
         $returnPaymentRequest->setCause(sprintf(self::PAYBACK_CAUSE, $reserveInstance->getNUM()));
         $returnPaymentRequest->setAmount(number_format($paybackData['price'], 2, '.', ''));
         //Делаем запрос к API сервиса
         $result = $this->getApiFacade()->returnPayment($returnPaymentRequest);
         //Выставляем статус и код ошибки
         $data['status'] = $result->getStatus();
         $data['error'] = !$result->isSuccess() ? $result->getError() : 0;
     } catch (Exception $e) {
         //В случае аварии при транспорте API
         //пишем в лог и просим поставить задачу в очередь
         $data['status'] = self::STATUS_FAIL;
         $data['error'] = 10000 + intval($e->getCode());
         $this->db()->update($this->TABLE, $data, 'id = ?i', $paybackData['id']);
         throw new ReservesPaybackException($e->getMessage(), true);
     }
     $this->db()->update($this->TABLE, $data, 'id = ?i', $paybackData['id']);
     $new_status = $this->getSubStatus($result->getStatus());
     //Нет смысла менять статус так как система уже в таком же статусе
     //например долгий процесс ожидания
     if ($reserveInstance->getStatusBack() != $new_status) {
         //Не удалост сменить статус
         if (!$reserveInstance->changeBackStatus($new_status)) {
             throw new ReservesPaybackException(ReservesPaybackException::CANT_CHANGE_SUBSTATUS, true);
         }
     }
     //Ошибки при которых ставить в очередь нет смысла
     if (!$result->isSuccess() && in_array($result->getError(), array(403, 404, 405, 412, 413, 414, 417))) {
         throw new ReservesPaybackException(ReservesPaybackException::API_CRITICAL_FAIL, $result->getError());
     }
     //Если статус еще не оплачен то нужно
     //повторить и поставить задачу в очередь
     return $reserveInstance->isStatusBackPayed();
 }
/**
 * Выставяем счет оплаты по безналу для резерва.
 * 
 * @param string $type - тип платежа (тут всегда bank)
 * @param array  $data
 *
 * @return \xajaxResponse
 */
function quickPaymentReserveBank($type, $data)
{
    $objResponse =& new xajaxResponse();
    $uid = get_uid(false);
    if ($uid <= 0) {
        return $objResponse;
    }
    //Проверка на юрика
    $reqvs = ReservesHelper::getInstance()->getUserReqvs($uid);
    if ($reqvs['form_type'] != sbr::FT_JURI) {
        return $objResponse;
    }
    $reqv = $reqvs[$reqvs['form_type']];
    //Проверка наличия резерва средств
    $reserve_id = intval(@$data['quick_payment_reserve_form']);
    $reserveInstance = ReservesModelFactory::getInstanceById($reserve_id);
    if (!$reserveInstance) {
        return $objResponse;
    }
    $reserve_data = $reserveInstance->getReserveData();
    if ($reserve_data['emp_id'] != $uid || !$reserveInstance->isEmpAllowFinance()) {
        return $objResponse;
    }
    //Если уже был платеж то обновляем страницу
    if (!$reserveInstance->isStatusNew()) {
        $objResponse->script('window.location.reload()');
        return $objResponse;
    }
    $reqv['is_send_docs'] = @$data['is_reserve_send_docs'] == 1;
    $file = $reserveInstance->getReservesBank()->generateInvoice2($reqv, true);
    if (!$file) {
        $objResponse->script("\n            var qp_reserve = quick_payment_factory.getQuickPayment('reserve');\n            if(qp_reserve) qp_reserve.show_error('Не удалось создать файл счета. Попробуйте еще раз.');\n        ");
        return $objResponse;
    }
    $success_text = 'Для резервирования суммы на сайте вам был сформирован ' . '<a href="' . WDCPREFIX . '/' . $file->path . $file->name . '" target="_blank">счет на оплату</a>.<br />' . 'Счет также доступен вам в заказе в списке загруженных документов.';
    $objResponse->script("\n        var qp_reserve = quick_payment_factory.getQuickPayment('reserve');\n        if(qp_reserve) qp_reserve.show_success('" . $success_text . "');\n    ");
    return $objResponse;
}
 /**
  * Переопределяем события после изменения статуса
  * резерва оплаты для заказов ТУ
  * 
  * @param type $new_status
  */
 public function afterChangeStatus($new_status)
 {
     $success = false;
     $time = time();
     switch ($new_status) {
         case self::STATUS_CANCEL:
             //Отмена заказа заказчиком то отменяем заказ если была попытка зарезервировать
             if ($_SESSION['uid'] == $this->reserve_data['emp_id']) {
                 require_once ABS_PATH . "/classes/billing.php";
                 $billing = new billing($this->reserve_data['emp_id']);
                 $billing->cancelReserveByOrder('reserves', $this->reserve_data['id']);
             }
             $success = true;
             break;
         case self::STATUS_ERR:
             $this->getOrderHistory()->reservePriceErr();
             break;
         case self::STATUS_RESERVE:
             //После успешного резервирования средств
             //переводим заказ в статус начала работы
             $src_id = @$this->reserve_data['src_id'];
             $success = $this->db()->update($this->TABLE_TSERVICE_ORDER, array('status' => TServiceOrderModel::STATUS_ACCEPT, 'accept_date' => date('Y-m-d H:i:s', $time)), 'id = ?i', $src_id);
             if ($success) {
                 $orderModel = TServiceOrderModel::model();
                 $order = $orderModel->getShortCard($src_id);
                 if ($order) {
                     //@todo: можно передать просто $this ?
                     $reserveInstance = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER);
                     if ($reserveInstance) {
                         $reserveInstance->setSrcObject($orderModel);
                         $reserveInstance->setReserveData($this->reserve_data);
                         $order['reserve'] = $reserveInstance;
                     }
                     $this->getOrderHistory()->reservePriceSuccess($this->reserve_data['price']);
                     $order['reserve_data'] = $this->reserve_data;
                     $reservesSmail = new ReservesSmail();
                     $reservesSmail->attributes(array('order' => $order));
                     $reservesSmail->onReserveOrder();
                     //Генерируем документы
                     require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php';
                     $doc = new DocGenReserves($order);
                     $doc->generateSpecification();
                 }
             }
             break;
         case self::STATUS_PAYED:
         case self::STATUS_ARBITRAGE:
             //@todo: генерируем документ когда резерв закрыт после всех выплат
             $src_id = @$this->reserve_data['src_id'];
             $orderModel = TServiceOrderModel::model();
             $order = $orderModel->getShortCard($src_id);
             if ($order) {
                 $this->getOrderHistory();
                 require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php';
                 $order['reserve_data'] = $this->reserve_data;
                 $order['reserve'] = $this;
                 $doc = new DocGenReserves($order);
                 $doc->generateActServiceEmp();
                 $doc->generateAgentReport();
             }
         default:
             $success = true;
     }
     return $success;
 }
Esempio n. 7
0
 /**
  * @deprecated Не использовать. Выплата делается в очереди PGQ там же и повторяется
  * 
  * Крон переодического опроса API сервиса выплат
  * по сделкам в статусе ожидания выплаты
  * 
  * @todo: документация API рекомендует опрашивать с интервалом мах 30 минут
  * @todo: возможно не лучшее место для этого?
  * 
  * @param type $limit - количество сделок обрабатываемых за запуск
  * @return int - количество успешно обработанных сделок
  */
 public function cron($limit = 10)
 {
     return false;
     $reservesModel = new ReservesModel();
     $reserveDataList = $reservesModel->getReservesWithStatusPayByService(ReservesModel::SUBSTATUS_INPROGRESS, $limit);
     $cnt = 0;
     if ($reserveDataList) {
         $log = new log('reserves_docs/' . SERVER . '-%d%m%Y.log', 'a', "%d.%m.%Y %H:%M:%S: ");
         foreach ($reserveDataList as $reserveData) {
             $reserveInstance = ReservesModelFactory::getInstance($reserveData['type']);
             $reserveInstance->setReserveData($reserveData);
             $status = $this->payout($reserveInstance, $reserveData['pay_type']);
             $is_done = $reserveInstance->changePayStatus($status);
             if ($is_done && $reserveInstance->isClosed()) {
                 $cnt++;
                 $orderData = array('id' => $reserveData['src_id'], 'reserve_data' => $reserveInstance->getReserveData(), 'reserve' => $reserveInstance, 'employer' => array('login' => $reserveData['emp_login'], 'email' => $reserveData['emp_email']));
                 try {
                     $doc = new DocGenReserves($orderData);
                     $doc->generateActServiceEmp();
                     $doc->generateAgentReport();
                 } catch (Exception $e) {
                     $log->writeln(sprintf("Order Id = %s: %s", $orderData['id'], iconv('CP1251', 'UTF-8', $e->getMessage())));
                 }
             }
         }
     }
     return $cnt;
 }
Esempio n. 8
0
 /**
  * Читает загруженный файл и обновляет данные резерва.
  *
  * @param string $file
  */
 public function parseFile($file)
 {
     $uri = WDCPREFIX_LOCAL . $this->path . $file;
     $list = array();
     $handle = fopen($uri, 'r');
     while (($data = fgetcsv($handle, 1000, ';')) !== false) {
         if ($data[0] == 'order_id' || count($data) != 5) {
             continue;
         }
         $dateObject = DateTime::createFromFormat('d.m.Y H:i', $data[3]);
         $res = array('order_id' => $this->getOrderId($data[0]), 'pay_type' => (int) $data[1], 'pay_sum' => (double) $data[2], 'pay_date' => $dateObject->getTimestamp(), 'pay_status' => (int) $data[4]);
         $list[$res['order_id']][$res['pay_type']] = $res['pay_status'];
     }
     fclose($handle);
     $employer = new employer();
     foreach ($list as $oid => $operations) {
         $reserveModel = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER);
         $reserveData = $reserveModel->getReserve($oid);
         if (!$reserveData) {
             continue;
         }
         foreach ($operations as $type => $status) {
             switch ($type) {
                 case self::OPERATION_RESERVE:
                     $new_status = $status == self::STATUS_OK ? $reserveModel::STATUS_RESERVE : $reserveModel::STATUS_ERR;
                     $reserveModel->changeStatus($new_status);
                     break;
                 case self::OPERATION_PAY:
                     $new_status = $status == self::STATUS_OK ? $reserveModel::SUBSTATUS_PAYED : $reserveModel::SUBSTATUS_ERR;
                     $reserveModel->changePayStatus($new_status);
                     break;
                 case self::OPERATION_BACK:
                     $new_status = $status == self::STATUS_OK ? $reserveModel::SUBSTATUS_PAYED : $reserveModel::SUBSTATUS_ERR;
                     $reserveModel->changeBackStatus($new_status);
                     break;
             }
         }
     }
     return $list;
 }
Esempio n. 9
0
 /**
  * Обработка входящей операции помещения услуги в "Список услуг" согласно входящей op_code.
  * 
  * @param int   $op_code ИД операции
  * @param array $code    Данные операции (если есть на момент вызова функции)
  *
  * @return array
  */
 public function prepareOperationCode($op_code, $code = null)
 {
     $code = $code == null ? current(op_codes::getCodes($op_code)) : $code;
     $_op_code = self::getOpCodeByDiscount($op_code);
     $data = array();
     switch ($_op_code) {
         // Конкурс
         case 9:
         case 106:
         case 121:
         case 122:
         case 123:
         case 124:
         case 125:
         case 126:
         case 127:
         case 128:
         case 129:
         case 130:
             //Платный конкурс
         //Платный конкурс
         case 86:
             //Платный проект (вакансия, устаревший опкод)
         //Платный проект (вакансия, устаревший опкод)
         case 53:
             //Покупка вакансии
         //Покупка вакансии
         case 113:
             //пользователь не PRO
         //пользователь не PRO
         case 192:
             //пользователь PRO
             //Платные услуги проектов
         //пользователь PRO
         //Платные услуги проектов
         case 138:
         case 139:
         case 140:
         case 141:
             if (is_emp($this->user['role'])) {
                 $data = array('ammount' => 0, 'pro_ammount' => 0, 'descr' => '', 'comment' => 'Платный проект / ', 'service' => 'projects');
                 if (!empty($this->_option)) {
                     $i = 0;
                     if ($this->_option['items']['bold'] > 0) {
                         $data['option'] = 'bold';
                         $data['comment'] .= ($i++ ? ', ' : '') . 'жирный шрифт';
                         $data['ammount'] += $this->_option['items']['bold'];
                     }
                     if ($this->_option['items']['color'] > 0) {
                         $data['option'] = 'color';
                         $data['comment'] .= ($i++ ? ', ' : '') . 'подсветка фоном';
                         $data['ammount'] += $this->_option['items']['color'];
                     }
                     if ($this->_option['items']['urgent'] > 0) {
                         $data['option'] = 'urgent';
                         $data['comment'] .= ($i++ ? ', ' : '') . 'срочный';
                         $data['ammount'] += $this->_option['items']['urgent']['no_pro'];
                         $data['pro_ammount'] += (int) $this->_option['items']['urgent']['pro'];
                     }
                     if ($this->_option['items']['hide'] > 0) {
                         $data['option'] = 'hide';
                         $data['comment'] .= ($i++ ? ', ' : '') . 'скрытый';
                         $data['ammount'] += $this->_option['items']['hide']['no_pro'];
                         $data['pro_ammount'] += (int) $this->_option['items']['hide']['pro'];
                     }
                     if ($this->_option['items']['logo'] > 0) {
                         $data['option'] = 'logo';
                         $data['descr'] = $this->_option['logo_link'];
                         $data['src_id'] = $this->_option['logo_id'];
                         $data['comment'] .= ($i++ ? ', ' : '') . 'логотип';
                         $data['ammount'] += $this->_option['items']['logo']['no_pro'];
                         $data['pro_ammount'] += (int) $this->_option['items']['logo']['pro'];
                     }
                     if ($this->_option['items']['office'] > 0) {
                         $data['option'] = 'office';
                         $data['comment'] .= ($i++ ? ', ' : '') . 'в офис';
                         $data['ammount'] += $this->_option['items']['office'];
                     }
                     if ($this->_option['items']['top'] > 0) {
                         $data['option'] = 'top';
                         $data['op_count'] = $this->_option['addTop'];
                         $topDays = $this->_option['addTop'];
                         $data['comment'] .= ($i++ ? ', ' : '') . 'закрепление наверху на ' . $topDays . ' ' . getTermination($topDays, array(0 => 'день', 1 => 'дня', 2 => 'дней'));
                         $data['ammount'] += $this->_option['items']['top']['no_pro'];
                         $data['pro_ammount'] += (int) $this->_option['items']['top']['pro'];
                     }
                     if ($this->_option['items']['contest'] > 0) {
                         $data['option'] = 'contest';
                         $data['comment'] = 'Публикация конкурса';
                         $data['ammount'] += is_pro() ? $this->_option['items']['contest']['pro'] : $this->_option['items']['contest']['no_pro'];
                         $data['pro_ammount'] += $this->_option['items']['contest']['pro'];
                     }
                     $data['parent_id'] = $this->_option['prj_id'];
                     if ($this->_option['is_edit']) {
                         $data['parent_table'] = 'projects';
                     } else {
                         $data['parent_table'] = 'draft_projects';
                     }
                 }
             }
             break;
             // Поднятие платных мест
         // Поднятие платных мест
         case 21:
             if (!is_emp($this->user['role'])) {
                 $data = array('ammount' => round($code['sum'], 2), 'descr' => '', 'comment' => $code['op_name'], 'service' => 'first_page_up');
                 if (!empty($this->_option)) {
                     $data['descr'] = $this->_option['prof_id'];
                     $data['src_id'] = $this->_option['prof_id'];
                     $data['ammount'] = $this->_option['sum'];
                     if ($this->_option['prof_id'] == -1) {
                         $data['comment'] = 'Поднятие платного места на главной';
                     } else {
                         $data['comment'] = 'Поднятие платного места в каталоге';
                     }
                 }
             }
             break;
             // Поднятие на первое место в платных местах
         // Поднятие на первое место в платных местах
         case 145:
         case 146:
         case 154:
             if (!is_emp($this->user['role'])) {
                 $data = array('ammount' => $code['sum'], 'descr' => '', 'comment' => $code['op_name'], 'service' => 'first_page_top');
                 if (!empty($this->_option)) {
                     $data['descr'] = $this->_option['prof_id'];
                     $data['src_id'] = $this->_option['prof_id'];
                     $data['comment'] = $this->_option['comment'];
                 }
             }
             break;
             // Пополнение счета
         // Пополнение счета
         case 135:
             $data = array('ammount' => $this->_option['acc_sum'], 'descr' => '', 'comment' => 'Погашение задолженности - ' . $this->_option['acc_sum']);
             break;
             //Резервирование средств
         //Резервирование средств
         case 136:
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php';
             $reserve_data = @$this->_option['reserve_data'];
             if (!$reserve_data) {
                 break;
             }
             $comment = ReservesModelFactory::getInstance($reserve_data['type'])->getBillComment($reserve_data['src_id']);
             $data = array('ammount' => $this->_option['acc_sum'], 'parent_id' => $reserve_data['id'], 'parent_table' => 'reserves', 'comment' => $comment);
             break;
             // Автоответы
         // Автоответы
         case 137:
             $data = array('ammount' => $this->_option['acc_sum'], 'comment' => 'Покупка автоответа', 'parent_id' => $this->_option['autoresponse_id'], 'parent_table' => 'autoresponse');
             break;
             // Платное место в карусели
         // Платное место в карусели
         case 65:
             // На главной странице
         // На главной странице
         case 73:
             // В каталоге
             if (!is_emp($this->user['role'])) {
                 $data = array('ammount' => round($code['sum'], 2), 'descr' => 'Оплачено', 'comment' => 'Оплата новых платных мест', 'service' => 'pay_place');
                 if (!empty($this->_option)) {
                     $data['option'] = serialize($this->_option);
                     //поддержка старого режима где небыло возможности
                     //приобрести несколько размещений
                     if (isset($this->_option['num'])) {
                         $data['ammount'] = $data['ammount'] * $this->_option['num'];
                         $data['op_count'] = $this->_option['num'];
                     }
                 }
             }
             break;
             // Аккаунт PROFI для фрилансера
         // Аккаунт PROFI для фрилансера
         case 164:
             // Аккаунт PROFI на 1 месяц
             $to = 'на 1 месяц';
             if (!is_emp($this->user['role'])) {
                 $data = array('ammount' => round($code['sum'] * 10, 2), 'descr' => 'Все разделы', 'comment' => "Аккаунт PROFI {$to}", 'service' => 'pro');
             }
             break;
             // Аккаунт ПРО для фрилансера
         // Аккаунт ПРО для фрилансера
         case 47:
             // Тестовый аккаунт ПРО
             if ($this->IsUserWasPro()) {
                 break;
             }
             $to = 'на 1 неделю';
         case 132:
             // Аккаунт ПРО на 1 день
             $to = !$to ? 'на 1 день' : $to;
         case 131:
             // Аккаунт ПРО на 1 неделю
             $to = !$to ? 'на 1 неделю' : $to;
         case 163:
             //Тестовый ПРО на месяц
         //Тестовый ПРО на месяц
         case 48:
             // Аккаунт ПРО на 1 месяц
             $to = !$to ? 'на 1 месяц' : $to;
         case 49:
             // Аккаунт ПРО на 3 месяца
             $to = !$to ? 'на 3 месяца' : $to;
         case 50:
             // Аккаунт ПРО на 6 месяцев
             $to = !$to ? 'на 6 месяцев' : $to;
         case 51:
             // Аккаунт ПРО на 12 месяцев
             $to = !$to ? 'на 1 год' : $to;
             if (!is_emp($this->user['role'])) {
                 $data = array('ammount' => round($code['sum'] * 10, 2), 'descr' => 'Все разделы', 'comment' => "Аккаунт PRO {$to}", 'service' => 'pro');
             }
             break;
             // Аккаунт ПРО для работодателей
         // Аккаунт ПРО для работодателей
         case 15:
             // Аккаунт ПРО на 1 месяц
             $code['sum'] = $code['sum'] * payed::PRICE_EMP_PRO / 10;
             $to = 'на 1 месяц';
         case 118:
             // Аккаунт ПРО на 3 месяца
             $to = !$to ? 'на 3 месяца' : $to;
         case 119:
             // Аккаунт ПРО на 6 месяцев
             $to = !$to ? 'на 6 месяцев' : $to;
         case 120:
             // Аккаунт ПРО на 12 месяцев
             $to = !$to ? 'на 1 год' : $to;
             if (is_emp($this->user['role'])) {
                 $data = array('ammount' => round($code['sum'] * 10, 2), 'descr' => 'Все разделы', 'comment' => "Аккаунт PRO {$to}", 'service' => 'pro');
             }
             break;
         case 45:
             $data = array('ammount' => round($this->_option['amount'], 2), 'parent_id' => $this->_option['masssending_id'], 'parent_table' => 'mass_sending', 'descr' => 'Рассылка по каталогу', 'comment' => 'Рассылка по каталогу', 'service' => 'massending');
             break;
         case 117:
             // Оплата верификации
             $data = array('option' => serialize($this->_option['data']), 'src_id' => $this->_option['prev']['id'], 'ammount' => round($code['sum'], 2), 'descr' => 'Верификация через сервис FF.RU', 'comment' => 'Верификация через сервис FF.RU', 'service' => 'verify_ff');
             break;
         case 133:
             $data = array('ammount' => round($code['sum'] * 10, 2), 'descr' => 'Верификация WebMoney', 'comment' => 'Верификация WebMoney', 'service' => 'verify_webmoney');
             break;
             //Верификация банковской картой через ЯКассу
         //Верификация банковской картой через ЯКассу
         case 191:
             $data = array('ammount' => round($code['sum'], 2), 'descr' => 'Верификация банковской картой', 'comment' => 'Верификация банковской картой', 'option' => serialize($this->_option));
             break;
             // Закрепление в каталоге фрилансеров
         // Закрепление в каталоге фрилансеров
         case 142:
             // Корневой каталог
         // Корневой каталог
         case 143:
             // Раздел
         // Раздел
         case 144:
             // Подраздел
         // Подраздел
         case 148:
             // Продление в корневом каталоге
         // Продление в корневом каталоге
         case 149:
             // Продление в разделе
         // Продление в разделе
         case 150:
             // Продление в подразделе
             if (!is_emp($this->user['role'])) {
                 //Получаем диф.цену
                 $sum = op_codes_price::getOpCodePrice($op_code, $this->_option['prof_id']);
                 $code['sum'] = $sum ? $sum : $code['sum'];
                 $data = array('ammount' => $code['sum'], 'descr' => '', 'comment' => 'Закрепление в каталоге фрилансеров', 'service' => 'frlbind');
                 if (!empty($this->_option)) {
                     $data['src_id'] = $this->_option['prof_id'];
                     $data['ammount'] = $data['ammount'] * $this->_option['weeks'];
                     $data['op_count'] = $this->_option['weeks'];
                 }
             }
             break;
             // Поднятие закрепления в каталоге фрилансеров
         // Поднятие закрепления в каталоге фрилансеров
         case 151:
             // Корневой каталог
         // Корневой каталог
         case 152:
             // Раздел
         // Раздел
         case 153:
             // Подраздел
         // Подраздел
         case 194:
             // Оплата из буфера
             if (!is_emp($this->user['role'])) {
                 //Получаем диф.цену
                 $sum = op_codes_price::getOpCodePrice($op_code, $this->_option['prof_id']);
                 $code['sum'] = $sum ? $sum : $code['sum'];
                 $data = array('ammount' => $code['sum'], 'descr' => '', 'comment' => 'Поднятие закрепления в каталоге фрилансеров', 'service' => 'frlbindup');
                 if (!empty($this->_option)) {
                     $data['src_id'] = $this->_option['prof_id'];
                     $data['op_count'] = 1;
                 }
             }
             break;
             // Закрепление в каталоге услуг
         // Закрепление в каталоге услуг
         case 155:
             // Лендинг
         // Лендинг
         case 156:
             // Корневой каталог
         // Корневой каталог
         case 157:
             // Раздел
         // Раздел
         case 158:
             // Подраздел
             if (!is_emp($this->user['role'])) {
                 //Получаем диф.цену
                 $sum = op_codes_price::getOpCodePrice($op_code, $this->_option['prof_id']);
                 $code['sum'] = $sum ? $sum : $code['sum'];
                 $data = array('ammount' => $code['sum'], 'descr' => '', 'comment' => 'Закрепление в каталоге услуг', 'service' => 'tservicebind');
                 if (!empty($this->_option)) {
                     $data['src_id'] = $this->_option['prof_id'];
                     $data['ammount'] = $data['ammount'] * $this->_option['weeks'];
                     $data['op_count'] = $this->_option['weeks'];
                     $data['option'] = serialize(array('tservice_id' => $this->_option['tservice_id'], 'is_prolong' => $this->_option['is_prolong']));
                 }
             }
             break;
             // Поднятие закрепления в каталоге услуг
         // Поднятие закрепления в каталоге услуг
         case 159:
             // Лендинг
         // Лендинг
         case 160:
             // Корневой каталог
         // Корневой каталог
         case 161:
             // Раздел
         // Раздел
         case 162:
             // Подраздел
         // Подраздел
         case 193:
             // Оплата из буфера
             if (!is_emp($this->user['role'])) {
                 //Получаем диф.цену
                 $sum = op_codes_price::getOpCodePrice($op_code, $this->_option['prof_id']);
                 $code['sum'] = $sum ? $sum : $code['sum'];
                 $data = array('ammount' => $code['sum'], 'descr' => '', 'comment' => 'Поднятие закрепления в каталоге услуг', 'service' => 'tservicebindup');
                 if (!empty($this->_option)) {
                     $data['src_id'] = $this->_option['bind_id'];
                     $data['op_count'] = 1;
                 }
             }
             break;
     }
     unset($this->_option);
     // Сбрасываем опции чтобы не путалось при покупке сразу нескольких услуг на странице
     //Перебиваем примечание к платежу по опкоду (любому и скидочному тоже)
     if ($_descr = $this->getDescrByOpCode($op_code)) {
         $data['descr'] = $_descr;
     }
     if ($this->promoCode) {
         $data['promo_code'] = $this->promoCode['id'];
         if (!isset($this->promoCode['is_original_price'])) {
             $promoCodes = new PromoCodes();
             $data['ammount'] = $data['ammount'] - $promoCodes->getDiscount($this->promoCode, $data['ammount']);
             //@todo: для чего pro_ammount ?
             if (isset($data['pro_ammount']) && $data['pro_ammount'] > 0) {
                 $data['pro_ammount'] = $data['pro_ammount'] - $promoCodes->getDiscount($this->promoCode, $data['pro_ammount']);
             }
         }
     }
     return $data;
 }
Esempio n. 10
0
<?php

ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php");
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stdf.php";
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/DocGen/DocGenReserves.php';
//------------------------------------------------------------------------------
$results = array();
if (count($argv) > 1) {
    parse_str(implode('&', array_slice($argv, 1)), $_GET);
}
//------------------------------------------------------------------------------
$order_id = intval($_GET['order_id']);
$reserveModel = ReservesModelFactory::getInstance(ReservesModelFactory::TYPE_TSERVICE_ORDER);
$reserveData = $reserveModel->getReserve($order_id);
if ($reserveData) {
    $results['changeStatus'] = (int) $reserveModel->changeStatus(ReservesModel::STATUS_RESERVE);
}
//------------------------------------------------------------------------------
array_walk($results, function (&$value, $key) {
    $value = sprintf('%s = %s' . PHP_EOL, $key, $value);
});
print_r(implode('', $results));
exit;
Esempio n. 11
0
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/config.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/profiler.php");
//require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/billing.php");
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reqv.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/reserves/ReservesModelFactory.php';
//------------------------------------------------------------------------------
$results = array();
//$profiler = new profiler();
//------------------------------------------------------------------------------
$uid = 33;
$reqvs = sbr_meta::getUserReqvs($uid);
$reqv = $reqvs[$reqvs['form_type']];
//Проверка наличия резерва средств
$reserve_id = 3;
$reserveInstance = ReservesModelFactory::getInstanceById($reserve_id);
$reserve_data = $reserveInstance->getReserveData();
$sum = $reserve_data['reserve_price'];
$sum = $sum < 10 ? 10 : $sum;
$reqv['price'] = $sum;
$reserveInstance->getReservesBank()->generateInvoice($reqv);
//------------------------------------------------------------------------------
//$profiler->start('fill_frl_mem');
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//$profiler->stop('fill_frl_mem');
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
array_walk($results, function (&$value, $key) {
    $value = sprintf('%s = %s' . PHP_EOL, $key, $value);
});