]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Поиск и прочее
authorvladfo <fvv2011@gmail.com>
Thu, 19 Sep 2024 23:46:47 +0000 (02:46 +0300)
committervladfo <fvv2011@gmail.com>
Thu, 19 Sep 2024 23:46:47 +0000 (02:46 +0300)
erp24/actions/task/FourColumnsAction.php
erp24/actions/task/IndexAction.php
erp24/controllers/crud/TaskController.php
erp24/views/crud/task/_form.php
erp24/views/crud/task/create.php
erp24/views/crud/task/index.php
erp24/views/crud/task/update.php
erp24/views/task/four-columns.php
erp24/views/task/index.php
erp24/web/css/select2-container-and-other-styles-fix.css

index 686d10c49792244c3885ac221686ba1ee9d4ffd2..9528c3ab3a697ee7d76335a713998ec7be01006f 100755 (executable)
@@ -20,6 +20,14 @@ class FourColumnsAction extends Action
 {
     public function run($task_id = null)
     {
+        if (Yii::$app->request->isAjax) {
+            $val = Yii::$app->request->post("value");
+            $alias = TaskEntity::findOne($val)->alias;
+            return json_encode(TaskService::getEntitiesByAlias($alias), JSON_UNESCAPED_UNICODE);
+        }
+
+
+
         $action = Yii::$app->request->post('action');
         if ($action == 'updateTaskStatus') {
             $task_id = Yii::$app->request->post('task_id');
index bf2a8a90a655475b2589a2724e1e39b2c18431b7..b20aea63c9f66341083fccb67796fc74ac3e5b8f 100755 (executable)
@@ -249,20 +249,24 @@ class IndexAction extends Action
         }
 
         $text = Yii::$app->request->post('name');
+      //  var_dump($text);
         if (!isset($text)) {
             $text = Yii::$app->session->get('searchFilter');
         }
-        if (isset($text)) {
+        if (isset($text) && !empty($text)) {
             Yii::$app->session->set('searchFilter', $text);
-            $tasks = Task::find()->where(
-                    ['or',
-                        ['like', 'task.name', '%' . $text  . '%', false],
-                        ['like', 'task.description', '%' . $text  . '%', false]
-                    ]);
+            //$text = 'Создание';
+            $tasks = Task::find()
+                ->where(
+                    ['ilike', 'task.name', $text], // Регистронезависимый поиск по полю name
+                    );// Получаем все записи
+
+         //   var_dump($tasks);
+
         } else {
             Yii::$app->session->set('searchFilter', '');
             $tasks = Task::find();
-        }
+
 
         if (!isset($taskFilterSelection) || $taskFilterSelection == "" || $taskFilterSelection == "0") {
             $tasks = $tasks->andWhere(['or', ['like', 'updated_by', $_SESSION["admin_id"]], ['like', 'created_by', $_SESSION["admin_id"]]])->where(['<', 'status', Task::STATUS_CLOSED]);
@@ -290,9 +294,9 @@ class IndexAction extends Action
         if ($taskFilterSelection == "5") {
             $tasks = $tasks->andWhere(['status' => Task::STATUS_CLOSED]);
         }
-
+        }
         $tasks = $tasks->andWhere(['or', ['parent_id' => 0], ['parent_id' => null]])->all();
-
+        //var_dump($tasks);
         if (Yii::$app->request->isPjax) {
             $task = Task::findOne($task_id);
             $balance = [];
index a7871b43defd4f9edd1311c568e0b715b8096dbb..0dd044f8cf7c1d3b3af9e6a5a5f387c93a058462 100644 (file)
@@ -200,17 +200,15 @@ class TaskController extends Controller
             $canUpdateAll = true;
             $canUpdateStatusAndDuration = true;
 
-            // Логирование передаваемых переменных
-            Yii::info([
-                'model' => $model,
-                'entities' => $entities,
-                'taskEntity' => $taskEntity,
-                'tasksType' => $tasksType,
-                'taskStatus' => $taskStatus,
-                'taskAlertLevels' => $taskAlertLevels,
-                'canUpdateAll' => $canUpdateAll,
-                'canUpdateStatusAndDuration' => $canUpdateStatusAndDuration
-            ], 'debug');
+            $model->loadDefaultValues();
+            $model->data_start = date("Y-m-d H:i:s");
+            $model->duration = 30;
+            $model->name = '';
+            $model->description = '';
+            $model->task_type_id = 0;
+            $model->deadline = date("Y-m-d H:i:s", strtotime("+1 day", strtotime($model->data_start)));
+
+
 
             // Возвращаем HTML формы для рендеринга в модальном окне
             return $this->renderAjax('_form', compact('model', 'entities', 'taskEntity', 'tasksType', 'taskStatus', 'taskAlertLevels', 'canUpdateAll', 'canUpdateStatusAndDuration'));
@@ -218,7 +216,10 @@ class TaskController extends Controller
 
         // Если это POST-запрос для сохранения данных
         if ($this->request->isPost) {
+
+
             if ($model->load($this->request->post()) && $model->save()) {
+                //var_dump($model->id);
                 // Обработка taskUsers
                 $taskUsers = Yii::$app->request->post('taskUsers');
                 TaskUsers::deleteAll(['task_id' => $model->id]);
@@ -248,7 +249,9 @@ class TaskController extends Controller
                 $model->group_id = 1;
                 $model->is_completed = 0;
                 $model->result = '';
-                $model->created_by = Yii::$app->user->id; // Используем текущего пользователя
+                $model->created_by = $_SESSION['admin_id'];
+
+                $model->save(false);
 
                 // Сохранение файлов
                 $model->files = UploadedFile::getInstances($model, 'files');
index bf8f237800cbc10907c57dec158223cf0c4fffc3..acaea75cc3f796b3e0b19db7b9cd1b8555b70fcf 100755 (executable)
@@ -25,7 +25,7 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P
 
 ?>
 
-    <div class="task-form">
+    <div class="task-form p-4">
 
 <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
 
index 2ae86dbd66565b39017396dc2372a3ed4747c3e8..4a12b298f98ac6986ac2011cd9ec175f57f07296 100755 (executable)
@@ -1,6 +1,7 @@
 <?php
 
 use yii\helpers\Html;
+use yii\helpers\Url;
 
 /* @var $this yii\web\View */
 /* @var $model yii_app\records\Task */
@@ -13,8 +14,8 @@ $canUpdateAll = true;
 $canUpdateStatusAndDuration = true;
 
 ?>
-<div class="task-create">
-
+<div class="task-create p-4">
+    <a href="<?= Url::to(['/task/four-columns']) ?>" class="btn btn-link">Доска задач</a>
     <h1><?= Html::encode($this->title) ?></h1>
 
     <?= $this->render('_form', compact('model', 'entities', 'taskEntity', 'tasksType', 'taskStatus', 'taskAlertLevels',
index b69c384bcee544c655fb8eea2c970ac90f0f74eb..4ac2afc552ee90902ac96a6f6bcf6ded9ba874a6 100644 (file)
@@ -4,6 +4,7 @@ use yii\helpers\Html;
 use yii\helpers\Url;
 use yii\grid\ActionColumn;
 use yii\grid\GridView;
+use yii\helpers\HtmlPurifier;
 
 /* @var $this yii\web\View */
 /* @var $dataProvider yii\data\ActiveDataProvider */
@@ -51,9 +52,10 @@ $this->params['breadcrumbs'][] = $this->title;
             ],
             [
                 'attribute' => 'description',
+                'label' => 'Описание задачи',
                 'format' => 'raw',
                 'value' => function ($model) {
-                    $fullText = Html::encode($model->description); // Полный текст
+                    $fullText = HtmlPurifier::process(nl2br($model->description)); // Полный текст
                     $shortText = mb_substr($model->description, 0, 50); // Обрезаем до 50 символов
 
                     // Если текст длиннее 50 символов, добавляем кнопку для показа полного текста
@@ -72,7 +74,7 @@ $this->params['breadcrumbs'][] = $this->title;
             'group_id',
             //'entity_id',
             [
-                'label' => 'entity_id',
+                'label' => 'Сущность',
                 'value' => function ($model) {
                     if ($model->taskEntity) {
                         switch ($model->taskEntity->alias) {
index f22b71903beab7068444c1034d61920b2a43dba2..6972ee7a760817d6c766c4c75082036f5bc14024 100755 (executable)
@@ -1,6 +1,7 @@
 <?php
 
 use yii\helpers\Html;
+use yii\helpers\Url;
 
 /* @var $this yii\web\View */
 /* @var $model yii_app\records\Task */
@@ -14,10 +15,11 @@ $this->params['breadcrumbs'][] = ['label' => $model->name, 'url' => ['view', 'id
 $this->params['breadcrumbs'][] = 'Update';
 ?>
 
-<div class="task-update m-5">
+<div class="task-update m-5 p-4">
+    <a href="<?= Url::to(['/task/four-columns']) ?>" class="btn btn-link">Доска задач</a>
+    <a href="<?= \yii\helpers\Url::to(['/crud/task']) ?>" class="btn btn-primary m-2">Назад</a>
+    <h3>Редактирование задачи:
 
-    <small>Редактирование задачи: </small>
-    <h3><a href="<?= \yii\helpers\Url::to(['/crud/task']) ?>" class="btn btn-primary m-2">Назад</a>
         <?= Html::encode($model->name) ?></h3>
 
     <?= $this->render('_form', compact('model', 'entities', 'taskEntity', 'tasksType', 'taskStatus', 'taskAlertLevels', 'comment',
index 5c89d9495ebf0b0bbbd2ddc7a0128c628b2fffb3..aeba9908a3e21ab9b442a4ffd91da1949dae51c3 100755 (executable)
@@ -85,19 +85,6 @@ if ($filterModel->company_function_id !== '0') {
             'id' => 'create-task-button',
         ]) ?>
 
-        <!-- Модальное окно -->
-        <?php Modal::begin([
-            'header' => '<h2>Создать задачу</h2>',
-            'id' => 'create-task-modal',
-            'size' => 'modal-lg', // Размер модального окна
-            'footer' => '', // Убираем футер, так как не нужен
-        ]); ?>
-
-        <div id="create-task-content">
-            <!-- Здесь будет загружена форма через AJAX -->
-        </div>
-
-        <?php Modal::end(); ?>
 
     </div>
 </div>
@@ -386,22 +373,27 @@ $form = ActiveForm::begin(['id' => 'filter-form']); ?>
     if ($('#activeTasksToggle').is(':checked')) {
         
 
-        // Скрываем первый и последний дочерние элементы в #title-row и #column-row
-        $('#title-row').children(':first-child').hide();
-        $('#title-row').children(':last-child').hide();
+        // Скрываем первый и последний дочерние элементы в #column-row
         $('#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
         $('#column-row').children(':first-child').show();
         $('#column-row').children(':last-child').show();
     }
 }
 
+
+/*$(document).ready(function() { 
+    $("#task-entity_type").select2({ 
+        dropdownParent: $("#create-task-modal") 
+    }); 
+    $('.select2').each(function() { 
+    $(this).select2({ dropdownParent: $(this).parent()});
+})
+});*/
         // Изначально скрываем задачи с data-status = -1 или 6, если тумблер выключен
         toggleTasks();
 
@@ -409,18 +401,39 @@ $form = ActiveForm::begin(['id' => 'filter-form']); ?>
         $('#activeTasksToggle').on('change', function() {
             toggleTasks();
         });
-        
-       
- $(document).on('click', '#create-task-button', function() {
-    // Отправляем AJAX-запрос для получения формы
-    $.get(createTaskUrl, function(data) {
-        // Помещаем полученный HTML в модальное окно
-        $('#create-task-content').html(data);
-        
-        // Открываем модальное окно
-        $('#create-task-modal').modal('show');
+  $(document).ready(function() {
+    // Открытие модального окна по кнопке
+    $('#create-task-button').on('click', function() {
+        // Загружаем данные через AJAX (если нужно)
+        $.get(createTaskUrl, function(data) {
+            $('#create-task-content').html(data);
+
+            // Показываем модальное окно
+            $('#create-task-modal').fadeIn();
+
+            // Отключаем скролл body
+            $('body').addClass('no-scroll');
+        });
+    });
+
+    // Закрытие модального окна
+    $('.close').on('click', function() {
+        $('#create-task-modal').fadeOut();
+
+        // Включаем скролл body
+        $('body').removeClass('no-scroll');
+    });
+
+    // Закрытие окна при клике вне содержимого
+    $(window).on('click', function(event) {
+        if ($(event.target).is('#create-task-modal')) {
+            $('#create-task-modal').fadeOut();
+            $('body').removeClass('no-scroll');
+        }
     });
 });
+       
 
 // Обработка формы создания задачи после отправки
 $(document).on('beforeSubmit', '#create-task-form', function(e) {
@@ -457,22 +470,16 @@ JS;
 
 
 <div class="card mt-2">
-    <div class="row g-0 d-flex justify-content-between" id="title-row">
-        <?php if (isset($taskStatuses)): //<div class="col-1 font-weight-bold"></div> ?>
-            <?php foreach ($taskStatuses as $ind => $taskStatusName):?>
-                <?php if ($ind > -2 && $ind < 7): ?>
-                    <div class="col-1 container col-1 border br-7 m-1 font-weight-bold text-center" style="min-width: 220px">
-                        <?= $taskStatusName ?>
-                    </div>
-                <?php endif; ?>
-            <?php endforeach; ?>
-        <?php endif; ?>
-    </div>
+
     <div class="row g-0 d-flex justify-content-between" id="column-row">
         <?php if (isset($taskStatuses)): // <div class="col-1 font-weight-bold"></div> ?>
             <?php foreach ($taskStatuses as $ind => $taskStatusName):?>
                 <?php if ($ind > -2 && $ind < 7): ?>
-                    <div class="dragulaCard container col-1 border br-7 m-1 bg-light-transparent" style="min-width: 220px" data-status="<?= $ind ?>">
+                    <div class="col-1 container" style="min-width: 200px">
+                    <div class=" border br-7 m-1 font-weight-bold text-center" style="min-width: 200px">
+                        <?= $taskStatusName ?>
+                    </div>
+                    <div class="dragulaCard border br-7 m-1 bg-light-transparent" style="min-width: 200px; min-height: 120px" data-status="<?= $ind ?>">
                         <?php if (isset($tasks)): ?>
                             <?php foreach ($tasks as $task): ?>
                                 <?php if ($task->status == $ind): ?>
@@ -500,6 +507,7 @@ JS;
                             <?php endforeach; ?>
                         <?php endif; ?>
                     </div>
+                    </div>
                 <?php endif; ?>
             <?php endforeach; ?>
         <?php endif; ?>
@@ -511,14 +519,13 @@ JS;
     var createTaskUrl = '<?= \yii\helpers\Url::to(['/crud/task/create-ajax']) ?>';
 </script>
 
-<script type="text/javascript">
-    $(document).on('click', '#create-task-button', function() {
-        $.get(createTaskUrl, function(data) {
-            // Помещаем полученный HTML в модальное окно
-            $('#create-task-content').html(data);
-
-            // Открываем модальное окно
-            $('#create-task-modal').modal('show');
-        });
-    });
-</script>
\ No newline at end of file
+<!-- Блок для модального окна -->
+<div id="create-task-modal" class="custom-modal" style="display:none;">
+    <div class="custom-modal-content">
+        <span class="close">&times;</span>
+        <h2 class="create-task-title">Создать задачу</h2>
+        <div id="create-task-content">
+            <!-- Сюда будет загружаться форма через AJAX -->
+        </div>
+    </div>
+</div>
index 69eeded59cd6a3155d7acc7962bce79a8df557d2..e35237017d509bc79b09a304477147f1761fef71 100755 (executable)
@@ -39,6 +39,7 @@ function writeNode($node, $selectedNode, $depth, $writePosit) {
         <a href="<?= Url::to(['/task/four-columns']) ?>" class="btn btn-link">Доска задач</a>
     </div>
     <h1><?= Html::encode($this->title) ?></h1>
+    <p>Всего задач:  <span id="count"><?= count($tasks) ?></span> </p>
     <div class="row py-2">
 <div class="col-2">
     <?= Html::a('Создать задачу', ['/crud/task/create'], ['class' => 'btn btn-success', 'target' => '_blank', 'data-pjax' => '0']) ?>
@@ -52,8 +53,8 @@ function writeNode($node, $selectedNode, $depth, $writePosit) {
     <div class="col-7">
         <?php $form = ActiveForm::begin(['id' => 'filter-form', 'options' => ['data-pjax' => true]]); ?>
             <div class="input-group">
-                <?= Html::radioList("taskFilter", $taskFilterSelection, ['0' => 'Мои', '1' => 'На контроле', '2' => 'Участвую', '3' => 'Просматриваю', '4' => 'Неразобранные', '5' => 'Закрытые'], ['class' => 'form-control']); ?>
-                <?= Html::submitButton('Фильтр', ['class' => 'btn btn-primary']) ?>
+                <?= Html::radioList("taskFilter", $taskFilterSelection, ['0' => 'Мои', '1' => 'На контроле', '2' => 'Участвую', '3' => 'Просматриваю', '4' => 'Неразобранные', '5' => 'Закрытые'], ['class' => 'form-control d-flex justify-content-between']); ?>
+                <?= Html::submitButton('Фильтр', ['class' => 'btn btn-primary countButton']) ?>
             </div>
 
 
@@ -70,16 +71,16 @@ function writeNode($node, $selectedNode, $depth, $writePosit) {
                         <div class="p-4 pb-0 border-bottom">
                             <?php $form = ActiveForm::begin(['id' => 'search-form', 'options' => ['data-pjax' => true]]); ?>
                                 <div class="input-group">
-                                    <?= Html::input('text', 'name', $text, ['class' => 'form-control']) ?>
-                                    <?= Html::submitButton('Поиск', ['class' => 'btn btn-primary']) ?>
+                                    <?= Html::input('text', 'name', $text, ['class' => 'form-control', 'method' => 'post']) ?>
+                                    <?= Html::submitButton('Поиск', ['class' => 'btn btn-primary countButton']) ?>
                                 </div>
                             <?php ActiveForm::end() ?>
                         </div>
                         <div class="main-chat-list" id="ChatList" style="overflow: scroll;">
 
                             <?php foreach ($tasks as $taskElement): ?>
-                                <a href="<?= Url::to(['/task/index', 'task_id' => $taskElement->id]) ?>">
-                                    <div class="media selected my-2">
+                                <a href="<?= Url::to(['/task/index', 'task_id' => $taskElement->id]) ?>" data-task-id="<?= $taskElement->id ?>">
+                                    <div class="media selected <?php if (isset($task)) { echo $taskElement->id == $task->id ? 'selected_task' : '';  } ?> my-2">
                                         <div class="media-body">
                                             <div class="media-contact-name"><span><?= $taskElement->name ?></span>
                                                 <?php
@@ -342,6 +343,29 @@ function writeNode($node, $selectedNode, $depth, $writePosit) {
 </div>
 <?php Pjax::end() ?>
 </div>
+
+<script>
+    $(document).ready(function() {
+        // Обработчик нажатия на кнопку
+        $('.countButton').click(function() {
+            // Пересчитываем количество элементов
+
+            var count = $('#ChatList > a').length;
+
+            $('#count').text(count);
+        });
+
+        // Обработчик клика на элементы списка
+        $('#ChatList').on('click', 'a', function() {
+            // Удаляем класс 'selected' у всех элементов
+            $('#ChatList .media').removeClass('selected_task');
+
+            // Добавляем класс 'selected' только к выбранному элементу
+            $(this).find('.media').addClass('selected_task');
+        });
+    });
+</script>
+
 <script>
     const param = $('meta[name=csrf-param]').attr("content");
     const token = $('meta[name=csrf-token]').attr("content");
index f32e0837495376f30056c403c6ccd89067fc130e..d1797703fb11110f5e71e056cac589856ba4854b 100755 (executable)
     overflow: hidden;
     white-space: nowrap;
     text-overflow: ellipsis;
-}
\ No newline at end of file
+}
+
+/* Стили для модального окна */
+.custom-modal {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background-color: rgba(0, 0, 0, 0.5); /* затемненный фон */
+    z-index: 9999; /* всегда поверх */
+}
+
+.custom-modal-content {
+    position: absolute;
+    top: 10%;
+    left: 10%;
+    width: 80%; /* Ширина 80% */
+    background-color: white;
+    padding: 20px;
+    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
+    border-radius: 5px;
+    overflow-y: auto; /* если контент выходит за пределы */
+    max-height: 80vh; /* максимум высоты окна */
+}
+
+.close {
+    float: right;
+    font-size: 28px;
+    font-weight: bold;
+    cursor: pointer;
+}
+
+.close:hover,
+.close:focus {
+    color: red;
+    text-decoration: none;
+    cursor: pointer;
+}
+
+/* Отключение скролла страницы */
+.no-scroll {
+    overflow: hidden;
+}
+
+.main-chat-list .media.selected_task {
+    background-color: #adaeaf;
+}
+