public function apiGetCodesInUse() { //post data get $start_date = $this->request->request->get("start_date"); $end_date = $this->request->request->get("end_date"); if (!$start_date || !$end_date) { return print new Response('params has wrong names', Response::HTTP_FAILED_DEPENDENCY); } try { $start = date_create($start_date)->format("Y-m-d H:i"); $end = date_create($end_date)->format("Y-m-d H:i"); } catch (Exception $e) { return print new Response('params can\'t be converted to dates', Response::HTTP_CONFLICT); } if (date_create($start_date) > date_create($end_date)) { return print new Response('start bigger than end', Response::HTTP_FAILED_DEPENDENCY); } $sc = new Settings_controller(); $connCtrl = new ConnectionCode_controller(); $codesLoadSet = []; foreach ($sc->getCodesPostfixSet() as $postfixCode) { $vksSearch = $connCtrl->isCodeInUse($postfixCode, $start, $end, true); $codesLoadSet[] = array('code' => $postfixCode, 'usage' => isset($vksSearch->id) ? ST::linkToVksPage($vksSearch->id, true) : false); } print json_encode($codesLoadSet, JSON_PRETTY_PRINT); }
function process($vksId) { Token::checkToken(); $connCtrl = new ConnectionCode_controller(); try { $vks = Vks::findOrFail($vksId); } catch (Exception $e) { $this->error('404'); } if (!self::isVksCanBeApproved($vks)) { $this->error('500', "Эта ВКС не может быть согласована, т.к. не имеет соответвующего статуса"); } $request = $this->request->request; //validate $this->validator->validate(['Комментарий для пользователя' => [$request->get('comment_for_user'), 'max(255)'], 'Статус ВКС' => [$request->get('status'), 'required|between(1,2)']]); //if no passes if (!$this->validator->passes()) { $this->backWithData($this->validator->errors()->all()); } /* * if declined */ if ($request->get('status') == VKS::APPROVE_STATUS_DECLINED) { $backMessage = "<p>Вкс #{$vks->id}, отказ в проведении</p>"; $vks->comment_for_user = $request->get('comment_for_user'); $vks->status = $request->get('status'); $vks->approved_by = App::$instance->user->id; $vks->save(); //delete related VKS in CA if ($vks->other_tb_required && $vks->link_ca_vks_type == 1 && isset($vks->link_ca_vks_id)) { $caVks = CAVksNoSupport::find($vks->link_ca_vks_id); if ($caVks->status == VKS_STATUS_TRANSPORT_FOR_TB) { App::$instance->log->logWrite(LOG_OTHER_EVENTS, "Транспортная ВКС " . $caVks->id . " удалена"); $backMessage .= "<p>Транспортная ВКС " . $caVks->id . " удалена</p>"; $caVks->delete(); } } $vks = Vks::full()->find($vks->id); $this->humanize($vks); App::$instance->callService('vks_report_builder')->sendDeclineMail($vks, false); //revoke all outlook requests requests OutlookCalendarRequest_controller::changeRequestTypeAndPutToResend($vks->id, OutlookCalendarRequest::REQUEST_TYPE_DELETE); if (count($vks->tech_support_requests)) { foreach ($vks->tech_support_requests as $request) { if ($request->status == TechSupportRequest::STATUS_WAIT_VKS_DECISION) { $request->status = TechSupportRequest::STATUS_VKS_REFUSED; $request->save(); } } } App::$instance->MQ->setMessage($backMessage); ST::redirect(ST::route("Vks/notApproved")); } if (!$request->has('no-codes') && !count($request->get('code'))) { $this->error('500', 'bad params combined'); } /* * if no codes * */ if ($request->has('no-codes')) { $backMessage = "<p>Вкс #{$vks->id} согласована без кода подключения</p>"; //delete old $oldCodes = ConnectionCode::where('vks_id', $vks->id)->get(); if (count($oldCodes)) { foreach ($oldCodes as $oldCode) { $oldCode->delete(); } } $vks->comment_for_user = $request->get('comment_for_user'); $vks->status = $request->get('status'); $vks->flag = $request->get('flag') ? 1 : 0; //set admin id $vks->approved_by = App::$instance->user->id; $vks->save(); //vks ca process $transportVksMessage = App::$instance->callService('vks_ca_negotiator')->transportVksProcessor($this->request, $vks); if ($transportVksMessage->getStatusCode() != Response::HTTP_OK) { $this->backWithData($transportVksMessage->getContent()); } $vks = Vks::full()->find($vks->id); $this->humanize($vks); App::$instance->callService('vks_report_builder')->sendReportMail($vks, false); App::$instance->MQ->setMessage($backMessage . $transportVksMessage->getContent()); ST::redirect(ST::route("Vks/notApproved")); } /* * standart process */ //validate codes if (!count($request->get('code'))) { $this->error('500', 'no code was passed, error!'); } foreach ($request->get('code') as $code) { $this->validator->validate(['Префикс' => [$code['prefix'], 'required|max(160)'], 'Постфикс' => [$code['postfix'], 'required|max(4)'], 'Подсказка' => [$code['tip'], 'max(255)']]); //if no passes if (!$this->validator->passes()) { $this->backWithData($this->validator->errors()->all()); } } Capsule::beginTransaction(); $oldCodes = ConnectionCode::where('vks_id', $vks->id)->get(); if (count($oldCodes)) { foreach ($oldCodes as $oldCode) { $oldCode->delete(); } } foreach ($request->get('code') as $code) { $compiledCode = $code['prefix'] . $code['postfix']; if ($request->has('no-check')) { $checkVks = false; } else { $checkVks = $connCtrl->isCodeInUse($code['postfix'], $vks->start_date_time, $vks->end_date_time); } if ($checkVks) { App::$instance->MQ->setMessage('Ошибка: Код ' . $code['postfix'] . ' уже используется в ' . ST::linkToVksPage($checkVks->id), 'danger'); ST::redirect("back"); } else { $newCodes[] = ConnectionCode::create(['vks_id' => $vks->id, 'value' => $compiledCode, 'tip' => $code['tip']]); } } $vks->comment_for_user = $request->get('comment_for_user'); $vks->status = $request->get('status'); $vks->flag = $request->get('flag') ? 1 : 0; //set admin id $vks->approved_by = App::$instance->user->id; $vks->save(); //vks ca process $transportVksMessage = App::$instance->callService('vks_ca_negotiator')->transportVksProcessor($this->request, $vks); if ($transportVksMessage->getStatusCode() != Response::HTTP_OK) { $this->backWithData($transportVksMessage->getContent()); } Capsule::commit(); //now send mails //send mail to user, if it not anon user if ($vks->status == VKS_STATUS_APPROVED) { $vks = Vks::full()->find($vks->id); $this->humanize($vks); App::$instance->callService('vks_report_builder')->sendReportMail($vks, false); //revoke all outlook requests requests OutlookCalendarRequest_controller::changeRequestTypeAndPutToResend($vks->id, OutlookCalendarRequest::REQUEST_TYPE_UPDATE); } if ($vks->status == VKS_STATUS_APPROVED) { App::$instance->MQ->setMessage("<p>ВКС {$vks->id} согласована </p>" . $transportVksMessage->getContent()); if (count($vks->tech_support_requests)) { foreach ($vks->tech_support_requests as $request) { if ($request->status == TechSupportRequest::STATUS_WAIT_VKS_DECISION) { $request->status = TechSupportRequest::STATUS_READY_FOR_SEND; $request->save(); } } } } else { App::$instance->MQ->setMessage("Отказ по ВКС {$vks->id}"); if (count($vks->tech_support_requests)) { foreach ($vks->tech_support_requests as $request) { if ($request->status == TechSupportRequest::STATUS_WAIT_VKS_DECISION) { $request->status = TechSupportRequest::STATUS_VKS_REFUSED; $request->save(); } } } } ST::redirect(ST::route("Vks/notApproved")); }