?>
+<?php
+// Получаем имя текущего пользователя
+$userName = Yii::$app->user->identity->name; // или другой метод получения имени пользователя
+
+// Проверяем примененные фильтры
+$appliedFilters = [];
+if ($filterModel->taskFilter !== '0') {
+ // $appliedFilters[] = 'Фильтр задач: ' . $filterModel->taskFilter;
+}
+if ($filterModel->searchText) {
+ $appliedFilters[] = 'Поиск: ' . Html::encode($filterModel->searchText);
+}
+if ($filterModel->updatedBy !== '0') {
+ $appliedFilters[] = 'Обновил: ' . $filterModel->updatedBy;
+}
+if ($filterModel->createdBy !== '0') {
+ $appliedFilters[] = 'Создал: ' . $filterModel->createdBy;
+}
+if ($filterModel->created_at_from || $filterModel->created_at_to) {
+ $appliedFilters[] = 'Дата создания: с ' . $filterModel->created_at_from . ' по ' . $filterModel->created_at_to;
+}
+if ($filterModel->deadline_from || $filterModel->deadline_to) {
+ $appliedFilters[] = 'Дедлайн: с ' . $filterModel->deadline_from . ' по ' . $filterModel->deadline_to;
+}
+if ($filterModel->company_function_id !== '0') {
+ $appliedFilters[] = 'Функция компании: ' . $companyFunctions[$filterModel->company_function_id];
+}
+?>
+<div class="container-fluid p-4">
<div class="row mb-3">
<div class="col-4">
<h2>Доска задач</h2>
+ <p>Всего задач: <span id="task-count"><?= count($tasks); ?></span></p>
+
+
</div>
<div class="col-4">
- <!-- Счетчик задач -->
- <p>Всего задач: <span id="task-count"><?= count($tasks); ?></span></p>
+ <p>Пользователь: <strong><?= Html::encode($userName); ?></strong></p>
+
+ <!-- Если фильтры применены, выводим их -->
+ <?php if (!empty($appliedFilters)): ?>
+ <p><strong>Примененные фильтры:</strong></p>
+ <ul>
+ <?php foreach ($appliedFilters as $filter): ?>
+ <li><?= Html::encode($filter); ?></li>
+ <?php endforeach; ?>
+ </ul>
+ <?php else: ?>
+ <p>Фильтры не применены</p>
+ <?php endif; ?>
</div>
<div class="col-4 text-end">
<!-- Кнопка для создания задачи -->
</div>
</div>
-<!-- Тумблер для фильтрации активных задач -->
-<div class="row mb-3">
- <div class="col-4">
- <div class="form-check form-switch">
- <input class="form-check-input" type="checkbox" id="activeTasksToggle">
- <label class="form-check-label" for="activeTasksToggle">Активные</label>
- </div>
- </div>
-</div>
-<?php $form = ActiveForm::begin(['id' => 'filter-form']); ?>
+
+<?php
+// Фильтр значений по умолчанию
+$defaultFilterValues = [
+ 'taskFilter' => '0',
+ 'searchText' => null,
+ 'updatedBy' => '0',
+ 'createdBy' => '0',
+ 'created_at_from' => date("d.m.Y", strtotime("-365 day", time())),
+ 'created_at_to' => date("d.m.Y"),
+ 'deadline_from' => date("d.m.Y", strtotime("-365 day", time())),
+ 'deadline_to' => date("d.m.Y", strtotime("+365 day", time())),
+ 'company_function_id' => '0',
+ 'entity_type' => null,
+ 'entity_id' => null
+];
+
+$form = ActiveForm::begin(['id' => 'filter-form']); ?>
<?php /*PrintBlockHelper::printBlock('Группы', $form->field($filterModel, 'taskFilter')->radioList(
['0' => 'Мои', '1' => 'На контроле', '2' => 'Участвую', '3' => 'Просматриваю', '4' => 'Неразобранные'],
<!-- Кнопка "Больше фильтров" -->
<div class="row">
- <div class="col-12 text-right">
- <button type="button" id="toggle-filters" class="btn btn-primary">Больше фильтров</button>
+ <div class="col-12 text-center">
+ <button type="button" id="toggle-filters" class="btn btn-link">Больше фильтров</button>
+ <div class="form-check form-switch d-flex justify-content-center align-items-center " style="gap:10px" >
+ <input class="form-check-input ml-2 mb-3" type="checkbox" id="activeTasksToggle">
+ <label class="form-check-label " for="activeTasksToggle">Активные</label>
+ </div>
</div>
</div>
<!-- Скрытая часть фильтров -->
<div id="more-filters" style="display: none;">
<div class="row">
- <div class="col-1 text-right">
+
+ <div class="col-3">
+ <div class="mb-3">
Содержит:
- </div>
- <div class="col-2">
<?= $form->field($filterModel, 'searchText')->textInput(['class' => 'form-control'])->label(false) ?>
+ </div>
+ <div class="mb-3">
+ Исполнитель:
+ <?= $form->field($filterModel, 'updatedBy')->widget(Select2::class, [
+ 'data' => $adminsWithGroup,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'Исполнитель...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ]
+ ])->label(false) ?>
+ </div>
+ <div class="mb-3">
+ Автор:
+ <?= $form->field($filterModel, 'createdBy')->widget(Select2::class, [
+ 'data' => $adminsWithGroup,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'Автор...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ]
+ ])->label(false) ?>
+ </div>
</div>
- <div class="col-1 text-right">
- Исполнитель:
- </div>
- <div class="col-2">
- <?= $form->field($filterModel, 'updatedBy')->widget(Select2::class, [
- 'data' => $adminsWithGroup,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'Исполнитель...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ]
- ])->label(false) ?>
- </div>
- <div class="col-1 text-right">
- Автор:
- </div>
+
<div class="col-2">
- <?= $form->field($filterModel, 'createdBy')->widget(Select2::class, [
- 'data' => $adminsWithGroup,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'Автор...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ]
- ])->label(false) ?>
- </div>
-</div>
-<div class="row">
- <div class="col-3 text-right">
- Тип сущности:
- </div>
- <div class="col-3">
- <?= $form->field($filterModel, 'entity_type')->widget(Select2::class, [
- 'data' => ArrayHelper::map($taskEntities, 'alias', 'name'), // 'alias' используется для получения сущностей
- 'language' => 'ru',
- 'options' => [
- 'placeholder' => 'Выберите тип сущности...',
- 'id' => 'entity-type-dropdown'
- ],
- 'pluginOptions' => [
- 'allowClear' => true,
+ <div class="mb-3">
+ Дата создания от:
+ <?= DatePicker::widget([
+ 'model' => $filterModel,
+ 'attribute' => 'created_at_from',
+ 'template' => '{addon}{input}',
+ 'clientOptions' => [
+ 'autoclose' => true,
+ 'format' => 'd.mm.yyyy',
+ 'todayBtn' => true
],
- 'pluginEvents' => [
- "change" => "function() {
- var alias = $(this).val();
- $.ajax({
- url: '" . \yii\helpers\Url::to(['/task/fetch-entities']) . "', // Экшн для получения сущностей
- type: 'POST',
- data: {alias: alias},
- success: function(data) {
- var entityDropdown = $('#entity-dropdown');
- entityDropdown.empty();
- $.each(data, function(id, name) {
- entityDropdown.append(new Option(name, id));
- });
- }
- });
- }",
- ]
- ])->label(false) ?>
- </div>
- <div class="col-3 text-right">
- Сущность:
- </div>
- <div class="col-3">
- <?= $form->field($filterModel, 'entity_id')->widget(Select2::class, [
- 'data' => [], // данные заполнятся после выбора типа сущности
- 'language' => 'ru',
- 'options' => [
- 'placeholder' => 'Выберите сущность...',
- 'id' => 'entity-dropdown'
- ],
- 'pluginOptions' => [
- 'allowClear' => true,
- ]
- ])->label(false) ?>
- </div>
-</div>
-<div class="row">
- <div class="col-3">
- <div class="row">
- <div class="col-5 text-right">
- Дата создания от:
- </div>
- <div class="col-7">
- <?= DatePicker::widget([
- 'model' => $filterModel,
- 'attribute' => 'created_at_from',
- 'template' => '{addon}{input}',
- 'clientOptions' => [
- 'autoclose' => true,
- 'format' => 'd.mm.yyyy',
- 'todayBtn' => true
- ],
- 'clientEvents' => [
- 'changeDate' => 'function() {
+ 'clientEvents' => [
+ 'changeDate' => 'function() {
if (moment($("#dynamicmodel-created_at_from").val(), "DD-MM-YYYY") > moment($("#dynamicmodel-created_at_to").val(), "DD-MM-YYYY")) {
const tmp = $("#dynamicmodel-created_at_from").val()
$("#dynamicmodel-created_at_from").val($("#dynamicmodel-created_at_to").val())
$("#dynamicmodel-created_at_to").val(tmp);
}
}'
- ]
- ]) ?>
- </div>
- </div>
- <div class="row">
- <div class="col-5 text-right">
- и до:
- </div>
- <div class="col-7">
- <?= DatePicker::widget([
- 'model' => $filterModel,
- 'attribute' => 'created_at_to',
- 'template' => '{addon}{input}',
- 'clientOptions' => [
- 'autoclose' => true,
- 'format' => 'd.mm.yyyy',
- 'todayBtn' => true
- ],
- 'clientEvents' => [
- 'changeDate' => 'function() {
+ ]
+ ]) ?>
+ </div>
+ <div class="mb-3">
+ и до:
+ <?= DatePicker::widget([
+ 'model' => $filterModel,
+ 'attribute' => 'created_at_to',
+ 'template' => '{addon}{input}',
+ 'clientOptions' => [
+ 'autoclose' => true,
+ 'format' => 'd.mm.yyyy',
+ 'todayBtn' => true
+ ],
+ 'clientEvents' => [
+ 'changeDate' => 'function() {
if (moment($("#dynamicmodel-created_at_from").val(), "DD-MM-YYYY") > moment($("#dynamicmodel-created_at_to").val(), "DD-MM-YYYY")) {
const tmp = $("#dynamicmodel-created_at_from").val()
$("#dynamicmodel-created_at_from").val($("#dynamicmodel-created_at_to").val())
$("#dynamicmodel-created_at_to").val(tmp);
}
}'
- ]
- ]) ?>
- </div>
- </div>
+ ]
+ ]) ?>
</div>
- <div class="col-3">
- <div class="row">
- <div class="col-5 text-right">
- Крайний срок от:
- </div>
- <div class="col-7">
- <?= DatePicker::widget([
- 'model' => $filterModel,
- 'attribute' => 'deadline_from',
- 'template' => '{addon}{input}',
- 'clientOptions' => [
- 'autoclose' => true,
- 'format' => 'd.mm.yyyy',
- 'todayBtn' => true
- ],
- 'clientEvents' => [
- 'changeDate' => 'function() {
+ </div>
+
+ <div class="col-2">
+ <div class="mb-3">
+ Крайний срок от:
+ <?= DatePicker::widget([
+ 'model' => $filterModel,
+ 'attribute' => 'deadline_from',
+ 'template' => '{addon}{input}',
+ 'clientOptions' => [
+ 'autoclose' => true,
+ 'format' => 'd.mm.yyyy',
+ 'todayBtn' => true
+ ],
+ 'clientEvents' => [
+ 'changeDate' => 'function() {
if (moment($("#dynamicmodel-deadline_from").val(), "DD-MM-YYYY") > moment($("#dynamicmodel-deadline_to").val(), "DD-MM-YYYY")) {
const tmp = $("#dynamicmodel-deadline_from").val()
$("#dynamicmodel-deadline_from").val($("#dynamicmodel-deadline_to").val())
$("#dynamicmodel-deadline_to").val(tmp);
}
}'
- ]
- ]) ?>
- </div>
+ ]
+ ]) ?>
</div>
- <div class="row">
- <div class="col-5 text-right">
- и до:
- </div>
- <div class="col-7">
- <?= DatePicker::widget([
- 'model' => $filterModel,
- 'attribute' => 'deadline_to',
- 'template' => '{addon}{input}',
- 'clientOptions' => [
- 'autoclose' => true,
- 'format' => 'd.mm.yyyy',
- 'todayBtn' => true
- ],
- 'clientEvents' => [
- 'changeDate' => 'function() {
+ <div class="mb-3">
+ и до:
+ <?= DatePicker::widget([
+ 'model' => $filterModel,
+ 'attribute' => 'deadline_to',
+ 'template' => '{addon}{input}',
+ 'clientOptions' => [
+ 'autoclose' => true,
+ 'format' => 'd.mm.yyyy',
+ 'todayBtn' => true
+ ],
+ 'clientEvents' => [
+ 'changeDate' => 'function() {
if (moment($("#dynamicmodel-deadline_from").val(), "DD-MM-YYYY") > moment($("#dynamicmodel-deadline_to").val(), "DD-MM-YYYY")) {
const tmp = $("#dynamicmodel-deadline_from").val()
$("#dynamicmodel-deadline_from").val($("#dynamicmodel-deadline_to").val())
$("#dynamicmodel-deadline_to").val(tmp);
}
}'
- ]
- ]) ?>
- </div>
+ ]
+ ]) ?>
</div>
</div>
<div class="col-3">
- <div class="row">
- <div class="col-4 text-right">
- Функция:
- </div>
- <div class="col-8">
- <?= $form->field($filterModel, 'company_function_id')->widget(Select2::class, [
- 'data' => $companyFunctions,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'из функции ОФС...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ]
- ])->label(false) ?>
- </div>
+ <div class="mb-3">
+ Тип сущности:
+ <?= $form->field($filterModel, 'entity_type')->widget(Select2::class, [
+ 'data' => ArrayHelper::map($taskEntities, 'alias', 'name'), // 'alias' используется для получения сущностей
+ 'language' => 'ru',
+ 'options' => [
+ 'placeholder' => 'Выберите тип сущности...',
+ 'id' => 'entity-type-dropdown'
+ ],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ],
+ 'pluginEvents' => [
+ "change" => "function() {
+ var alias = $(this).val();
+ $.ajax({
+ url: '" . \yii\helpers\Url::to(['/task/fetch-entities']) . "', // Экшн для получения сущностей
+ type: 'POST',
+ data: {alias: alias},
+ success: function(data) {
+ var entityDropdown = $('#entity-dropdown');
+ entityDropdown.empty();
+ $.each(data, function(id, name) {
+ entityDropdown.append(new Option(name, id));
+ });
+ }
+ });
+ }",
+ ]
+ ])->label(false) ?>
+ </div>
+ <div class="mb-3">
+ Сущность:
+ <?= $form->field($filterModel, 'entity_id')->widget(Select2::class, [
+ 'data' => [], // данные заполнятся после выбора типа сущности
+ 'language' => 'ru',
+ 'options' => [
+ 'placeholder' => 'Выберите сущность...',
+ 'id' => 'entity-dropdown'
+ ],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ]
+ ])->label(false) ?>
</div>
- <div class="row">
- <div class="col-4"></div>
- <div class="col-8">
- <?= Html::submitButton('Применить фильтры', ['class' => 'btn btn-secondary btn-lg'])?>
- </div>
+ <div class="mb-3">
+ Функция:
+ <?= $form->field($filterModel, 'company_function_id')->widget(Select2::class, [
+ 'data' => $companyFunctions,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'из функции ОФС...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ]
+ ])->label(false) ?>
</div>
</div>
+ <div class="col-2 d-flex flex-column justify-content-center align-items-center">
+ <div class="w-100 d-flex justify-content-center align-items-center mb-3">
+ <?= Html::submitButton('Применить фильтры', ['class' => 'btn btn-secondary btn-lg'])?>
+ </div>
+ <div class="w-100 d-flex justify-content-center align-items-center mb-3">
+ <?= Html::a('Сбросить фильтр', ['four-columns', 'filterModel' => $defaultFilterValues], ['class' => 'btn btn-outline-secondary btn-lg']); ?>
+ </div>
+ </div>
+
</div>
+
+
</div>
<?php ActiveForm::end() ?>
var buttonText = $('#more-filters').is(':visible') ? 'Скрыть фильтры' : 'Больше фильтров';
$(this).text(buttonText);
});
-$('input[name="taskFilter"]').on('change', function() {
+ $('input[name="taskFilter"]').on('change', function() {
var selectedValue = $(this).val(); // Получаем значение выбранной радио-кнопки
console.log('Выбрано значение: ' + selectedValue); // Выводим значение в консоль
$('#filter-form').submit(); // Отправляем форму
});
+
+/// Функция для управления видимостью задач
+ 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();
+ }
+ }
+
+ // Изначально скрываем задачи с data-status = -1 или 6, если тумблер выключен
+ toggleTasks();
+
+ // При переключении тумблера показываем/скрываем задачи
+ $('#activeTasksToggle').on('change', function() {
+ toggleTasks();
+ });
JS;
$this->registerJs($script);
?>
<div class="card mt-2">
- <div class="row g-0">
+ <div class="row g-0 d-flex justify-content-between">
<?php if (isset($taskStatuses)): //<div class="col-1 font-weight-bold"></div> ?>
<?php foreach ($taskStatuses as $ind => $taskStatusName):?>
<?php if ($ind > -2 && $ind < 7): ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
- <div class="row g-0">
+ <div class="row g-0 d-flex justify-content-between">
<?php if (isset($taskStatuses)): // <div class="col-1 font-weight-bold"></div> ?>
<?php foreach ($taskStatuses as $ind => $taskStatusName):?>
<?php if ($ind > -2 && $ind < 7): ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
+</div>
+
</div>
\ No newline at end of file