Пример #1
0
function aCompleteEvent($xact_id)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_notification.php';
    $objResponse = new xajaxResponse();
    if (!(hasPermissions('sbr') && $_SESSION['access'] == 'A')) {
        return $objResponse;
    }
    $xact_id = intval($xact_id);
    $compl = sbr_notification::setNotificationCompletedAdmin($xact_id);
    if ($compl) {
        $objResponse->script("\$('event_react_{$xact_id}').removeClass('b-fon__body_bg_f0ffdf').removeClass('b-fon__body');");
        $objResponse->script("\$('adm_react_link_{$xact_id}').dispose()");
    }
    return $objResponse;
}
Пример #2
0
echo $stage->data['int_work_time'];
?>
 <?php 
echo ending(abs($stage->data['int_work_time']), 'день', 'дня', 'дней');
?>
 на этап</div>
                </td>
                <td class="b-layout__right b-layout__right_width_400">
                    <div class="b-layout__txt b-layout__txt_right_0 b-layout__txt_absolute b-layout__txt_padright_15 b-layout__txt_relative b-layout__txt_zindex_1 <?php 
echo sbr_notification::isReaction($stage->notification) ? '' : 'b-layout__txt_hide';
?>
"><a class="b-layout__link" href="?site=Stage&id=<?php 
echo $stage->data['id'];
?>
"><?php 
echo sbr_notification::isReaction($stage->notification) ? 'Посмотреть' : 'Перейти в этап';
?>
</a></div>
                    <div class="b-layout__txt b-layout__txt_relative <?php 
echo $stage->getStatusColor();
?>
"><span class="b-icon b-icon_top_1 <?php 
echo $stage->getStatusICO();
?>
"></span><?php 
echo $stage->getStatusName();
?>
<span class="b-layout__hider" style="display:none;"></span></div>
                </td>
            </tr>
        </table>
Пример #3
0
<div class="b-fon b-fon_padbot_30">
    <div class="b-fon__inner b-fon__inner_bordtop_cdcdcd b-fon__inner_bordbot_cdcdcd">
        <div class="b-fon__body <?php 
echo sbr_notification::isReaction($stage->notification) ? "b-fon__body_bg_f0ffdf" : "b-fon__body_bg_eff2f3";
?>
 b-fon__body_bordtop_e4e7e8 b-fon__body_bordbot_e4e7e8">
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . "/sbr/tpl.stage-header-info.php";
?>
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . "/sbr/{$fpath}tpl.stage-header.php";
?>
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . "/sbr/tpl.stage-header-form.php";
?>
        </div>
    </div>
</div>
Пример #4
0
 /**
  * Устанавливает сделку в состояние зарезервированной после успешной операции резервирования на счете.
  * Добавляет к операции подробный комментарий.
  *
  * @see account::deposit().
  * 
  * @param int $reserved_id ид. операции резервирования (account_operations.id).
  *
  * @return bool успешно?
  */
 public function reserve($reserved_id)
 {
     if (!$this->_openXact(true)) {
         return false;
     }
     $tax_emp = 0;
     $pskb = new pskb($this);
     $lc = $pskb->getLC();
     $dvals = array('P' => pskb::$exrates_map[$lc['ps_emp']]);
     foreach ($this->scheme['taxes'][sbr::EMP] as $tax) {
         $tax_emp += sbr_meta::calcAnyTax($tax['tax_id'], $tax['scheme_id'], $this->cost, $dvals);
     }
     $comments = sbr_meta::view_cost($this->getReserveSum(), $this->cost_sys) . ', ' . $this->getContractNum() . ', ' . round($tax_emp / $this->cost * 100) . '% за услугу сервиса СБР и Банка - ' . sbr_meta::view_cost($tax_emp, $this->cost_sys);
     $sql = "\n          UPDATE sbr SET reserved_id = ?i WHERE id = ?i;\n          UPDATE account_operations SET comments = '{$comments}' WHERE id = ?i;\n        ";
     $sql = $this->db()->parse($sql, $reserved_id, $this->id, $reserved_id);
     if (!pg_query(self::connect(false), $sql)) {
         $this->_abortXact();
         return false;
     }
     if ($this->scheme_type == sbr::SCHEME_AGNT) {
         if ($doc_file = $this->generateAgreement($err)) {
             $doc = array('file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_SIGN, 'access_role' => sbr::DOCS_ACCESS_ALL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_OFFER, 'subtype' => 2);
             $this->addDocR($doc);
         }
         if (!$err) {
             if ($doc_file = $this->generateContract($err)) {
                 $doc = array('file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_SIGN, 'access_role' => sbr::DOCS_ACCESS_ALL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_OFFER, 'subtype' => 1);
                 $this->addDocR($doc);
             }
         }
     } elseif ($this->scheme_type == sbr::SCHEME_PDRD || $this->scheme_type == sbr::SCHEME_PDRD2) {
         if ($doc_file = $this->genereteBailmentEmp($err)) {
             $doc = array('file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_SIGN, 'access_role' => sbr::DOCS_ACCESS_EMP, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_OFFER);
             $this->addDocR($doc);
         }
         if (!$err) {
             if ($doc_file = $this->genereteBailmentFrl($err)) {
                 $doc = array('file_id' => $doc_file->id, 'status' => sbr::DOCS_STATUS_SIGN, 'access_role' => sbr::DOCS_ACCESS_FRL, 'owner_role' => 0, 'type' => sbr::DOCS_TYPE_OFFER);
                 $this->addDocR($doc);
             }
         }
     }
     if ($err) {
         $this->error['fatal'] = $err;
     }
     if ($this->error) {
         $this->_abortXact();
         return false;
     }
     $this->_commitXact();
     if ($this->scheme_type == sbr::SCHEME_LC) {
         if ($XACT_ID = $this->_openXact(true)) {
             $result = sbr_notification::sbr_add_event($XACT_ID, $this->id, $this->stages[0]->id, 'sbr_stages.STARTED_WORK', $this->version, null, null);
             if (!$result) {
                 $this->_abortXact();
             }
             $this->_commitXact();
         }
     }
     return true;
 }
Пример #5
0
 $g_help_id = 219;
 if ($stage->data['lc_state'] == pskb::STATE_PASSED) {
     $g_help_id = 217;
 }
 $is_filled = explode(',', preg_replace('/[}{]/', '', $sbr->user_reqvs['is_filled']));
 $isReqvsFilled[sbr::FT_PHYS] = $is_filled[sbr::FT_PHYS - 1] == 't';
 $isReqvsFilled[sbr::FT_JURI] = $is_filled[sbr::FT_JURI - 1] == 't';
 $attachedfiles = new attachedfiles($_POST['attachedfiles_session']);
 $comment_files = array();
 $feedback_sent = isset($_SESSION["thnx_block{$stage_id}"]);
 if ($feedback_sent) {
     unset($_SESSION["thnx_block{$stage_id}"]);
 }
 if ($action == 'frl_refund') {
     if ($stage->refund()) {
         sbr_notification::setNotificationCompleted(array('sbr_stages.FRL_PAID', 'sbr_stages.DOC_RECEIVED', 'sbr_stages.FRL_FEEDBACK'), $stage->data['sbr_id'], $stage->data['id']);
         header_location_exit("/" . sbr::NEW_TEMPLATE_SBR . "/?site=Stage&id={$stage->data['id']}");
     }
 }
 if ($action == 'agree_stage') {
     $ok = __paramInit('bool', NULL, 'ok');
     $version = __paramInit('int', NULL, 'version');
     $sbr_version = __paramInit('int', NULL, 'sbr_version');
     if ($ok) {
         if ($stage->agreeChanges($version, $sbr_version)) {
             header_location_exit("/" . sbr::NEW_TEMPLATE_SBR . "/?site=Stage&id={$stage->data['id']}");
         }
     } else {
         $reason = __paramInit('string', null, 'frl_refuse_reason');
         //stripslashes($_POST['frl_refuse_reason']); // !!!
         $reason = substr(pg_escape_string($reason), 0, 512);
Пример #6
0
 public function refund($event = 'sbr_stages.MONEY_PAID', $role = 1)
 {
     if (!($XACT_ID = $this->_openXact(true))) {
         return false;
     }
     $version = $this->sbr->isEmp() ? $this->data['version'] : $this->data['frl_version'];
     $result = sbr_notification::sbr_add_event($XACT_ID, $this->data['sbr_id'], $this->data['id'], $event, $version, null, $role);
     if (!$result) {
         $this->_abortXact();
         return false;
     }
     $this->_commitXact();
     return true;
 }
Пример #7
0
 /**
  * Необходима для того чтобы фрилансеру упало письмо об отказе в сделке 
  */
 public function sbrCanceledSaveEvent()
 {
     $XACT_ID = $this->_openXact(true);
     sbr_notification::sbr_add_event($XACT_ID, $this->id, $this->id, 'sbr.CANCEL', $this->version, null, 3);
     $this->_commitXact();
 }
Пример #8
0
">
                        <a href="javascript:void(0)" onclick="if(confirm('Вы действительно хотите завершить данное событие?')) xajax_aCompleteEvent('<?php 
        echo $current['xact_id'];
        ?>
')" class="b-layout__link b-layout__link_color_ee1d16 b-layout__link_bordbot_dot_ee1d16">Завершить</a>
                    </div>
                    <?php 
    }
    ?>
                </td>
            </tr>
        </table>
<?php 
    if ($greenEvent) {
        ?>
    </div>
</div>
<?php 
    }
    //if
}
//foreach
if (count($update_event) > 0) {
    sbr_notification::setNotificationCompleted($update_event, $stage->data['sbr_id'], $stage->id);
}
if (count($update_event_sbr) > 0) {
    sbr_notification::setNotificationCompleted($update_event_sbr, $stage->data['sbr_id'], $stage->data['sbr_id']);
}
if ($is_run_comment == true) {
    sbr_notification::setNotificationCommentViewCompleted($stage->data['sbr_id'], $stage->id);
}
Пример #9
0
 }
 if (!$css_file) {
     $css_file = array();
 }
 if ($css_file && !is_array($css_file)) {
     $css_file = array($css_file);
 }
 array_push($js_file, 'highlight.min.js', 'highlight.init.js', 'attachedfiles2.js', 'tawl_bem.js');
 array_push($css_file, 'hljs.css');
 $js_file_utf8[] = '/scripts/ckedit/ckeditor.js';
 $stage->initNotification();
 $stage->dateVersionTz();
 $stage->orders = $_COOKIE['sbr_order'] == 1 ? 'ASC' : 'DESC';
 $stage->getHistoryStage($stage->orders);
 $stage->getAllFiles();
 $stage->active_event = sbr_notification::getNotificationActive($sbr->id, $stage->id);
 if (!is_array($stage->active_event)) {
     $stage->active_event = array();
 }
 if (($sbr->status == sbr::STATUS_CANCELED || $sbr->status == sbr::STATUS_REFUSED || $stage->status == sbr_stages::STATUS_ARBITRAGED || $stage->status == sbr_stages::STATUS_COMPLETED) && $stage->history) {
     foreach ($stage->history as $xact => $history) {
         $current = current($history);
         if ($current['abbr'] == 'sbr_stages.MONEY_PAID') {
             $frl_sum_paid = true;
         }
         if ($current['abbr'] == 'sbr_stages.EMP_MONEY_REFUNDED') {
             $emp_sum_paid = true;
         }
         if ($current['abbr'] == 'sbr.CANCEL') {
             $stage->canceled_time = strtotime($current['xtime']);
         }
Пример #10
0
 }
 if ($stage->sbr->status == sbr::STATUS_CLOSED && action != 'msg-add') {
     $action = '';
 }
 $is_filled = explode(',', preg_replace('/[}{]/', '', $sbr->user_reqvs['is_filled']));
 $isReqvsFilled[sbr::FT_PHYS] = $is_filled[sbr::FT_PHYS - 1] == 't';
 $isReqvsFilled[sbr::FT_JURI] = $is_filled[sbr::FT_JURI - 1] == 't';
 $attachedfiles = new attachedfiles($_POST['attachedfiles_session']);
 $comment_files = array();
 $feedback_sent = isset($_SESSION["thnx_block{$stage_id}"]);
 if ($feedback_sent) {
     unset($_SESSION["thnx_block{$stage_id}"]);
 }
 if ($action == 'emp_refund') {
     if ($stage->refund('sbr_stages.EMP_MONEY_REFUNDED', 2)) {
         sbr_notification::setNotificationCompleted(array('sbr_stages.EMP_PAID'), $stage->data['sbr_id'], $stage->data['id']);
         header_location_exit('/' . sbr::NEW_TEMPLATE_SBR . "/?site=Stage&id={$stage->data['id']}");
     }
 }
 if ($action == 'resolve_changes') {
     $resend = __paramInit('bool', NULL, 'resend');
     $cancel = __paramInit('bool', NULL, 'cancel');
     $version = __paramInit('int', NULL, 'version');
     if ($resend) {
         if ($stage->resendChanges()) {
             // !!!
             header_location_exit('/' . sbr::NEW_TEMPLATE_SBR . "/?site=Stage&id={$stage->data['id']}");
         }
     } else {
         if ($cancel) {
             if ($stage->cancelChanges()) {
Пример #11
0
<div class="b-fon b-fon_padbot_30">
    <div class="b-fon__inner b-fon__inner_bordtop_cdcdcd b-fon__inner_bordbot_cdcdcd">
        <div class="b-fon__body <?php 
echo sbr_notification::isReaction($stage->notification) ? 'b-fon__body_bg_f0ffdf' : 'b-fon__body_bg_eff2f3';
?>
 b-fon__body_bordtop_e4e7e8 b-fon__body_bordbot_e4e7e8">
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . '/sbr/tpl.stage-header-info.php';
?>
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . "/sbr/{$fpath}tpl.stage-header.php";
?>
            
            <?php 
include $_SERVER['DOCUMENT_ROOT'] . '/sbr/tpl.stage-header-form.php';
?>
        </div>
    </div>
</div>
Пример #12
0
 /**
  * Возвращаем в работу сделки у которых истекли сроки действия паузы
  * 
  * @global type $DB
  */
 public function renewalWorkStagesByFrozen()
 {
     global $DB;
     // Обновляем тех кто не согласился с событий паузы (удаляем само событие)
     $sql = "DELETE FROM sbr_events WHERE id IN (\n                SELECT se.id FROM \n                sbr_stages ss\n                INNER JOIN sbr_events se ON se.own_id = ss.id\n                INNER JOIN sbr_versions sv ON sv.event_id = se.id\n                WHERE \n                ss.status = ?i\n                AND ss.days_pause IS NOT NULL\n                AND ( ss.start_pause + ( CAST(ss.days_pause as varchar) || ' days' )::interval ) <= NOW()\n                AND se.ev_code IN(14,12) AND se.fstatus IS NULL AND sv.src_type_id IN( 23, 8) )\n                RETURNING own_id, sbr_id, version, ev_code";
     $deleted = $DB->rows($sql, sbr_stages::STATUS_FROZEN);
     $pause_reset = array();
     if (!empty($deleted)) {
         //@todo нужна оптимизация но мешает то что XACT_ID должен быть для каждой сделкий свой
         foreach ($deleted as $event) {
             if ($event['ev_code'] == 12) {
                 continue;
             }
             if ($XACT_ID = $this->_openXact(true)) {
                 $result = sbr_notification::sbr_add_event($XACT_ID, $event['sbr_id'], $event['own_id'], "sbr_stages.PAUSE_RESET", $event['version'], null, null);
                 if (!$result) {
                     $this->_abortXact();
                 }
                 $this->_commitXact();
                 $pause_reset_ids[] = $event['own_id'];
                 $pause_reset[] = $event['sbr_id'] . "_" . $event['own_id'];
             }
         }
     }
     // Фиксируем дни паузы за рабочие у отмененных пауз
     $sql = "UPDATE sbr_stages SET worked_time = worked_time + (days_pause::text || ' days')::interval WHERE id IN(?l)";
     $DB->query($sql, $pause_reset_ids);
     // Возвращаем в работу
     $sql = "UPDATE sbr_stages SET status = ?i, days_pause = NULL, start_pause = NULL, frl_version = version \n                WHERE status = ?i \n                AND days_pause IS NOT NULL\n                AND ( start_pause + ( CAST(days_pause as varchar) || ' days' )::interval ) <= NOW()\n                RETURNING sbr_id, id, version";
     $result = $DB->rows($sql, sbr_stages::STATUS_PROCESS, sbr_stages::STATUS_FROZEN);
     foreach ($result as $event) {
         if (in_array($event['sbr_id'] . "_" . $event['id'], $pause_reset)) {
             continue;
         }
         //@todo нужна оптимизация но мешает то что XACT_ID должен быть для каждой сделкий свой
         if ($XACT_ID = $this->_openXact(true)) {
             $result = sbr_notification::sbr_add_event($XACT_ID, $event['sbr_id'], $event['id'], "sbr_stages.PAUSE_OVER", $event['version'], null, null);
             if (!$result) {
                 $this->_abortXact();
             }
             $this->_commitXact();
         }
     }
 }
Пример #13
0
echo $stage->data['int_work_time'];
?>
 <?php 
echo ending(abs($stage->data['int_work_time']), 'день', 'дня', 'дней');
?>
 на этап</div>
                </td>
                <td class="b-layout__right b-layout__right_width_400">
                    <div class="b-layout__txt b-layout__txt_right_0 b-layout__txt_absolute b-layout__txt_padright_15 b-layout__txt_relative b-layout__txt_zindex_1 <?php 
echo sbr_notification::isReaction($stage->notification) ? '' : 'b-layout__txt_hide';
?>
"><a class="b-layout__link" href="?site=Stage&id=<?php 
echo $stage->data['id'];
?>
"><?php 
echo sbr_notification::isReaction($stage->notification) ? "Посмотреть" : "Перейти в этап";
?>
</a></div>
                    <div class="b-layout__txt b-layout__txt_relative <?php 
echo $stage->getStatusColor();
?>
"><span class="b-icon b-icon_top_1 <?php 
echo $stage->getStatusICO();
?>
"></span><?php 
echo $stage->getStatusName();
?>
<span class="b-layout__hider" style="display:none;"></span></div>
                </td>
            </tr>
        </table>