/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = States::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id]); $query->andFilterWhere(['like', 'name', $this->name]); return $dataProvider; }
/** * Updates an existing Devices model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { $model = $this->findModel($id); $listparent = Devices::find()->all(); $listobject = Objects::find()->all(); $listbrend = Brends::find()->all(); $listinterface = Interfaces::find()->all(); $liststate = States::find()->all(); $listype = Types::find()->all(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('update', ['model' => $model, 'listparent' => $listparent, 'listobject' => $listobject, 'listbrend' => $listbrend, 'listinterface' => $listinterface, 'liststate' => $liststate, 'listype' => $listype]); } }
public function search($params) { $query = Tasks::find(); //формируем провайдер $dataProvider = new ActiveDataProvider(['query' => $query]); //задание сортировки по умолчанию $dataProvider->sort->attributes = ['TASKS.ID' => ['asc' => ['TASKS.ID' => SORT_ASC], 'desc' => ['TASKS.ID' => SORT_DESC]]]; $dataProvider->sort->defaultOrder = ['TASKS.ID' => SORT_DESC]; //overdue issues filter if (isset($params['overdue']) && $params['overdue'] == 1) { $tasks = \app\models\Tasks::find()->all(); $list = []; foreach ($tasks as $task) { $id = $task->ID; $persons = \app\models\PersTasks::find()->where(['TASK_ID' => $id, 'DEL_TRACT_ID' => 0])->all(); if ($persons) { $states_array = []; foreach ($persons as $person) { $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $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' => $id])->one(); if ($task_state) { $states_array[] = $task_state->STATE_ID; } else { $list[] = $id; } } if (!empty($states_array)) { $min_state = min($states_array); $state = \app\models\States::findOne($min_state); } } if (isset($state)) { if ($state->ID != 7 || $state->ID != 9) { $list[] = $id; } } } $list = array_unique($list); $query->andFilterWhere(['TASKS.ID' => $list]); $now = date("Y-m-d"); $query->andFilterWhere(['<', 'TASKS.DEADLINE', new \yii\db\Expression("to_date('" . $now . "','{$this->dateFormat}')")]); $query->joinWith('perstasks'); $query->andFilterWhere(['PERS_TASKS.TN' => \Yii::$app->user->id]); } //own issues filter if (isset($params['own_issues']) && $params['own_issues'] == 1) { $query->joinWith('perstasks'); $query->andFilterWhere(['PERS_TASKS.TN' => \Yii::$app->user->id]); } if (isset($params['for_person']) && $params['for_person'] != '') { $query->joinWith('perstasks'); $query->andFilterWhere(['PERS_TASKS.TN' => $params['for_person']]); } if (isset($params['for_podr']) && $params['for_podr'] != '') { $query->joinWith('podrtasks'); $query->andFilterWhere(['PODR_TASKS.KODZIFR' => $params['for_podr']]); } //podr issues filter if (isset($params['podr_issues']) && $params['podr_issues'] == 1) { //check permission $permissions_podr_tasks_my = \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) 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)', ['subject_type_dolg' => 1, 'id_dolg' => \Yii::$app->session->get('user.user_iddolg'), 'action' => 21, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0])->one(); if ($permissions_podr_tasks_my) { if ($permissions_podr_tasks_my->PERM_LEVEL == 1 || $permissions_podr_tasks_my->PERM_LEVEL == 2) { //get podr id of this user $query_dao = new \yii\db\Query(); $query_dao->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . \Yii::$app->user->id . '\''); $command = $query_dao->createCommand(); $data = $command->queryOne(); //вот тут решить что означает выданные моему подразделению $query->joinWith('podrtasks'); $query->andFilterWhere(['PODR_TASKS.KODZIFR' => trim($data['KODZIFR'])]); } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Выданные любым задания"'); } } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Выданные любым задания"'); } } //tasks my filter if (isset($params['tasks_my']) && $params['tasks_my'] == 1) { //check permission $permissions_podr_tasks_my = \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) 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)', ['subject_type_dolg' => 1, 'id_dolg' => \Yii::$app->session->get('user.user_iddolg'), 'action' => 23, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0])->one(); if ($permissions_podr_tasks_my) { if ($permissions_podr_tasks_my->PERM_LEVEL == 1 || $permissions_podr_tasks_my->PERM_LEVEL == 2) { //get all current user transactions $transactions = \app\models\Transactions::find()->where(['TN' => \Yii::$app->user->id])->all(); if ($transactions) { $transactions_array = []; foreach ($transactions as $transaction) { $transactions_array[] = $transaction->ID; } $query->andFilterWhere(['TRACT_ID' => $transactions_array]); } } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Выданные лично задания"'); } } else { throw new \yii\web\ForbiddenHttpException('У Вас нет прав на "Выданные лично задания"'); } } if (!($this->load($params) && $this->validate())) { return $dataProvider; } //проверяем существует ли фильтр и добавляем его в запрос провайдера для каждого из полей фильтра if (!empty($this->states)) { $query->joinWith('taskstates'); $query->andFilterWhere(['TASK_STATES.STATE_ID' => $this->states]); } if (!empty($this->podr_list)) { $podr_list = array_map('trim', explode(',', $this->podr_list)); $query->joinWith('podrtasks'); $query->andFilterWhere(['PODR_TASKS.KODZIFR' => $podr_list]); } if (!empty($this->agreed_podr_list)) { $agreed_podr_list = array_map('trim', explode(',', $this->agreed_podr_list)); $query->joinWith('taskconfirms'); $query->andFilterWhere(['TASK_CONFIRMS.KODZIFR' => $agreed_podr_list]); } if (!empty($this->persons_list)) { $persons_list = array_map('trim', explode(',', $this->persons_list)); $query->joinWith('perstasks'); $query->andFilterWhere(['PERS_TASKS.TN' => $persons_list]); } if (!empty($this->documentation)) { $query->joinWith('taskdocs'); $query->andFilterWhere(['TASK_DOCS.DOC_CODE' => $this->documentation]); } if ($this->deadline_from != '' && $this->deadline_to != '') { $deadline_from = explode('-', $this->deadline_from); $deadline_from_formatted = $deadline_from[2] . '-' . $deadline_from[1] . '-' . $deadline_from[0]; $deadline_to = explode('-', $this->deadline_to); $deadline_to_formatted = $deadline_to[2] . '-' . $deadline_to[1] . '-' . $deadline_to[0]; $query->andFilterWhere(['>=', 'DEADLINE', new \yii\db\Expression("to_date('" . $deadline_from_formatted . "','{$this->dateFormat}')")])->andFilterWhere(['<=', 'DEADLINE', new \yii\db\Expression("to_date('" . $deadline_to_formatted . "','{$this->dateFormat}')")]); } else { if ($this->deadline_from != '' && $this->deadline_to == '') { $deadline_from = explode('-', $this->deadline_from); $deadline_from_formatted = $deadline_from[2] . '-' . $deadline_from[1] . '-' . $deadline_from[0]; $query->andFilterWhere(['>=', 'DEADLINE', new \yii\db\Expression("to_date('" . $deadline_from_formatted . "','{$this->dateFormat}')")]); } else { if ($this->deadline_from == '' && $this->deadline_to != '') { $deadline_to = explode('-', $this->deadline_to); $deadline_to_formatted = $deadline_to[2] . '-' . $deadline_to[1] . '-' . $deadline_to[0]; $query->andFilterWhere(['<=', 'DEADLINE', new \yii\db\Expression("to_date('" . $deadline_to_formatted . "','{$this->dateFormat}')")]); } } } if ($this->task_type_date_3_from != '' && $this->task_type_date_3_to != '') { $query->joinWith('datetype3'); $task_type_date_3_from = explode('-', $this->task_type_date_3_from); $task_type_date_3_from_formatted = $task_type_date_3_from[2] . '-' . $task_type_date_3_from[1] . '-' . $task_type_date_3_from[0]; $task_type_date_3_to = explode('-', $this->task_type_date_3_to); $task_type_date_3_to_formatted = $task_type_date_3_to[2] . '-' . $task_type_date_3_to[1] . '-' . $task_type_date_3_to[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_3_from_formatted . "','{$this->dateFormat}')")])->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_3_to_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_3_from != '' && $this->task_type_date_3_to == '') { $query->joinWith('datetype3'); $task_type_date_3_from = explode('-', $this->task_type_date_3_from); $task_type_date_3_from_formatted = $task_type_date_3_from[2] . '-' . $task_type_date_3_from[1] . '-' . $task_type_date_3_from[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_3_from_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_3_from == '' && $this->task_type_date_3_to != '') { $query->joinWith('datetype3'); $task_type_date_3_to = explode('-', $this->task_type_date_3_to); $task_type_date_3_to_formatted = $task_type_date_3_to[2] . '-' . $task_type_date_3_to[1] . '-' . $task_type_date_3_to[0]; $query->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_3_to_formatted . "','{$this->dateFormat}')")]); } } } if ($this->task_type_date_1_from != '' && $this->task_type_date_1_to != '') { $query->joinWith('datetype1'); $task_type_date_1_from = explode('-', $this->task_type_date_1_from); $task_type_date_1_from_formatted = $task_type_date_1_from[2] . '-' . $task_type_date_1_from[1] . '-' . $task_type_date_1_from[0]; $task_type_date_1_to = explode('-', $this->task_type_date_1_to); $task_type_date_1_to_formatted = $task_type_date_1_to[2] . '-' . $task_type_date_1_to[1] . '-' . $task_type_date_1_to[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_1_from_formatted . "','{$this->dateFormat}')")])->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_1_to_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_1_from != '' && $this->task_type_date_1_to == '') { $query->joinWith('datetype1'); $task_type_date_1_from = explode('-', $this->task_type_date_1_from); $task_type_date_1_from_formatted = $task_type_date_1_from[2] . '-' . $task_type_date_1_from[1] . '-' . $task_type_date_1_from[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_1_from_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_1_from == '' && $this->task_type_date_1_to != '') { $query->joinWith('datetype1'); $task_type_date_1_to = explode('-', $this->task_type_date_1_to); $task_type_date_1_to_formatted = $task_type_date_1_to[2] . '-' . $task_type_date_1_to[1] . '-' . $task_type_date_1_to[0]; $query->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_1_to_formatted . "','{$this->dateFormat}')")]); } } } if ($this->task_type_date_4_from != '' && $this->task_type_date_4_to != '') { $query->joinWith('datetype4'); $task_type_date_4_from = explode('-', $this->task_type_date_4_from); $task_type_date_4_from_formatted = $task_type_date_4_from[2] . '-' . $task_type_date_4_from[1] . '-' . $task_type_date_4_from[0]; $task_type_date_4_to = explode('-', $this->task_type_date_4_to); $task_type_date_4_to_formatted = $task_type_date_4_to[2] . '-' . $task_type_date_4_to[1] . '-' . $task_type_date_4_to[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_4_from_formatted . "','{$this->dateFormat}')")])->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_4_to_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_4_from != '' && $this->task_type_date_4_to == '') { $query->joinWith('datetype4'); $task_type_date_4_from = explode('-', $this->task_type_date_4_from); $task_type_date_4_from_formatted = $task_type_date_4_from[2] . '-' . $task_type_date_4_from[1] . '-' . $task_type_date_4_from[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_4_from_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_4_from == '' && $this->task_type_date_4_to != '') { $query->joinWith('datetype4'); $task_type_date_4_to = explode('-', $this->task_type_date_4_to); $task_type_date_4_to_formatted = $task_type_date_4_to[2] . '-' . $task_type_date_4_to[1] . '-' . $task_type_date_4_to[0]; $query->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_4_to_formatted . "','{$this->dateFormat}')")]); } } } if ($this->task_type_date_2_from != '' && $this->task_type_date_2_to != '') { $query->joinWith('datetype2'); $task_type_date_2_from = explode('-', $this->task_type_date_2_from); $task_type_date_2_from_formatted = $task_type_date_2_from[2] . '-' . $task_type_date_2_from[1] . '-' . $task_type_date_2_from[0]; $task_type_date_2_to = explode('-', $this->task_type_date_2_to); $task_type_date_2_to_formatted = $task_type_date_2_to[2] . '-' . $task_type_date_2_to[1] . '-' . $task_type_date_2_to[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_2_from_formatted . "','{$this->dateFormat}')")])->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_2_to_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_2_from != '' && $this->task_type_date_2_to == '') { $query->joinWith('datetype2'); $task_type_date_2_from = explode('-', $this->task_type_date_2_from); $task_type_date_2_from_formatted = $task_type_date_2_from[2] . '-' . $task_type_date_2_from[1] . '-' . $task_type_date_2_from[0]; $query->andFilterWhere(['>=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_2_from_formatted . "','{$this->dateFormat}')")]); } else { if ($this->task_type_date_2_from == '' && $this->task_type_date_2_to != '') { $query->joinWith('datetype2'); $task_type_date_2_to = explode('-', $this->task_type_date_2_to); $task_type_date_2_to_formatted = $task_type_date_2_to[2] . '-' . $task_type_date_2_to[1] . '-' . $task_type_date_2_to[0]; $query->andFilterWhere(['<=', 'TASK_DATES.TASK_TYPE_DATE', new \yii\db\Expression("to_date('" . $task_type_date_2_to_formatted . "','{$this->dateFormat}')")]); } } } $query->andFilterWhere(['like', 'SOURCENUM', $this->SOURCENUM]); $query->andFilterWhere(['like', 'TASK_TEXT', $this->TASK_TEXT]); $query->andFilterWhere(['or like', 'PEOORDERNUM', $this->PEOORDERNUM]); $query->andFilterWhere(['or like', 'ORDERNUM', $this->ORDERNUM]); $query->andFilterWhere(['like', 'TASK_NUMBER', $this->TASK_NUMBER]); $query->andFilterWhere(['like', 'LOWER(DESIGNATION)', mb_strtolower($this->DESIGNATION, 'UTF-8')]); return $dataProvider; }
public function actionGetpersons() { if (Yii::$app->request->isAjax) { //проверка на асинхронный запрос $post_data = $_POST['selected_podr']; \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; // устанавливаем ответ сервера в виде JSON объекта $persons_list = '<ul>'; foreach (json_decode($post_data) as $kodzifr => $value) { // обходим список полученных подразделений $query = new \yii\db\Query(); $query->select('NAIMPODR AS name, VIDPODR as vid, KODPODR AS id, KODRODIT as parent, KODZIFR as code')->from('STIGIT.V_F_PODR')->where('KODZIFR = \'' . $kodzifr . '\''); $command = $query->createCommand(); $data = $command->queryOne(); //формирование списка $persons_list .= "<li class=\"expanded\"><span style=\"font-weight: normal; font-size: 12px;\">" . $data['vid'] . " " . $data['code'] . ". " . $data['name'] . "</span>"; $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('KODZIFR = \'' . $kodzifr . '\''); $command = $query->createCommand(); $data = $command->queryAll(); $persons_list .= '<ul>'; foreach ($data as $key => $value) { // обходим список сотрудников каждого подразделения //получаем кол-во заданий для каждого исполнителя $pers_tasks = \app\models\PersTasks::find()->where(['TN' => $value['TN'], 'DEL_TRACT_ID' => 0])->all(); if ($pers_tasks) { $tasks_array = []; foreach ($pers_tasks as $task) { $tasks_array[] = $task->TASK_ID; } $tasks = \app\models\Tasks::find()->where(['in', 'ID', $tasks_array])->all(); $list = []; foreach ($tasks as $task) { $id = $task->ID; $persons = \app\models\PersTasks::find()->where(['TASK_ID' => $id, 'DEL_TRACT_ID' => 0])->all(); if ($persons) { $states_array = []; foreach ($persons as $person) { $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $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' => $id])->one(); if ($task_state) { $states_array[] = $task_state->STATE_ID; } else { $list[] = $id; } } if (!empty($states_array)) { $min_state = min($states_array); $state = \app\models\States::findOne($min_state); } } if (isset($state)) { if ($state->ID != 7 || $state->ID != 9) { $list[] = $id; } } } $list = array_unique($list); $counter = count($list); $counter = ' <span class="label label-info"><a target="_blank" href="' . \yii\helpers\Url::to(['/site/index', 'for_person' => $value['TN']]) . '">Заданий в работе: ' . $counter . '</a></span>'; } else { $counter = ''; } $persons_list .= "<li><input id=\"checkbox_" . $value['TN'] . "\" type='checkbox' name=\"persons_check[]\" data-title=\"" . $value['FIO'] . "\" value=\"" . $value['TN'] . "\" /> <span style=\"font-size: 11px;\">" . $value['FAM'] . " " . $value['IMJ'] . " " . $value['OTCH'] . " " . $counter . "</span></li>"; } $persons_list .= '</ul>'; } $persons_list .= '</ul>'; return $persons_list; } }
public static function takeState() { return \App\Models\States::all(); }
public function actionGetissuedata() { //проверка на ajax запрос if (Yii::$app->request->isAjax) { $issue_id = $_POST['id']; //устанавливаем формат ответа JSON \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $issue = \app\models\Tasks::findOne($issue_id); //получаем текущий статус для пользователя сделавшего запрос $pers_tasks_this = \app\models\PersTasks::find()->where(['TASK_ID' => $issue->ID, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); if ($pers_tasks_this) { //проверяем имеет ли доступ в текущем статусе $task_state = \app\models\TaskStates::find()->where(['PERS_TASKS_ID' => $pers_tasks_this->ID, 'IS_CURRENT' => 1])->one(); if ($task_state) { //проверяем существует ли статус для задания, либо оно только добавлено $check_permissions_for_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' => $task_state->STATE_ID])->one(); } else { $check_permissions_for_status = true; } //проверяем имеет ли пользователь доступ к форме редактирования задания $permissions_for_read_and_write = \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_read_and_write && $check_permissions_for_status) { // проверяем доступны ли пользователю права на просмотр и редактирование задания //переменная для проверки входит ли текщий пользователь в подразделения, назначенные в задании $user_have_permission = 0; //получаем список подразделений задания $podr_tasks = \app\models\PodrTasks::find()->where(['TASK_ID' => $issue->ID, 'DEL_TRACT_ID' => 0])->all(); if ($podr_tasks) { // если существуют подразделения, то формируем их список $podr_list = ''; $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['NAIMPODR'])) { // проверяем на существование названия подразделения (на момент разработки не для всех были названия) $podr_list .= $data['NAIMPODR'] . "<br>"; $podr_list_kodzifr_array[] = $data['KODZIFR']; } } } //получаем список подразделений для поля "Согласовано" $tasks_confirms = \app\models\TaskConfirms::find()->where(['TASK_ID' => $issue->ID, 'DEL_TRACT_ID' => 0])->all(); if ($tasks_confirms) { // если существуют подразделения, то формируем их список $task_confirms_list = ''; foreach ($tasks_confirms 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'])) { // проверяем на существование названия подразделения (на момент разработки не для всех были названия) $task_confirms_list .= $data['NAIMPODR'] . "<br>"; } } } else { // иначе устанавливаем значение из константы $task_confirms_list = self::_UNDEFINED; } //получаем список подразделений для поля "Передано в" $tasks_docs_recvrs = \app\models\TaskDocsRecvrs::find()->where(['TASK_ID' => $issue->ID, 'DEL_TRACT_ID' => 0])->all(); if ($tasks_docs_recvrs) { // если существуют подразделения, то формируем их список $task_docs_recvrs_list = ''; foreach ($tasks_docs_recvrs 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'])) { $task_docs_recvrs_list .= $data['NAIMPODR'] . "<br>"; } } } else { // иначе устанавливаем значение из константы $task_docs_recvrs_list = self::_UNDEFINED; } //получаем список пользователей, кому назначено задание $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $issue->ID, 'DEL_TRACT_ID' => 0])->all(); $pers_list = ''; 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(); $pers_list .= $data['FIO'] . "<br>"; $persons_array[] = $data['TN']; } } else { // иначе устанавливаем значение из константы $pers_list = self::_UNDEFINED; $persons_array = []; } $transactions = \app\models\Transactions::find()->where(['TN' => \Yii::$app->user->id])->orderBy('ID DESC')->one(); if (in_array(\Yii::$app->user->id, $persons_array)) { //save date for person if his owner this issue - формируем дату поступления в группу, если задание открыто первый раз //check if window opened first time for date $old_task_date_1 = \app\models\TaskDates::find()->where(['TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 1])->one(); if (!$old_task_date_1) { // если задание открывается первый раз пишем дату $task_date_1 = new \app\models\TaskDates(); $task_date_1->TASK_TYPE_DATE = new \yii\db\Expression("to_date('" . date("Y-m-d H:i:s") . "','{$this->dateFormat}')"); $task_date_1->TASK_ID = $issue_id; $task_date_1->DATE_TYPE_ID = 1; $task_date_1->TRACT_ID = $transactions->ID; $task_date_1->save(); } //get pers_task_id for current user and issue $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $issue->ID, 'TN' => \Yii::$app->user->id, 'DEL_TRACT_ID' => 0])->one(); $task_states_user = \app\models\TaskStates::find()->where(['PERS_TASKS_ID' => $pers_tasks->ID])->one(); if (!$task_states_user) { // если задание открывается первый раз - устанавливаем статус "Принято" //set state for this person $task_states = new \app\models\TaskStates(); $task_states->TASK_ID = $issue_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(); } $user_have_permission = 1; } //проверяем входит ли пользователь в список подразделений задания if (empty($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_have_permission = 1; // текущий пользователь входит в подразделения, указанные в задании } else { $user_have_permission = 0; // текущий пользователь НЕ входит в подразделения, указанные в задании } } //получаем дату поступления в группу $old_task_date_2 = \app\models\TaskDates::find()->where(['TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0, 'DATE_TYPE_ID' => 2])->one(); if (!$old_task_date_2) { // если нет даты - устанавливаем ее $transactions_for_date = \app\models\Transactions::findOne($issue->TRACT_ID); $group_date = \Yii::$app->formatter->asDate($transactions_for_date->TRACT_DATETIME, 'php:Y-m-d'); $group_date_for_table = \Yii::$app->formatter->asDate($transactions_for_date->TRACT_DATETIME, 'php:d-m-Y'); $task_date_2 = new \app\models\TaskDates(); $task_date_2->TASK_TYPE_DATE = new \yii\db\Expression("to_date('" . $group_date . "','{$this->dateFormat}')"); $task_date_2->TASK_ID = $issue_id; $task_date_2->DATE_TYPE_ID = 2; $task_date_2->TRACT_ID = $transactions->ID; $task_date_2->save(); } else { // иначе полученную дату форматируем под требуемый для вывода формат $group_date_for_table = \Yii::$app->formatter->asDate($old_task_date_2->TASK_TYPE_DATE, 'php:d-m-Y'); } //формируем поля по заданию if (!empty($issue->SOURCENUM)) { // если переменная SOURCENUM содержит значение $sourcenum = $issue->SOURCENUM; } else { // иначе устанавливаем значение константы $sourcenum = self::_UNDEFINED; } if (!empty($issue->ADDITIONAL_TEXT)) { // если переменная ADDITIONAL_TEXT содержит значение $additional_text = $issue->ADDITIONAL_TEXT; } else { // иначе устанавливаем значение константы $additional_text = self::_UNDEFINED; } if (!empty($issue->REPORT_TEXT)) { // если переменная REPORT_TEXT содержит значение $report_text = $issue->REPORT_TEXT; } else { // иначе устанавливаем значение константы $report_text = self::_UNDEFINED; } $task_date_first_time = \app\models\TaskDates::find()->where(['DATE_TYPE_ID' => '1', 'TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0])->one(); if ($task_date_first_time) { // проверяем сущетсвует ли дата открытия задания $first_date = \Yii::$app->formatter->asDate($task_date_first_time->TASK_TYPE_DATE, 'php:d-m-Y'); } else { // иначе устанавливаем значение константы $first_date = self::_UNDEFINED; } $task_date_closed = \app\models\TaskDates::find()->where(['DATE_TYPE_ID' => '4', 'TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0])->one(); if ($task_date_closed) { // проверяем существует ли дата завершения $closed_date = \Yii::$app->formatter->asDate($task_date_closed->TASK_TYPE_DATE, 'php:d-m-Y'); } else { // иначе устанавливаем значение константы $closed_date = self::_UNDEFINED; } $task_sector_date = \app\models\TaskDates::find()->where(['DATE_TYPE_ID' => '3', 'TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0])->one(); if ($task_sector_date) { // проверяем дату поступления в сектор $sektor_date = \Yii::$app->formatter->asDate($task_sector_date->TASK_TYPE_DATE, 'php:d-m-Y'); } else { // иначе устанавливаем значение константы $sektor_date = self::_UNDEFINED; } $transactions = \app\models\Transactions::findOne($issue->TRACT_ID); $task_docs = \app\models\TaskDocs::find()->where(['TASK_ID' => $issue_id, 'DEL_TRACT_ID' => 0])->all(); if ($task_docs) { // в случае если сущетсвуют привязанные документы к заданию $task_docs_list = ''; foreach ($task_docs as $doc) { // формируем список документации $task_docs_list .= '<a target="_blank" href="/storage/' . $doc->DOC_CODE . '">' . $doc->DOC_CODE . '</a><br>'; } } else { // иначе устанавливаем значение константы $task_docs_list = self::_UNDEFINED; } $task_state = $issue->_getLastTaskStatusWithText($issue->ID); if ($task_state != '') { // если сущетсвует текущий статус задания $task_states_list = $task_state; } else { // иначе устанавливаем значение константы $task_states_list = self::_UNDEFINED; } //формируем html - таблицу для вывода информации $result_table = '<table class="table table-bordered">'; $result_table .= ' <tr> <td class="issue-table-label">Подразделения</td> <td>' . $podr_list . '</td> </tr> <tr> <td class="issue-table-label">Исполнитель</td> <td>' . $pers_list . '</td> </tr> <tr> <td class="issue-table-label">Исходящий номер</td> <td>' . $issue->TASK_NUMBER . '</td> </tr> <tr> <td class="issue-table-label">Входящий номер</td> <td>' . $sourcenum . '</td> </tr> <tr> <td class="issue-table-label">Заказ (изделие)</td> <td>' . $issue->ORDERNUM . '</td> </tr> <tr> <td class="issue-table-label">Заказ ПЭО</td> <td>' . $issue->PEOORDERNUM . '</td> </tr> <tr> <td class="issue-table-label">Срок выполнения</td> <td>' . \Yii::$app->formatter->asDate($issue->DEADLINE, 'php:d-m-Y') . '</td> </tr> <tr> <td class="issue-table-label">Содержание</td> <td>' . $issue->TASK_TEXT . '</td> </tr> <tr> <td class="issue-table-label">Дополнительные указания</td> <td>' . $additional_text . '</td> </tr> <tr> <td class="issue-table-label">Дата поступления в сектор</td> <td>' . $sektor_date . '</td> </tr> <tr> <td class="issue-table-label">Дата поступления в группу</td> <td>' . $group_date_for_table . '</td> </tr> <tr> <td class="issue-table-label">Дата поступления исполнителю</td> <td>' . $first_date . '</td> </tr> <tr> <td class="issue-table-label">Дата завершения</td> <td>' . $closed_date . '</td> </tr> <tr> <td class="issue-table-label">Выпущенная документация</td> <td>' . $task_docs_list . '</td> </tr> <tr> <td class="issue-table-label">Отчет о работе</td> <td>' . $report_text . '</td> </tr> <tr> <td class="issue-table-label">Согласовано с</td> <td>' . $task_confirms_list . '</td> </tr> <tr> <td class="issue-table-label">Передано в</td> <td>' . $task_docs_recvrs_list . '</td> </tr> <tr> <td class="issue-table-label">Состояние</td> <td>' . $task_states_list . '</td> </tr> '; $result_table .= '</table>'; //проверяем есть ли доступ на редактирование для отображения ссылки (кнопки) редактирования if ($permissions_for_read_and_write->PERM_LEVEL == '2' && @$check_permissions_for_status->PERM_LEVEL == 2) { // если есть права на запись $permissions_for_write = 1; } else { // иначе разрешаем только чтение $permissions_for_write = 0; } // возвращаем json массив $items = ['permissons_for_read' => 1, 'user_have_permission' => $user_have_permission, 'permissions_for_write' => $permissions_for_write, 'issue_id' => $issue_id, 'issue_designation' => $issue->TASK_NUMBER, 'result_table' => $result_table]; return $items; } else { //в случае, если нет доступа, формируем тексты ошибок if (!$check_permissions_for_status) { // если нет разрешения на текущий статус //get state name $states = \app\models\States::findOne($task_state->STATE_ID); $error_message = 'У Вас нет прав на "Форма свойств задания" в статусе "' . $states->STATE_NAME . '"'; } if (!$permissions_for_read_and_write) { // если нет доступа на чтение и запись $error_message = 'У Вас нет прав на просмотр "Форма свойств задания"'; } // возвращаем json массив $items = ['permissons_for_read' => 0, 'error_message' => $error_message, 'issue_id' => $issue_id, 'issue_designation' => $issue->TASK_NUMBER]; return $items; } } else { // если вообще нет доступа (пользователь не содержится в списке исполнителей задания) $error_message = 'У Вас нет прав на просмотр этого задания'; $items = ['permissons_for_read' => 0, 'error_message' => $error_message, 'issue_id' => $issue_id, 'issue_designation' => $issue->TASK_NUMBER]; return $items; } } }
public function getState() { return $this->hasOne(\app\models\States::className(), ['ID' => 'NEXT_STATE_ID'])->where(['DEL_TRACT_ID' => 0]); }
use app\models\States; use app\models\Types; use yii\helpers\ArrayHelper; /* @var $this yii\web\View */ /* @var $searchModel app\models\DevicesSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = 'Devices'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="devices-index"> <h1><?php echo Html::encode($this->title); ?> </h1> <?php // echo $this->render('_search', ['model' => $searchModel]); ?> <p> <?php echo Html::a('Create Devices', ['create'], ['class' => 'btn btn-success']); ?> </p> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [['class' => 'yii\\grid\\SerialColumn'], 'name', 'description:ntext', ['attribute' => 'type', 'label' => 'Тип', 'value' => 'types.name', 'filter' => ArrayHelper::map(Types::find()->all(), 'id', 'name')], ['attribute' => 'state', 'label' => 'state', 'value' => 'states.name', 'filter' => ArrayHelper::map(States::find()->all(), 'id', 'name')], ['attribute' => 'idobject', 'label' => 'Обьект', 'value' => 'objects.name', 'filter' => ArrayHelper::map(Objects::find()->all(), 'id', 'name')], ['class' => 'yii\\grid\\ActionColumn']]]); ?> </div>
public function getPermstatestype() { return $this->hasOne(\app\models\States::className(), ['ID' => 'ACTION_ID']); }
return false; } return true; }, "data" : [ <?php foreach ($v_f_pers as $v_f_per) { echo '{"id" : "v_f_per_' . $v_f_per['tn'] . '", "icon" : "glyphicon glyphicon-user", "parent" : "#", "text" : "' . $v_f_per['fio'] . '", "li_attr" : { "data-panel" : "v_f_pers", "data-id" : "' . $v_f_per['tn'] . '" }},'; $inner_list = \app\models\Permissions::find()->where(['SUBJECT_TYPE' => 2, 'SUBJECT_ID' => $v_f_per['tn'], 'DEL_TRACT_ID' => 0])->orderBy('PERM_TYPE')->all(); if ($inner_list) { foreach ($inner_list as $li) { if ($li->PERM_TYPE == 1) { $result_li = \app\models\Actions::findOne($li->ACTION_ID); echo '{"id" : "' . $li->ID . '", "icon" : "glyphicon glyphicon-cog", "parent" : "v_f_per_' . $v_f_per['tn'] . '", "text" : "' . $result_li->ACTION_DESC . '", "li_attr" : { "data-id" : "' . $li->ID . '", "data-perm-level" : "' . $li->PERM_LEVEL . '", "class" : "inner-node-state"}},'; } elseif ($li->PERM_TYPE == 2) { $result_li = \app\models\States::findOne($li->ACTION_ID); echo '{"id" : "' . $li->ID . '", "icon" : "glyphicon glyphicon-check", "parent" : "v_f_per_' . $v_f_per['tn'] . '", "text" : "' . $result_li->STATE_NAME . '", "li_attr" : { "data-id" : "' . $li->ID . '", "data-perm-level" : "' . $li->PERM_LEVEL . '", "class" : "inner-node-state"}},'; } } } } ?> ], }, }).on("copy_node.jstree", function (e, data) { //store in database var parent_id = $('#jstree-v_f_pers').jstree(true).get_node(data.node.parents[0]).li_attr['data-id']; var parent_type = $('#jstree-v_f_pers').jstree(true).get_node(data.node.parents[0]).li_attr['data-panel']; var original_id = data.original.li_attr['data-id']; var original_type = data.original.li_attr['data-panel'];
/** * @return \yii\db\ActiveQuery */ public function getStates() { return $this->hasMany(States::className(), ['id_country' => 'id']); }
public function getStateColour() { $state = \app\models\States::findOne($this->STATE_ID); return $state->STATE_COLOUR; }
private function delState($model) { /* @var $model States */ $id_country = $model->id_country; $model->delete(); $model = States::firstRecord($id_country); Yii::$app->session->setFlash('success', 'Selected item is succesfully deleted.'); return $model; }
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; } }
<div class="panel-heading" role="tab" id="headingOne"> <h4 class="panel-title"> <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"> Состояние <div class="what-selected pull-right" id="state_moment"> <?php echo $searchModel->getSelectedTasksStatesNames(); ?> </div> </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne"> <div class="panel-body"> <?php echo $form_filter->field($searchModel, 'states', ['template' => "{label}\n{input}"])->label(false)->checkboxList(yii\helpers\ArrayHelper::map(\app\models\States::find()->orderBy('ID asc')->all(), 'ID', 'STATE_NAME'), ['separator' => '', 'class' => 'state-checkbox']); ?> </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingTwo"> <h4 class="panel-title"> <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Подразделение <div class="what-selected pull-right" id="podr_list_moment"><?php if ($searchModel->podr_list) { ?> выбрано: <?php echo count(explode(',', $searchModel->podr_list)) . ' подразделение(ия)'; }
?> <div class="hr-line-dashed"></div> <?php echo $form->field($model, 'transmitted_podr_list', ['template' => "{label}<div class=\"col-sm-6\">{input}</div><div class=\"col-sm-2\" style=\"text-align: right;\"><button type=\"button\" id=\"add-transmitted-podr-button-update\" class=\"btn btn-default btn-sm\"><span class=\"glyphicon glyphicon-plus\"></span></button></div>\n{hint}", 'labelOptions' => ['class' => 'col-sm-4 control-label'], 'inputOptions' => ['class' => 'form-control input-sm']])->textInput(); ?> <div class="hr-line-dashed"></div> <?php $this->registerJs('function format(state) {return state.text;}', View::POS_HEAD); $this->registerJs('function format_selection(state) {return "<b>"+state.text+"</b>";}', View::POS_HEAD); ?> <?php if ($show_states == 1) { $states_list = yii\helpers\ArrayHelper::map(\app\models\StatesNext::find()->where(['STATE_ID' => $model->state, 'DEL_TRACT_ID' => 0])->orderBy('ID ASC')->all(), 'NEXT_STATE_ID', 'state_name_state_colour'); $current_status = \app\models\States::findOne($model->state)->getState_name_state_colour(); $states_list = [$model->state => $current_status] + $states_list; ?> <?php echo $form->field($model, 'state', ['template' => "{label}<div class=\"col-sm-8\">{input}</div>\n{hint}", 'labelOptions' => ['class' => 'col-sm-4 control-label'], 'inputOptions' => ['class' => 'form-control input-sm']])->widget(\kartik\select2\Select2::classname(), ['options' => ['placeholder' => ''], 'hideSearch' => true, 'data' => $states_list, 'pluginOptions' => ['allowClear' => true, 'templateResult' => new JsExpression('format'), 'escapeMarkup' => new JsExpression("function(m) { return m; }"), 'templateSelection' => new JsExpression('format_selection')]]); } ?> </div> <div class="modal-footer"> <?php if (!$not_ajax) { ?> <button type="button" class="btn btn-default" id="issue-cancel-update-button">Отмена</button> <?php }
public function _getCurrentTaskStatusWithId($id) { $persons = \app\models\PersTasks::find()->where(['TASK_ID' => $id, 'DEL_TRACT_ID' => 0])->all(); if ($persons) { $states_array = []; 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(); $pers_tasks = \app\models\PersTasks::find()->where(['TASK_ID' => $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' => $id])->one(); if ($task_state) { $states_array[] = $task_state->STATE_ID; } else { return ''; } } if (!empty($states_array)) { $min_state = min($states_array); $state = \app\models\States::findOne($min_state); return $state->ID; } else { return false; } } else { return false; } }
/** * @return \yii\db\ActiveQuery */ public function getStates() { return $this->hasOne(States::className(), ['id' => 'state']); }
echo $counter_overdue; ?> )</a> <?php if (isset(Yii::$app->request->getQueryParams()['overdue']) && Yii::$app->request->getQueryParams()['overdue'] == 1) { ?> <i class="pull-right glyphicon glyphicon-ok"></i><?php } ?> </li> <?php } ?> <hr> <li class="submenu-li"> <?php $states = \app\models\States::find()->all(); foreach ($states as $state) { ?> <div style="padding-bottom: 3px;"><?php echo $state->getState_name_state_colour(); ?> </div> <?php } ?> </li> </ul> <?php } ?> </div>
<?php echo $state->getState_name_state_colour_without_text() . ' ' . $state->STATE_NAME; ?> </a> </h4> </div> <div id="collapse-state-item-<?php echo $state->ID; ?> " class="panel-collapse collapse" role="tabpanel" aria-labelledby="state-list-item-<?php echo $state->ID; ?> "> <div class="panel-body"> <?php $inner_states = \app\models\States::find()->where(['!=', 'ID', $state->ID])->all(); foreach ($inner_states as $inner_state) { $state_next = \app\models\StatesNext::find()->where(['STATE_ID' => $state->ID, 'NEXT_STATE_ID' => $inner_state->ID, 'DEL_TRACT_ID' => 0])->one(); //if($state_next) echo $state_next->NEXT_STATE_ID; ?> <div class="checkbox" style="font-size: 11px;"><label><input <?php if ($perm_level != 2) { ?> disabled<?php } ?> type="checkbox" <?php if ($state_next) { ?> checked<?php }