Example #1
0
/**
 * Функция для пересоздания документа.
 * 
 * @param int $doc_id ИД текущего документа
 * @param int $uid    ИД Пользователя
 *
 * @return \xajaxResponse
 */
function aRecreateDocLC($doc_id, $uid, $stage_id, $action = 'create', $interface = 'admin')
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php';
    $objResponse = new xajaxResponse();
    if (!hasPermissions('sbr')) {
        return $objResponse;
    }
    $doc_id = intval($doc_id);
    $uid = intval($uid);
    $stage_id = intval($stage_id);
    if (!$doc_id) {
        $objResponse->alert('Не корректный документ.');
        return $objResponse;
    }
    if (!$uid) {
        $objResponse->alert('Не корректный пользователь.');
        return $objResponse;
    }
    $sbr = sbr_meta::getInstanceLocal($uid);
    if (!$sbr) {
        $objResponse->alert('Ошибка запроса.');
        return $objResponse;
    }
    $stage = $sbr->initFromStage($stage_id);
    if (!$stage) {
        $objResponse->alert('Этап не найден.');
        return $objResponse;
    }
    if ($stage->status == sbr_stages::STATUS_ARBITRAGED) {
        $stage->getArbitrage(false, false);
    }
    $doc = $sbr->getDoc($doc_id, true, true);
    $gen = $stage->recreateDoc($doc, $action);
    if ($gen) {
        if ($interface == 'admin') {
            $doc_act = $sbr->getDocs(null, null, true, $stage_id, true);
            ob_start();
            include $_SERVER['DOCUMENT_ROOT'] . '/sbr/admin/tpl.lc-docinfo.php';
            $out = ob_get_clean();
            $objResponse->assign("doc_content_{$stage_id}", 'innerHTML', $out);
        } else {
            $stage->getAllFiles();
            ob_start();
            include $_SERVER['DOCUMENT_ROOT'] . '/sbr/tpl.stage-files.php';
            $out = ob_get_clean();
            $objResponse->assign('doc_content', 'innerHTML', $out);
        }
    } else {
        $objResponse->alert('Ошибка генерации документа.');
    }
    return $objResponse;
}
Example #2
0
 /**
  * Формирование актов и счет-фактур по данным из pskb_invoice_raw
  * Загрузка документов в сделку.
  * 
  * @param type $data  массив с данными - строка результата запроса из sbr_adm::processInvoiceData
  * @param type $error
  *
  * @return bool
  */
 public static function addInvoice($data, &$error = '')
 {
     $row = $data;
     if (!$row) {
         $error = 'Не найден аккредитив';
         return false;
     }
     if (!trim($row['addr'])) {
         $error = 'Не указан юрадрес';
         //            return false;
     }
     $sbr = sbr_meta::getInstanceLocal($row['emp_id']);
     $sbr->initFromId($row['sbr_id'], false, false, false);
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/odt2pdf.php';
     require_once dirname(__FILE__) . '/num_to_word.php';
     /*
      * Акт на сумму комиссии ВААН
      */
     $replace = array('USER_NAME' => $row['name'], 'ACT_SUM' => number_format($row['sum'], 2, ',', ''), 'NDS_SUM' => number_format($row['sum'] - $row['sum'] / 1.18, 2, ',', ''), 'NO_NDS_SUM' => number_format($row['sum'] / 1.18, 2, ',', ''), 'ACT_NUM' => intval($row['actnum']), 'DOC_NUM' => $sbr->getContractNum(), 'SUM_STR' => num2strEx(floatval($row['sum'])), 'ACT_DATE' => date('d.m.Y', strtotime($row['actdate'])));
     $tpl = 'pskb_close_act.ods';
     $pdf = new odt2pdf($tpl);
     $pdf->convert($replace);
     if (!($file = $sbr->_saveDocFile($pdf->Output(null, 'S')))) {
         $error = 'Ошибка при формировании Акта';
         return false;
     }
     $docs[] = array('file_id' => $file->id, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => $row['is_emp'] ? sbr::DOCS_ACCESS_EMP : sbr::DOCS_ACCESS_FRL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_PSKB_ACT);
     /*
      * Счет-фактура
      */
     $replace = array('USER_NAME' => $row['name'], 'USER_ADDR' => $row['addr'], 'USER_INN' => $row['inn'] . ($row['kpp'] ? '/' . $row['kpp'] : ''), 'INV_SUM' => number_format($row['sum'], 2, ',', ''), 'NDS_SUM' => number_format($row['sum'] - $row['sum'] / 1.18, 2, ',', ''), 'NO_NDS_SUM' => number_format($row['sum'] / 1.18, 2, ',', ''), 'INV_NUM' => intval($row['invnum']), 'DOC_NUM' => $sbr->getContractNum(), 'INV_DATE' => date('d.m.Y', strtotime($row['invdate'])));
     $tpl = 'pskb_close_invoice.ods';
     $pdf = new odt2pdf($tpl);
     $pdf->convert($replace);
     if (!($file = $sbr->_saveDocFile($pdf->Output(null, 'S')))) {
         $error = 'Ошибка при формировании счета-фактуры';
         return false;
     }
     $docs[] = array('file_id' => $file->id, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => $row['is_emp'] ? sbr::DOCS_ACCESS_EMP : sbr::DOCS_ACCESS_FRL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_FACTURA);
     foreach ($docs as $doc) {
         $ok = $sbr->addDocR($doc);
     }
     return true;
 }
Example #3
0
 /**
  * Совершает выплату юзеру по данному этапу СБР.
  * Выплата -- это отметка, что деньги реально выплачены.
  *
  * @param integer $user_id   ид. юзера, которому предназначается выплата.
  * @return boolean   успешно?
  */
 function payoutAgnt($user_id, pskb $pskb, pskb_lc $pskb_lc)
 {
     setlocale(LC_ALL, 'en_US.UTF-8');
     if (!$this->getPayouts($user_id)) {
         return false;
     }
     if ($this->payouts[$user_id]['completed']) {
         return false;
     }
     $account = new account();
     $account->GetInfo($user_id);
     $credit_sys = $this->payouts[$user_id]['credit_sys'];
     $lc = $pskb->getLC(true);
     $acc = $user_id == $this->sbr->emp_id ? $lc['accCust'] : $lc['accPerf'];
     switch ($credit_sys) {
         case exrates::BANK:
             $descr = "Безнал на счет: {$acc}";
             break;
         case exrates::YM:
             $descr = "Яндекс.Деньги на кошелек: {$acc}";
             break;
         case exrates::WMR:
             $descr = "WMR на кошелек: {$acc}";
             break;
         case exrates::WEBM:
             $descr = "Вывод на Веб-кошелек";
             break;
         case exrates::CARD:
             $descr = "Безнал на счет пластиковой карты";
             break;
         default:
             return !($this->error = 'Неверная валюта');
     }
     $this->sbr->getScheme();
     $percent = 1;
     if ($this->payouts[$user_id]['is_arbitrage'] == 't') {
         $this->getArbitrage();
         $percent = abs((int) ($user_id == $this->sbr->emp_id) - $this->arbitrage['frl_percent']);
     }
     $iex = $credit_sys . $this->sbr->cost_sys;
     if (!$this->exrates) {
         $this->sbr->getExrates();
     }
     $credit_sum = $this->payouts[$user_id]['credit_sum'];
     $debit_sum = round($credit_sum * $this->sbr->exrates[$iex], 2);
     $d_descr = 'Списание ' . ($percent == 1 ? '' : 100 * $percent . '% (арбитраж) ') . "резерва «Безопасной Сделки» (этап #{$this->id})";
     $sbr = sbr_meta::getInstanceLocal($user_id);
     $sbr->initFromId($this->data['sbr_id'], false, false);
     $comments = sbr_meta::view_cost($credit_sum, $credit_sys) . ', ' . $sbr->getContractNum();
     $d_comments = sbr_meta::view_cost($debit_sum, $this->sbr->cost_sys) . ', ' . $sbr->getContractNum();
     if (($debit_id = $account->CommitReserved($sbr->emp_id, $this->sbr->reserved_id, $d_descr, sbr::OP_DEBIT, $debit_sum, $d_comments)) && ($credit_id = $account->TransferReserved($user_id, $credit_sum, $credit_sys - 1, $descr, $errors, sbr::OP_CREDIT, $comments))) {
         $sql = "\n              UPDATE sbr_stages_payouts\n                 SET debit_id = {$debit_id},\n                     credit_id = {$credit_id},\n                     completed = now(),\n                     state = '{$pskb_lc->state}',\n                     \"stateReason\" = '{$pskb_lc->stateReason}',\n                     bank_completed = '{$pskb_lc->date}'\n               WHERE stage_id = {$this->id}\n                 AND user_id = {$user_id}\n\n                 AND completed IS NULL\n              RETURNING *\n            ";
         if ($res = pg_query(self::connect(), $sql)) {
             $this->payoutUpdateState($pskb_lc);
             $docs = array();
             $is_emp_arb = $this->status == sbr_stages::STATUS_ARBITRAGED && $this->arbitrage['resolved'] && floatval($this->arbitrage['frl_percent']) == 0;
             if ($this->sbr->scheme_type == sbr::SCHEME_LC && !$is_emp_arb) {
                 if ($doc_file = $this->generateEmpAgentReport($doc_err, $rep_num)) {
                     // отчет агента.
                     $docs[] = array('stage_id' => $this->id, 'file_id' => $doc_file->id, 'num' => $rep_num, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => sbr::DOCS_ACCESS_EMP, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_AGENT_REP);
                     if ($doc_file = $this->generateEmpAct($doc_err, $doc_num, $rep_num)) {
                         // акт работодателя по агентской схеме (он же отчет об арбитраже, если был арбитраж).
                         $docs[] = array('stage_id' => $this->id, 'file_id' => $doc_file->id, 'num' => $doc_num, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => sbr::DOCS_ACCESS_EMP, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_ACT);
                     }
                 }
             } elseif (($this->sbr->scheme_type == sbr::SCHEME_PDRD || $this->sbr->scheme_type == sbr::SCHEME_PDRD2) && !$is_emp_arb) {
                 if ($doc_file = $this->generateArbReportPdrdEmp($doc_err)) {
                     // отчет арбитража по договору подряда для работодателя.
                     $docs[] = array('stage_id' => $this->id, 'file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => sbr::DOCS_ACCESS_EMP, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_ARB_REP);
                 }
             }
             if (count($docs)) {
                 foreach ($docs as $doc) {
                     $ok = $this->sbr->addDocR($doc);
                 }
             }
             $this->payouts[$user_id] = pg_fetch_assoc($res);
             return true;
         }
     }
     if ($debit_id && !$credit_id) {
         $account->Del($user_id, $debit_id);
     }
     return false;
 }
Example #4
0
 /**
  * Уведомление о том, что загружен новый документ в СБР.
  * Отправляется участнику СБР, если он заинтересован в этом документе (см. статусы и доступы к документам)
  *
  * @param array $events   информация по событиям (если событий нескольлко, то содержит несколько элементов).
  */
 function SbrAddDoc($events)
 {
     $ev0 = $events[0];
     $url = $GLOBALS['host'] . '/' . sbr::NEW_TEMPLATE_SBR . '/';
     $sbr_name = sbr_meta::getNameForMail($ev0, 'sbr');
     $sbr_link_e = " «<a href='{$url}?id={$ev0['sbr_id']}{$this->_addUrlParams('e', '&')}'>{$sbr_name}</a>»";
     $sbr_link_f = " «<a href='{$url}?id={$ev0['sbr_id']}{$this->_addUrlParams('f', '&')}'>{$sbr_name}</a>»";
     if (!($doc = sbr_meta::getDoc($ev0['new_val'], false))) {
         return 0;
     }
     if ($doc['owner_role'] != 0) {
         return 0;
     }
     // только если админ загружал.
     $doc_link_e = " «<a href='{$url}?site=Stage&id={$ev0['stage_id']}&doc={$ev0['new_val']}{$this->_addUrlParams('e', '&')}'>{$doc['name']}</a>»";
     $doc_link_f = " «<a href='{$url}?site=Stage&id={$ev0['stage_id']}&doc={$ev0['new_val']}{$this->_addUrlParams('f', '&')}'>{$doc['name']}</a>»";
     $this->subject = "Загружен новый документ по Безопасной Сделке (проект {$ev0['sbr_name']})";
     $e = 'e_';
     $f = 'f_';
     //$msg[$e] = "Менеджер сервиса «Безопасная Сделка» загрузил документ {$doc_link_e} в проект {$sbr_link_e}.
     $msg[$e] = "В Сделку {$sbr_link_e} загружен документ {$doc_link_e}.\n        Вы можете ознакомиться с общим <a href='https://feedback.fl.ru/{$this->_addUrlParams('e', '?')}'>порядком проведения Безопасной Сделки</a>.";
     //$msg[$f] = "Менеджер сервиса «Безопасная Сделка» загрузил документ {$doc_link_f} в проект {$sbr_link_f}.
     $msg[$f] = "В Сделку {$sbr_link_f} загружен документ {$doc_link_f}.\n        Вы можете ознакомиться с общим <a href='https://feedback.fl.ru/{$this->_addUrlParams('f', '?')}'>порядком проведения Безопасной Сделки</a>.";
     $footer = 'norisk_robot';
     if ($doc['type'] == sbr::DOCS_TYPE_ACT) {
         $sbr = sbr_meta::getInstanceLocal($ev0['e_uid']);
         $sbr->initFromId($ev0['sbr_id']);
         if ($sbr->isNewVersionSbr()) {
             $this->subject = "Завершается Безопасная Сделка {$sbr_name}";
             if ($sbr->scheme_type == sbr::SCHEME_LC) {
                 $message = "Безопасная Сделка {$sbr_link_e} находится на завершающем этапе. В систему комментариев к сделке и подраздел «Файлы по этапу» был загружен {$doc_link_e}.<br/><br/>";
                 $message .= "<i>Обратите внимание</i>: отправлять документы по почте не требуется. Все налоги и сборы вам необходимо оплатить самостоятельно.<br/><br/>";
                 $message .= "Подробная информация по порядку завершения Безопасной Сделки находится в соответствующем <a href='https://feedback.fl.ru/' target='_blank'>разделе помощи</a>.";
                 $msg[$e] = $message;
                 $msg[$f] = $message;
             } elseif ($sbr->scheme_type == sbr::SCHEME_PDRD2) {
                 //@todo: был не корректный вызов метода sbr::getContractNum($ev0['sbr_id'], $ev0['scheme_type'], $ev0['posted']) который валил всю функцию и возможно консьюмер
                 $doc_tz = " «<a href='{$url}?site=Stage&id={$ev0['stage_id']}&doc=" . ($ev0['new_val'] + 1) . "{$this->_addUrlParams('e', '&')}'>Техническое задание по договору {$sbr_name}</a>»";
                 $message = "Безопасная Сделка {$sbr_link_e} находится на завершающем этапе. В комментарии к сделке и подраздел «Файлы по этапу» был загружен {$doc_link_e} и {$doc_tz}.<br/><br/>";
                 $message .= "Для того чтобы получить гонорар за выполненную работу, вам необходимо распечатать данные документы в 2-х экземплярах, подписать и отправить на адрес компании FL.ru: 129223, г. Москва, а/я 33, ООО «Ваан».";
                 $msg[$e] = $message;
                 $msg[$f] = $message;
             }
         } else {
             $this->subject = "Документы для завершения Безопасной Сделки по проекту «{$ev0['sbr_name']}»";
             $msg[$e] = "\n                Ваша Безопасная Сделка по проекту {$sbr_link_e} находится на завершающем этапе. В раздел «Документы проекта» был загружен {$doc_link_e}.\n                <br/><br/>\n                Для того чтобы деньги были переведены исполнителю, вам необходимо распечатать данный документ в 2-х экземплярах,\n                подписать и отправить на адрес компании FL.ru: 129223, г. Москва, а/я 33, ООО «Ваан».\n                <br/><br/>\n                Пожалуйста, обратите внимание на то, что деньги будут переведены исполнителю только после получения нами оригиналов документов. Выплаты производятся еженедельно в среду и четверг.\n                ";
             if (!empty($events[1])) {
                 $ev1 = $events[1];
                 $_doc = sbr_meta::getDoc($ev1['new_val'], false);
                 if ($_doc['type'] == sbr::DOCS_TYPE_WM_APPL || $_doc['type'] == sbr::DOCS_TYPE_YM_APPL) {
                     $_doc_link_f = " «<a href='{$url}?site=Stage&id={$ev1['stage_id']}&doc={$ev1['new_val']}{$this->_addUrlParams('f', '&')}'>{$_doc['name']}</a>»";
                 }
             }
             if ($doc_link_f && $_doc_link_f) {
                 $doc_string_f = "были загружены {$doc_link_f} и {$_doc_link_f}";
                 $print_info_f = "Заявление в одном экземпляре, Акт – в двух";
             } else {
                 $doc_string_f = "был загружен {$doc_link_f}";
                 $print_info_f = "данный документ в 2-х экземплярах";
             }
             $msg[$f] = "\n                Безопасная Сделка по проекту {$sbr_link_f} находится на завершающем этапе. В раздел «Документы проекта» {$doc_string_f}.\n                <br/><br/>\n                Для того чтобы вам были перечислены ваши деньги, вам необходимо распечатать {$print_info_f},\n                подписать и отправить на адрес компании FL.ru: 129223, г. Москва, а/я 33, ООО «Ваан».\n                <br/><br/>\n                Пожалуйста, обратите внимание на то, что деньги будут переведены вам только после получения нами оригиналов документов. Выплаты производятся еженедельно в среду и четверг.\n                ";
             $footer = 'norisk_robot';
         }
     }
     if ($ev0['foronly_role'] === NULL || ((int) $ev0['foronly_role'] & sbr::EVROLE_FRL) == sbr::EVROLE_FRL) {
         $rs[] = $f;
     }
     if ($ev0['foronly_role'] === NULL || ((int) $ev0['foronly_role'] & sbr::EVROLE_EMP) == sbr::EVROLE_EMP) {
         $rs[] = $e;
     }
     if ($rs) {
         foreach ($rs as $r) {
             $this->message = $this->splitMessage($this->GetHtml($ev0[$r . 'uname'], $msg[$r], array('header' => 'simple', 'footer' => $footer)));
             $this->recipient = $ev0[$r . 'uname'] . " " . $ev0[$r . 'usurname'] . " [" . $ev0[$r . 'login'] . "] <" . $ev0[$r . 'email'] . ">";
             $this->SmtpMail('text/html');
         }
     }
 }
Example #5
0
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stdf.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/num_to_word.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pskb.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/odt2pdf.php';
echo '<pre>';
$UID = 237958;
$STAGE_ID = 3524;
$DATE = '27.09.2012';
$sbr = sbr_meta::getInstanceLocal($UID);
$error = '';
$stage = $sbr->initFromStage($STAGE_ID);
$doc_file = $stage->generateFrlActPdrd($error, $DATE);
$doc = array('stage_id' => $stage->id, 'file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => sbr::DOCS_ACCESS_FRL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_ACT);
$stage->sbr->addDocR($doc);
$doc_file = $stage->generateTzPdrd($error, $DATE);
$doc = array('stage_id' => $stage->id, 'file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_PUBL, 'access_role' => sbr::DOCS_ACCESS_FRL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_TZ_PDRD);
$stage->sbr->addDocR($doc);
exit;
Example #6
0
 /**
  * Заказчику о резерве (должно отсылатся в момент когда Заказчик нажимает на Зарезервировать деньги) -- только для аккредитива.
  * 
  * @param type $sbr_id  ИД сделки
  * @param type $user_id ИД пользователя
  *
  * @return type
  */
 public function SbrReservedMoney($sbr_id, $user_id)
 {
     session_start();
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr.php';
     $sbr = sbr_meta::getInstanceLocal($user_id);
     $sbr->initFromId($sbr_id, false);
     $sbr_num = $sbr->getContractNum();
     $t_user = new users();
     $t_user->GetUserByUID($user_id);
     $url_sbr = "{$GLOBALS['host']}/" . sbr::NEW_TEMPLATE_SBR . '/';
     $this->subject = "Резервирование денежных средств по «Безопасной Сделке» № {$sbr_num}";
     $message = "Вам необходимо перечислить денежные средства по «Безопасной Сделке» <a href='{$url_sbr}?id={$sbr->id}'>№ {$sbr_num}</a> в течение " . pskb::PERIOD_RESERVED . ' рабочих дней с момента нажатия на кнопку «Зарезервировать средства». В противном случае сделка будет отменена.';
     $this->recipient = "{$t_user->uname} {$t_user->usurname} [{$t_user->login}] <" . $t_user->email . '>';
     $this->message = $this->GetHtml($t_user->uname, $message, array('header' => 'default', 'footer' => 'norisk_robot'));
     return $this->send('text/html');
 }