funkcje rezerw i przesuniec
This commit is contained in:
@@ -11,6 +11,9 @@
|
||||
<a href="{{ url_for('formularz_zbiorek') }}" class="btn btn-primary">
|
||||
➕ Dodaj zbiórkę
|
||||
</a>
|
||||
<a href="{{ url_for('lista_rezerwowych') }}" class="btn btn-outline-light">
|
||||
Listy rezerwowe
|
||||
</a>
|
||||
<a href="{{ url_for('admin_ustawienia') }}" class="btn btn-outline-light">
|
||||
Ustawienia główne
|
||||
</a>
|
||||
|
||||
85
templates/admin/dodaj_przesuniecie.html
Normal file
85
templates/admin/dodaj_przesuniecie.html
Normal file
@@ -0,0 +1,85 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Przesuń środki - {{ zbiorka.nazwa }}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="container my-5">
|
||||
<!-- Nagłówek -->
|
||||
<div class="mb-4">
|
||||
<h1 class="mb-2">
|
||||
<i class="bi bi-arrow-left-right text-primary"></i> Przesuń środki z: {{ zbiorka.nazwa }}
|
||||
</h1>
|
||||
<p class="text-muted">Dostępne środki: <strong class="text-success">{{ zbiorka.stan|round(2) }} PLN</strong></p>
|
||||
</div>
|
||||
|
||||
<!-- Formularz -->
|
||||
<form method="POST">
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header bg-transparent">
|
||||
<h5 class="mb-0">
|
||||
<i class="bi bi-box-arrow-in-down text-success"></i> Cel przesunięcia
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<label for="zbiorka_cel_id" class="form-label fw-semibold">
|
||||
Docelowa zbiórka <span class="text-danger">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="zbiorka_cel_id" name="zbiorka_cel_id" required>
|
||||
<option value="">-- Wybierz zbiórkę docelową --</option>
|
||||
{% for zb in dostepne_zbiorki %}
|
||||
<option value="{{ zb.id }}">
|
||||
{% if zb.typ_zbiorki == 'rezerwa' %}
|
||||
{{ zb.nazwa }} (Rezerwa)
|
||||
{% else %}
|
||||
{{ zb.nazwa }}
|
||||
{% endif %}
|
||||
· Stan: {{ zb.stan|round(2) }} PLN
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="kwota" class="form-label fw-semibold">
|
||||
Kwota (PLN) <span class="text-danger">*</span>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="kwota" name="kwota"
|
||||
placeholder="np. 100.00" required>
|
||||
<span class="input-group-text">PLN</span>
|
||||
</div>
|
||||
<small class="text-muted">
|
||||
<i class="bi bi-info-circle"></i> Można użyć przecinka lub kropki
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="mb-0">
|
||||
<label for="opis" class="form-label fw-semibold">
|
||||
Opis <span class="text-muted">(opcjonalny)</span>
|
||||
</label>
|
||||
<textarea class="form-control" id="opis" name="opis" rows="3"
|
||||
placeholder="Dodatkowe informacje o przesunięciu"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Alert informacyjny -->
|
||||
<div class="alert alert-info d-flex align-items-start mb-3">
|
||||
<i class="bi bi-lightbulb fs-5 me-2"></i>
|
||||
<div class="small">
|
||||
<strong>Jak to działa:</strong> Kwota zostanie odjęta ze źródłowej zbiórki i dodana do docelowej.
|
||||
W obu zbiórkach pojawi się wpis o przesunięciu w historii transakcji.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-arrow-left-right"></i> Przesuń środki
|
||||
</button>
|
||||
<a href="{{ url_for('transakcje_zbiorki', zbiorka_id=zbiorka.id) }}"
|
||||
class="btn btn-secondary">Anuluj</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
170
templates/admin/formularz_rezerwy.html
Normal file
170
templates/admin/formularz_rezerwy.html
Normal file
@@ -0,0 +1,170 @@
|
||||
{# templates/admin/formularz_rezerwy.html #}
|
||||
{% extends 'base.html' %}
|
||||
|
||||
{% set has_obj = zbiorka is not none %}
|
||||
{% set is_edit = has_obj and zbiorka.id is not none %}
|
||||
|
||||
{% block title %}{{ 'Edytuj listę rezerwową' if is_edit else 'Dodaj listę rezerwową' }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container my-4">
|
||||
|
||||
<!-- Nawigacja / powrót -->
|
||||
<div class="d-flex align-items-center gap-2 mb-3">
|
||||
{% if is_edit and zbiorka and zbiorka.id %}
|
||||
<a href="{{ url_for('zbiorka', zbiorka_id=zbiorka.id) }}" class="btn btn-sm btn-outline-light">← Szczegóły
|
||||
listy</a>
|
||||
{% else %}
|
||||
<a href="{{ url_for('lista_rezerwowych') }}" class="btn btn-sm btn-outline-light">← Listy rezerwowe</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div
|
||||
class="card-header bg-secondary text-white d-flex flex-wrap align-items-center justify-content-between gap-2">
|
||||
<h3 class="card-title mb-0">
|
||||
{{ 'Edytuj listę rezerwową' if is_edit else 'Dodaj nową listę rezerwową' }}
|
||||
</h3>
|
||||
|
||||
{% if is_edit %}
|
||||
<div class="d-flex flex-wrap align-items-center gap-2">
|
||||
<span class="badge bg-dark border" style="border-color: var(--border);">
|
||||
Stan: {{ (zbiorka.stan or 0)|round(2) }} PLN
|
||||
</span>
|
||||
<span class="badge bg-info">Lista rezerwowa</span>
|
||||
</div>
|
||||
{% else %}
|
||||
<small class="opacity-75">Utwórz dedykowaną listę do zarządzania środkami</small>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form method="post" novalidate id="{{ 'form-edit-rezerwa' if is_edit else 'form-add-rezerwa' }}">
|
||||
|
||||
<!-- ======================================== -->
|
||||
<!-- PODSTAWOWE DANE -->
|
||||
<!-- ======================================== -->
|
||||
<h5 class="mb-3">Podstawowe dane</h5>
|
||||
|
||||
<div class="row g-3 mb-4">
|
||||
<div class="col-md-6">
|
||||
<label for="nazwa" class="form-label">Nazwa listy <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control" id="nazwa" name="nazwa" required
|
||||
value="{{ zbiorka.nazwa if is_edit else '' }}"
|
||||
placeholder="np. Nadpłaty, Środki rezerwowe">
|
||||
<small class="form-text text-muted">Unikalny identyfikator tej listy rezerwowej</small>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="opis" class="form-label">Opis (opcjonalny)</label>
|
||||
<textarea class="form-control" id="opis" name="opis" rows="3"
|
||||
placeholder="Krótki opis przeznaczenia tej listy">{{ zbiorka.opis if is_edit else '' }}</textarea>
|
||||
<small class="form-text text-muted">Krótki opis, który pomoże w identyfikacji</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
<!-- ======================================== -->
|
||||
<!-- KANAŁY PŁATNOŚCI -->
|
||||
<!-- ======================================== -->
|
||||
<h5 class="mb-3">Kanały płatności</h5>
|
||||
<p class="text-muted small mb-3">
|
||||
Określ, czy ta lista ma akceptować bezpośrednie wpłaty od użytkowników.
|
||||
</p>
|
||||
|
||||
<div class="row g-3 mb-4">
|
||||
<!-- Przelew -->
|
||||
<div class="col-md-6">
|
||||
<div class="border rounded p-3 h-100">
|
||||
<div class="form-check mb-2">
|
||||
<input class="form-check-input" type="checkbox" id="uzyj_konta" name="uzyj_konta"
|
||||
{% if is_edit and zbiorka.uzyj_konta %}checked{% endif %}>
|
||||
<label class="form-check-label fw-bold" for="uzyj_konta">
|
||||
Włącz wpłaty przelewem
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="konto-field" style="display: {% if is_edit and zbiorka.uzyj_konta %}block{% else %}none{% endif %};">
|
||||
<label for="numer_konta" class="form-label small">Numer konta</label>
|
||||
<input type="text" class="form-control form-control-sm" id="numer_konta"
|
||||
name="numer_konta"
|
||||
value="{{ zbiorka.numer_konta if is_edit else (global_settings.numer_konta if global_settings else '') }}"
|
||||
placeholder="26 cyfr numeru konta">
|
||||
<small class="form-text text-muted">
|
||||
{% if global_settings and global_settings.numer_konta %}
|
||||
Domyślnie: {{ global_settings.numer_konta }}
|
||||
{% else %}
|
||||
Zostaw puste dla globalnego numeru
|
||||
{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- BLIK -->
|
||||
<div class="col-md-6">
|
||||
<div class="border rounded p-3 h-100">
|
||||
<div class="form-check mb-2">
|
||||
<input class="form-check-input" type="checkbox" id="uzyj_blik" name="uzyj_blik"
|
||||
{% if is_edit and zbiorka.uzyj_blik %}checked{% endif %}>
|
||||
<label class="form-check-label fw-bold" for="uzyj_blik">
|
||||
Włącz wpłaty przez BLIK
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div id="blik-field" style="display: {% if is_edit and zbiorka.uzyj_blik %}block{% else %}none{% endif %};">
|
||||
<label for="numer_telefonu_blik" class="form-label small">Numer telefonu BLIK</label>
|
||||
<input type="text" class="form-control form-control-sm" id="numer_telefonu_blik"
|
||||
name="numer_telefonu_blik"
|
||||
value="{{ zbiorka.numer_telefonu_blik if is_edit else (global_settings.numer_telefonu_blik if global_settings else '') }}"
|
||||
placeholder="9 cyfr numeru telefonu">
|
||||
<small class="form-text text-muted">
|
||||
{% if global_settings and global_settings.numer_telefonu_blik %}
|
||||
Domyślnie: {{ global_settings.numer_telefonu_blik }}
|
||||
{% else %}
|
||||
Zostaw puste dla globalnego numeru
|
||||
{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if not is_edit %}
|
||||
<!-- Alert informacyjny tylko przy tworzeniu -->
|
||||
<div class="alert alert-info mb-4">
|
||||
<strong>Wskazówka:</strong> Lista rezerwowa to pomocnicze miejsce do gromadzenia środków,
|
||||
które mogą być później przesuwane do konkretnych zbiórek. Jest ukryta dla użytkowników
|
||||
nieadministracyjnych i nie pojawia się na stronie głównej.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<hr class="my-4">
|
||||
|
||||
<!-- Przyciski akcji -->
|
||||
<div class="d-flex flex-wrap gap-2 justify-content-between align-items-center">
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{{ 'Zapisz zmiany' if is_edit else 'Utwórz listę rezerwową' }}
|
||||
</button>
|
||||
<a href="{{ url_for('lista_rezerwowych') }}" class="btn btn-outline-light">Anuluj</a>
|
||||
</div>
|
||||
|
||||
{% if is_edit %}
|
||||
<div>
|
||||
<a href="{{ url_for('transakcje_zbiorki', zbiorka_id=zbiorka.id) }}"
|
||||
class="btn btn-outline-light btn-sm">Zobacz transakcje</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% block extra_scripts %}
|
||||
{{ super() }}
|
||||
<script src="{{ url_for('static', filename='js/formularz_rezerwy.js') }}?v={{ APP_VERSION }}"></script>
|
||||
{% endblock %}
|
||||
146
templates/admin/lista_rezerwowych.html
Normal file
146
templates/admin/lista_rezerwowych.html
Normal file
@@ -0,0 +1,146 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Listy rezerwowe{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="container my-4">
|
||||
<div class="d-flex flex-wrap align-items-center justify-content-between gap-2 mb-4">
|
||||
<h2 class="mb-0">Listy rezerwowe</h2>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
<a href="{{ url_for('dodaj_rezerwe') }}" class="btn btn-primary">
|
||||
➕ Dodaj listę rezerwową
|
||||
</a>
|
||||
<a href="{{ url_for('admin_dashboard') }}" class="btn btn-outline-light">
|
||||
Panel Admina
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if rezerwy %}
|
||||
<div class="table-responsive mb-5">
|
||||
<table class="table table-dark table-striped table-hover align-middle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width:72px;">ID</th>
|
||||
<th>Nazwa</th>
|
||||
<th style="width:140px;">Widoczność</th>
|
||||
<th style="width:1%;">Opcje</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for r in rezerwy %}
|
||||
<tr>
|
||||
<td class="text-muted">{{ r.id }}</td>
|
||||
<td>
|
||||
<div class="d-flex flex-column">
|
||||
<span class="fw-semibold">
|
||||
<i class="bi bi-wallet2"></i> {{ r.nazwa }}
|
||||
</span>
|
||||
<small class="text-muted">
|
||||
Stan: {{ r.stan|round(2) }} PLN
|
||||
{% if r.opis %}
|
||||
· {{ r.opis[:50] }}{% if r.opis|length > 50 %}...{% endif %}
|
||||
{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
{% if r.ukryta %}
|
||||
<span class="badge bg-secondary border" style="border-color: var(--border);">Ukryta</span>
|
||||
{% else %}
|
||||
<span class="badge bg-success">Widoczna</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<!-- Grupa akcji: główne + rozwijane -->
|
||||
<div class="btn-group">
|
||||
<a href="{{ url_for('edytuj_rezerwe', rezerwa_id=r.id) }}"
|
||||
class="btn btn-sm btn-outline-light">Edytuj</a>
|
||||
<button class="btn btn-sm btn-outline-light dropdown-toggle dropdown-toggle-split"
|
||||
data-bs-toggle="dropdown" aria-expanded="false" aria-label="Więcej opcji">
|
||||
<span class="visually-hidden">Więcej</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end shadow">
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('zbiorka', zbiorka_id=r.id) }}">
|
||||
<i class="bi bi-eye"></i> Otwórz
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('dodaj_wplate', zbiorka_id=r.id, next=url_for('zbiorka', zbiorka_id=r.id)) }}">
|
||||
<i class="bi bi-plus-circle"></i> Dodaj wpłatę
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('dodaj_wydatek', zbiorka_id=r.id, next=url_for('zbiorka', zbiorka_id=r.id)) }}">
|
||||
<i class="bi bi-dash-circle"></i> Dodaj wydatek
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('dodaj_przesuniecie', zbiorka_id=r.id, next=url_for('zbiorka', zbiorka_id=r.id)) }}">
|
||||
<i class="bi bi-arrow-left-right"></i> Przesuń środki
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('transakcje_zbiorki', zbiorka_id=r.id) }}">
|
||||
<i class="bi bi-list-ul"></i> Transakcje
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item"
|
||||
href="{{ url_for('edytuj_stan', zbiorka_id=r.id) }}">
|
||||
<i class="bi bi-pencil-square"></i> Edytuj stan
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<form action="{{ url_for('zmien_widzialnosc', zbiorka_id=r.id) }}"
|
||||
method="post" class="m-0">
|
||||
<button type="submit" class="dropdown-item">
|
||||
<i class="bi bi-eye{% if r.ukryta %}-slash{% endif %}"></i>
|
||||
{% if r.ukryta %}Pokaż{% else %}Ukryj{% endif %}
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
<li>
|
||||
<hr class="dropdown-divider">
|
||||
</li>
|
||||
<li>
|
||||
<form action="{{ url_for('usun_rezerwe', rezerwa_id=r.id) }}" method="post"
|
||||
class="m-0"
|
||||
onsubmit="return confirm('Czy na pewno usunąć listę \'{{ r.nazwa }}\'?\n\nUWAGA: Zostaną usunięte wszystkie transakcje powiązane z tą listą!');">
|
||||
<button type="submit" class="dropdown-item text-danger">
|
||||
<i class="bi bi-trash"></i> Usuń
|
||||
</button>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<!-- Empty state -->
|
||||
<div class="card">
|
||||
<div class="card-body text-center py-5">
|
||||
<h5 class="mb-2">Brak list rezerwowych</h5>
|
||||
<p class="text-muted mb-4">Nie masz jeszcze żadnych list rezerwowych. Utwórz pierwszą, aby zarządzać nadpłatami i środkami rezerwowymi.</p>
|
||||
<a href="{{ url_for('dodaj_rezerwe') }}" class="btn btn-primary">Dodaj listę rezerwową</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
119
templates/admin/przesun_wplate.html
Normal file
119
templates/admin/przesun_wplate.html
Normal file
@@ -0,0 +1,119 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Przesuń wpłatę - {{ zbiorka.nazwa }}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<div class="container my-5">
|
||||
<!-- Nagłówek -->
|
||||
<div class="mb-4">
|
||||
<h1 class="mb-2">
|
||||
<i class="bi bi-arrow-left-right text-primary"></i> Przesuń konkretną wpłatę
|
||||
</h1>
|
||||
<p class="text-muted">Przenieś wybraną wpłatę do innej zbiórki</p>
|
||||
</div>
|
||||
|
||||
<!-- Szczegóły wpłaty -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-transparent">
|
||||
<h5 class="mb-0">
|
||||
<i class="bi bi-receipt text-success"></i> Szczegóły wpłaty
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<div class="border-start border-primary border-3 ps-3">
|
||||
<small class="text-muted d-block">Źródło</small>
|
||||
<strong class="fs-6">{{ zbiorka.nazwa }}</strong>
|
||||
{% if zbiorka.typ_zbiorki == 'rezerwa' %}
|
||||
<span class="badge bg-info ms-2">Lista rezerwowa</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="border-start border-success border-3 ps-3">
|
||||
<small class="text-muted d-block">Kwota</small>
|
||||
<strong class="fs-4 text-success">{{ wplata.kwota|round(2) }} PLN</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="border-start border-secondary border-3 ps-3">
|
||||
<small class="text-muted d-block">Data wpłaty</small>
|
||||
<strong>{{ wplata.data|dt("%d.%m.%Y %H:%M") }}</strong>
|
||||
</div>
|
||||
</div>
|
||||
{% if wplata.opis %}
|
||||
<div class="col-md-6">
|
||||
<div class="border-start border-secondary border-3 ps-3">
|
||||
<small class="text-muted d-block">Opis oryginalny</small>
|
||||
<strong>{{ wplata.opis }}</strong>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Formularz przesunięcia -->
|
||||
<form method="POST">
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header bg-transparent">
|
||||
<h5 class="mb-0">
|
||||
<i class="bi bi-box-arrow-right text-warning"></i> Cel przesunięcia
|
||||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<label for="zbiorka_cel_id" class="form-label fw-semibold">
|
||||
Docelowa zbiórka <span class="text-danger">*</span>
|
||||
</label>
|
||||
<select class="form-select" id="zbiorka_cel_id" name="zbiorka_cel_id" required>
|
||||
<option value="">-- Wybierz zbiórkę docelową --</option>
|
||||
{% for zb in dostepne_zbiorki %}
|
||||
<option value="{{ zb.id }}">
|
||||
{% if zb.typ_zbiorki == 'rezerwa' %}
|
||||
[Rezerwa] {{ zb.nazwa }} · Stan: {{ zb.stan|round(2) }} PLN
|
||||
{% else %}
|
||||
{{ zb.nazwa }} · Stan: {{ zb.stan|round(2) }} PLN
|
||||
{% endif %}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mb-0">
|
||||
<label for="opis" class="form-label fw-semibold">
|
||||
Dodatkowy opis przesunięcia <span class="text-muted">(opcjonalny)</span>
|
||||
</label>
|
||||
<textarea class="form-control" id="opis" name="opis" rows="3"
|
||||
placeholder="np. Powód przesunięcia, notatki..."></textarea>
|
||||
<small class="text-muted">
|
||||
<i class="bi bi-info-circle"></i> Oryginalny opis wpłaty zostanie zachowany
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Alert informacyjny -->
|
||||
<div class="alert alert-info d-flex align-items-start mb-3">
|
||||
<i class="bi bi-lightbulb fs-5 me-2"></i>
|
||||
<div class="small">
|
||||
<strong>Jak to działa:</strong>
|
||||
<ul class="mb-0 mt-1">
|
||||
<li>Wpłata zostanie przeniesiona do wybranej zbiórki wraz z całą historią</li>
|
||||
<li>Zostanie utworzony wpis o przesunięciu w obu zbiórkach</li>
|
||||
<li>Stany finansowe zostaną automatycznie zaktualizowane</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-arrow-left-right"></i> Wykonaj przesunięcie
|
||||
</button>
|
||||
<a href="{{ url_for('transakcje_zbiorki', zbiorka_id=zbiorka.id) }}"
|
||||
class="btn btn-secondary">Anuluj</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
@@ -14,6 +14,9 @@
|
||||
<a class="btn btn-sm btn-outline-light" href="{{ url_for('dodaj_wydatek', zbiorka_id=zbiorka.id) }}">
|
||||
Dodaj wydatek
|
||||
</a>
|
||||
<a class="btn btn-sm btn-outline-light" href="{{ url_for('dodaj_przesuniecie', zbiorka_id=zbiorka.id) }}">
|
||||
Przesuń środki
|
||||
</a>
|
||||
<a class="btn btn-sm btn-outline-light" href="{{ url_for('edytuj_stan', zbiorka_id=zbiorka.id) }}">
|
||||
Edytuj stan
|
||||
</a>
|
||||
@@ -61,6 +64,10 @@
|
||||
|
||||
<div class="d-inline-flex flex-nowrap align-items-center gap-2">
|
||||
{% if a.typ == 'wpłata' %}
|
||||
<a class="btn btn btn-sm btn-outline-light btn-edit-wplata"
|
||||
href="{{ url_for('przesun_wplate', zbiorka_id=zbiorka.id, wplata_id=a.id) }}"
|
||||
title="Przesuń tę wpłatę"> Przesuń
|
||||
</a>
|
||||
<button class="btn btn-sm btn-outline-light btn-edit-wplata" data-id="{{ a.id }}"
|
||||
data-kwota="{{ '%.2f'|format(a.kwota) }}" data-opis="{{ a.opis|e if a.opis }}"
|
||||
data-action="{{ url_for('zapisz_wplate', wplata_id=a.id) }}">
|
||||
@@ -114,7 +121,7 @@
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="5" class="text-center text-muted py-4">Brak transakcji.</td>
|
||||
<td colspan="6" class="text-center text-muted py-4">Brak transakcji.</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user