public function transportVksProcessor(Request $request, Vks $vks)
 {
     $ca_pool_codes = App::$instance->callService("vks_ca_negotiator")->askForPool();
     //        die(dump($request));
     //if flag no create set return false
     if (!count($ca_pool_codes)) {
         App::$instance->callService('standart_controller')->backWithData('Пул из ЦА не удалось получить');
     }
     if ($request->get('ca_transport_no_create') || !$vks->other_tb_required || $vks->status != VKS_STATUS_APPROVED) {
         return new Response('Создание транспортной ВКС не запрошено', Response::HTTP_OK);
     }
     //check if received code
     if (!$request->get('ca_transport_code') || !strlen($request->get('ca_transport_code'))) {
         App::$instance->callService('standart_controller')->backWithData('Запрашивается выдача кода из ЦА, но значение не передано');
     }
     //check if code from pool
     if (!in_array($request->get('ca_transport_code'), $ca_pool_codes)) {
         App::$instance->callService('standart_controller')->backWithData('Запрашиваемый код вне пула ТБ');
     }
     //check if code can be given
     $currentVksStart = $vks->start_date_time;
     $currentVksEnd = $vks->end_date_time;
     $ca_transport_vkses = App::$instance->callService("vks_ca_negotiator")->aksTransportVksInPeriod($currentVksStart, $currentVksEnd, $ca_pool_codes);
     $codesFiltrated = array();
     foreach ($ca_pool_codes as $code) {
         $codesFiltrated[$code] = array();
         if (count($ca_transport_vkses)) {
             foreach ($ca_transport_vkses as $ca_tr_vks) {
                 if ($code == $ca_tr_vks->v_room_num) {
                     $codesFiltrated[$code][] = $ca_tr_vks;
                 }
             }
         }
     }
     if (isset($codesFiltrated[$request->get('ca_transport_code')]) && count($codesFiltrated[$request->get('ca_transport_code')])) {
         return new Response('Запрашиваемый код уже выдан и не может быть использован повторно', Response::HTTP_INTERNAL_SERVER_ERROR);
     } else {
         //create CA Object and send it
         $transportCaVks = new CaTransportVks();
         $transportCaVks->setTitle($vks->title);
         $transportCaVks->setDate($vks->date);
         $transportCaVks->setStartTime($vks->start_date_time);
         $transportCaVks->setEndTime($vks->end_date_time);
         $transportCaVks->setLocation(MY_NODE);
         $transportCaVks->setCaParticipants($vks->CaInPlaceParticipantCount->participants_count);
         $transportCaVks->setParticipants($vks->compileCaTransportIdsParticipants());
         $transportCaVks->setTb(MY_NODE);
         $transportCaVks->setIp(App::$instance->user->ip);
         $transportCaVks->setVRoomNum($request->get('ca_transport_code'));
         $transportCaVks->setOwnerId(App::$instance->user->id);
         $transportVks = App::$instance->callService("vks_ca_negotiator")->createTransitVksOnCA($transportCaVks);
         if (isset($transportVks->id)) {
             $vks->link_ca_vks_type = VKS_NS;
             $vks->link_ca_vks_id = $transportVks->id;
             $vks->save();
             return new Response("<p>Транспортная ВКС #" . $transportVks->id . " в ЦА, успешно создана</p>", Response::HTTP_OK);
         } else {
             //                dump($transportVks);
             //                die;
             return new Response("<p>Транспортная ВКС не может быть создана из-за ошибки: " . $transportVks . "</p>", Response::HTTP_INTERNAL_SERVER_ERROR);
         }
     }
 }
 public function joinCaStore($referral)
 {
     $request = $this->request->request;
     $this->fillParticipants("vks_participants_create", $this->request);
     $report = new VksReport($request);
     $this->validator->validate(['ФИО ответственного' => [$request->get('init_customer_fio'), 'required|max(255)'], 'Почта ответственного' => [$request->get('init_customer_mail'), 'required|max(255)'], 'Тел. ответственного' => [$request->get('init_customer_phone'), 'required|max(255)'], 'Подразделение' => [$request->get('department'), 'required|int'], 'Кол-во участников с рабочих мест (IP телефоны)' => [$request->get('in_place_participants_count'), 'int'], 'Участники ВКС' => [$request->get('inner_participants'), 'array'], 'Точка для технической поддержки' => [$request->get('tech_support_att_id'), "int|attendance_is_tech_supportable"], 'Комментарий для Тех. поддержки' => [$request->get('user_message'), 'max(255)'], 'Комментарий для Администратора' => [$request->get('comment_for_admin'), 'max(255)']]);
     //if no passes
     if (!$this->validator->passes()) {
         $this->backWithData($this->validator->errors()->all());
     }
     //any participants required
     if (!intval($request->get('in_place_participants_count')) && !count($request->get('inner_participants'))) {
         $this->backWithData('Вы не выбрали участников для ВКС');
     }
     Capsule::beginTransaction();
     $caWS = CAVks::where('referral', $referral)->with('connection_codes')->first();
     $caNS = CAVksNoSupport::where('referral', $referral)->first();
     if (!$caWS && !$caNS) {
         $this->backWithData("Приглашение {$request->get('referrer')}  не действительно");
     }
     $caVKSType = $caWS ? VKS_WAS : VKS_NS;
     $caVks = $caWS ? $caWS : $caNS;
     $this->convertToLocalTime($caVks);
     $vks = new Vks();
     $vks->is_private = $request->has('is_private') ? 1 : 0;
     $vks->record_required = $request->has('record_required') ? 1 : 0;
     $vks->title = $caVks->title;
     $vks->date = $caVks->local->start_date_time->format("Y-m-d");
     $vks->start_date_time = $caVks->local->start_date_time;
     $vks->end_date_time = $caVks->local->end_date_time;
     $vks->presentation = isset($caVks->presentation) ? $caVks->presentation : 0;
     $vks->department = $request->get('department');
     $vks->initiator = 1;
     //always CA
     $vks->init_customer_fio = $request->get('init_customer_fio');
     $vks->init_customer_phone = $request->get('init_customer_phone');
     $vks->init_customer_mail = $request->get('init_customer_mail');
     $vks->comment_for_admin = $request->get('comment_for_admin');
     $vks->link_ca_vks_id = $caVks->id;
     $vks->link_ca_vks_type = $caVKSType;
     $vks->owner_id = App::$instance->user->id;
     $vks->from_ip = App::$instance->user->ip;
     $vks->ca_code = isset($caVks->connectionCode->value) ? $caVks->connectionCode->value : $caVks->v_room_num;
     $vks->in_place_participants_count = $request->get('in_place_participants_count');
     //        die(dump($vks));
     $vks->save();
     if ($request->get('tech_support_required')) {
         TechSupportRequest::create(array('att_id' => $request->get('tech_support_att_id'), 'vks_id' => $vks->id, 'owner_id' => App::$instance->user->id, 'user_message' => $request->get('user_message'), 'status' => TechSupportRequest::STATUS_WAIT_VKS_DECISION));
     }
     if (!Auth::isAdmin(App::$instance)) {
         if (self::isVksInPastTime($vks)) {
             throw new LogicException('bad vks date, it on past time');
         }
     }
     //create participants
     $this->createInnerOrPhoneParp($request->get('inner_participants'), $vks);
     App::$instance->log->logWrite(LOG_VKSWS_CREATED, "VKS " . ST::linkToVksPage($vks->id) . " Created");
     Capsule::commit();
     //refill for report
     $this->request->request->set("date", $vks->date->format("d.m.Y"));
     $this->request->request->set("start_time", $vks->start_date_time->format("H:i"));
     $this->request->request->set("end_time", $vks->end_date_time->format("H:i"));
     $report->setObject($vks);
     $report->setResult(true);
     $result[] = $report;
     $_SESSION['savedResult_' . App::$instance->main->appkey] = $result;
     ST::redirectToRoute('vks/checkout');
 }