?> ', uploadAsync: false, language: "ru", showRemove: false, maxFileCount: 10, overwriteInitial: false, layoutTemplates: {footer: footerTemplate, actions: actionsTemplate}, previewThumbTags: { '{TAG_VALUE}': '', // no value '{TAG_CSS_NEW}': '', // new thumbnail input '{TAG_CSS_INIT}': '' // hide the initial input }, initialPreview: [ <?php $task_docs = \app\models\TaskDocs::find()->where(['TASK_ID' => $model->ID, 'DEL_TRACT_ID' => 0])->all(); if ($task_docs) { foreach ($task_docs as $doc) { ?> "<div class='file-preview-text' style='min-height:160px;'>" + "<h2 style='text-align:center;'><i class='glyphicon glyphicon-file'></i></h2>" + "<a style='font-size: 11px;' target='_blank' href='<?php echo Yii::$app->params['documents_dir']; echo $doc->DOC_CODE; ?> '><?php echo $doc->DOC_CODE; ?> </a>" + "</div>", <?php }
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 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); //проверка на просмотр задания if ($permission_open_issue_modal = \app\controllers\PermissionsController::_checkPermissions('open_issue_modal', $issue_id)) { $permission_open_issue_modal_in_current_status = \app\controllers\PermissionsController::_checkPermissions('open_issue_modal_in_current_status', $issue_id); //проверка на просмотр задания в текущем статусе if ($permission_open_issue_modal_in_current_status == 'true' || $permission_open_issue_modal_in_current_status == 'true_for_boss') { //получаем список подразделений задания $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(); } } //получаем дату поступления в группу $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; } if ($permission_open_issue_modal_in_current_status == 'true_for_boss') { $task_states_list = ''; } else { $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>'; //проверяем есть ли доступ на редактирование для отображения ссылки (кнопки) редактирования $permission_for_update = \app\controllers\PermissionsController::_checkPermissions('update_issue', $issue_id); if ($permission_for_update == 'update_issue_for_boss' || $permission_for_update == 'update_issue_for_person') { $permissions_for_write = 1; } else { $permissions_for_write = 0; } // возвращаем json массив $items = ['permissons_for_read' => 1, 'permissions_for_write' => $permissions_for_write, 'issue_id' => $issue_id, 'issue_designation' => $issue->TASK_NUMBER, 'result_table' => $result_table]; } else { $error_message = $permission_open_issue_modal_in_current_status; $items = ['permissons_for_read' => 0, 'error_message' => $error_message, 'issue_id' => $issue_id, 'issue_designation' => $issue->TASK_NUMBER]; } } 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 actionExcel() { /* Проверка на доступ пользователя к странице */ $permissions_report_task_search = \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 = :dolg_id and DEL_TRACT_ID = :del_tract and PERM_LEVEL != :perm_level and ACTION_ID = :action)', ['subject_type_dolg' => 1, 'dolg_id' => \Yii::$app->session->get('user.user_iddolg'), 'action' => 82, 'subject_type' => 2, 'user_id' => \Yii::$app->user->id, 'del_tract' => 0, 'perm_level' => 0])->one(); if ($permissions_report_task_search) { /* Проверяем получены ли идентификаторы заданий для формирования отчета */ if (Yii::$app->request->get('ids')) { $issues_ids = Yii::$app->request->get('ids'); $issues_ids = explode(',', $issues_ids); /* Делаем выборку необходимых заданий */ $model = \app\models\Tasks::find()->where(['ID' => $issues_ids])->all(); if ($model) { // Создаем объект класса PHPExcel $xls = new \PHPExcel(); // Устанавливаем индекс активного листа $xls->setActiveSheetIndex(0); // Получаем активный лист $sheet = $xls->getActiveSheet(); // Подписываем лист $sheet->setTitle('Отчет по отобранным заданиям'); $sheet->getStyle('A1')->getFont()->setBold(true); // Вставляем текст в ячейку A1 $sheet->setCellValue("A1", 'Отчет по отобранным заданиям'); $sheet->getStyle('A1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); $sheet->getStyle('A1')->getFill()->getStartColor()->setRGB('EEEEEE'); // Объединяем ячейки $sheet->mergeCells('A1:I1'); // Выравнивание текста $sheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); // Формируем шапку $sheet->setCellValue("A2", 'Заказ ПЭО'); $sheet->setCellValue("B2", 'Номер заказа'); $sheet->setCellValue("C2", 'Проект/Тема'); $sheet->setCellValue("D2", 'Обозначение'); $sheet->setCellValue("E2", 'Наименование'); $sheet->setCellValue("F2", 'Срок выполнения'); $sheet->setCellValue("G2", 'Статус'); $sheet->setCellValue("H2", 'Ф.И.О. и Дата'); $sheet->setCellValue("I2", 'Форматов А4'); /* устанавливаем ширину колонок и стили*/ $sheet->getStyle('A2:I2')->getFont()->setBold(true); $sheet->getColumnDimension('A')->setAutoSize(true); $sheet->getColumnDimension('B')->setAutoSize(true); $sheet->getColumnDimension('C')->setAutoSize(true); $sheet->getColumnDimension('D')->setAutoSize(true); $sheet->getColumnDimension('E')->setAutoSize(true); $sheet->getColumnDimension('F')->setAutoSize(true); $sheet->getColumnDimension('G')->setWidth(20); $sheet->getColumnDimension('H')->setAutoSize(true); $sheet->getColumnDimension('I')->setAutoSize(true); $row_number = 3; foreach ($model as $task) { $sheet->setCellValue("A" . $row_number, $task->PEOORDERNUM); $sheet->setCellValue("B" . $row_number, $task->ORDERNUM); $sheet->setCellValue("C" . $row_number, ''); $sheet->setCellValue("D" . $row_number, $task->TASK_NUMBER); $sheet->setCellValue("E" . $row_number, 'Задание'); $sheet->setCellValue("F" . $row_number, \Yii::$app->formatter->asDate($task->DEADLINE, 'php:d-m-Y')); //вставляем информацию по статусам $task_states = \app\models\TaskStates::find()->where(['TASK_ID' => $task->ID])->orderBy('STATE_ID ASC')->all(); if ($task_states) { foreach ($task_states as $state) { $state_date = $state->getStateDate(); $logo = new \PHPExcel_Worksheet_Drawing(); $logo->setPath(Yii::getAlias('@webroot') . '/images/items_status/' . $state->getStateColour() . '.png'); $logo->setCoordinates("G" . $row_number); $logo->setOffsetX(5); $logo->setOffsetY(2); $logo->setResizeProportional(true); $logo->setWidth(16); $logo->setWorksheet($sheet); $sheet->setCellValue("G" . $row_number, ' ' . $state->getStateName()); $pers_tasks = \app\models\PersTasks::findOne($state->PERS_TASKS_ID); $query = new \yii\db\Query(); $query->select('*')->from('STIGIT.V_F_PERS')->where('TN = \'' . $pers_tasks->TN . '\''); $command = $query->createCommand(); $data = $command->queryOne(); $sheet->setCellValue("H" . $row_number, $data['FIO'] . ' ' . $state_date); $task_docs = \app\models\TaskDocs::find()->where(['PERS_TASKS_ID' => $state->PERS_TASKS_ID])->one(); if ($task_docs) { $quantity = $task_docs->FORMAT_QUANTITY; } else { $quantity = 0; } $sheet->setCellValue("I" . $row_number, $quantity); $row_number++; } } $row_number++; } //стили для рамки таблицы $styleArray = array('borders' => array('allborders' => array('style' => \PHPExcel_Style_Border::BORDER_THIN))); $total_rows = $row_number - 1; $sheet->getStyle('A1:I' . $total_rows)->applyFromArray($styleArray); //параметры страницы для печати - альбомная $xls->getActiveSheet()->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); $xls->getActiveSheet()->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); $xls->getActiveSheet()->getPageSetup()->setFitToPage(true); $xls->getActiveSheet()->getPageSetup()->setFitToWidth(1); $xls->getActiveSheet()->getPageSetup()->setFitToHeight(0); // Выводим HTTP-заголовки header("Expires: Mon, 1 Apr 1974 05:00:00 GMT"); header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=report.xls"); //Выводим содержимое файла $objWriter = new \PHPExcel_Writer_Excel5($xls); $objWriter->save('php://output'); } else { /* Вызываем эксепшн в случае, если были переданы не верные параметры заданий */ throw new \yii\web\NotFoundHttpException('Что-то пошло не так. Пожалуйста, обратитесь к администратору системы.'); } } } else { /* Вызываем эксепшн в случае, если доступ к формированию отчета запрещен */ throw new \yii\web\ForbiddenHttpException('У Вас нет прав на редактирование "Формирование отчета"'); } }