HH/templates/projects/project_detail.html
2026-03-09 16:10:24 +03:00

258 lines
13 KiB
HTML

{% extends "layouts/base.html" %}
{% load i18n %}
{% block title %}{{ project.name }} - PX360{% endblock %}
{% block extra_css %}
<style>
.status-active { background-color: #e0f2fe; color: #075985; }
.status-pending { background-color: #fef9c3; color: #854d0e; }
.status-completed { background-color: #dcfce7; color: #166534; }
.status-cancelled { background-color: #fee2e2; color: #991b1b; }
.task-status-pending { background-color: #f1f5f9; color: #475569; }
.task-status-in_progress { background-color: #e0f2fe; color: #075985; }
.task-status-completed { background-color: #dcfce7; color: #166534; }
.task-status-blocked { background-color: #fee2e2; color: #991b1b; }
</style>
{% endblock %}
{% block content %}
<!-- Back Button -->
<div class="mb-6">
<a href="{% url 'projects:project_list' %}" class="inline-flex items-center gap-2 text-slate hover:text-navy transition">
<i data-lucide="arrow-left" class="w-4 h-4"></i>
<span class="text-sm font-medium">{% trans "Back to Projects" %}</span>
</a>
</div>
<!-- Header -->
<header class="mb-6">
<div class="flex justify-between items-start">
<div>
<h1 class="text-2xl font-bold text-navy">{{ project.name }}</h1>
{% if project.description %}
<p class="text-sm text-slate mt-1 max-w-2xl">{{ project.description|linebreaksbr }}</p>
{% endif %}
</div>
<div class="flex items-center gap-3">
{% if can_edit %}
<a href="{% url 'projects:project_edit' pk=project.pk %}" class="bg-white text-blue border-2 border-blue/30 px-4 py-2 rounded-xl text-sm font-bold hover:bg-blue hover:text-white flex items-center gap-2 transition">
<i data-lucide="pencil" class="w-4 h-4"></i> {% trans "Edit" %}
</a>
{% endif %}
{% if user.is_px_admin or user.is_hospital_admin %}
<a href="{% url 'projects:project_save_as_template' pk=project.pk %}" class="bg-white text-purple-600 border-2 border-purple-200 px-4 py-2 rounded-xl text-sm font-bold hover:bg-purple-600 hover:text-white flex items-center gap-2 transition">
<i data-lucide="copy" class="w-4 h-4"></i> {% trans "Save as Template" %}
</a>
<a href="{% url 'projects:project_delete' pk=project.pk %}" class="bg-white text-red-600 border-2 border-red-200 px-4 py-2 rounded-xl text-sm font-bold hover:bg-red-600 hover:text-white flex items-center gap-2 transition">
<i data-lucide="trash-2" class="w-4 h-4"></i> {% trans "Delete" %}
</a>
{% endif %}
</div>
</div>
</header>
<div class="grid grid-cols-3 gap-6">
<!-- Main Content -->
<div class="col-span-2">
<!-- Tasks Section -->
<div class="bg-white rounded-2xl border shadow-sm overflow-hidden mb-6">
<div class="px-6 py-4 border-b flex justify-between items-center">
<h2 class="text-sm font-bold text-navy flex items-center gap-2">
<i data-lucide="check-square" class="w-4 h-4"></i>
{% trans "Tasks" %}
</h2>
{% if can_edit %}
<a href="{% url 'projects:task_create' project_pk=project.pk %}" class="bg-navy text-white px-3 py-1.5 rounded-lg text-xs font-bold flex items-center gap-1 hover:bg-blue transition">
<i data-lucide="plus" class="w-3 h-3"></i> {% trans "Add Task" %}
</a>
{% endif %}
</div>
{% if tasks %}
<div class="divide-y divide-slate-100">
{% for task in tasks %}
<div class="px-6 py-4 hover:bg-slate-50 transition-colors">
<div class="flex justify-between items-start">
<div class="flex-grow">
<div class="flex items-center gap-3 mb-1">
<form method="post" action="{% url 'projects:task_toggle_status' project_pk=project.pk task_pk=task.pk %}" class="inline">
{% csrf_token %}
<button type="submit" class="p-0 bg-transparent border-none cursor-pointer">
{% if task.status == 'completed' %}
<i data-lucide="check-square" class="w-5 h-5 text-green-600"></i>
{% else %}
<i data-lucide="square" class="w-5 h-5 text-slate-300"></i>
{% endif %}
</button>
</form>
<h3 class="font-semibold text-navy {% if task.status == 'completed' %}line-through text-slate{% endif %}">
{{ task.title }}
</h3>
</div>
{% if task.description %}
<p class="text-xs text-slate ml-8 mb-2">{{ task.description }}</p>
{% endif %}
<div class="flex items-center gap-4 ml-8 text-xs text-slate">
{% if task.assigned_to %}
<span class="flex items-center gap-1">
<i data-lucide="user" class="w-3 h-3"></i>
{{ task.assigned_to.get_full_name }}
</span>
{% endif %}
{% if task.due_date %}
<span class="flex items-center gap-1">
<i data-lucide="calendar" class="w-3 h-3"></i>
{% if task.due_date < today and task.status != 'completed' %}
<span class="text-red-600 font-semibold">{{ task.due_date|date:"M d, Y" }}</span>
{% else %}
{{ task.due_date|date:"M d, Y" }}
{% endif %}
</span>
{% endif %}
<span class="task-status-{{ task.status }} px-2 py-0.5 rounded-full text-[10px] font-bold uppercase">
{{ task.get_status_display }}
</span>
</div>
</div>
{% if can_edit %}
<div class="flex items-center gap-1 ml-4">
<a href="{% url 'projects:task_edit' project_pk=project.pk task_pk=task.pk %}"
class="p-2 text-blue hover:bg-blue/10 rounded-lg transition" title="{% trans 'Edit' %}">
<i data-lucide="pencil" class="w-4 h-4"></i>
</a>
<a href="{% url 'projects:task_delete' project_pk=project.pk task_pk=task.pk %}"
class="p-2 text-red-600 hover:bg-red-50 rounded-lg transition" title="{% trans 'Delete' %}">
<i data-lucide="trash-2" class="w-4 h-4"></i>
</a>
</div>
{% endif %}
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="px-6 py-12 text-center">
<i data-lucide="check-square" class="w-12 h-12 mx-auto text-slate-300 mb-3"></i>
<p class="text-slate mb-3">{% trans "No tasks yet" %}</p>
{% if can_edit %}
<a href="{% url 'projects:task_create' project_pk=project.pk %}" class="bg-navy text-white px-4 py-2 rounded-xl text-sm font-bold inline-flex items-center gap-2 hover:bg-blue transition">
<i data-lucide="plus" class="w-4 h-4"></i> {% trans "Add First Task" %}
</a>
{% endif %}
</div>
{% endif %}
</div>
<!-- Outcome Section -->
{% if project.outcome_description %}
<div class="bg-white rounded-2xl border shadow-sm overflow-hidden">
<div class="px-6 py-4 border-b">
<h2 class="text-sm font-bold text-navy flex items-center gap-2">
<i data-lucide="trophy" class="w-4 h-4"></i>
{% trans "Outcomes" %}
</h2>
</div>
<div class="px-6 py-4">
<p class="text-sm text-slate">{{ project.outcome_description|linebreaksbr }}</p>
</div>
</div>
{% endif %}
</div>
<!-- Sidebar -->
<div class="col-span-1">
<!-- Project Info -->
<div class="bg-white rounded-2xl border shadow-sm overflow-hidden mb-6">
<div class="px-6 py-4 border-b">
<h2 class="text-sm font-bold text-navy flex items-center gap-2">
<i data-lucide="info" class="w-4 h-4"></i>
{% trans "Project Info" %}
</h2>
</div>
<div class="px-6 py-4 space-y-4">
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Status" %}</p>
<span class="status-{{ project.status }} px-2.5 py-1 rounded-full text-[10px] font-bold uppercase">
{{ project.get_status_display }}
</span>
</div>
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Hospital" %}</p>
<p class="text-sm text-navy font-medium">{{ project.hospital.name }}</p>
</div>
{% if project.department %}
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Department" %}</p>
<p class="text-sm text-navy font-medium">{{ project.department.name }}</p>
</div>
{% endif %}
{% if project.project_lead %}
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Project Lead" %}</p>
<p class="text-sm text-navy font-medium">{{ project.project_lead.get_full_name }}</p>
</div>
{% endif %}
{% if project.start_date %}
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Start Date" %}</p>
<p class="text-sm text-navy font-medium">{{ project.start_date|date:"M d, Y" }}</p>
</div>
{% endif %}
{% if project.target_completion_date %}
<div>
<p class="text-[10px] font-bold text-slate uppercase tracking-wider mb-1">{% trans "Target Date" %}</p>
<p class="text-sm text-navy font-medium">{{ project.target_completion_date|date:"M d, Y" }}</p>
</div>
{% endif %}
</div>
</div>
<!-- Team Members -->
{% if project.team_members.count > 0 %}
<div class="bg-white rounded-2xl border shadow-sm overflow-hidden mb-6">
<div class="px-6 py-4 border-b">
<h2 class="text-sm font-bold text-navy flex items-center gap-2">
<i data-lucide="users" class="w-4 h-4"></i>
{% trans "Team Members" %}
</h2>
</div>
<div class="px-6 py-4">
<ul class="space-y-2">
{% for member in project.team_members.all %}
<li class="flex items-center gap-2 text-sm text-slate">
<i data-lucide="user" class="w-3 h-3"></i>
{{ member.get_full_name }}
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
<!-- Related Actions -->
{% if related_actions.count > 0 %}
<div class="bg-white rounded-2xl border shadow-sm overflow-hidden">
<div class="px-6 py-4 border-b">
<h2 class="text-sm font-bold text-navy flex items-center gap-2">
<i data-lucide="zap" class="w-4 h-4"></i>
{% trans "Related Actions" %}
</h2>
</div>
<div class="px-6 py-4">
<ul class="space-y-2">
{% for action in related_actions %}
<li>
<a href="{% url 'actions:action_detail' pk=action.pk %}" class="flex items-center gap-2 text-sm text-slate hover:text-navy transition">
<i data-lucide="zap" class="w-3 h-3 text-yellow-500"></i>
{{ action.title|truncatechars:30 }}
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}