Esempio n. 1
0
?>
',
							    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;
         }
     }
 }
Esempio n. 3
0
 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('У Вас нет прав на редактирование "Формирование отчета"');
     }
 }