181 lines
8.8 KiB
Twig
181 lines
8.8 KiB
Twig
{% extends 'layouts/base.twig' %}
|
|
|
|
{% block title %}{{ title }} — Бизнес.Точка{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
<h1 class="h3 mb-0">{{ title }}</h1>
|
|
<div class="btn-group">
|
|
<a href="{{ base_url('/tasks') }}" class="btn btn-outline-secondary">
|
|
<i class="fa-solid fa-list me-2"></i>Список
|
|
</a>
|
|
<a href="{{ base_url('/tasks/kanban') }}" class="btn btn-outline-primary">
|
|
<i class="fa-solid fa-table-columns me-2"></i>Канбан
|
|
</a>
|
|
<a href="{{ base_url('/tasks/calendar') }}" class="btn btn-outline-primary">
|
|
<i class="fa-solid fa-calendar me-2"></i>Календарь
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-8">
|
|
<div class="card border-0 shadow-sm mb-4">
|
|
<div class="card-header bg-light d-flex justify-content-between align-items-center">
|
|
<h5 class="mb-0">
|
|
{% if task.priority == 'urgent' %}
|
|
<span class="badge bg-danger me-2">Срочно</span>
|
|
{% elseif task.priority == 'high' %}
|
|
<span class="badge bg-warning text-dark me-2">Высокий</span>
|
|
{% elseif task.priority == 'low' %}
|
|
<span class="badge bg-secondary me-2">Низкий</span>
|
|
{% endif %}
|
|
{{ task.title }}
|
|
</h5>
|
|
<div>
|
|
{% if not task.completed_at %}
|
|
<form action="{{ base_url('/tasks/' ~ task.id ~ '/complete') }}" method="post" class="d-inline">
|
|
{{ csrf_field()|raw }}
|
|
<button type="submit" class="btn btn-success btn-sm">
|
|
<i class="fa-solid fa-check me-1"></i>Завершить
|
|
</button>
|
|
</form>
|
|
{% else %}
|
|
<form action="{{ base_url('/tasks/' ~ task.id ~ '/reopen') }}" method="post" class="d-inline">
|
|
{{ csrf_field()|raw }}
|
|
<button type="submit" class="btn btn-outline-secondary btn-sm">
|
|
<i class="fa-solid fa-rotate-left me-1"></i>Вернуть в работу
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
<a href="{{ base_url('/tasks/' ~ task.id ~ '/edit') }}" class="btn btn-outline-primary btn-sm">
|
|
<i class="fa-solid fa-pen me-1"></i>Редактировать
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row mb-3">
|
|
<div class="col-md-6">
|
|
<p class="mb-1"><strong>Статус:</strong></p>
|
|
<span class="badge" style="background-color: {{ task.column_color|default('#6B7280') }}">
|
|
{{ task.column_name|default('—') }}
|
|
</span>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<p class="mb-1"><strong>Приоритет:</strong></p>
|
|
<span class="badge {% if task.priority == 'urgent' %}bg-danger{% elseif task.priority == 'high' %}bg-warning text-dark{% elseif task.priority == 'low' %}bg-secondary{% else %}bg-info{% endif %}">
|
|
{{ task.priorityLabels[task.priority]|default(task.priority) }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
{% if task.description %}
|
|
<div class="mb-3">
|
|
<p class="mb-1"><strong>Описание:</strong></p>
|
|
<p class="text-muted">{{ task.description|nl2br }}</p>
|
|
</div>
|
|
{% endif %}
|
|
|
|
{% if task.assignees %}
|
|
<div class="mb-3">
|
|
<p class="mb-1"><strong>Исполнители:</strong></p>
|
|
<div class="d-flex flex-wrap gap-2">
|
|
{% for assignee in task.assignees %}
|
|
<span class="badge bg-light text-dark border">
|
|
<i class="fa-solid fa-user me-1"></i>
|
|
{{ assignee.user_name|default(assignee.user_email) }}
|
|
{% if assignee.role == 'watcher' %}
|
|
(наблюдатель)
|
|
{% endif %}
|
|
</span>
|
|
{% endfor %}
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
{# Комментарии #}
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-header bg-light">
|
|
<h5 class="mb-0">Комментарии</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="text-muted text-center">Комментарии будут доступны в следующей версии</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-4">
|
|
<div class="card border-0 shadow-sm mb-3">
|
|
<div class="card-header bg-light">
|
|
<h6 class="mb-0">Детали</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="mb-2">
|
|
<i class="fa-regular fa-calendar me-2 text-muted"></i>
|
|
<strong>Срок:</strong>
|
|
{% if task.due_date %}
|
|
{{ task.due_date|date('d.m.Y') }}
|
|
{% if task.due_date < date('now') and not task.completed_at %}
|
|
<span class="text-danger">(просрочено)</span>
|
|
{% endif %}
|
|
{% else %}
|
|
не указан
|
|
{% endif %}
|
|
</p>
|
|
<p class="mb-2">
|
|
<i class="fa-regular fa-user me-2 text-muted"></i>
|
|
<strong>Автор:</strong> {{ task.created_by_name|default('—') }}
|
|
</p>
|
|
<p class="mb-2">
|
|
<i class="fa-regular fa-clock me-2 text-muted"></i>
|
|
<strong>Создано:</strong> {{ task.created_at|date('d.m.Y H:i') }}
|
|
</p>
|
|
{% if task.completed_at %}
|
|
<p class="mb-0 text-success">
|
|
<i class="fa-solid fa-check me-2"></i>
|
|
<strong>Завершено:</strong> {{ task.completed_at|date('d.m.Y H:i') }}
|
|
</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card border-0 shadow-sm">
|
|
<div class="card-header bg-light">
|
|
<h6 class="mb-0">Действия</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="d-grid gap-2">
|
|
{% if not task.completed_at %}
|
|
<form action="{{ base_url('/tasks/' ~ task.id ~ '/complete') }}" method="post">
|
|
{{ csrf_field()|raw }}
|
|
<button type="submit" class="btn btn-success w-100">
|
|
<i class="fa-solid fa-check me-2"></i>Отметить как выполненное
|
|
</button>
|
|
</form>
|
|
{% else %}
|
|
<form action="{{ base_url('/tasks/' ~ task.id ~ '/reopen') }}" method="post">
|
|
{{ csrf_field()|raw }}
|
|
<button type="submit" class="btn btn-outline-secondary w-100">
|
|
<i class="fa-solid fa-rotate-left me-2"></i>Вернуть в работу
|
|
</button>
|
|
</form>
|
|
{% endif %}
|
|
<a href="{{ base_url('/tasks/' ~ task.id ~ '/edit') }}" class="btn btn-outline-primary">
|
|
<i class="fa-solid fa-pen me-2"></i>Редактировать
|
|
</a>
|
|
<form action="{{ base_url('/tasks/' ~ task.id ~ '/delete') }}" method="post"
|
|
onsubmit="return confirm('Вы уверены, что хотите удалить задачу?')">
|
|
{{ csrf_field()|raw }}
|
|
<button type="submit" class="btn btn-outline-danger w-100">
|
|
<i class="fa-solid fa-trash me-2"></i>Удалить задачу
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|