From 35a8d5dd8e7cdbd94eabf092cd35955895fedf62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Gruszczy=C5=84ski?= Date: Fri, 10 Oct 2025 13:58:36 +0200 Subject: [PATCH] ukrywanie akcji --- alters.txt | 17 +++++- app.py | 97 +++++++++++++++++++++++++++++---- static/js/transakcje.js | 3 +- templates/admin/transakcje.html | 89 ++++++++++++++++++++---------- 4 files changed, 165 insertions(+), 41 deletions(-) diff --git a/alters.txt b/alters.txt index 797bb4f..3e8140d 100644 --- a/alters.txt +++ b/alters.txt @@ -1,2 +1,17 @@ ALTER TABLE zbiorka ALTER COLUMN numer_konta DROP NOT NULL; -ALTER TABLE zbiorka ALTER COLUMN numer_telefonu_blik DROP NOT NULL; \ No newline at end of file +ALTER TABLE zbiorka ALTER COLUMN numer_telefonu_blik DROP NOT NULL; + +_______________________________ + +PGSQL +ALTER TABLE wplata ADD COLUMN ukryta boolean NOT NULL DEFAULT false; +ALTER TABLE wydatek ADD COLUMN ukryta boolean NOT NULL DEFAULT false; + +-- po migracji można zdjąć DEFAULT (opcjonalnie) +ALTER TABLE wplata ALTER COLUMN ukryta DROP DEFAULT; +ALTER TABLE wydatek ALTER COLUMN ukryta DROP DEFAULT; + + +SQLite +ALTER TABLE wplata ADD COLUMN ukryta INTEGER NOT NULL DEFAULT 0; +ALTER TABLE wydatek ADD COLUMN ukryta INTEGER NOT NULL DEFAULT 0; \ No newline at end of file diff --git a/app.py b/app.py index f3a1e6c..74bfcb0 100644 --- a/app.py +++ b/app.py @@ -145,6 +145,7 @@ class Wplata(db.Model): data = db.Column(db.DateTime, default=datetime.utcnow) opis = db.Column(db.Text, nullable=True) zbiorka = db.relationship("Zbiorka", back_populates="wplaty") + ukryta = db.Column(db.Boolean, nullable=False, default=False) class Wydatek(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -156,7 +157,7 @@ class Wydatek(db.Model): kwota = db.Column(Numeric(12, 2), nullable=False) data = db.Column(db.DateTime, default=datetime.utcnow) opis = db.Column(db.Text, nullable=True) - + ukryta = db.Column(db.Boolean, nullable=False, default=False) class UstawieniaGlobalne(db.Model): __tablename__ = "ustawienia_globalne" @@ -296,17 +297,25 @@ def zbiorka(zbiorka_id): if zb.ukryta and (not current_user.is_authenticated or not current_user.czy_admin): abort(404) - # scalona oś czasu: wpłaty + wydatki - aktywnosci = [ - {"typ": "wpłata", "kwota": w.kwota, "opis": w.opis, "data": w.data} + is_admin = current_user.is_authenticated and current_user.czy_admin + show_hidden = is_admin and (request.args.get("show_hidden") in ("1", "true", "yes")) + + # wpłaty / wydatki z filtrem ukrycia + wplaty = [ + {"typ": "wpłata", "kwota": w.kwota, "opis": w.opis, "data": w.data, "ukryta": getattr(w, "ukryta", False)} for w in zb.wplaty - ] + [ - {"typ": "wydatek", "kwota": x.kwota, "opis": x.opis, "data": x.data} - for x in zb.wydatki + if show_hidden or not getattr(w, "ukryta", False) ] + wydatki = [ + {"typ": "wydatek", "kwota": x.kwota, "opis": x.opis, "data": x.data, "ukryta": getattr(x, "ukryta", False)} + for x in zb.wydatki + if show_hidden or not getattr(x, "ukryta", False) + ] + + aktywnosci = wplaty + wydatki aktywnosci.sort(key=lambda a: a["data"], reverse=True) - return render_template("zbiorka.html", zbiorka=zb, aktywnosci=aktywnosci) + return render_template("zbiorka.html", zbiorka=zb, aktywnosci=aktywnosci, show_hidden=show_hidden) # TRASY LOGOWANIA I REJESTRACJI @@ -838,17 +847,41 @@ def robots(): def transakcje_zbiorki(zbiorka_id): if not current_user.czy_admin: flash("Brak uprawnień", "danger"); return redirect(url_for("index")) + zb = db.session.get(Zbiorka, zbiorka_id) if zb is None: abort(404) + aktywnosci = ( - [{"typ": "wpłata", "id": w.id, "kwota": w.kwota, "opis": w.opis, "data": w.data} for w in zb.wplaty] + - [{"typ": "wydatek","id": x.id, "kwota": x.kwota,"opis": x.opis,"data": x.data} for x in zb.wydatki] + [ + { + "typ": "wpłata", + "id": w.id, + "kwota": w.kwota, + "opis": w.opis, + "data": w.data, + "ukryta": bool(w.ukryta), + } + for w in zb.wplaty + ] + + + [ + { + "typ": "wydatek", + "id": x.id, + "kwota": x.kwota, + "opis": x.opis, + "data": x.data, + "ukryta": bool(x.ukryta), + } + for x in zb.wydatki + ] ) aktywnosci.sort(key=lambda a: a["data"], reverse=True) return render_template("admin/transakcje.html", zbiorka=zb, aktywnosci=aktywnosci) + @app.route("/admin/wplata//zapisz", methods=["POST"]) @login_required def zapisz_wplate(wplata_id): @@ -874,6 +907,50 @@ def zapisz_wplate(wplata_id): flash("Wpłata zaktualizowana", "success") return redirect(url_for("transakcje_zbiorki", zbiorka_id=zb.id)) +@app.post("/wplata//ukryj") +@login_required +def ukryj_wplate(wplata_id): + if not current_user.czy_admin: abort(403) + w = db.session.get(Wplata, wplata_id) + if not w: abort(404) + w.ukryta = True + db.session.commit() + flash("Wpłata ukryta.", "success") + return redirect(request.referrer or url_for("admin_dashboard")) + +@app.post("/wplata//odkryj") +@login_required +def odkryj_wplate(wplata_id): + if not current_user.czy_admin: abort(403) + w = db.session.get(Wplata, wplata_id) + if not w: abort(404) + w.ukryta = False + db.session.commit() + flash("Wpłata odkryta.", "success") + return redirect(request.referrer or url_for("admin_dashboard")) + +@app.post("/wydatek//ukryj") +@login_required +def ukryj_wydatek(wydatek_id): + if not current_user.czy_admin: abort(403) + w = db.session.get(Wydatek, wydatek_id) + if not w: abort(404) + w.ukryta = True + db.session.commit() + flash("Wydatek ukryty.", "success") + return redirect(request.referrer or url_for("admin_dashboard")) + +@app.post("/wydatek//odkryj") +@login_required +def odkryj_wydatek(wydatek_id): + if not current_user.czy_admin: abort(403) + w = db.session.get(Wydatek, wydatek_id) + if not w: abort(404) + w.ukryta = False + db.session.commit() + flash("Wydatek odkryty.", "success") + return redirect(request.referrer or url_for("admin_dashboard")) + @app.route("/admin/wplata//usun", methods=["POST"]) @login_required diff --git a/static/js/transakcje.js b/static/js/transakcje.js index 7faa7e7..05a79e7 100644 --- a/static/js/transakcje.js +++ b/static/js/transakcje.js @@ -23,4 +23,5 @@ document.addEventListener('DOMContentLoaded', function () { modalX.show(); }); }); -}); \ No newline at end of file + +}); diff --git a/templates/admin/transakcje.html b/templates/admin/transakcje.html index 94d7779..7afad8d 100644 --- a/templates/admin/transakcje.html +++ b/templates/admin/transakcje.html @@ -6,24 +6,21 @@

Transakcje: {{ zbiorka.nazwa }}

+ -
@@ -41,39 +38,73 @@ {% for a in aktywnosci %} - + {{ a.data|dt("%d.%m.%Y %H:%M") }} {{ a.typ }} + {{ '%.2f'|format(a.kwota) }} PLN {{ a.opis or '—' }} - {% if a.typ == 'wpłata' %} - -
- -
- {% else %} - -
- -
- {% endif %} + + {% if a.ukryta %}[ akcja ukryta ]{% endif + %} + + +
+ {% if a.typ == 'wpłata' %} + +
+ +
+ + {% if a.ukryta %} +
+ +
+ {% else %} +
+ +
+ {% endif %} + + {% else %} + +
+ +
+ + {% if a.ukryta %} + Ukryta +
+ +
+ {% else %} +
+ +
+ {% endif %} + + {% endif %} +
{% else %}