From: vladfo Date: Thu, 19 Sep 2024 08:08:19 +0000 (+0300) Subject: Проставил try для уведомлений телеграм X-Git-Tag: 1.5~5^2~13 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=bde16bb9460f83301bb581bc605551db1976fced;p=erp24_rep%2Fyii-erp24%2F.git Проставил try для уведомлений телеграм --- diff --git a/erp24/controllers/crud/TaskController.php b/erp24/controllers/crud/TaskController.php index c746f552..bf662ae7 100644 --- a/erp24/controllers/crud/TaskController.php +++ b/erp24/controllers/crud/TaskController.php @@ -185,6 +185,88 @@ class TaskController extends Controller return $this->render('create', compact('model', 'entities', 'taskEntity', 'tasksType', 'taskStatus', 'taskAlertLevels')); } + + public function actionCreateAjax() + { + $model = new Task(); + + // Если это AJAX-запрос на загрузку формы + if (Yii::$app->request->isAjax && !Yii::$app->request->isPost) { + $taskEntity = TaskEntity::find()->all(); + $tasksType = TasksType::find()->all(); + $taskStatus = TaskStatus::find()->all(); + $taskAlertLevels = TaskAlertLevel::find()->all(); + $entities = []; // TaskService::getEntitiesByAlias(EntityType::findOne($model->entity_type)->alias); + $canUpdateAll = true; + $canUpdateStatusAndDuration = true; + // Возвращаем HTML формы для рендеринга в модальном окне + return $this->renderAjax('_form', compact('model', 'entities', 'taskEntity', 'tasksType', 'taskStatus', 'taskAlertLevels', 'canUpdateAll', 'canUpdateStatusAndDuration')); + } + + // Если это POST-запрос для сохранения данных + if ($this->request->isPost) { + if ($model->load($this->request->post()) && $model->save()) { + // Обработка taskUsers + $taskUsers = Yii::$app->request->post('taskUsers'); + TaskUsers::deleteAll(['task_id' => $model->id]); + if ($taskUsers) { + foreach ($taskUsers as $taskUser) { + $taskUserRecord = new TaskUsers(); + $taskUserRecord->admin_id = $taskUser; + $taskUserRecord->task_id = $model->id; + $taskUserRecord->save(false); + } + } + + // Обработка taskViewers + $taskViewers = Yii::$app->request->post('taskViewers'); + TaskViewers::deleteAll(['task_id' => $model->id]); + if ($taskViewers) { + foreach ($taskViewers as $taskViewer) { + $taskViewerRecord = new TaskViewers(); + $taskViewerRecord->admin_id = $taskViewer; + $taskViewerRecord->task_id = $model->id; + $taskViewerRecord->save(false); + } + } + + // Обновляем и сохраняем остальные данные + $model->created_at = date("Y-m-d H:i:s"); + $model->group_id = 1; + $model->is_completed = 0; + $model->result = ''; + $model->created_by = Yii::$app->user->id; // Используем текущего пользователя + + // Сохранение файлов + $model->files = UploadedFile::getInstances($model, 'files'); + if ($model->files) { + foreach ($model->files as $file) { + FileService::saveUploadedFile($file, "task", $model->id); + } + } + + // Уведомляем о смене статуса задачи + TaskService::informStatusChange($model->id); + + // Если это AJAX-запрос, возвращаем успешный результат + if (Yii::$app->request->isAjax) { + return $this->asJson(['success' => true]); + } + + // В случае не AJAX-запроса, редиректим на страницу задачи + return $this->redirect(['view', 'id' => $model->id]); + } + + // Если форма содержит ошибки валидации, возвращаем их + if (Yii::$app->request->isAjax) { + return $this->renderAjax('_form', compact('model')); + } + } + + // Если запрос не AJAX и не POST, просто отрендерим страницу создания + return $this->render('create', compact('model')); + } + /** * Updates an existing Task model. * If update is successful, the browser will be redirected to the 'view' page. diff --git a/erp24/services/TaskService.php b/erp24/services/TaskService.php index d9ecef01..98f35bc3 100644 --- a/erp24/services/TaskService.php +++ b/erp24/services/TaskService.php @@ -251,12 +251,27 @@ class TaskService $reply_markup_updated_by = self::getReplyMarkupUpdatedBy($task->id); $reply_markup_info = self::getReplyMarkupInfo(); if ($updatedByAfter != $updatedByBefore) { + try { TelegramService::sendMessage($updatedByBefore, $msg, $reply_markup_info); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); + } } if (in_array($task->status, [-1, 1, 2, 3, 4, 6])) { + try { TelegramService::sendMessage($updatedByAfter, $msg, $reply_markup_updated_by); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); + } } else { + try { TelegramService::sendMessage($updatedByAfter, $msg, $reply_markup_info); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); +} } } @@ -268,12 +283,27 @@ class TaskService $reply_markup_controller = self::getReplyMarkupController($task->id); $reply_markup_info = self::getReplyMarkupInfo(); if ($controllerAfter != $controllerBefore) { + try { TelegramService::sendMessage($controllerBefore, $msg, $reply_markup_info); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); + } } if ($task->status == 5) { + try { TelegramService::sendMessage($controllerAfter, $msg, $reply_markup_controller); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); +} } else { + try { TelegramService::sendMessage($controllerAfter, $msg, $reply_markup_info); + } catch (\Exception $e) { + + error_log("Error sending message to created_by: " . $e->getMessage()); +} } } } \ No newline at end of file diff --git a/erp24/views/crud/task/index.php b/erp24/views/crud/task/index.php index 944acacd..b69c384b 100644 --- a/erp24/views/crud/task/index.php +++ b/erp24/views/crud/task/index.php @@ -8,16 +8,25 @@ use yii\grid\GridView; /* @var $this yii\web\View */ /* @var $dataProvider yii\data\ActiveDataProvider */ -$this->title = 'Задачи'; +$this->title = 'Список задач'; $this->params['breadcrumbs'][] = $this->title; ?> -
+
+ +

title) ?>

-

- 'btn btn-success']) ?> -

+
+

+ 'btn btn-success']) ?> +

+
+ params['breadcrumbs'][] = $this->title; return Html::a($model->name, ['/crud/task/view', 'id' => $model->id], ['class' => 'btn btn-link']); } ], - 'description:ntext', + [ + 'attribute' => 'description', + 'format' => 'raw', + 'value' => function ($model) { + $fullText = Html::encode($model->description); // Полный текст + $shortText = mb_substr($model->description, 0, 50); // Обрезаем до 50 символов + + // Если текст длиннее 50 символов, добавляем кнопку для показа полного текста + if (mb_strlen($model->description) > 50) { + return ' +
+ ' . Html::encode($shortText) . '... + + Больше +
'; + } else { + return Html::encode($shortText); // Если текст короткий, возвращаем как есть + } + }, + ], 'group_id', //'entity_id', [ @@ -102,7 +130,25 @@ $this->params['breadcrumbs'][] = $this->title; } ], ], - ]); ?> + ]); + $this->registerJs(" + $(document).on('click', '.toggle-text', function() { + var link = $(this); + var shortText = link.siblings('.short-text'); + var fullText = link.siblings('.full-text'); + + if (fullText.is(':visible')) { + fullText.hide(); + shortText.show(); + link.text('Больше'); + } else { + fullText.show(); + shortText.hide(); + link.text('Меньше'); + } + }); +"); + ?>
diff --git a/erp24/views/crud/task/view.php b/erp24/views/crud/task/view.php index 538dfb4b..56cffdea 100755 --- a/erp24/views/crud/task/view.php +++ b/erp24/views/crud/task/view.php @@ -4,11 +4,10 @@ use yii\helpers\Html; use yii\helpers\Url; use yii\widgets\DetailView; use yii\widgets\ActiveForm; - +use yii\helpers\HtmlPurifier; use yii_app\helpers\PrintBlockHelper; use yii_app\services\FileService; - -use \yii_app\services\DateTimeService; +use yii_app\services\DateTimeService; /* @var $this yii\web\View */ /* @var $model yii_app\records\Task */ @@ -24,149 +23,135 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P ?> -
- - +
+
+ +
+ + +
+ К списку + Доска задач + $model->id], ['class' => 'btn btn-primary ml-2']) ?> + $model->id], [ + 'class' => 'btn btn-danger ml-2', + 'data' => [ + 'confirm' => 'Вы уверены, что хотите удалить эту запись?', + 'method' => 'post', + ], + ]) ?> +
-
- -

title) ?>

- -

- $model->id], ['class' => 'btn btn-primary']) ?> - $model->id], [ - 'class' => 'btn btn-danger', - 'data' => [ - 'confirm' => 'Вы уверены, что хотите удалить эту запись?', - 'method' => 'post', - ], - ]) ?> -

- - $model, - 'attributes' => [ - 'id', - 'name', - 'description:ntext', - 'group_id', - [ - 'label' => 'Тип сущности', - 'value' => $model->taskEntity->name ?? $model->entity_type, - ], - [ - 'label' => 'Сущность', - 'value' => $model->taskEntity->alias == 'lesson' ? $model->lesson->name : ($model->taskEntity->alias == 'store' ? $model->store->name : $model->entity_id), - ], - [ - 'label' => 'Тип задачи', - 'value' => $model->taskType->name ?? $model->task_type_id, - ], - [ - 'label' => 'Статус', - 'value' => $model->statusEntity->name ?? $model->status, - ], - 'prioritet', - //'duration', - [ - 'label' => 'Duration', - 'value' => $model->durationField, - 'contentOptions' => ['class' => 'bg-red'], - 'captionOptions' => ['tooltip' => 'Tooltip'], - ], - 'is_completed', - 'data_start', - 'data_end', - 'result:ntext', - 'deadline', - [ - 'label' => 'Исполнитель', - 'value' => $model->updatedBy->name ?? "---", - ], - [ - 'label' => 'Контроллёр', - 'value' => $model->controller->name ?? "---", - ], - [ - 'label' => 'Уровень важности', - 'value' => $model->alertLevel->name ?? "---", - ], - [ - 'label' => 'Создатель', - 'value' => $model->createdBy->name ?? "---", - ], - [ - 'label' => 'Время создания', - 'value' => DateTimeService::formatHuman($model->created_at), - ], - [ - 'label' => 'Время обновления', - 'value' => $model->updated_at ? DateTimeService::formatHuman($model->updated_at) : '---', - ], - [ - 'label' => 'Время закрытия', - 'value' => $model->closed_at ? DateTimeService::formatHuman($model->closed_at) : '---', - ], - [ - 'label' => 'Кем закрыта', - 'value' => $model->closedBy->name ?? '---', - ], - ], - ]) ?> - - attachedFiles): ?> -
- attachedFiles as $file): ?> -
- file_type == 'image'): ?> - img - - url)?> - -
- -
- + +
+ Создано: created_at) ?>, + Обновлено: updated_at ? DateTimeService::formatHuman($model->updated_at) : '---' ?> +
- - 'comment-form', 'options' => ['enctype' => 'multipart/form-data']]) ?> - field($comment, 'msg')->textInput()->label(false)) ?> + +

title) ?>

-
'); ?> + +

description)) ?>

-
- 'btn btn-success btn']) ?> -
- - - comments)): ?> - comments as $cmnt): ?> -
-
- createdBy->name ?> (created_at) ?>): + +

Добавить комментарий

+ + 'comment-form', 'options' => ['enctype' => 'multipart/form-data']]) ?> +
+ field($comment, 'msg')->textarea(['rows' => 5])->label(false) ?>
-
- msg ?> - attachedFiles)): ?> - attachedFiles as $file): ?> - file_type == 'image'): ?> - url), [$file->url], ['class' => 'btn btn-link', 'target' => '_blank']) ?> - - url), ['/files/download', 'url' => $file->url], ['class' => 'btn btn-link']) ?> - - - + + +
+ field($comment, 'files[]')->fileInput(['multiple' => true])->label('Прикрепить медиафайлы') ?>
-
- - +
+ 'btn btn-success']) ?> +
+ + + + + + +

Комментарии

+ comments)): ?> + comments as $cmnt): ?> +
+
+ createdBy->name) ?> (created_at) ?>): +
+
+ msg)) ?> + attachedFiles)): ?> + attachedFiles as $file): ?> + file_type == 'image'): ?> + image + + url), ['/files/download', 'url' => $file->url], ['class' => 'btn btn-link']) ?> + + + +
+
+ + +
+ +
+

Дополнительная информация

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Тип задачи:taskType->name ?? $model->task_type_id) ?>
Статус:statusEntity->name ?? $model->status) ?>
Приоритет:prioritet) ?>
Исполнитель:updatedBy->name ?? '---') ?>
Контроллер:controller->name ?? '---') ?>
Создатель:createdBy->name ?? '---') ?>
Дата начала:data_start) ?>
Дата завершения:data_end) ?>
Дедлайн:deadline) ?>
Уровень важности:alertLevel->name ?? '---') ?>
Кем закрыта:closedBy->name ?? '---') ?>
+
+
-
\ No newline at end of file diff --git a/erp24/views/task/four-columns.php b/erp24/views/task/four-columns.php index a8124238..c3ca0256 100755 --- a/erp24/views/task/four-columns.php +++ b/erp24/views/task/four-columns.php @@ -1,5 +1,6 @@ company_function_id !== '0') {
'btn btn-success', 'target' => '_blank', 'data-pjax' => '0']) ?> + + 'btn btn-success', + 'id' => 'create-task-button', + ]) ?> + + + '

Создать задачу

', + 'id' => 'create-task-modal', + 'size' => 'modal-lg', // Размер модального окна + 'footer' => '', // Убираем футер, так как не нужен + ]); ?> + +
+ +
+ + +
@@ -360,14 +381,24 @@ $form = ActiveForm::begin(['id' => 'filter-form']); ?> /// Функция для управления видимостью задач function toggleTasks() { - if ($('#activeTasksToggle').is(':checked')) { - // Скрываем задачи с статусами -1 и 6 - $('.dragulaCard[data-status="-1"], .dragulaCard[data-status="6"]').find('[data-task_id]').hide(); - } else { - // Показываем задачи с статусами -1 и 6 - $('.dragulaCard[data-status="-1"], .dragulaCard[data-status="6"]').find('[data-task_id]').show(); - } - } + if ($('#activeTasksToggle').is(':checked')) { + + + // Скрываем первый и последний дочерние элементы в #title-row и #column-row + $('#title-row').children(':first-child').hide(); + $('#title-row').children(':last-child').hide(); + $('#column-row').children(':first-child').hide(); + $('#column-row').children(':last-child').hide(); + } else { + + + // Показываем первый и последний дочерние элементы в #title-row и #column-row + $('#title-row').children(':first-child').show(); + $('#title-row').children(':last-child').show(); + $('#column-row').children(':first-child').show(); + $('#column-row').children(':last-child').show(); + } +} // Изначально скрываем задачи с data-status = -1 или 6, если тумблер выключен toggleTasks(); @@ -376,6 +407,45 @@ $form = ActiveForm::begin(['id' => 'filter-form']); ?> $('#activeTasksToggle').on('change', function() { toggleTasks(); }); + + + + // Когда пользователь нажимает на кнопку "Создать задачу" +$('#create-task-button').on('click', function() { + // Открываем модальное окно + $('#create-task-modal').modal('show') + .find('#create-task-content') // Загружаем контент формы в модальное окно + .load('/crud/task/create-ajax'); // URL на экшен, который выводит форму создания задачи +}); + +// Обработка формы создания задачи после отправки +$(document).on('beforeSubmit', '#create-task-form', function(e) { + e.preventDefault(); + + var form = $(this); + + // AJAX-запрос для отправки формы + $.ajax({ + url: form.attr('action'), + type: 'POST', + data: form.serialize(), + success: function(response) { + // Если успешно, закрываем модальное окно + if (response.success) { + $('#create-task-modal').modal('hide'); + // Тут можно добавить обновление списка задач или другое действие + } else { + // Если есть ошибки валидации, обновляем контент модального окна + $('#create-task-content').html(response); + } + }, + error: function() { + alert('Ошибка при создании задачи'); + } + }); + + return false; // Предотвращаем стандартную отправку формы +}); JS; $this->registerJs($script); ?> @@ -383,7 +453,7 @@ JS;
-
+
?> $taskStatusName):?> -2 && $ind < 7): ?> @@ -394,7 +464,7 @@ JS;
-
+
?> $taskStatusName):?> -2 && $ind < 7): ?>