Files
zbiorki_app/templates/index.html
Mateusz Gruszczyński fe48f589f0 statystyki i optymalizacje
2025-12-12 09:23:34 +01:00

144 lines
6.9 KiB
HTML

{% extends 'base.html' %}
{% block title %}{% if request.path == url_for('zbiorki_zrealizowane') %}Zrealizowane zbiórki{% else %}Aktualnie aktywne zbiórki{% endif %}{% endblock %}
{% block content %}
{# Ustal kontekst listy #}
{% set is_completed_view = (request.path == url_for('zbiorki_zrealizowane')) %}
<div class="container my-4">
<!-- Nagłówek z przełącznikiem -->
<div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-3">
<div>
<h2 class="mb-0">
{% if is_completed_view %}Zrealizowane zbiórki{% else %}Aktywne zbiórki{% endif %}
</h2>
<p class="text-muted mb-0 small">
{% if is_completed_view %}
Ukończone projekty i osiągnięte cele
{% else %}
Trwające zbiórki, które możesz wesprzeć
{% endif %}
</p>
</div>
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link {% if not is_completed_view %}active{% endif %}"
href="{{ url_for('index') }}">
Aktywne
{% if not is_completed_view and zbiorki %}
<span class="badge bg-light text-dark ms-1">{{ zbiorki|length }}</span>
{% endif %}
</a>
</li>
<li class="nav-item">
<a class="nav-link {% if is_completed_view %}active{% endif %}"
href="{{ url_for('zbiorki_zrealizowane') }}">
Zrealizowane
{% if is_completed_view and zbiorki %}
<span class="badge bg-light text-dark ms-1">{{ zbiorki|length }}</span>
{% endif %}
</a>
</li>
</ul>
</div>
{% if zbiorki and zbiorki|length > 0 %}
<div class="row g-3 pb-4">
{% for z in zbiorki %}
{% set progress = (z.stan / z.cel * 100) if z.cel > 0 else 0 %}
{% set progress_clamped = 100 if progress > 100 else (0 if progress < 0 else progress) %}
<div class="col-sm-12 col-md-6 col-lg-4">
<div class="card h-100 position-relative">
<div class="card-body d-flex flex-column">
<div class="d-flex align-items-start justify-content-between gap-2 mb-2">
<h5 class="card-title mb-0">{{ z.nazwa }}</h5>
{% if z.typ_zbiorki == 'rezerwa' %}
<span class="badge bg-info">Rezerwa</span>
{% elif is_completed_view or progress_clamped >= 100 %}
<span class="badge rounded-pill" style="background: var(--accent); color:#111;">Zrealizowana</span>
{% endif %}
</div>
<hr class="hr-bw my-2">
<div class="mb-2 d-flex flex-wrap gap-2 justify-content-center">
{% if not z.ukryj_kwote %}
{% if z.cel > 0 and z.typ_zbiorki != 'rezerwa' %}
<span class="badge bg-dark border" style="border-color: var(--border);">
Cel: {{ z.cel|round(2) }} PLN
</span>
{% endif %}
<span class="badge bg-dark border border-success {% if z.typ_zbiorki == 'rezerwa' %}w-100{% endif %}" style="border-color: var(--border);">
Stan: {{ z.stan|round(2) }} PLN
</span>
{% if z.cel > 0 and z.typ_zbiorki != 'rezerwa' %}
{% set delta = z.cel - z.stan %}
{% if delta > 0 %}
<span class="badge bg-dark border border-warning">
Brakuje: {{ delta|round(2) }} PLN
</span>
{% elif delta < 0 %}
<span class="badge bg-dark border" style="border-color: var(--border);">
Nadwyżka: {{ (-delta)|round(2) }} PLN
</span>
{% endif %}
{% endif %}
{% else %}
<span class="badge bg-secondary">Kwoty niepubliczne</span>
{% endif %}
</div>
{# Progress bar TYLKO dla standardowych zbiórek (nie dla rezerwowych) #}
{% if z.typ_zbiorki != 'rezerwa' %}
<div class="mb-2">
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="{{ progress_clamped|round(2) if not z.ukryj_kwote else '' }}"
aria-label="{% if z.ukryj_kwote %}Postęp ukryty{% else %}Postęp zbiórki {{ progress_clamped|round(0) }} procent{% endif %}">
<div class="progress-bar" style="width: {{ progress_clamped }}%;"></div>
</div>
{% if not z.ukryj_kwote %}
<small class="text-muted d-block text-center">{{ progress_clamped|round(1) }}%</small>
{% else %}
<small class="text-muted d-block text-center">Postęp ukryty</small>
{% endif %}
</div>
{% endif %}
<div class="mt-auto pt-1">
<div class="d-grid">
<a href="{{ url_for('zbiorka', zbiorka_id=z.id) }}"
class="btn btn-outline-light btn-sm w-100 btn-opis">
Otwórz
</a>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<!-- Empty state -->
<div class="card">
<div class="card-body text-center py-5">
{% if is_completed_view %}
<h5 class="mb-2">Brak zrealizowanych zbiórek</h5>
<p class="text-muted mb-4">Gdy jakaś zbiórka osiągnie 100%, pojawi się tutaj.</p>
<a href="{{ url_for('index') }}" class="btn btn-primary">Zobacz aktywne</a>
{% else %}
<h5 class="mb-2">Brak aktywnych zbiórek</h5>
<p class="text-muted mb-4">Wygląda na to, że teraz nic nie zbieramy.</p>
{% if current_user.is_authenticated and current_user.czy_admin %}
<a href="{{ url_for('admin_dashboard') }}" class="btn btn-primary">Utwórz nową zbiórkę</a>
{% else %}
<a href="{{ url_for('zbiorki_zrealizowane') }}" class="btn btn-outline-light">Zobacz zrealizowane</a>
{% endif %}
{% endif %}
</div>
</div>
{% endif %}
</div>
{% endblock %}