public function actionUpdateissue($id) { /* проверка на доступ к заданию пользователя */ //проверка на просмотр задания if ($permission_open_issue_modal = \app\controllers\PermissionsController::_checkPermissions('open_issue_modal', $id)) { $permission_open_issue_modal_in_current_status = \app\controllers\PermissionsController::_checkPermissions('open_issue_modal_in_current_status', $id); //проверка на просмотр задания в текущем статусе if ($permission_open_issue_modal_in_current_status == 'true' || $permission_open_issue_modal_in_current_status == 'true_for_boss') { $permission_for_update = \app\controllers\PermissionsController::_checkPermissions('update_issue', $id); //проверка на редактирование задания if ($permission_for_update == 'update_issue_for_boss' || $permission_for_update == 'update_issue_for_person') { //формируем модель данных для формы редактирования $model = $this->findModel($id); $model->DEADLINE = \Yii::$app->formatter->asDate($model->DEADLINE, 'php:d-m-Y'); $podr_tasks = \app\models\PodrTasks::findAll(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0]); $task_confirms = \app\models\TaskConfirms::findAll(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0]); $task_docs_recvrs = \app\models\TaskDocsRecvrs::findAll(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0]); $pers_tasks = \app\models\PersTasks::findAll(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0]); $task_date_3 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 3])->one(); if ($task_date_3) { // если существует дата DATE_TYPE_ID => 3 $model->task_type_date_3 = \Yii::$app->formatter->asDate($task_date_3->TASK_TYPE_DATE, 'php:d-m-Y'); $last_model_task_type_date_3 = $model->task_type_date_3; } else { // иначе устанавливаем значние даты null $last_model_task_type_date_3 = null; } $task_date_1 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 1])->one(); if ($task_date_1) { // если существует дата DATE_TYPE_ID => 1 $model->task_type_date_1 = \Yii::$app->formatter->asDate($task_date_1->TASK_TYPE_DATE, 'php:d-m-Y'); $last_model_task_type_date_1 = $model->task_type_date_1; } else { // иначе устанавливаем значние даты null $last_model_task_type_date_1 = null; } $task_date_4 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 4])->one(); if ($task_date_4) { // если существует дата DATE_TYPE_ID => 4 $model->task_type_date_4 = \Yii::$app->formatter->asDate($task_date_4->TASK_TYPE_DATE, 'php:d-m-Y'); $last_model_task_type_date_4 = $model->task_type_date_4; } else { // иначе устанавливаем значние даты null $last_model_task_type_date_4 = null; } $transactions_for_date = \app\models\Transactions::findOne($model->TRACT_ID); $model->transactions_tract_datetime = \Yii::$app->formatter->asDate($transactions_for_date->TRACT_DATETIME, 'php:d-m-Y'); if ($permission_for_update == 'update_issue_for_person') { $pers_tasks_this = \app\models\PersTasks::find()->where(['TASK_ID' => $model->ID, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); $task_state = \app\models\TaskStates::find()->where(['PERS_TASKS_ID' => $pers_tasks_this->ID, 'IS_CURRENT' => 1])->one(); if ($task_state) { // проверяем есть ли статус $model->state = $task_state->STATE_ID; $last_state = $task_state->STATE_ID; } else { // иначе устанавливаем значние состояния $last_state = null; } $show_states = 1; $model->scenario = \app\models\Tasks::SCENARIO_UPDATE_PERSON; } else { //не отображаем состояния, если редактирует руководитель $show_states = 0; $model->scenario = \app\models\Tasks::SCENARIO_UPDATE_BOSS; } //ajax - валидация формы редактирования if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { // если данные были переданы в ajax - запросе Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return \yii\widgets\ActiveForm::validate($model); } if ($model->load(Yii::$app->request->post())) { //если был сабмит формы - пишем нове данные в модель и сохраняем ее $transactions = \app\models\Transactions::find()->where(['TN' => \Yii::$app->user->id])->orderBy('ID DESC')->one(); if (!empty($model->hidden_ordernum)) { $model->ORDERNUM = $model->hidden_ordernum; } if (!empty($model->hidden_peoordernum)) { $model->PEOORDERNUM = $model->hidden_peoordernum; } $deadline = explode('-', $model->DEADLINE); $deadline_formatted = $deadline[2] . '-' . $deadline[1] . '-' . $deadline[0]; $model->DEADLINE = new \yii\db\Expression("to_date('" . $deadline_formatted . "','{$this->dateFormat}')"); if ($model->save()) { // если объект модели Tasks сохранен в БД /* Удаляем (помечаем) старые данные и сохраняем модель PODR_TASKS---------------------------------------------- */ //get isset tasks array $isset_podr_tasks = \app\models\PodrTasks::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0])->all(); $isset_podr_tasks_array = []; if ($isset_podr_tasks) { // проверяем существуют ли подразделения в текущем задании foreach ($isset_podr_tasks as $isset_podr_task) { // обходим список подразделений и формируем массив для изменения $isset_podr_tasks_array[$isset_podr_task->ID] = $isset_podr_task->KODZIFR; } } $new_podr_tasks_array = explode(',', $model->podr_list); foreach ($isset_podr_tasks_array as $key_id => $val_kodzifr) { // обходим массив текущих подразделений if (!in_array($val_kodzifr, $new_podr_tasks_array)) { // если в текущем массиве есть новоем подразделение //помечаем как удаленный $podr_task = \app\models\PodrTasks::findOne($key_id); $podr_task->DEL_TRACT_ID = $transactions->ID; $podr_task->save(); } } foreach ($new_podr_tasks_array as $kodzifr) { // аналогично, только добавление нового подразделения if (!in_array($kodzifr, $isset_podr_tasks_array)) { // проверка на не вхождение в массив //добавляем новое значение $podr_task = new \app\models\PodrTasks(); $podr_task->TASK_ID = $model->ID; $podr_task->KODZIFR = trim($kodzifr); $podr_task->TRACT_ID = $transactions->ID; $podr_task->save(); } } /* ------------------------------------------------------------------------------------------------------------ */ /* Удаляем (помечаем) старые данные и сохраняем модель PERS_TASKS---------------------------------------------- */ $isset_pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0])->all(); $isset_pers_tasks_array = []; if ($isset_pers_tasks) { // проверяем, существуют ли исполнители в текущем задании foreach ($isset_pers_tasks as $isset_pers_task) { // формируем массив текущих исполнителей $isset_pers_tasks_array[$isset_pers_task->ID] = $isset_pers_task->TN; } } $new_pers_tasks_array = explode(',', $model->persons_list); foreach ($isset_pers_tasks_array as $key_id => $val_tn) { // обходим текущий массив if (!in_array($val_tn, $new_pers_tasks_array)) { //помечаем как удаленный $pers_task = \app\models\PersTasks::findOne($key_id); $pers_task->DEL_TRACT_ID = $transactions->ID; $pers_task->save(); //удаляем (IS_CURRENT = 0) состояние задания для пользователя $pers_tasks_this = \app\models\PersTasks::find()->where(['TASK_ID' => $model->ID, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); $task_states = \app\models\TaskStates::find()->where(['IS_CURRENT' => 1, 'PERS_TASKS_ID' => $pers_tasks_this->ID])->one(); //проверяем, есть ли статусы у пользователя if ($task_states) { $task_states->IS_CURRENT = 0; $task_states->save(); } } } foreach ($new_pers_tasks_array as $tn) { if (!in_array($tn, $isset_pers_tasks_array)) { //добавляем новое значение $person_task = new \app\models\PersTasks(); $person_task->TASK_ID = $model->ID; $person_task->TN = $tn; $person_task->TRACT_ID = $transactions->ID; $person_task->save(); } } /* ------------------------------------------------------------------------------------------------------------ */ /* Проверяем на изменение и сохраняем все даты в таблицу TASK_DATES */ if ($last_model_task_type_date_3 != $model->task_type_date_3) { $old_task_date_3 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 3])->one(); if ($old_task_date_3) { $old_task_date_3->DEL_TRACT_ID = $transactions->ID; $old_task_date_3->save(); } $task_date_3 = new \app\models\TaskDates(); $task_type_date_3 = explode('-', $model->task_type_date_3); $task_type_date_3_formatted = $task_type_date_3[2] . '-' . $task_type_date_3[1] . '-' . $task_type_date_3[0]; $task_date_3->TASK_TYPE_DATE = new \yii\db\Expression("to_date('" . $task_type_date_3_formatted . "','{$this->dateFormat}')"); $task_date_3->TASK_ID = $model->ID; $task_date_3->DATE_TYPE_ID = 3; $task_date_3->TRACT_ID = $transactions->ID; $task_date_3->save(); } if ($last_model_task_type_date_1 != $model->task_type_date_1) { $old_task_date_1 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 1])->one(); if ($old_task_date_1) { $old_task_date_1->DEL_TRACT_ID = $transactions->ID; $old_task_date_1->save(); } $task_date_1 = new \app\models\TaskDates(); $task_type_date_1 = explode('-', $model->task_type_date_1); $task_type_date_1_formatted = $task_type_date_1[2] . '-' . $task_type_date_1[1] . '-' . $task_type_date_1[0]; $task_date_1->TASK_TYPE_DATE = new \yii\db\Expression("to_date('" . $task_type_date_1_formatted . "','{$this->dateFormat}')"); $task_date_1->TASK_ID = $model->ID; $task_date_1->DATE_TYPE_ID = 1; $task_date_1->TRACT_ID = $transactions->ID; $task_date_1->save(); } if ($last_model_task_type_date_4 != $model->task_type_date_4) { $old_task_date_4 = \app\models\TaskDates::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 4])->one(); if ($old_task_date_4) { $old_task_date_4->DEL_TRACT_ID = $transactions->ID; $old_task_date_4->save(); } $task_date_4 = new \app\models\TaskDates(); $task_type_date_4 = explode('-', $model->task_type_date_4); $task_type_date_4_formatted = $task_type_date_4[2] . '-' . $task_type_date_4[1] . '-' . $task_type_date_4[0]; $task_date_4->TASK_TYPE_DATE = new \yii\db\Expression("to_date('" . $task_type_date_4_formatted . "','{$this->dateFormat}')"); $task_date_4->TASK_ID = $model->ID; $task_date_4->DATE_TYPE_ID = 4; $task_date_4->TRACT_ID = $transactions->ID; $task_date_4->save(); } /* ------------------------------------------------------------------------------------------------------------ */ /* Обработка полей "Согласовано с" */ //get isset tasks array $isset_podr_tasks_confirms = \app\models\TaskConfirms::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0])->all(); $isset_podr_tasks_confirms_array = []; if ($isset_podr_tasks_confirms) { foreach ($isset_podr_tasks_confirms as $isset_podr_task_confirm) { $isset_podr_tasks_confirms_array[$isset_podr_task_confirm->ID] = $isset_podr_task_confirm->KODZIFR; } } $new_podr_tasks_confirms_array = explode(',', $model->agreed_podr_list); foreach ($isset_podr_tasks_confirms_array as $key_id => $val_kodzifr) { if (!in_array($val_kodzifr, $new_podr_tasks_confirms_array)) { //помечаем как удаленный $task_confirm = \app\models\TaskConfirms::findOne($key_id); $task_confirm->DEL_TRACT_ID = $transactions->ID; $task_confirm->save(); } } foreach ($new_podr_tasks_confirms_array as $kodzifr) { if (!in_array($kodzifr, $isset_podr_tasks_confirms_array)) { //добавляем новое значение $task_confirms = new \app\models\TaskConfirms(); $task_confirms->TASK_ID = $model->ID; $task_confirms->KODZIFR = $kodzifr; $task_confirms->TRACT_ID = $transactions->ID; $task_confirms->save(); } } /* ------------------------------------------------------------------------------------------------------------ */ /* Обработка полей "Передано в" */ //get isset tasks array $isset_podr_task_docs_recvrs = \app\models\TaskDocsRecvrs::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0])->all(); $isset_podr_task_docs_recvrs_array = []; if ($isset_podr_task_docs_recvrs) { foreach ($isset_podr_task_docs_recvrs as $isset_podr_task_docs_recvrs) { $isset_podr_task_docs_recvrs_array[$isset_podr_task_docs_recvrs->ID] = $isset_podr_task_docs_recvrs->KODZIFR; } } $new_podr_task_docs_recvrs_array = explode(',', $model->transmitted_podr_list); foreach ($isset_podr_task_docs_recvrs_array as $key_id => $val_kodzifr) { if (!in_array($val_kodzifr, $new_podr_task_docs_recvrs_array)) { //помечаем как удаленный $task_doc = \app\models\TaskDocsRecvrs::findOne($key_id); $task_doc->DEL_TRACT_ID = $transactions->ID; $task_doc->save(); } } foreach ($new_podr_task_docs_recvrs_array as $kodzifr) { if (!in_array($kodzifr, $isset_podr_task_docs_recvrs_array)) { //добавляем новое значение $task_doc = new \app\models\TaskDocsRecvrs(); $task_doc->TASK_ID = $model->ID; $task_doc->KODZIFR = $kodzifr; $task_doc->TRACT_ID = $transactions->ID; $task_doc->save(); } } /* ------------------------------------------------------------------------------------------------------------ */ /* Обработка состояния задания */ if ($show_states == 1) { if ($last_state != $model->state) { $new_state = new \app\models\TaskStates(); $new_state->TASK_ID = $model->ID; $new_state->STATE_ID = $model->state; $new_state->TRACT_ID = $transactions->ID; $new_state->IS_CURRENT = 1; $pers_tasks_this = \app\models\PersTasks::find()->where(['TASK_ID' => $model->ID, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); $new_state->PERS_TASKS_ID = $pers_tasks_this->ID; $new_state->save(); //обновление поля IS_CURRENT для предыдущего состояния if ($last_state != null) { $task_state->IS_CURRENT = 0; $task_state->save(); } } } /* ------------------------------------------------------------------------------------------------------------ */ \Yii::$app->getSession()->setFlash('flash_message_success', 'Изменения сохранены'); return $this->refresh(); } else { print_r($model->errors); die; } } elseif (Yii::$app->request->isAjax) { $this->_podr_data_array = $this->_getPodrData(); $this->_createPodrTree(1, 0, 'checkbox-podr-link'); $this->_createPodrTree(1, 0, 'checkbox-podr-link-agreed'); $this->_createPodrTree(1, 0, 'checkbox-podr-link-transmitted'); return $this->renderAjax('_formupdateissue', ['model' => $model, 'not_ajax' => false, 'podr_data' => $this->_multidemensional_podr, 'podr_tasks' => $podr_tasks, 'pers_tasks' => $pers_tasks, 'agreed_podr_data' => $this->_multidemensional_podr_agreed, 'transmitted_podr_data' => $this->_multidemensional_podr_transmitted]); } else { $this->layout = 'updateissue'; $this->_podr_data_array = $this->_getPodrData(); $this->_createPodrTree(1, 0, 'checkbox-podr-link'); $this->_createPodrTree(1, 0, 'checkbox-podr-link-agreed'); $this->_createPodrTree(1, 0, 'checkbox-podr-link-transmitted'); return $this->render('_formupdateissue', ['model' => $model, 'not_ajax' => true, 'podr_data' => $this->_multidemensional_podr, 'podr_tasks' => $podr_tasks, 'pers_tasks' => $pers_tasks, 'task_confirms' => $task_confirms, 'task_docs_recvrs' => $task_docs_recvrs, 'agreed_podr_data' => $this->_multidemensional_podr_agreed, 'transmitted_podr_data' => $this->_multidemensional_podr_transmitted, 'show_states' => $show_states]); } } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Форму свойств задания"'); } } else { throw new \yii\web\ForbiddenHttpException($permission_open_issue_modal_in_current_status); } } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Форму свойств задания"'); } }
public function _getStatusPerson() { $persons = \app\models\PersTasks::find()->where(['TASK_ID' => $this->ID, 'DEL_TRACT_ID' => 0])->all(); if ($persons) { $list = ''; foreach ($persons as $person) { $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . $person->TN . '\''); $command = $query->createCommand(); $data = $command->queryOne(); //$list .= '<nobr><a href="'.Url::to(['user', 'id'=>$person->TN]).'">'.$data['FAM'].' '.mb_substr($data['IMJ'], 0, 1, 'UTF-8').'. '.mb_substr($data['OTCH'], 0, 1, 'UTF-8').'.</a></nobr><br>'; //get current state $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $this->ID, 'TN' => $person->TN, 'DEL_TRACT_ID' => 0])->one(); $task_state = \app\models\TaskStates::find()->where(['IS_CURRENT' => 1, 'PERS_TASKS_ID' => $pers_tasks->ID, 'TASK_ID' => $this->ID])->one(); if ($task_state) { $state = $task_state->getState_name_state_colour_without_text(); $state_date = $task_state->getStateDate(); } else { $state = ''; $state_date = ''; } $list .= '<nobr>' . $state . ' <a href="' . Url::to(['user', 'id' => $person->TN]) . '">' . $data['FIO'] . '</a></nobr><br>'; } return $list; } else { $podr = \app\models\PodrTasks::find()->where(['TASK_ID' => $this->ID])->all(); if ($podr) { $list = ''; foreach ($podr as $task) { $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PODR')->where('KODZIFR = \'' . trim($task->KODZIFR) . '\''); $command = $query->createCommand(); $data = $command->queryOne(); if (isset($data['NAIMPODR'])) { $list .= $data['NAIMPODR'] . "<br>"; } } return $list; } } }
public function _checkPermissions($action, $task_id) { switch ($action) { case 'open_issue_modal': //проверка прав на просмотр задания (в модальном окне) $permissions_for_open_issue_modal = \app\models\Permissions::find()->where('(SUBJECT_TYPE = :subject_type and SUBJECT_ID = :user_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and PERM_TYPE = :perm_type) or (SUBJECT_TYPE = :subject_type_dolg and SUBJECT_ID = :dolg_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and PERM_TYPE = :perm_type)', ['subject_type_dolg' => 1, 'dolg_id' => \Yii::$app->session->get('user.user_iddolg'), 'perm_type' => 1, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0, 'action' => 3])->one(); if ($permissions_for_open_issue_modal) { //в случае если есть доступ на просмотр данных о задании $user_in_persons_or_podr_list = false; //получаем массив подразделений задания $podr_tasks = \app\models\PodrTasks::find()->where(['TASK_ID' => $task_id, 'DEL_TRACT_ID' => 0])->all(); if ($podr_tasks) { // если существуют подразделения, то формируем их список $podr_list_kodzifr_array = []; foreach ($podr_tasks as $task) { //обходим список подразделений $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PODR')->where('KODZIFR = \'' . trim($task->KODZIFR) . '\''); $command = $query->createCommand(); $data = $command->queryOne(); if (isset($data['KODZIFR'])) { // проверяем на существование названия подразделения (на момент разработки не для всех были названия) $podr_list_kodzifr_array[] = $data['KODZIFR']; } } } //проверяем входит ли данный пользователь в список исполнителей задания //получаем список пользователей, кому назначено задание $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $task_id, 'DEL_TRACT_ID' => 0])->all(); if ($pers_tasks) { // если существуют исполнители, то формируем их список $persons_array = []; foreach ($pers_tasks as $task) { $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . $task->TN . '\''); $command = $query->createCommand(); $data = $command->queryOne(); $persons_array[] = $data['TN']; } //проверяем, входит ли пользователь в этот список if (in_array(\Yii::$app->user->id, $persons_array)) { //пользователь входит в список исполнителей $user_in_persons_or_podr_list = true; } } else { //в этом случае, задания назначено всем исполнителям из списка подразделений задания $persons_array = []; //обходим массив подразделений для проверки, входит ли в него текущий пользователь $ids = join(',', $podr_list_kodzifr_array); $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . \Yii::$app->user->id . '\' and KODZIFR in (' . $ids . ')'); $command = $query->createCommand(); $data = $command->queryAll(); if (!empty($data)) { // проверяем вхождение пользователя в список исполнителей подразделений задания $user_in_persons_or_podr_list = true; // текущий пользователь входит в подразделения, указанные в задании } } //проверяем, является ли пользователь начальником подразделений, указанных в задании //получаем список подчиненных подразделений $user_boss_of = \Yii::$app->session->get('user.user_boss_of'); if (!empty($user_boss_of) && !$user_in_persons_or_podr_list) { //проверяем, является ли пользователь начальником подразделений, указанных в задании if (in_array($user_boss_of, $podr_list_kodzifr_array)) { //пользователь является руководителем, но не входит в спиок исполнителей или указанных подразделений //осуществляем проверку прав на 'podr_tasks_my_edit' $permissions_for_open_issue_modal_for_boss = \app\models\Permissions::find()->where('(SUBJECT_TYPE = :subject_type and SUBJECT_ID = :user_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and PERM_TYPE = :perm_type) or (SUBJECT_TYPE = :subject_type_dolg and SUBJECT_ID = :dolg_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and PERM_TYPE = :perm_type)', ['subject_type_dolg' => 1, 'dolg_id' => \Yii::$app->session->get('user.user_iddolg'), 'perm_type' => 1, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0, 'action' => 101])->one(); if ($permissions_for_open_issue_modal_for_boss) { //пользователю разрешен просмотр и редактирование заданий своего подразделения $user_in_persons_or_podr_list = true; } } } if ($user_in_persons_or_podr_list) { //пользователь имеет доступ к заданию, так как входит в список исполнителей выбранного задания, либо находится в составе подразделей задания, //либо является руководителем подразделений, указанных в задании return true; } } else { return false; } break; case 'open_issue_modal_in_current_status': //проверка прав на просмотр задания (в модальном окне) в текущем статусе задания //получаем текущий статус задания для данного пользователя $current_status = self::_getCurrentTaskStatusForCurrentUser($task_id); if ($current_status != 'empty_status' && $current_status != 'user_not_in_persons_list') { //проверяем есть ли доступ у пользователя к заданию в текущем статусе $permissions_for_open_issue_modal_in_current_status = \app\models\Permissions::find()->where('(SUBJECT_TYPE = :subject_type and SUBJECT_ID = :user_id and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and ACTION_ID = :action and PERM_TYPE = :perm_type) or (SUBJECT_TYPE = :subject_type_dolg and SUBJECT_ID = :id_dolg and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and ACTION_ID = :action and PERM_TYPE = :perm_type)', ['subject_type_dolg' => 1, 'id_dolg' => \Yii::$app->session->get('user.user_iddolg'), 'perm_type' => 2, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0, 'action' => $current_status])->one(); if ($permissions_for_open_issue_modal_in_current_status) { //досутп на просмотр в текущем статусе разрешен return 'true'; } else { $state = \app\models\States::findOne($current_status); return 'У Вас нет прав на "Форма свойств задания" в статусе "' . $state->STATE_NAME . '"'; } } elseif ($current_status == 'empty_status') { //устанавливаем статус "Принято при первом открытии задания" $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $task_id, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); $transactions = \app\models\Transactions::find()->where(['TN' => \Yii::$app->user->id])->orderBy('ID DESC')->one(); //пишем первый статус в БД $task_states = new \app\models\TaskStates(); $task_states->TASK_ID = $task_id; $task_states->STATE_ID = 1; $task_states->TRACT_ID = $transactions->ID; $task_states->IS_CURRENT = 1; if ($pers_tasks->ID) { // устанавливаем pers_tasks id $task_states->PERS_TASKS_ID = $pers_tasks->ID; } $task_states->save(); //разрешаем пользователю смотреть информацию по заданию return 'true'; } elseif ($current_status == 'user_not_in_persons_list') { //пользователь не стоит в списке исполнителей задания //проверяем, если он руководитель показываем информацию по заданию (остальные пользователи сбда не попадут из-за проверки выше) return 'true_for_boss'; } break; case 'update_issue': //проверяем, есть ли доступ на редактирование задания для исполнителей $permissions_for_update_issue = \app\models\Permissions::find()->where('(SUBJECT_TYPE = :subject_type and SUBJECT_ID = :user_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL = :perm_level and PERM_TYPE = :perm_type) or (SUBJECT_TYPE = :subject_type_dolg and SUBJECT_ID = :dolg_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL = :perm_level and PERM_TYPE = :perm_type)', ['subject_type_dolg' => 1, 'dolg_id' => \Yii::$app->session->get('user.user_iddolg'), 'perm_type' => 1, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 2, 'action' => 3])->one(); //проверка доступа на редактирование для руководителей $permissions_for_update_issue_boss = \app\models\Permissions::find()->where('(SUBJECT_TYPE = :subject_type and SUBJECT_ID = :user_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL = :perm_level and PERM_TYPE = :perm_type) or (SUBJECT_TYPE = :subject_type_dolg and SUBJECT_ID = :dolg_id and ACTION_ID = :action and DEL_TRACT_ID = :del_tract and PERM_LEVEL = :perm_level and PERM_TYPE = :perm_type)', ['subject_type_dolg' => 1, 'dolg_id' => \Yii::$app->session->get('user.user_iddolg'), 'perm_type' => 1, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 2, 'action' => 101])->one(); //проверяем кто редактирует задание $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $task_id, 'DEL_TRACT_ID' => 0])->all(); if ($pers_tasks) { // если существуют исполнители, то формируем их список $persons_array = []; foreach ($pers_tasks as $task) { $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . $task->TN . '\''); $command = $query->createCommand(); $data = $command->queryOne(); $persons_array[] = $data['TN']; } //проверяем, входит ли пользователь в этот список if (in_array(\Yii::$app->user->id, $persons_array)) { //пользователь входит в список исполнителей $user_is_person = 1; } else { $user_is_person = 0; } } if ($permissions_for_update_issue && $user_is_person == 1) { return 'update_issue_for_person'; } elseif ($permissions_for_update_issue_boss && $user_is_person == 0) { return 'update_issue_for_boss'; } else { return false; } break; } }