Files
fuel_track/app/templates/admin.html
T
Mateusz Gruszczyński 697ac6da30 zapamietanie akcji
2026-07-19 19:15:21 +02:00

18 lines
8.2 KiB
HTML

{% extends 'base.html' %}{% block content %}
<div class="mb-4"><h1 class="h2 mb-1">Administracja</h1><p class="text-body-secondary mb-0">Ustawienia firmy i zarządzanie użytkownikami.</p></div>
<div class="row g-4"><div class="col-xl-6"><div class="card"><div class="card-body"><h2 class="h5">Ustawienia firmy</h2>
<form method="post" action="/api/settings" data-method="PUT" class="row g-3 ajax-form">
<div class="col-12"><label class="form-label">Nazwa firmy</label><input class="form-control" name="name" value="{{settings.name}}" required></div><div class="col-6"><label class="form-label">Typ firmy</label><select class="form-select" name="entity_type"><option {% if settings.entity_type=='JDG' %}selected{% endif %}>JDG</option><option>Spółka</option></select></div><div class="col-6"><label class="form-label">VAT %</label><input class="form-control" type="number" step="0.01" name="vat_rate" value="{{settings.vat_rate}}"></div>
<div class="col-6"><label class="form-label">Odliczenie VAT %</label><input class="form-control" type="number" min="0" max="100" step="1" name="vat_deduction_percent" value="{{settings.vat_deduction_percent}}"></div>
<div class="col-6"><label class="form-label">Dzień podziału</label><input class="form-control" type="number" min="1" max="27" name="invoice_split_day" value="{{settings.invoice_split_day}}"></div>
<div class="col-12"><div class="form-check"><input class="form-check-input" type="checkbox" name="invoice_split_enabled" id="invoice-split" {% if split_enabled %}checked{% endif %}><label class="form-check-label" for="invoice-split">Dziel faktury kartowe według dnia miesiąca</label></div></div>
<div class="col-12"><label class="form-label">Województwo dla LPG</label><select class="form-select" name="region" required>{% for region in regions %}<option value="{{region}}" {% if settings.region==region %}selected{% endif %}>{{region}}</option>{% endfor %}</select></div><div class="col-12"><button class="btn btn-primary">Zapisz ustawienia</button></div></form></div></div></div>
<div class="col-xl-6"><div class="card"><div class="card-body"><h2 class="h5">Dodaj użytkownika</h2><form method="post" action="/api/users" class="row g-3 ajax-form"><div class="col-md-6"><label class="form-label">Imię i nazwisko</label><input class="form-control" name="user_name" required></div><div class="col-md-6"><label class="form-label">E-mail</label><input class="form-control" type="email" name="email" required></div><div class="col-md-6"><label class="form-label">Hasło</label><input class="form-control" type="password" name="password" minlength="8" required></div><div class="col-md-6"><label class="form-label">Rola</label><select class="form-select" name="role"><option value="user">User</option><option value="boss">Szef</option><option value="admin">Admin</option></select></div><div class="col-12"><button class="btn btn-primary">Dodaj użytkownika</button></div></form></div></div></div></div>
<div class="row g-4 mt-1">
<div class="col-xl-5"><div class="card"><div class="card-body"><h2 class="h5">Ustawienia aplikacji</h2><form action="/api/app-settings" data-method="PUT" class="ajax-form row g-3"><div class="col-12"><label class="form-label">Motyw aplikacji</label><select class="form-select" name="theme">{% for key,item in themes.items() %}<option value="{{key}}" {% if app_theme_name==key %}selected{% endif %}>{{item.label}}</option>{% endfor %}</select><div class="form-text">Wybrany motyw jest ustawiany globalnie dla wszystkich użytkowników aplikacji.</div></div><div class="col-12"><button class="btn btn-primary">Zapisz ustawienia aplikacji</button></div></form></div></div></div>
<div class="col-xl-7"><div class="card"><div class="card-body"><h2 class="h5">Karty paliwowe firmy</h2><form action="/api/fuel-cards" class="ajax-form row g-2 mb-3"><div class="col-md-4"><input class="form-control" name="name" placeholder="Nazwa, np. UTA Polska" required></div><div class="col-md-3"><input class="form-control" name="provider" placeholder="Operator" required></div><div class="col-md-3"><input class="form-control" name="description" placeholder="Opis"></div><div class="col-md-2"><button class="btn btn-primary w-100">Dodaj</button></div></form><div class="list-group">{% for card in fuel_cards %}<div class="list-group-item d-flex justify-content-between align-items-center"><div><strong>{{card.name}}</strong><div class="small text-body-secondary">{{card.provider}}{% if card.description %} · {{card.description}}{% endif %}</div></div><span class="badge text-bg-{{'success' if card.active else 'secondary'}}">{{'aktywna' if card.active else 'nieaktywna'}}</span></div>{% else %}<div class="text-body-secondary">Brak kart paliwowych.</div>{% endfor %}</div></div></div></div>
</div>
{% if current_user.role=='admin' %}<div class="card mt-4"><div class="card-body"><div class="d-flex flex-column flex-md-row justify-content-between gap-3 mb-3"><div><h2 class="h5 mb-1">Użytkownicy</h2><small class="text-body-secondary">{{ users_page.total }} kont</small></div><form method="get" action="{{url_for('main.admin')}}" class="d-flex gap-2 ajax-nav-form"><input class="form-control" name="q" value="{{q}}" placeholder="Szukaj po nazwie lub e-mailu"><button class="btn btn-secondary">Szukaj</button></form></div><div class="table-responsive"><table class="table table-hover align-middle"><thead><tr><th>Nazwa</th><th>E-mail</th><th>Rola</th><th>Status</th><th class="text-end">Akcja</th></tr></thead><tbody>{% for u in users_page.items %}<tr><td>{{u.name}}</td><td>{{u.email}}</td><td><span class="badge text-bg-secondary">{{u.role}}</span></td><td>{% if u.active %}<span class="badge text-bg-success">Aktywny</span>{% else %}<span class="badge text-bg-danger">Nieaktywny</span>{% endif %}</td><td class="text-end"><button type="button" class="btn btn-sm btn-primary user-edit-btn" data-bs-toggle="modal" data-bs-target="#userEditModal" data-id="{{u.id}}" data-name="{{u.name|e}}" data-email="{{u.email|e}}" data-role="{{u.role}}" data-active="{{1 if u.active else 0}}" data-card="{{u.fuel_card_id or ''}}">Edytuj</button></td></tr>{% else %}<tr><td colspan="5" class="text-center text-body-secondary py-4">Brak użytkowników.</td></tr>{% endfor %}</tbody></table></div>{% if users_page.pages > 1 %}<nav><ul class="pagination mb-0">{% for p in users_page.iter_pages() %}{% if p %}<li class="page-item {% if p==users_page.page %}active{% endif %}"><a class="page-link ajax-nav-link" href="{{url_for('main.admin',page=p,q=q)}}">{{p}}</a></li>{% else %}<li class="page-item disabled"><span class="page-link"></span></li>{% endif %}{% endfor %}</ul></nav>{% endif %}</div></div>
<div class="modal fade" id="userEditModal" tabindex="-1"><div class="modal-dialog"><div class="modal-content"><form method="post" class="ajax-form" id="user-edit-form" data-method="PUT"><div class="modal-header"><h2 class="modal-title fs-5">Edytuj użytkownika</h2><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body"><div class="mb-3"><label class="form-label">Nazwa</label><input class="form-control" name="name" required></div><div class="mb-3"><label class="form-label">E-mail</label><input class="form-control" type="email" name="email" required></div><div class="mb-3"><label class="form-label">Rola</label><select class="form-select" name="role"><option value="user">User</option><option value="boss">Szef</option><option value="admin">Admin</option></select></div><div class="mb-3"><label class="form-label">Domyślna karta paliwowa</label><select class="form-select" name="fuel_card_id"><option value="">Brak</option>{% for card in fuel_cards if card.active %}<option value="{{card.id}}">{{card.name}}</option>{% endfor %}</select></div><div class="mb-3"><label class="form-label">Nowe hasło</label><input class="form-control" type="password" name="password" minlength="8" placeholder="Pozostaw puste bez zmiany"></div><div class="form-check"><input class="form-check-input" type="checkbox" name="active" id="modal-active"><label class="form-check-label" for="modal-active">Konto aktywne</label></div></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Anuluj</button><button class="btn btn-primary">Zapisz</button></div></form></div></div></div>{% endif %}
{% endblock %}{% block scripts %}<script>FuelTrack.bindUserModal();</script>{% endblock %}