/** * устанавливает арбитра. */ function setArbitr($arbitrageID, $arbitrID) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_stages.php'; $objResponse = new xajaxResponse(); if (!hasPermissions('sbr')) { return $objResponse; } sbr_stages::setArbitr($arbitrageID, $arbitrID); return $objResponse; }
/** * Уведомление одному из участников СБР о том, что другая строна обратилась в арбитраж. * @param array $events информация по событиям (если событий нескольлко, то содержит несколько элементов). */ function SbrArb($events) { $ev0 = $events[0]; $url = $GLOBALS['host'] . '/' . sbr::NEW_TEMPLATE_SBR . '/'; $sbr = sbr_meta::getInstanceLocal($ev0['e_uid']); $sbr->initFromId($ev0['sbr_id']); $stage = new sbr_stages($sbr, array('id' => $ev0['own_id'])); $arb = $stage->getArbitrage(false, false); $stage_name = sbr_meta::getNameForMail($ev0); $sbr_num = $stage->sbr->getContractNum(); if ($arb['user_id'] == $ev0['f_uid']) { $r = 'e_'; $arb = 'f_'; $this->subject = "Фрилансер обратился в Арбитраж сервиса Безопасная Сделка"; $userlink = $GLOBALS["host"] . "/users/" . $ev0['f_login']; //$msg = "Информируем вас о том, что по проекту «<a href='{$url}?site=Stage&id={$ev0['own_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>{$stage_name}</a>» Исполнитель <a href='{$userlink}'>{$ev0['f_uname']} {$ev0['f_usurname']}</a> [<a href='{$userlink}'>{$ev0['f_login']}</a>] обратился в Арбитраж по причине:<br/><br/>"; } else { $r = 'f_'; $arb = 'e_'; $this->subject = "Заказчик обратился в Арбитраж сервиса Безопасная Сделка"; $userlink = $GLOBALS["host"] . "/users/" . $ev0['e_login']; //$msg = "Информируем вас о том, что по проекту «<a href='{$url}?site=Stage&id={$ev0['own_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>{$stage_name}</a>» Заказчик <a href='{$userlink}'>{$ev0['e_uname']} {$ev0['e_usurname']}</a> [<a href='{$userlink}'>{$ev0['e_login']}</a>] обратился в Арбитраж по причине:<br/><br/>"; } $msg = "Информируем вас о том, что пользователь <a href='{$userlink}'>{$ev0[$arb . 'uname']} {$ev0[$arb . 'usurname']}</a> [<a href='{$userlink}'>{$ev0[$arb . 'login']}</a>] обратился в Арбитраж по причине:<br/><br/>"; $msg .= "«" . reformat($arb['descr']) . "»<br/><br/>"; $msg .= "Работа по этапу <a href='{$url}?site=Stage&id={$ev0['own_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>{$ev0['stage_name']}</a> «Безопасной Сделки» <a href='{$url}?id={$ev0['sbr_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>{$sbr_num}</a> приостановлена. Срок вынесения решения – до " . sbr_stages::MAX_ARBITRAGE_DAYS . " рабочих дней с момента обращения в арбитраж.<br/><br/>"; $msg .= "Вы можете оставить свой комментарий по поводу сложившейся ситуации в разделе «Мои Сделки», в системе комментариев к сделке «<a href='{$url}?site=Stage&id={$ev0['own_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>{$stage_name}</a>»."; //$msg .= "«" . reformat($arb['descr']) . "»<br/><br/>"; //$msg .= "Пожалуйста, перейдите в <a href='{$url}?site=Stage&id={$ev0['own_id']}{$this->_addUrlParams($r == 'e_' ? 'e' : 'f', '&')}'>сделку</a> и прокомментируйте ситуацию."; $this->message = $this->splitMessage($this->GetHtml($ev0[$r . 'uname'], $msg, array('header' => 'simple', 'footer' => 'norisk_robot'))); $this->recipient = $ev0[$r . 'uname'] . " " . $ev0[$r . 'usurname'] . " [" . $ev0[$r . 'login'] . "] <" . $ev0[$r . 'email'] . ">"; $this->SmtpMail('text/html'); }
</div> </div> </div> </h2> <?php if ($stage->status != sbr_stages::STATUS_ARBITRAGED && $sbr->status != sbr::STATUS_CANCELED && $sbr->status != sbr::STATUS_REFUSED && $sbr->reserved_id && $stage->orders == 'DESC') { include $_SERVER['DOCUMENT_ROOT'] . "/sbr/tpl.stage-comment.php"; } $update_event = array(); $update_event_sbr = array(); $cost_sys = $sbr->cost_sys; $tz_time = strtotime($stage->data['created']); $work_time = $stage->data['int_work_time']; $frl_arb = false; $is_worktime_modified = sbr_stages::isModifiedWorkTime($stage->history); $frl_version_started_work = 1; if ($stage->orders == 'DESC') { $started_worked = 0; foreach ($stage->history as $xact => $history) { $current = current($history); if ($current['abbr'] == 'sbr_stages.STARTED_WORK') { $started_worked++; } } $reverse_history = array_reverse($stage->history); $changed = array('sbr_stages.TZ_MODIFIED', 'sbr_stages.WORKTIME_MODIFIED', 'sbr_stages.COST_MODIFIED', 'sbr_stages.STATUS_MODIFIED'); foreach ($reverse_history as $xact => $history) { $current = current($history); if (in_array($current['abbr'], $changed)) { $frl_version_started_work++;
/** * Возвращает этапы текущей сделки * * @param integer $stage_id ид. этапа, если указан, то берем только определенный этап, иначе все текущей сделки. * @param boolean $get_attach нужны ли вложения этапов? * @param boolean $get_su нужны ли данные об отношении юзер/этап (последний просмотра, кол-во прочтенных комментов)? * @param boolean $get_feedbacks взять отзывы по этапу от противоположного юзера. * @return array */ function getStages($stage_id = NULL, $get_attach = false, $get_su = false, $get_feedbacks = false, $get_info_pskb = true) { $stages = NULL; $where = $stage_id == NULL ? $this->db()->parse("ss.sbr_id = ?i", $this->id) : $this->db()->parse("ss.id = ?i", $stage_id); $order_by = 'ss.num'; if ($get_su && $this->uid) { $join_su = "LEFT JOIN sbr_stages_users su ON su.stage_id = ss.id AND su.user_id = {$this->session_uid}"; $cols_su = ', ss.msgs_cnt - su.read_msgs_count AS unread_msgs_count, su.read_msgs_count, su.last_msgs_view'; } if ($get_feedbacks) { $join_sf = "INNER JOIN sbr_feedbacks sf ON sf.id = ss.{$this->apfx}feedback_id"; $cols_sf = ", sf.p_rate, sf.a_rate, sf.n_rate"; $order_by = 'ss.closed_time DESC'; } if ($get_info_pskb) { $join_sbr = "LEFT JOIN pskb_lc p ON p.sbr_id = ss.sbr_id"; $cols_sbr = ", p.ps_emp, p.ps_frl, p.\"tagCust\", p.\"tagPerf\""; } $join_pskb = " LEFT JOIN sbr_stages_payouts ps ON ps.stage_id = ss.id"; $cols_pskb = ', ps.state as lc_state, ps."stateReason" as lc_state_reason, COALESCE(ps.bank_completed, ps.completed) as lc_date '; $sql = "\n SELECT ss.*, date_part('day', work_time) as work_days, (start_time - worked_time) as start_time_without_pause, EXTRACT(EPOCH FROM worked_time) as worked_time_sec,\n (COALESCE(start_time, now()) + work_time)::date - now()::date as work_rem, start_time + work_time as dead_time\n {$cols_sbr}\n {$cols_su}\n {$cols_sf}\n {$cols_pskb}\n FROM sbr_stages ss\n {$join_sbr} \n {$join_su}\n {$join_sf}\n {$join_pskb}\n WHERE {$where}\n ORDER BY {$order_by}\n "; if ($res = pg_query(DBConnect(), $sql)) { while ($row = pg_fetch_assoc($res)) { $stage = new sbr_stages($this); $stage->data = $row; $stage->data['cost_sys'] = $this->cost_sys; if ($stage->status == sbr_stages::STATUS_ARBITRAGED || $stage->status == sbr_stages::STATUS_INARBITRAGE) { $stage->getArbitrage(); if ($stage->arbitrage['frl_percent'] !== NULL) { $cost_frl = $stage->data['cost'] * $stage->arbitrage['frl_percent']; } else { $cost_frl = $stage->data['cost']; } } else { $cost_frl = $stage->data['cost']; } if ($row['ps_frl'] != null && $cost_frl <= pskb::WW_ONLY_SUM && $row['tagPerf'] == pskb::PHYS) { // Только для физиков $stage->data['ps_frl'] = pskb::WW; } if ($stage->cost * $this->cost2rur() > $this->maxNorezCost()) { $this->has_norez_overcost = true; } if ($get_attach) { $stage->data['attach'] = $stage->getAttach(); } if ($get_su && $this->uid && $stage->data['unread_msgs_count']) { $stage->data['unread_first_id'] = $stage->getFirstUnreadMsgId(); } $stages[$row['num']] = $stage; } } return $stages; }
echo $disabled_result ? "disabled" : ""; ?> > <?php if ($stage->sbr->scheme_type != sbr::SCHEME_LC) { ?> <option>Другое (указать)</option> <?php } else { $stage->request['result'] = $stage->request['result'] == '' ? current(sbr_stages::getArbResults($stage)) : $stage->request['result']; } //if ?> <?php foreach (sbr_stages::getArbResults($stage) as $pp => $r) { ?> <option value="<?php echo $pp; ?> "<?php echo $stage->request['pp_result'] == $pp ? ' selected="true"' : ''; ?> ><?php echo $pp; ?> </option> <?php } ?> </select>
$sbr_data['cost_sys'] = $sbr_data['ps_emp'] ? pskb::$exrates_map[$sbr_data['ps_emp']] : $sbr_data['cost_sys']; ?> <tr class="<?php echo ++$i % 2 == 0 ? 'even' : 'odd'; ?> "> <td><?php echo $sbr_data['first_time'] ? date('d.m.Y H:i', strtotime($sbr_data['first_time'])) : ' — '; ?> </td> <td><?php echo $sbr->getContractNum($sbr_data['sbr_id'], $sbr_data['scheme_type']); ?> </td> <td><strong>#<?php echo sbr_stages::getOuterNum($sbr_data['sbr_id'], $sbr_data['num']); ?> </strong> <a href="<?php echo $mode == 'all' ? '/sbr/' : ''; ?> ?access=A&site=Stage&id=<?php echo $sbr_data['id']; ?> "><?php echo reformat($sbr_data['name'], 30, 0, 1); ?> </a></td> <td class="nr-a-td-sum"><?php echo sbr_meta::view_cost($sbr_data['cost'], null, false); ?> </td>
/** * Обновляем старые сделки */ public static function checkStagePayoutsCompleted() { $db = new DB('master'); $sql = "SELECT sp.*, ss.sbr_id, ss.num, pl.lc_id, u.role, s.emp_id, s.frl_id, pl.state as lc_state \n FROM sbr_stages_payouts sp \n INNER JOIN sbr_stages ss ON ss.id = sp.stage_id\n INNER JOIN sbr s ON s.id = ss.sbr_id\n INNER JOIN pskb_lc pl ON pl.sbr_id = s.id\n INNER JOIN users u ON u.uid = sp.user_id\n WHERE s.scheme_type = ?i AND sp.bank_completed IS NULL AND sp.completed IS NOT NULL"; $data = $db->rows($sql, sbr::SCHEME_LC); $pskb = new pskb(); foreach ($data as $row) { $pskb_lc = $pskb->_historyLC($row['lc_id'], sbr_stages::getOuterNum($row['sbr_id'], $row['num']), is_emp($row['role']) ? false : true); $sbr = new sbr($row['emp_id']); $stage = $sbr->getStage($row['stage_id']); $stage->payoutUpdateState($pskb_lc); } }
<td class="nr-a-o-date"><?php echo date('d.m.Y H:i', strtotime($sp['requested'])); ?> </td> <td><?php echo $sbr->getContractNum($sp['sbr_id'], $sp['scheme_type']); ?> </td> <td class="nr-a-o-num"><?php echo $sp['is_arbitrage'] == 't' ? '<b>А</b> ' : ''; ?> <a href="/sbr/?access=A&site=Stage&id=<?php echo $sp['stage_id']; ?> ">#<?php echo sbr_stages::getOuterNum($sp['sbr_id'], $sp['stage_num']); ?> </a></td> <td><a href="/users/<?php echo $sp['login']; ?> /" class="nr-a-lnk-<?php echo is_emp($sp['role']) ? 'emp' : 'frl'; ?> "><?php echo $sp['uname'] . ' ' . $sp['usurname'] . ' [' . $sp['login'] . ']'; ?> </a></td> <td class="nr-a-td-sum"><?php echo sbr_meta::view_cost($sp['credit_sum'], NULL, false); ?>