Пример #1
0
 public function adminStore()
 {
     Auth::isAdminOrDie(App::$instance);
     Token::checkToken();
     $connCtrl = new ConnectionCode_controller();
     $request = $this->request->request;
     $this->fillParticipants("vks_participants_create", $this->request);
     Capsule::beginTransaction();
     $this->validator->validate(['Дата' => [$request->get('date'), 'required|date'], 'Время начала' => [$request->get('start_time'), 'required'], 'Время окончания' => [$request->get('end_time'), 'required'], 'Название' => [$request->get('title'), 'required|max(255)'], 'ФИО ответственного' => [$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'], 'Участники в ЦА' => [$request->get('ca_participants'), 'int|between(0,10)'], 'Владелец' => [$request->get('owner_id'), 'required|int'], 'Комментарий для пользователя' => [$request->get('comment_for_user'), 'max(255)'], 'Комментарий для Администратора' => [$request->get('comment_for_admin'), 'max(255)'], 'Участники ВКС' => [$request->get('inside_participants'), 'array'], 'Кол-во участников с рабочих мест (IP телефоны)' => [$request->get('in_place_participants_count'), 'int'], 'Точка для технической поддержки' => [$request->get('tech_support_att_id'), "int|attendance_is_tech_supportable"], 'Комментарий для Тех. поддержки' => [$request->get('user_message'), 'max(255)']]);
     //if no passes
     if (!$this->validator->passes()) {
         $this->backWithData($this->validator->errors()->all());
     }
     //any participants required
     if (!$request->get('needTB')) {
         if (!intval($request->get('in_place_participants_count')) && !count($request->get('inner_participants'))) {
             $this->backWithData('Вы не выбрали внутренних участников (в вашем ТБ) для ВКС');
         }
         if (intval($request->get('in_place_participants_count') == 0 && count($request->get('inner_participants')) == 1)) {
             $this->backWithData('Выбран только один участник для ВКС');
         }
         if (intval($request->get('in_place_participants_count')) == 1 && !count($request->get('inner_participants'))) {
             $this->backWithData('Выбран только один участник для ВКС');
         }
     }
     $vks = new Vks();
     if (!$request->get('ca_code')) {
         $request->set('ca_code', Null);
     }
     $vks->fill($request->all());
     $vks->is_private = $request->has('is_private') ? 1 : 0;
     $vks->record_required = $request->has('record_required') ? 1 : 0;
     $vks->other_tb_required = $request->get('needTB') ? 1 : 0;
     $vks->start_date_time = $request->get('date') . " " . $request->get('start_time');
     $vks->end_date_time = $request->get('date') . " " . $request->get('end_time');
     $this->timeBarrier($vks);
     $vks->comment_for_admin = $request->get('comment_for_admin');
     $vks->owner_id = $request->get('owner_id');
     $vks->from_ip = App::$instance->user->ip;
     $vks->status = VKS_STATUS_APPROVED;
     $vks->approved_by = App::$instance->user->id;
     $vks->save();
     //relation models
     if ($request->get('needTB')) {
         App::$instance->callService('vks_ca_negotiator')->fillRequestWithInputData($this->request);
         App::$instance->callService('vks_ca_negotiator')->validateCaParticipants($this->request, $this);
         App::$instance->callService('vks_ca_negotiator')->fillRelationEntity($this->request, $vks);
     }
     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));
     }
     //check if vks not in past time
     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, true);
     App::$instance->log->logWrite(LOG_VKSWS_CREATED, "VKS " . ST::linkToVksPage($vks->id) . " Created by admin, direct insert");
     if (!$request->has('no-codes')) {
         foreach ($request->get('code') as $code) {
             $compiledCode = $code['prefix'] . $code['postfix'];
             if ($request->has('no-check')) {
                 $checkVks = false;
             } else {
                 $checkVks = $connCtrl->isCodeInUse($compiledCode, $vks->start_date_time, $vks->end_date_time);
             }
             if ($checkVks) {
                 $this->backWithData('Ошибка: Код ' . $compiledCode . ' уже используется в ' . ST::linkToVksPage($checkVks->id));
             } else {
                 $newCodes[] = ConnectionCode::create(['vks_id' => $vks->id, 'value' => $compiledCode, 'tip' => $code['tip']]);
             }
         }
     }
     //vks ca process
     $transportVksMessage = App::$instance->callService('vks_ca_negotiator')->transportVksProcessor($this->request, $vks);
     if ($transportVksMessage->getStatusCode() != Response::HTTP_OK) {
         $this->backWithData($transportVksMessage->getContent());
     }
     App::$instance->MQ->setMessage("ВКС " . ST::linkToVksPage($vks->id) . " добавлена в расписание" . "<p>" . $transportVksMessage->getContent() . "</p>");
     Capsule::commit();
     ST::redirectToRoute('Index/index');
 }