namespace yii_app\controllers\crud;
+use DateTime;
+use DateTimeZone;
+use Exception;
use Yii;
use yii\web\UploadedFile;
use yii_app\records\Comment;
$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;
}
}
- // Обновляем и сохраняем остальные данные
- $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');
$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'));
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());
+ }
+ }
+
+
}
)->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>
])->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>
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 */
<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>
<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>