]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Правки по датам
authorvladfo <fvv2011@gmail.com>
Fri, 20 Sep 2024 11:36:32 +0000 (14:36 +0300)
committervladfo <fvv2011@gmail.com>
Fri, 20 Sep 2024 11:36:32 +0000 (14:36 +0300)
erp24/controllers/crud/TaskController.php
erp24/views/crud/task/_form.php
erp24/views/crud/task/view.php

index 0dd044f8cf7c1d3b3af9e6a5a5f387c93a058462..42d7f381c4be6ff69aec5971c69113ed9d7544d4 100644 (file)
@@ -2,6 +2,9 @@
 
 namespace yii_app\controllers\crud;
 
+use DateTime;
+use DateTimeZone;
+use Exception;
 use Yii;
 use yii\web\UploadedFile;
 use yii_app\records\Comment;
@@ -202,7 +205,7 @@ class TaskController extends Controller
 
             $model->loadDefaultValues();
             $model->data_start = date("Y-m-d H:i:s");
-            $model->duration = 30;
+            $model->duration = "30:m";
             $model->name = '';
             $model->description = '';
             $model->task_type_id = 0;
@@ -244,14 +247,26 @@ class TaskController extends Controller
                     }
                 }
 
-                // Обновляем и сохраняем остальные данные
-                $model->created_at = date("Y-m-d H:i:s");
-                $model->group_id = 1;
-                $model->is_completed = 0;
-                $model->result = '';
-                $model->created_by = $_SESSION['admin_id'];
 
-                $model->save(false);
+
+
+                try {
+
+
+                    // Обновляем и сохраняем данные модели
+                    $model->created_at = date("Y-m-d H:i:s");
+                    $model->group_id = 1;
+                    $model->is_completed = 0;
+                    $model->result = '';
+                    $model->created_by = $_SESSION['admin_id'];
+
+
+                    $model->save(false);
+
+                } catch (Exception $e) {
+                    // Обработка исключений
+                    echo 'Ошибка: ', $e->getMessage();
+                }
 
                 // Сохранение файлов
                 $model->files = UploadedFile::getInstances($model, 'files');
@@ -415,6 +430,16 @@ class TaskController extends Controller
 
         $entities = TaskService::getEntitiesByAlias(TaskEntity::findOne($model->entity_type)->alias);
 
+        // Получаем данные из базы данных
+        $timestampWithTimezoneDataStart = $model->data_start; // Пример значения '2024-09-21 14:26:38+03'
+        $timestampWithTimezoneDataEnd = $model->data_end;     // Пример значения '2024-09-30 15:30:00+03'
+        $timestampWithTimezoneDeadline = $model->deadline;    // Пример значения '2024-09-25 12:00:00+03'
+
+// Преобразуем данные для формы
+        $model->data_start = $this->formatTimestampForInput($timestampWithTimezoneDataStart);
+        $model->data_end = $this->formatTimestampForInput($timestampWithTimezoneDataEnd);
+        $model->deadline = $this->formatTimestampForInput($timestampWithTimezoneDeadline);
+
         return $this->render('update',
             compact('model', 'entities', 'taskEntity','tasksType', 'taskStatus', 'taskAlertLevels', 'comment',
                 'canUpdateAll', 'canUpdateStatusAndDuration'));
@@ -449,4 +474,25 @@ class TaskController extends Controller
 
         throw new NotFoundHttpException('The requested page does not exist.');
     }
+
+
+    // Функция для преобразования времени из формата 'timestamp with timezone' в 'yyyy-mm-dd hh:ii'
+    protected function formatTimestampForInput($timestampWithTimezone) {
+        if (empty($timestampWithTimezone)) {
+            // Возвращаем пустую строку, если нет входных данных
+            return '';
+        }
+
+        try {
+            // Создаем объект DateTime из строки с временной зоной
+            $datetime = new DateTime($timestampWithTimezone, new DateTimeZone('Europe/Moscow')); // Предположим, что временная зона UTC, можно заменить на нужную
+            // Форматируем в 'yyyy-mm-dd hh:ii'
+            return $datetime->format('Y-m-d H:i');
+        } catch (Exception $e) {
+            // Ловим исключения и передаем сообщение об ошибке
+            throw new Exception("Ошибка преобразования времени: " . $e->getMessage());
+        }
+    }
+
+
 }
index 3bc56f3758458c51e657e8790c79c554e38e87f6..040cae9610bab00b4ae1de4735acf671b835253d 100755 (executable)
@@ -136,19 +136,61 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P
             )->label(false); ?>
         </div>
 
-    <div class="form-group">
-        <label>Продолжительность</label>
-        <?= $form->field($model, 'duration')->textInput(['type' => 'number', 'disabled' => !$canUpdateStatusAndDuration])->label(false); ?>
-    </div>
+        <div class="form-group">
+            <label>Продолжительность</label>
+            <div class="row border">
+                <div class="col-2 text-right mt-2">Продолжительность</div>
+                <div class="col-4 mt-2">
+                    <?php
+                    // Разбиваем значение продолжительности на число и масштаб (минуты, часы, дни)
+                    $paramArray = explode(":", $model->duration);
+                    $value = $paramArray[0] ?? 0;
+                    $scale = $paramArray[1] ?? 'm'; // По умолчанию "минуты"
+                    ?>
+
+                    <!-- Поле ввода для значения -->
+                    <input id="durationValue" type="number" value="<?= Html::encode($value) ?>" <?= !$canUpdateStatusAndDuration ? 'disabled' : '' ?>/>
+
+                    <!-- Выбор масштаба (минуты, часы, дни) -->
+                    <select id="durationScale" <?= !$canUpdateStatusAndDuration ? 'disabled' : '' ?>>
+                        <option value="m" <?= $scale == 'm' ? 'selected' : '' ?>>Минуты</option>
+                        <option value="h" <?= $scale == 'h' ? 'selected' : '' ?>>Часы</option>
+                        <option value="d" <?= $scale == 'd' ? 'selected' : '' ?>>Дни</option>
+                    </select>
+
+                    <!-- Синхронизация изменений в скрытое поле формы -->
+                    <script>
+                        const $durationValue = $("#durationValue");
+                        const $durationScale = $("#durationScale");
+
+                        function syncDuration() {
+                            $("#task-duration").val($durationValue.val() + ":" + $durationScale.val());
+                        }
 
-<?php if (!$canUpdateStatusAndDuration): ?>
-    <script>
-        $(document).ready(() => {
-            $('#durationValue').attr('disabled', 'disabled');
-            $('#durationScale').attr('disabled', 'disabled');
-        });
-    </script>
-<?php endif; ?>
+                        // Обработчики событий для изменения значения и масштаба
+                        $durationValue.on('change', () => syncDuration());
+                        $durationScale.on('change', () => syncDuration());
+
+                        // Установка начального значения
+                        $durationScale.val("<?= Html::encode($scale) ?>");
+                    </script>
+                </div>
+            </div>
+
+            <!-- Скрытое поле для хранения результата (число + масштаб) -->
+            <div style="display: none">
+                <?= $form->field($model, 'duration')->hiddenInput()->label(false) ?>
+            </div>
+        </div>
+
+        <?php if (!$canUpdateStatusAndDuration): ?>
+            <script>
+                $(document).ready(() => {
+                    $('#durationValue').attr('disabled', 'disabled');
+                    $('#durationScale').attr('disabled', 'disabled');
+                });
+            </script>
+        <?php endif; ?>
 
     <div class="form-group">
         <label>Дата начала</label>
@@ -163,6 +205,19 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P
         ])->label(false); ?>
     </div>
 
+        <div class="form-group">
+            <label>Дата завершения</label>
+            <?= $form->field($model, 'data_end')->widget(DateTimePicker::class, [
+                'language' => 'ru',
+                'template' => '{input}',
+                'clientOptions' => [
+                    'autoclose' => true,
+                    'format' => 'yyyy-mm-dd hh:ii',
+                    'todayBtn' => true
+                ],
+            ])->label(false); ?>
+        </div>
+
 <?php if ($model->deadline_permission != 0 || ($model->controller && ($model->controller->id == $_SESSION['admin_id']))): ?>
     <div class="form-group">
         <label>Крайний срок</label>
index a4b43a952d6b3ee7973ab1974d09dc3c5e6b6ce0..16249590ddb0580d07c6a2e838cd53145c943f1d 100755 (executable)
@@ -9,6 +9,7 @@ use yii\helpers\HtmlPurifier;
 use yii_app\helpers\PrintBlockHelper;
 use yii_app\services\FileService;
 use yii_app\services\DateTimeService;
+use yii_app\services\TaskService;
 
 /* @var $this yii\web\View */
 /* @var $model yii_app\records\Task */
@@ -110,6 +111,35 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P
                     <td><strong>Тип задачи:</strong></td>
                     <td><?= Html::encode($model->taskType->name ?? $model->task_type_id) ?></td>
                 </tr>
+                <tr>
+                    <td><strong>Тип сущности:</strong></td>
+                    <td><?= Html::encode($model->taskEntity->name ?? $model->entity_type) ?></td>
+                </tr>
+                <tr>
+                    <td><strong>Сущность:</strong></td>
+                    <td>
+                        <?php
+                        // Проверяем алиас сущности
+                        $entities = TaskService::getEntitiesByAlias($model->taskEntity->alias);
+                        switch ($model->taskEntity->alias) {
+                            case 'lesson':
+                                echo Html::encode($entities[$model->entity_id] ?? '---');  // Имя урока, если сущность - "lesson"
+                                break;
+                            case 'store':
+                                echo Html::encode($entities[$model->entity_id] ?? '---');   // Имя магазина, если сущность - "store"
+                                break;
+                            case 'bpmn':
+
+                                echo Html::encode($entities[$model->entity_id] ?? '---');    // Имя BPMN-сущности, если алиас - "bpmn"
+                                break;
+                            default:
+
+                                echo Html::encode($model->entity_id ?? '---');     // Если ни один из алиасов не подошел, выводим ID сущности
+                        }
+                        ?>
+                    </td>
+                </tr>
+
                 <tr>
                     <td><strong>Статус:</strong></td>
                     <td><?= Html::encode($model->statusEntity->name ?? $model->status) ?></td>
@@ -170,6 +200,34 @@ $this->registerJsFile('/js/crud/task/update.js', ['position' => \yii\web\View::P
                     <td><strong>Дата завершения:</strong></td>
                     <td><?= DateTimeService::formatHuman($model->data_end) ?></td>
                 </tr>
+                <tr>
+                    <td><strong>Продолжительность:</strong></td>
+                    <td>
+                        <?php
+                        // Разбиваем строку "значение:единица"
+                        $paramArray = explode(":", $model->duration);
+                        $value = $paramArray[0] ?? '---';  // Значение (например, 90)
+                        $scale = isset($paramArray[1]) ? $paramArray[1] : 'm'; // Единица измерения (по умолчанию "минуты")
+
+                        // Определяем текстовое значение единицы
+                        switch ($scale) {
+                            case 'h':
+                                $unit = 'Часы';
+                                break;
+                            case 'd':
+                                $unit = 'Дни';
+                                break;
+                            case 'm':
+                            default:
+                                $unit = 'Минуты';
+                                break;
+                        }
+
+                        // Выводим значение с единицей измерения
+                        echo Html::encode($value . ' ' . $unit);
+                        ?>
+                    </td>
+                </tr>
                 <tr>
                     <td><strong>Дедлайн:</strong></td>
                     <td><?= DateTimeService::formatHuman($model->deadline) ?></td>