spolszczenie wszystkiego i poprawki
This commit is contained in:
@@ -269,8 +269,45 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="row g-3 mt-2">
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="pokaz_postep_finanse"
|
||||
name="pokaz_postep_finanse" {% if is_edit and zbiorka.pokaz_postep_finanse or not
|
||||
is_edit %}checked{% endif %}>
|
||||
<label class="form-check-label" for="pokaz_postep_finanse">Pokaż postęp: Finanse</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="pokaz_postep_pozycje"
|
||||
name="pokaz_postep_pozycje" {% if is_edit and zbiorka.pokaz_postep_pozycje or not
|
||||
is_edit %}checked{% endif %}>
|
||||
<label class="form-check-label" for="pokaz_postep_pozycje">Pokaż postęp: Zakupy
|
||||
(liczba)</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="pokaz_postep_kwotowo"
|
||||
name="pokaz_postep_kwotowo" {% if is_edit and zbiorka.pokaz_postep_kwotowo or not
|
||||
is_edit %}checked{% endif %}>
|
||||
<label class="form-check-label" for="pokaz_postep_kwotowo">Pokaż postęp: Zakupy
|
||||
(kwotowo)</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- CTA -->
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
<button type="submit" class="btn btn-success">
|
||||
|
@@ -6,14 +6,24 @@
|
||||
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h3 class="mb-0">Transakcje: {{ zbiorka.nazwa }}</h3>
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-sm btn-outline-light border" href="{{ url_for('dodaj_wplate', zbiorka_id=zbiorka.id) }}">+
|
||||
Wpłata</a>
|
||||
<a class="btn btn-sm btn-outline-light border"
|
||||
href="{{ url_for('dodaj_wydatek', zbiorka_id=zbiorka.id) }}">+ Wydatek</a>
|
||||
<a class="btn btn-sm btn-outline-light border"
|
||||
href="{{ url_for('zbiorka', zbiorka_id=zbiorka.id) }}">Szczegóły zbiórki</a>
|
||||
<div class="btn-group" role="group" aria-label="Akcje zbiórki">
|
||||
<a class="btn btn-sm btn-outline-light border" href="{{ url_for('dodaj_wplate', zbiorka_id=zbiorka.id) }}">
|
||||
<i class="fas fa-plus-circle"></i> Dodaj wpłatę
|
||||
</a>
|
||||
|
||||
<a class="btn btn-sm btn-outline-light border" href="{{ url_for('dodaj_wydatek', zbiorka_id=zbiorka.id) }}">
|
||||
Dodaj wydatek
|
||||
</a>
|
||||
|
||||
<a class="btn btn-sm btn-outline-light border" href="{{ url_for('edytuj_stan', zbiorka_id=zbiorka.id) }}">
|
||||
Edytuj stan
|
||||
</a>
|
||||
|
||||
<a class="btn btn-sm btn-outline-light border" href="{{ url_for('zbiorka', zbiorka_id=zbiorka.id) }}">
|
||||
Otwórz ↗
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
|
@@ -40,42 +40,60 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SEKCJA: Dostępy / biała lista IP -->
|
||||
<!-- SEKCJA: Dostępy / biała lista IP -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-secondary text-white d-flex align-items-center justify-content-between gap-2">
|
||||
<h3 class="card-title mb-0">Dostęp — dozwolone adresy IP / hosty</h3>
|
||||
<small class="opacity-75">Zależnie od konfiguracji, logowanie może wymagać dopasowania do białej listy</small>
|
||||
<small class="opacity-75">Zależnie od konfiguracji logowanie może wymagać dopasowania do białej listy</small>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<!-- Wiersz z inputem i przyciskiem dodawania -->
|
||||
<div class="row g-3 align-items-end">
|
||||
<div class="col-12 col-md-6">
|
||||
<label for="host_input" class="form-label">Dodaj pojedynczy IP/host</label>
|
||||
<input type="text" class="form-control" id="host_input" placeholder="np. 203.0.113.42 lub corp.example.com"
|
||||
aria-describedby="hostAddHelp">
|
||||
<div id="hostAddHelp" class="form-text">Po wpisaniu kliknij „Dodaj do listy”. Duplikaty są pomijane.</div>
|
||||
<div class="col-12 col-lg-8">
|
||||
<label for="host_input" class="form-label">Dodaj IP/host</label>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" id="host_input"
|
||||
placeholder="np. 203.0.113.42 lub corp.example.com" aria-describedby="hostAddHelp">
|
||||
<button type="button" class="btn btn-outline-primary" id="btn-add-host">
|
||||
<i class="fas fa-plus-circle"></i> Dodaj
|
||||
</button>
|
||||
</div>
|
||||
<div id="hostAddHelp" class="form-text">Po wpisaniu kliknij „Dodaj”. Duplikaty są pomijane.</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6 d-flex gap-2">
|
||||
<button type="button" class="btn btn-outline-light border" id="btn-add-host">Dodaj do listy</button>
|
||||
<button type="button" class="btn btn-light text-dark" id="btn-add-my-ip" data-my-ip="{{ client_ip }}">Dodaj
|
||||
moje IP ({{ client_ip }})</button>
|
||||
<button type="button" class="btn btn-outline-light border" id="btn-dedupe">Usuń duplikaty</button>
|
||||
|
||||
<div class="col-12 col-lg-4">
|
||||
<div class="d-flex flex-wrap gap-2 justify-content-lg-end">
|
||||
<button type="button" class="btn btn-light text-dark" id="btn-add-my-ip" data-my-ip="{{ client_ip }}">
|
||||
<i class="fas fa-location-arrow"></i> Dodaj moje IP ({{ client_ip }})
|
||||
</button>
|
||||
<button type="button" class="btn btn-outline-secondary" id="btn-dedupe">
|
||||
<i class="fas fa-broom"></i> Usuń duplikaty
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
<label for="allowed_login_hosts" class="form-label">Dozwolone hosty logowania (jeden na linię lub rozdzielone
|
||||
przecinkami)</label>
|
||||
<textarea class="form-control" id="allowed_login_hosts" name="allowed_login_hosts" rows="6"
|
||||
placeholder="Adresy IP lub nazwy domen — każdy w osobnej linii lub rozdzielony przecinkiem">{{ settings.allowed_login_hosts if settings and settings.allowed_login_hosts else '' }}</textarea>
|
||||
<div class="d-flex justify-content-between mt-1">
|
||||
<small class="text-muted">Akceptowane separatory: przecinek (`,`), średnik (`;`) i nowa linia.</small>
|
||||
<small class="text-muted">Pozycji na liście: <span id="hostsCount">0</span></small>
|
||||
<div class="d-flex justify-content-between align-items-center mb-1">
|
||||
<label for="dozwolone_hosty_logowania" class="form-label mb-0">
|
||||
Dozwolone hosty logowania (jeden na linię lub rozdzielone przecinkami)
|
||||
</label>
|
||||
<span class="badge text-bg-secondary">Pozycji: <span id="hostsCount">0</span></span>
|
||||
</div>
|
||||
|
||||
<textarea class="form-control" id="dozwolone_hosty_logowania" name="dozwolone_hosty_logowania" rows="6"
|
||||
placeholder="Adresy IP lub nazwy domen — każdy w osobnej linii lub rozdzielony przecinkiem">{{ settings.dozwolone_hosty_logowania if settings and settings.dozwolone_hosty_logowania else '' }}</textarea>
|
||||
|
||||
<small class="text-muted d-block mt-1">
|
||||
Akceptowane separatory: przecinek (`,`), średnik (`;`) i nowa linia.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- SEKCJA: Branding -->
|
||||
<div class="card shadow-sm mb-4">
|
||||
<div class="card-header bg-secondary text-white d-flex align-items-center justify-content-between gap-2">
|
||||
@@ -99,9 +117,9 @@
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<label for="site_title" class="form-label">Tytuł serwisu</label>
|
||||
<input type="text" class="form-control" id="site_title" name="site_title"
|
||||
value="{{ settings.site_title if settings else '' }}" placeholder="Np. Zbiórki unitraklub.pl">
|
||||
<label for="tytul_strony" class="form-label">Tytuł serwisu</label>
|
||||
<input type="text" class="form-control" id="tytul_strony" name="tytul_strony"
|
||||
value="{{ settings.tytul_strony if settings else '' }}" placeholder="Np. Zbiórki unitraklub.pl">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -112,15 +130,15 @@
|
||||
<div class="col-md-6">
|
||||
<h6 class="mb-2">Menu (navbar)</h6>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="navbar_brand_mode" id="navbar_mode_logo" value="logo"
|
||||
{% if settings and settings.navbar_brand_mode=='logo' or (settings and settings.show_logo_in_navbar)
|
||||
%}checked{% endif %}>
|
||||
<input class="form-check-input" type="radio" name="typ_navbar" id="navbar_mode_logo" value="logo" {% if
|
||||
settings and settings.typ_navbar=='logo' or (settings and settings.pokaz_logo_w_navbar) %}checked{%
|
||||
endif %}>
|
||||
<label class="form-check-label" for="navbar_mode_logo">Pokaż logo</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="navbar_brand_mode" id="navbar_mode_text" value="text"
|
||||
{% if not settings or (settings and settings.navbar_brand_mode !='logo' and not
|
||||
settings.show_logo_in_navbar) %}checked{% endif %}>
|
||||
<input class="form-check-input" type="radio" name="typ_navbar" id="navbar_mode_text" value="text" {% if
|
||||
not settings or (settings and settings.typ_navbar !='logo' and not settings.pokaz_logo_w_navbar)
|
||||
%}checked{% endif %}>
|
||||
<label class="form-check-label" for="navbar_mode_text">Pokaż tekst</label>
|
||||
</div>
|
||||
<div class="form-text mt-1">Jeśli wybierzesz logo, użyjemy adresu z pola "Tytuł serwisu".</div>
|
||||
@@ -130,19 +148,19 @@
|
||||
<div class="col-md-6">
|
||||
<h6 class="mb-2">Stopka</h6>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="footer_brand_mode" id="footer_mode_logo" value="logo"
|
||||
{% if settings and settings.footer_brand_mode=='logo' %}checked{% endif %}>
|
||||
<input class="form-check-input" type="radio" name="typ_stopka" id="footer_mode_logo" value="logo" {% if
|
||||
settings and settings.typ_stopka=='logo' %}checked{% endif %}>
|
||||
<label class="form-check-label" for="footer_mode_logo">Logo</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="footer_brand_mode" id="footer_mode_text" value="text"
|
||||
{% if not settings or (settings and settings.footer_brand_mode !='logo' ) %}checked{% endif %}>
|
||||
<input class="form-check-input" type="radio" name="typ_stopka" id="footer_mode_text" value="text" {% if
|
||||
not settings or (settings and settings.typ_stopka !='logo' ) %}checked{% endif %}>
|
||||
<label class="form-check-label" for="footer_mode_text">Tekst</label>
|
||||
</div>
|
||||
|
||||
<label for="footer_text" class="form-label mt-2">Tekst w stopce (gdy wybrano „Tekst”)</label>
|
||||
<input type="text" class="form-control" id="footer_text" name="footer_text"
|
||||
value="{{ settings.footer_text if settings and settings.footer_text else '' }}"
|
||||
<label for="stopka_text" class="form-label mt-2">Tekst w stopce (gdy wybrano „Tekst”)</label>
|
||||
<input type="text" class="form-control" id="stopka_text" name="stopka_text"
|
||||
value="{{ settings.stopka_text if settings and settings.stopka_text else '' }}"
|
||||
placeholder="Np. © {{ now().year if now else '2025' }} Zbiórki">
|
||||
<div class="form-text">Pozostaw pusty, by użyć domyślnego.</div>
|
||||
</div>
|
||||
|
@@ -14,13 +14,13 @@
|
||||
<nav class="navbar navbar-expand-lg">
|
||||
<div class="container">
|
||||
<a class="navbar-brand d-flex align-items-center gap-2" href="{{ url_for('index') }}">
|
||||
{% set nav_mode = (global_settings.navbar_brand_mode if global_settings and
|
||||
global_settings.navbar_brand_mode else ('logo' if global_settings and
|
||||
global_settings.show_logo_in_navbar else 'text')) %}
|
||||
{% set nav_mode = (global_settings.typ_navbar if global_settings and
|
||||
global_settings.typ_navbar else ('logo' if global_settings and
|
||||
global_settings.pokaz_logo_w_navbar else 'text')) %}
|
||||
{% if nav_mode == 'logo' and global_settings and global_settings.logo_url %}
|
||||
<img src="{{ global_settings.logo_url }}" alt="Logo" style="max-height:40px; vertical-align:middle;">
|
||||
{% else %}
|
||||
<span>{{ global_settings.site_title if global_settings and global_settings.site_title else "Zbiórki"
|
||||
<span>{{ global_settings.tytul_strony if global_settings and global_settings.tytul_strony else "Zbiórki"
|
||||
}}</span>
|
||||
{% endif %}
|
||||
</a>
|
||||
@@ -72,12 +72,12 @@
|
||||
|
||||
<!-- stopka -->
|
||||
<footer class="mt-auto text-center py-3 border-top" style="background: var(--surface-0);">
|
||||
{% set footer_mode = global_settings.footer_brand_mode if global_settings and global_settings.footer_brand_mode
|
||||
{% set footer_mode = global_settings.typ_stopka if global_settings and global_settings.typ_stopka
|
||||
else 'text' %}
|
||||
{% if footer_mode == 'logo' and global_settings and global_settings.logo_url %}
|
||||
<img src="{{ global_settings.logo_url }}" alt="Logo" style="max-height:28px;">
|
||||
{% else %}
|
||||
{{ global_settings.footer_text if global_settings and global_settings.footer_text else "© " ~ (now().year if now
|
||||
{{ global_settings.stopka_text if global_settings and global_settings.stopka_text else "© " ~ (now().year if now
|
||||
else '2025') ~ " linuxiarz.pl" }}
|
||||
{% endif %}
|
||||
<div class="small text-muted">v{{ APP_VERSION }}</div>
|
||||
|
@@ -105,7 +105,7 @@ zbiórki{% endif %}{% endblock %}
|
||||
{% 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.is_admin %}
|
||||
{% 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-primary">Zobacz zrealizowane</a>
|
||||
|
@@ -18,21 +18,21 @@
|
||||
{% endif %}
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="username" class="form-label">Nazwa użytkownika</label>
|
||||
<input type="text" class="form-control" id="username" name="username"
|
||||
<label for="uzytkownik" class="form-label">Nazwa użytkownika</label>
|
||||
<input type="text" class="form-control" id="uzytkownik" name="uzytkownik"
|
||||
autocomplete="username" autocapitalize="none" spellcheck="false" required autofocus>
|
||||
<div class="invalid-feedback">Podaj nazwę użytkownika.</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-2">
|
||||
<label for="password" class="form-label d-flex justify-content-between align-items-center">
|
||||
<label for="haslo" class="form-label d-flex justify-content-between align-items-center">
|
||||
<span>Hasło</span>
|
||||
<small id="capsWarning" class="text-muted" style="display:none;">CAPS LOCK
|
||||
włączony</small>
|
||||
</label>
|
||||
|
||||
<div class="input-group">
|
||||
<input type="password" class="form-control" id="password" name="password"
|
||||
<input type="password" class="form-control" id="haslo" name="haslo"
|
||||
autocomplete="current-password" required minlength="5">
|
||||
<button type="button" class="btn btn-secondary rounded-end" id="togglePw"
|
||||
aria-label="Pokaż/ukryj hasło">Pokaż</button>
|
||||
|
@@ -14,20 +14,20 @@
|
||||
<form method="post" class="needs-validation" novalidate>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="username" class="form-label">Nazwa użytkownika</label>
|
||||
<input type="text" class="form-control" id="username" name="username"
|
||||
<label for="uzytkownik" class="form-label">Nazwa użytkownika</label>
|
||||
<input type="text" class="form-control" id="uzytkownik" name="uzytkownik"
|
||||
autocomplete="username" autocapitalize="none" spellcheck="false" required autofocus>
|
||||
<div class="invalid-feedback">Podaj nazwę użytkownika.</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label d-flex justify-content-between align-items-center">
|
||||
<label for="haslo" class="form-label d-flex justify-content-between align-items-center">
|
||||
<span>Hasło</span>
|
||||
<small id="capsWarning" class="text-muted" style="display:none;">CAPS LOCK
|
||||
włączony</small>
|
||||
</label>
|
||||
<div class="input-group">
|
||||
<input type="password" class="form-control" id="password" name="password"
|
||||
<input type="password" class="form-control" id="haslo" name="haslo"
|
||||
autocomplete="new-password" required minlength="6">
|
||||
<button type="button" class="btn btn-secondary" id="togglePw"
|
||||
aria-label="Pokaż/ukryj hasło">Pokaż</button>
|
||||
|
@@ -103,23 +103,28 @@
|
||||
<h5 class="mb-0">Postęp</h5>
|
||||
|
||||
<div class="d-flex flex-wrap align-items-center gap-2">
|
||||
{% if has_cel and not zbiorka.ukryj_kwote %}
|
||||
{% if has_cel and not zbiorka.ukryj_kwote and zbiorka.pokaz_postep_finanse %}
|
||||
<span class="badge bg-dark border" style="border-color: var(--border);">
|
||||
Finanse: {{ zbiorka.stan|round(2) }} / {{ zbiorka.cel|round(2) }} PLN
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if has_items %}
|
||||
|
||||
{% if has_items and zbiorka.pokaz_postep_pozycje %}
|
||||
<span class="badge bg-secondary">Pozycje: {{ kupione_cnt }}/{{ total_cnt }}</span>
|
||||
{% if not zbiorka.ukryj_kwote and (suma_all or 0) > 0 %}
|
||||
<span class="badge bg-secondary">Zakupy (kwotowo):
|
||||
{{ (suma_kupione or 0)|round(2) }} / {{ (suma_all or 0)|round(2) }} PLN
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
{% if has_items and not zbiorka.ukryj_kwote and (suma_all or 0) > 0 and zbiorka.pokaz_postep_kwotowo %}
|
||||
<span class="badge bg-secondary">
|
||||
Zakupy (kwotowo): {{ (suma_kupione or 0)|round(2) }} / {{ (suma_all or 0)|round(2) }} PLN
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="hr-bw">
|
||||
<!-- Pasek: Finanse (zawsze) -->
|
||||
|
||||
{# Pasek: Finanse #}
|
||||
{% if zbiorka.pokaz_postep_finanse %}
|
||||
<div class="mb-3">
|
||||
<small class="text-muted">Finanse</small>
|
||||
<div class="progress" role="progressbar" aria-valuenow="{{ progress_clamped|round(2) }}" aria-valuemin="0"
|
||||
@@ -130,9 +135,10 @@
|
||||
{% if zbiorka.ukryj_kwote %}—{% else %}{{ progress|round(1) }}%{% endif %}
|
||||
</small>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if has_items %}
|
||||
<!-- Pasek: Zakupy sztukami -->
|
||||
{# Pasek: Zakupy sztukami #}
|
||||
{% if has_items and zbiorka.pokaz_postep_pozycje %}
|
||||
<div class="mb-3">
|
||||
<small class="text-muted">Zakupy (liczba pozycji)</small>
|
||||
<div class="progress" role="progressbar" aria-valuenow="{{ items_pct|round(2) }}" aria-valuemin="0"
|
||||
@@ -141,9 +147,10 @@
|
||||
</div>
|
||||
<small class="text-muted">{{ items_pct|round(1) }}%</small>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if not zbiorka.ukryj_kwote and (suma_all or 0) > 0 %}
|
||||
<!-- Pasek: Zakupy kwotowo -->
|
||||
{# Pasek: Zakupy kwotowo #}
|
||||
{% if has_items and not zbiorka.ukryj_kwote and (suma_all or 0) > 0 and zbiorka.pokaz_postep_kwotowo %}
|
||||
<div>
|
||||
<small class="text-muted">Zakupy (kwotowo)</small>
|
||||
<div class="progress" role="progressbar" aria-valuenow="{{ suma_pct|round(2) }}" aria-valuemin="0"
|
||||
@@ -153,7 +160,6 @@
|
||||
<small class="text-muted">{{ suma_pct|round(1) }}%</small>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -238,7 +244,7 @@
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if current_user.is_authenticated and current_user.is_admin %}
|
||||
{% if current_user.is_authenticated and current_user.czy_admin %}
|
||||
<hr>
|
||||
<div class="d-grid gap-2 mt-2">
|
||||
<a href="{{ url_for('dodaj_wplate', zbiorka_id=zbiorka.id) }}" class="btn btn-outline-light btn-sm">Dodaj
|
||||
@@ -264,7 +270,7 @@
|
||||
{% if aktywnosci and aktywnosci|length > 0 %}
|
||||
<small class="text-muted">Łącznie pozycji: {{ aktywnosci|length }}</small>
|
||||
{% endif %}
|
||||
{% if current_user.is_authenticated and current_user.is_admin %}
|
||||
{% if current_user.is_authenticated and current_user.czy_admin %}
|
||||
<a href="{{ url_for('transakcje_zbiorki', zbiorka_id=zbiorka.id) }}"
|
||||
class="btn btn-sm btn-outline-light border">
|
||||
Zarządzaj
|
||||
|
Reference in New Issue
Block a user