require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/LocalDateTime.php'; $multi = new multi_buttons(); if ($stage->version != $stage->frl_version) { // Фрилансер еще не согласился, для расчета берем старую дату $frl_version = $stage->getVersion($stage->frl_version, $stage->data); $work_time = intval($frl_version['work_time']); $start_time = $frl_version['start_time']; } else { $work_time = intval($stage->work_time); $start_time = $stage->start_time; } $work_time = $work_time < 0 ? 0 : $work_time; // Если проект уже просрочен даем еще 5 дней с момента отмены арбитража $cdate = new LocalDateTime(date('d.m.Y', strtotime($start_time . ' + ' . $work_time . 'day'))); $cdate->getWorkForDay(pskb::PERIOD_EXP); $days = $work_time + $cdate->getCountDays() . 'day'; $overtime = strtotime($start_time . ' + ' . $days); if ($sbr->data['lc_id'] > 0) { $overtime = strtotime($sbr->data['dateEndLC'] . ' - ' . pskb::ARBITRAGE_PERIOD_DAYS . ' day'); // Сб, Вс не рабочие дни if (date('w', $overtime) == 0 || date('w', $overtime) == 6) { $d = date('w', $overtime) == 6 ? 1 : 2; $overtime = $overtime - $d * 3600 * 24; } } else { $overtime = null; } // Если в арбитраже, действий делать никаких нельзя, независимо от статуса СБР if ($stage->data['status'] == sbr_stages::STATUS_INARBITRAGE || $stage->data['status'] == sbr_stages::STATUS_ARBITRAGED) { return; }
if ($stage->data['lc_state'] == pskb::PAYOUT_ERR) { $type_payment = exrates::WEBM; // Если происходит ошибка выплаты деньги всегда идут на веб-кошелек } $current['additional'] = 'На ' . sbr_meta::view_type_payment($type_payment, $type_payment == exrates::CARD ? 'вашу ' : 'ваш ') . ' были переведены ' . sbr_meta::view_cost($stage->getPayoutSum(sbr::FRL, $type_payment), $stage->type_payment == exrates::FM ? $stage->type_payment : $stage->sbr->cost_sys) . ' Зачисление денежных средств произведено ' . date('d.m.Y в H:i', strtotime($stage->data['lc_date'])) . ' согласно пункту 6.7 <a class="b-layout__link" href="' . $sbr->getDocumentLink('contract') . '">Договора</a>.'; } if ($current['abbr'] == 'sbr_stages.STATUS_MODIFIED' && $current['new_val'] == sbr_stages::STATUS_COMPLETED) { $current['abbr'] .= '_OK'; } if ($current['abbr'] == 'sbr_stages.REFUSE' && $current['new_val'] == '') { $current['additional'] = $sbr->isEmp() ? " и предпочел не указывать причину" : " и предпочли не указывать причину"; } if ($current['abbr'] == 'sbr_stages.OVERTIME') { $cdate = new LocalDateTime($current['xtime']); $cdate->getWorkForDay(pskb::PERIOD_EXP); $overtime = strtotime($current['xtime'] . " + " . $cdate->getCountDays() . "day"); $current['additional'] = date('d', $overtime) . " " . monthtostr(date('n', $overtime), true) . " " . date('Y', $overtime); } if ($current['abbr'] == 'sbr.AGREE' && ($sbr->isFrl() || $sbr->isAdmin() || $sbr->isAdminFinance())) { $type_payment = $stage->sbr->scheme_type == sbr::SCHEME_LC ? pskb::$exrates_map[$stage->data['ps_frl']] : $stage->type_payment; if ($stage->data['ps_frl'] == pskb::WW) { $current['additional'] = '. Способ получения гонорара — <a class="b-post__link" href="https://webpay.pscb.ru/login/auth">Веб-кошелек</a> (№ ' . $sbr->data['numPerf'] . ')'; } else { $current['additional'] = ', выбрав вывод ' . sbr_meta::view_type_payment($type_payment, 'на '); } } if ($current['abbr'] == 'sbr.RESERVE' && ($sbr->isEmp() || $sbr->isAdmin() || $sbr->isAdminFinance())) { $type_payment = $stage->sbr->scheme_type == sbr::SCHEME_LC ? pskb::$exrates_map[$stage->sbr->data['ps_emp']] : $stage->sbr->cost_sys; $current['additional'] = ' через ' . sbr_meta::view_type_payment($type_payment); } if ($current['abbr'] == 'sbr_stages.ARB_RESOLVED') {
/** * Создает аккредитив. Регистрирует, если необходимо, кошельки для пользователей. * В случае создания кошельков банк отправляет пользователям смс с временным паролем. * * @param type $sum Сумма резерва * * @return pskb_lc */ public function reserve() { $lc = $this->getLC(); $numDog = $this->_sbr->data['id']; if ($lc['lc_id'] > 0 && $lc['state'] == self::STATE_ERR) { $resp = $this->_checks(json_encode(array('id' => array($lc['lc_id'])))); $lc_ch = $resp[$lc['lc_id']]; if ($lc_ch->state == self::STATE_NEW) { if ($this->not_different_finance) { return 'no_different'; } else { $this->upLC(array('lc_id' => null), $lc['lc_id']); // Нужен новый аккредитив, изменились данные резерва $lc['lc_id'] = null; } } elseif ($lc_ch->state == self::STATE_COVER) { $this->upLC(array('state' => 'new'), $lc['lc_id']); pskb::checkStatus(array($lc['lc_id']), $in, $out); return true; } } if (!$lc) { $this->_setError('Ошибка запроса.'); return false; } if ($lc['lc_id'] && $lc['state'] == self::STATE_NEW) { $this->_setError('Аккредитив уже создан. Ожидается оплата.'); return false; } $cdate = new LocalDateTime(); $cdate->getExcDaysInit(false, true); $stages = $this->_sbr->getStages(); $work_time = 0; foreach ($stages as $stage) { $work_time += $stage->data['work_time']; $cdate->start_time = "now + {$work_time} day"; $cdate->setTimestamp(strtotime("now + {$work_time} day")); $cdate->getWorkForDay(self::TEMP_STAGE_DELAY); $work_time += $cdate->getCountDays(); } // Считаем 5 рабочих дней $cdate->getWorkForDay(self::DATE_COVER_DELAY, true); $cover_time = $cdate->getTimestamp(); $exec_time = $cover_time + 3600 * 24 * $work_time; $end_time = $exec_time + 3600 * 24 * self::DATE_END_DELAY; $dateCoverLC = date('d.m.Y', $cover_time); $dateExecLC = date('d.m.Y', $exec_time); $dateEndLC = date('d.m.Y', $end_time); $resp = $this->_addLC($lc['sum'], $this->_sbr->data['id'], $dateExecLC, $dateEndLC, $dateCoverLC, $lc['tagCust'], $lc['alienCust'], $lc['nameCust'], $lc['numCust'], $lc['psCust'], $lc['accCust'], $lc['innCust'], $lc['nameBankCust'], $lc['swiftCust'], $lc['corAccbankCust'], $lc['emailCust'], $lc['cityBankCust'], $lc['cntrBankCust'], $lc['tagPerf'], $lc['alienPerf'], $lc['namePerf'], $lc['numPerf'], $lc['psPerf'], $lc['accPerf'], $lc['innPerf'], $lc['nameBankPerf'], $lc['swiftPerf'], $lc['corAccbankPerf'], $lc['emailPerf'], $lc['cityBankPerf'], $lc['cntrBankPerf'], $this->_sbr->data['cost']); $dateCoverLC = date('Y-m-d', $cover_time); $dateExecLC = date('Y-m-d', $exec_time); $dateEndLC = date('Y-m-d', $end_time); if ($resp->id) { $data = array('lc_id' => $resp->id, 'dateCoverLC' => $dateCoverLC, 'dateExecLC' => $dateExecLC, 'dateEndLC' => $dateEndLC, 'state' => $resp->state, 'stateReason' => $resp->stateReason); $res = $this->upLC($data, $this->_sbr->data['id'], 'sbr_id'); } else { $this->_setError('Ошибка создания аккредитива.'); $resp = false; } return $resp; }
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/LocalDateTime.php"; $multi = new multi_buttons(); if ($stage->version != $stage->frl_version) { // Фрилансер еще не согласился, для расчета берем старую дату $frl_version = $stage->getVersion($stage->frl_version, $stage->data); $work_time = intval($frl_version['work_time']); $start_time = $frl_version['start_time']; } else { $work_time = intval($stage->work_time); $start_time = $stage->start_time; } $work_time = $work_time < 0 ? 0 : $work_time; // Если проект уже просрочен даем еще 5 дней с момента отмены арбитража $cdate = new LocalDateTime(date('d.m.Y', strtotime($start_time . ' + ' . $work_time . 'day'))); $cdate->getWorkForDay(pskb::PERIOD_EXP); $days = $work_time + $cdate->getCountDays() . "day"; $overtime = strtotime($start_time . ' + ' . $days); if ($sbr->data['lc_id'] > 0) { $overtime = strtotime($sbr->data['dateEndLC'] . ' - ' . pskb::ARBITRAGE_PERIOD_DAYS . " day"); // Сб, Вс не рабочие дни if (date('w', $overtime) == 0 || date('w', $overtime) == 6) { $d = date('w', $overtime) == 6 ? 1 : 2; $overtime = $overtime - $d * 3600 * 24; } } else { $overtime = null; } // Если в арбитраже, действий делать никаких нельзя, независимо от статуса СБР if ($stage->data['status'] == sbr_stages::STATUS_INARBITRAGE || $stage->data['status'] == sbr_stages::STATUS_ARBITRAGED) { return; }
if ($stage->data['lc_state'] == pskb::PAYOUT_ERR) { $type_payment = exrates::WEBM; // Если происходит ошибка выплаты деньги всегда идут на веб-кошелек } $current['additional'] = 'На ' . sbr_meta::view_type_payment($type_payment, $type_payment == exrates::CARD ? 'вашу ' : 'ваш ') . ' были переведены ' . sbr_meta::view_cost($stage->getPayoutSum(sbr::FRL, $type_payment), $stage->type_payment == exrates::FM ? $stage->type_payment : $stage->sbr->cost_sys) . ' Зачисление денежных средств произведено ' . date('d.m.Y в H:i', strtotime($stage->data['lc_date'])) . ' согласно пункту 6.7 <a class="b-layout__link" href="' . $sbr->getDocumentLink('contract') . '">Договора</a>.'; } if ($current['abbr'] == 'sbr_stages.STATUS_MODIFIED' && $current['new_val'] == sbr_stages::STATUS_COMPLETED) { $current['abbr'] .= '_OK'; } if ($current['abbr'] == 'sbr_stages.REFUSE' && $current['new_val'] == '') { $current['additional'] = $sbr->isEmp() ? ' и предпочел не указывать причину' : ' и предпочли не указывать причину'; } if ($current['abbr'] == 'sbr_stages.OVERTIME') { $cdate = new LocalDateTime($current['xtime']); $cdate->getWorkForDay(pskb::PERIOD_EXP); $overtime = strtotime($current['xtime'] . ' + ' . $cdate->getCountDays() . 'day'); $current['additional'] = date('d', $overtime) . ' ' . monthtostr(date('n', $overtime), true) . ' ' . date('Y', $overtime); } if ($current['abbr'] == 'sbr.AGREE' && ($sbr->isFrl() || $sbr->isAdmin() || $sbr->isAdminFinance())) { $type_payment = $stage->sbr->scheme_type == sbr::SCHEME_LC ? pskb::$exrates_map[$stage->data['ps_frl']] : $stage->type_payment; if ($stage->data['ps_frl'] == pskb::WW) { $current['additional'] = '. Способ получения гонорара — <a class="b-post__link" href="https://webpay.pscb.ru/login/auth">Веб-кошелек</a> (№ ' . $sbr->data['numPerf'] . ')'; } else { $current['additional'] = ', выбрав вывод ' . sbr_meta::view_type_payment($type_payment, 'на '); } } if ($current['abbr'] == 'sbr.RESERVE' && ($sbr->isEmp() || $sbr->isAdmin() || $sbr->isAdminFinance())) { $type_payment = $stage->sbr->scheme_type == sbr::SCHEME_LC ? pskb::$exrates_map[$stage->sbr->data['ps_emp']] : $stage->sbr->cost_sys; $current['additional'] = ' через ' . sbr_meta::view_type_payment($type_payment); } if ($current['abbr'] == 'sbr_stages.ARB_RESOLVED') {