/**
  * Парсим реестр и генерируем счет-фактуры.
  * 
  * @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())));
             }
         }
     }
 }
Example #2
0
     $results[] = 'Not isClosed';
     continue;
 }
 deleteFiles($order_id, $doc_types);
 $exists_doc_types = array_diff($exists_doc_types, $doc_types);
 $base_doc_types = array(10, 20, 30, 40, 50, 60);
 if ($reserveInstance->isArbitrage()) {
     $base_doc_types = $reserveInstance->isStatusPayPayed() ? array(10, 20, 30, 40, 50, 60, 70) : array(20, 30, 40, 50, 60, 70);
 }
 //Если резерв по безналу то еще нужен и счет
 if (!$reserveInstance->isReserveByService()) {
     $base_doc_types[] = 5;
 }
 $needed_doc_types = array_diff($base_doc_types, $exists_doc_types);
 $history = new tservices_order_history($order_id);
 $doc = new DocGenReserves($orderData);
 if (!empty($_GET)) {
     foreach ($_GET as $key => $value) {
         $value = iconv("utf-8", "windows-1251", $value);
         $doc->setOverrideField($key, $value);
     }
 }
 foreach ($needed_doc_types as $needed_doc_type) {
     switch ($needed_doc_type) {
         case DocGenReserves::BANK_INVOICE_TYPE:
             $reserveBank = $reserveInstance->getReservesBank();
             if ($reserveBank) {
                 $reqv = $reserveBank->getCheckByReserveId($reserveInstance->getID());
                 if ($reqv) {
                     $file_url = getFileUrl($reserveInstance->getReservesBank()->generateInvoice2($reqv));
                 } else {
Example #3
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/stdf.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/DocGen/DocGenReserves.php";
try {
    $doc = new DocGenReserves(array('id' => 777, 'employer' => array('login' => 'employer33')));
    $doc->setField('text5_info', '1111111 2222222 33333333');
    $doc->generateActServiceEmp();
} catch (Exception $e) {
    print_r(iconv('CP1251', 'UTF-8', $e->getMessage()));
}
/*
$data = array(
    'price' => array(
        'format' => 'price',
        'option' => '',
        'value' => 1000
     )
);
*/
/*
try
{
   
Example #4
0
/**
 * Вынесение решения арбитром
 * @param array $form
 * @return \xajaxResponse
 */
function reservesArbitrageApply($form)
{
    $objResponse = new xajaxResponse();
    $order_id = @$form['order_id'];
    $price_pay = (int) @$form['price'];
    //Сумма для выплаты исполнителю
    $allow_fb_frl = (bool) @$form['allow_fb_frl'];
    $allow_fb_emp = (bool) @$form['allow_fb_emp'];
    $orderModel = TServiceOrderModel::model();
    $orderModel->attributes(array('is_adm' => hasPermissions('tservices')));
    $order = $orderModel->getCard((int) $order_id, get_uid(false));
    if (!$order) {
        return $objResponse;
    }
    $reservesArbitrage = new ReservesArbitrage();
    $reservesArbitrage->db()->start();
    try {
        if ($price_pay > $order['reserve_data']['price']) {
            $price_pay = $order['reserve_data']['price'];
        }
        $price_back = $order['reserve_data']['price'] - $price_pay;
        //запоминаем суммы, которые надо выплатить сторонам, закрываем арбитраж и заказ
        $ok = $reservesArbitrage->closeArbitrage($order['reserve_data'], array('price_pay' => $price_pay, 'price_back' => $price_back, 'allow_fb_frl' => $allow_fb_frl, 'allow_fb_emp' => $allow_fb_emp));
        if ($ok) {
            $is_emp = true;
            //Закрываем заказ от лица заказчика
            $orderModel->changeStatus($order_id, 'close', $is_emp);
            //Отправляем уведомления
            $reservesSmail = new ReservesSmail();
            $reservesSmail->onApplyArbitrage($order, $price_pay);
            $order = $orderModel->getOrderData();
            //Новый статус отображаем без перезагрузки
            $order['reserve_data']['arbitrage_price'] = $price_pay;
            $order['reserve_data']['arbitrage_date_close'] = date('Y-m-d H:i:s');
            //Так как мы в статусах используем обьект то обновляем его данные
            $order['reserve']->setReserveData($order['reserve_data']);
            //$order['status'] = TServiceOrderModel::STATUS_EMPCLOSE;
            //Генерируем документы
            try {
                $doc = new DocGenReserves($order);
                if ($price_pay > 0) {
                    $doc->generateActCompletedFrl();
                }
                $doc->generateArbitrageReport();
            } 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", $order['id'], iconv('CP1251', 'UTF-8', $e->getMessage())));
            }
            $tservicesOrderHistory = new tservices_order_history($order_id);
            $tservicesOrderHistory->reserveArbitrageDecide($price_pay, $price_back);
            $tserviceOrderStatusWidget = new TServiceOrderStatus();
            $tserviceOrderStatusWidget->setIsOwner(false);
            $tserviceOrderStatusWidget->setOrder($order);
            $tserviceOrderStatusWidget->init();
            ob_start();
            $tserviceOrderStatusWidget->run();
            $sHtml = ob_get_contents();
            ob_end_clean();
            $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $sHtml);
        }
    } catch (Exception $e) {
        $reservesArbitrage->db()->rollback();
        $sHtml = tservices_helper::getMessage($e->getMessage(), 'error');
        $objResponse->call('TServices_Order.showBeforeStatus', $order_id, $sHtml);
        return $objResponse;
    }
    $reservesArbitrage->db()->commit();
    $objResponse->call('TServices_Order.hideBeforeStatus', $order_id);
    return $objResponse;
}
     $log->writeln('Not isStatusEmpClose');
     continue;
 }
 $reserveInstance = $orderModel->getReserve();
 if (!$reserveInstance->isClosed()) {
     $log->writeln('Not isClosed');
     continue;
 }
 $doc_types = array_unique($doc_types);
 $base_doc_types = array(10, 20, 30, 40, 50, 60);
 if ($reserveInstance->isArbitrage()) {
     $base_doc_types = $reserveInstance->isStatusPayPayed() ? array(10, 20, 30, 40, 50, 60, 70) : array(20, 30, 40, 50, 60, 70);
 }
 $doc_types = array_diff($base_doc_types, $doc_types);
 $history = new tservices_order_history($order_id);
 $doc = new DocGenReserves($orderData);
 foreach ($doc_types as $doc_type) {
     switch ($doc_type) {
         case DocGenReserves::ACT_COMPLETED_FRL_TYPE:
             $file_url = getFileUrl($doc->generateActCompletedFrl());
             $log->writeln(sprintf('generateActCompletedFrl = %s', $file_url));
             break;
         case DocGenReserves::ACT_SERVICE_EMP_TYPE:
             $file_url = getFileUrl($doc->generateActServiceEmp());
             $log->writeln(sprintf('generateActServiceEmp = %s', $file_url));
             break;
         case DocGenReserves::AGENT_REPORT_TYPE:
             $file_url = getFileUrl($doc->generateAgentReport());
             $log->writeln(sprintf('generateAgentReport = %s', $file_url));
             break;
         case DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE:
 public function updateDocs($types = array(), $is_create = false, $override_data = array())
 {
     ini_set('max_execution_time', 300);
     //ini_set('memory_limit', '512M');
     if (empty($types)) {
         $is_create = true;
     }
     if (!$this->isReserveData()) {
         return false;
     }
     $orderModel = TServiceOrderModel::model();
     $orderModel->attributes(array('is_adm' => true));
     $orderData = $orderModel->getCard($this->getSrcId(), 0);
     if (!$orderData || !$orderModel->isReserve()) {
         return false;
     }
     $reserveInstance = $orderModel->getReserve();
     if ($is_create) {
         //Если зарезервировали
         if ($reserveInstance->isStatusReserved()) {
             $base_doc_types[] = DocGenReserves::RESERVE_SPECIFICATION_TYPE;
             $base_doc_types[] = DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE;
             $base_doc_types[] = DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE;
         }
         //Если резерв по безналу то нужен счет
         if (!$reserveInstance->isReserveByService()) {
             $base_doc_types[] = DocGenReserves::BANK_INVOICE_TYPE;
         }
         //Если сделка закрыта и исполнителю полагается выплата либо выплата в процессе
         if ($reserveInstance->isStatusPayInprogress() || $reserveInstance->isClosed() && (!$reserveInstance->isArbitrage() || $reserveInstance->isStatusPayPayed())) {
             $base_doc_types[] = DocGenReserves::ACT_COMPLETED_FRL_TYPE;
         }
         //Если сделка закрыта либо выплата в процессе
         if ($reserveInstance->isClosed() || $reserveInstance->isStatusPayInprogress()) {
             $base_doc_types[] = DocGenReserves::LETTER_FRL_TYPE;
         }
         //Если сделка закрыта
         if ($reserveInstance->isClosed()) {
             $base_doc_types[] = DocGenReserves::ACT_SERVICE_EMP_TYPE;
             $base_doc_types[] = DocGenReserves::AGENT_REPORT_TYPE;
         }
         //Если сделка закрыта по арбитражу
         if ($reserveInstance->isArbitrage() && $reserveInstance->isArbitrageClosed()) {
             $base_doc_types[] = DocGenReserves::ARBITRAGE_REPORT_TYPE;
         }
         $types = array_merge($types, $base_doc_types);
     }
     $types = array_unique($types);
     require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php';
     $this->getOrderHistory();
     $doc = new DocGenReserves($orderData);
     $doc->deleteFiles($this->getSrcId(), $types);
     if (!empty($override_data)) {
         foreach ($override_data as $key => $value) {
             $doc->setOverrideField($key, $value);
         }
     }
     foreach ($types as $type) {
         switch ($type) {
             case DocGenReserves::BANK_INVOICE_TYPE:
                 $reserveBank = $reserveInstance->getReservesBank();
                 if ($reserveBank) {
                     $reqv = $reserveBank->getCheckByReserveId($reserveInstance->getID());
                     if ($reqv) {
                         $reserveInstance->getReservesBank()->generateInvoice2($reqv);
                     }
                 }
                 break;
             case DocGenReserves::ACT_COMPLETED_FRL_TYPE:
                 $doc->generateActCompletedFrl();
                 break;
             case DocGenReserves::ACT_SERVICE_EMP_TYPE:
                 $doc->generateActServiceEmp();
                 break;
             case DocGenReserves::AGENT_REPORT_TYPE:
                 $doc->generateAgentReport();
                 break;
             case DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE:
                 //case DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE:
                 $doc->generateOffers();
                 break;
             case DocGenReserves::RESERVE_SPECIFICATION_TYPE:
                 $doc->generateSpecification();
                 break;
             case DocGenReserves::LETTER_FRL_TYPE:
                 $doc->generateInformLetterFRL();
                 break;
             case DocGenReserves::ARBITRAGE_REPORT_TYPE:
                 $doc->generateArbitrageReport();
                 break;
         }
     }
     return true;
 }
 /**
  * Переопределяем события после изменения статуса
  * резерва оплаты для заказов ТУ
  * 
  * @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;
 }
Example #8
0
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/tu/models/TServiceOrderModel.php';
require_once ABS_PATH . '/classes/DocGen/DocGenReserves.php';
$order_id = __paramInit('int', 'order_id', null, 759);
$user_id = __paramInit('int', 'uid', null, 239549);
$orderModel = new TServiceOrderModel();
$order = $orderModel->getCard($order_id, $user_id);
$doc = new DocGenReserves($order);
echo $doc->generateSpecification();
Example #9
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;
 }
Example #10
0
 $orderData = $orderModel->getCard($order_id, 0);
 if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) {
     continue;
 }
 $reserveInstance = $orderModel->getReserve();
 if (!$reserveInstance->isClosed()) {
     continue;
 }
 $doc_types = array_unique($doc_types);
 $base_doc_types = array(10, 20, 30, 40, 50, 60);
 if ($reserveInstance->isArbitrage()) {
     $base_doc_types = $reserveInstance->isStatusPayPayed() ? array(10, 20, 30, 40, 50, 60, 70) : array(20, 30, 40, 50, 60, 70);
 }
 $doc_types = array_diff($base_doc_types, $doc_types);
 $history = new tservices_order_history($order_id);
 $doc = new DocGenReserves($orderData);
 foreach ($doc_types as $doc_type) {
     switch ($doc_type) {
         case DocGenReserves::ACT_COMPLETED_FRL_TYPE:
             getFileUrl($doc->generateActCompletedFrl());
             break;
         case DocGenReserves::ACT_SERVICE_EMP_TYPE:
             getFileUrl($doc->generateActServiceEmp());
             break;
         case DocGenReserves::AGENT_REPORT_TYPE:
             getFileUrl($doc->generateAgentReport());
             break;
         case DocGenReserves::RESERVE_OFFER_CONTRACT_TYPE:
         case DocGenReserves::RESERVE_OFFER_AGREEMENT_TYPE:
             break;
         case DocGenReserves::LETTER_FRL_TYPE:
Example #11
0
    if (!$reserveInstance->isAllowPayout($orderData['frl_id']) || !$reserveInstance->isFrlAllowFinance()) {
        throw new Exception('Not isAllowPayout');
    }
    $reservesPayout = new ReservesPayout();
    $status = $reservesPayout->requestPayout($reserveInstance, $type);
    $results['status'] = (int) $status;
    $is_done = $reserveInstance->changePayStatus($status);
    $results['is_done'] = (int) $is_done;
    if ($is_done) {
        //@todo: передача данных устаревший способ но оставляем для поддержки пока
        //посностью не передем на обьекты
        $orderData['reserve_data'] = $reserveInstance->getReserveData();
        //@todo: правильный способ - нужно оперировать обьектами
        $orderData['reserve'] = $reserveInstance;
        try {
            $doc = new DocGenReserves($orderData);
            //$doc->generateInformLetterFRL();
            //@todo: генерируем документ когда резерв закрыт после всех выплат
            if ($reserveInstance->isClosed()) {
                $results['isClosed'] = (int) $reserveInstance->isClosed();
                $doc->generateActServiceEmp();
                $doc->generateAgentReport();
            }
        } 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', $orderData['id'], $e->getMessage()));
        }
    }
} catch (\Exception $e) {
    $results['Error Message'] = $e->getMessage();
Example #12
0
 $orderModel = TServiceOrderModel::model();
 $orderModel->attributes(array('is_adm' => true));
 $orderData = $orderModel->getCard($order_id, 0);
 if (!$orderData || !$orderModel->isStatusEmpClose() || !$orderModel->isReserve()) {
     throw new Exception('None');
 }
 $reserveInstance = $orderModel->getReserve();
 if (!$reserveInstance->isClosed()) {
     throw new Exception('Not isClosed');
 }
 $types = explode(',', $doc_type);
 if (!count($types)) {
     throw new Exception('No type param');
 }
 $history = new tservices_order_history($order_id);
 $doc = new DocGenReserves($orderData);
 foreach ($types as $type) {
     $type = trim($type);
     switch ($type) {
         case DocGenReserves::ACT_COMPLETED_FRL_TYPE:
             deleteFiles($order_id, $type);
             $results['generateActCompletedFrl'] = getFileUrl($doc->generateActCompletedFrl());
             break;
         case DocGenReserves::ACT_SERVICE_EMP_TYPE:
             deleteFiles($order_id, $type);
             $results['generateActServiceEmp'] = getFileUrl($doc->generateActServiceEmp());
             break;
         case DocGenReserves::AGENT_REPORT_TYPE:
             deleteFiles($order_id, $type);
             $results['generateAgentReport'] = getFileUrl($doc->generateAgentReport());
             break;
Example #13
0
 /**
  * Аналог generateInvoice
  * использующий DocGenReserves класс для генерации дока.
  * 
  * @param type $user_info
  *
  * @return bool
  */
 public function generateInvoice2($user_info, $generate_now = false)
 {
     $user_info['form_type'] = sbr::FT_JURI;
     $file = new CFile();
     $reserve_id = @$this->data['reserve_id'];
     $data = $this->getCheckByReserveId($reserve_id);
     if (isset($data['payed_date']) && !empty($data['payed_date'])) {
         return false;
     }
     if (isset($data['check_file_id']) && $data['check_file_id'] > 0) {
         $file->Delete($data['check_file_id']);
     }
     if (!$data) {
         $data = array();
     }
     $this->data = array_merge($data, $this->data, $user_info);
     $login = @$_SESSION['login'];
     if (@$_SESSION['uid'] != $this->data['user_id']) {
         $emp = new employer();
         $ret = $emp->GetName($this->data['user_id'], $error);
         if (!$ret) {
             return false;
         }
         $login = $ret['login'];
     }
     try {
         $doc = new DocGenReserves(array('id' => $this->options['src_id'], 'employer' => array('login' => $login)));
         $doc->setField('date_offer', $this->data['date_offer']);
         unset($this->data['date_offer']);
         if (!isset($this->data['date'])) {
             $this->data['date'] = date('Y-m-d H:i:s');
         }
         $doc->setField('datetext_1', $this->data['date']);
         $doc->setField('num_bs', $this->options['src_id']);
         $doc->setField('fio_emp', $this->data);
         if (empty($user_info['phone'])) {
             $user_info['phone'] = $user_info['mob_phone'];
         }
         $doc->setField('phone', $user_info['phone']);
         $doc->setField('price_price', $this->data['price']);
         $doc->setField('nonds_commision', $this->data['tax_price']);
         $doc->setField('nondstotal_price', $this->data);
         $doc->setField('pricends_commision', $this->data['tax_price']);
         $doc->setField('price_reserve_price', $this->data['reserve_price']);
         $doc->setField('pricelong_reserve_price', $this->data['reserve_price']);
         $doc->setField('price_commision', $this->data['tax_price']);
         if ($generate_now) {
             $doc->disableQueue();
         }
         $file = $doc->generateBankInvoice();
     } catch (Exception $e) {
         return false;
     }
     $this->data['check_file_id'] = $file->id;
     if (!$this->addCheck()) {
         return false;
     }
     if ($generate_now) {
         Events::trigger('generateInvoice2');
     }
     return $file;
 }