diff --git a/src/allmende_payment_system/api/admin.py b/src/allmende_payment_system/api/admin.py index b26d081..10b812f 100644 --- a/src/allmende_payment_system/api/admin.py +++ b/src/allmende_payment_system/api/admin.py @@ -1,4 +1,3 @@ -from decimal import Decimal from typing import Annotated from fastapi import APIRouter, File, Form, HTTPException, Request @@ -8,7 +7,14 @@ from starlette.responses import RedirectResponse from allmende_payment_system import types from allmende_payment_system.api.dependencies import SessionDep, UserDep -from allmende_payment_system.models import Area, Permission, Product, User, UserGroup +from allmende_payment_system.models import ( + Account, + Area, + Permission, + Product, + User, + UserGroup, +) from allmende_payment_system.tools import get_jinja_renderer admin_router = APIRouter(prefix="/admin") @@ -276,3 +282,22 @@ async def new_product_post( return RedirectResponse( url="/admin/products", status_code=status.HTTP_303_SEE_OTHER ) + + +@admin_router.get("/accounts") +async def get_accounts( + request: Request, + session: SessionDep, + user: UserDep, +): + if not user.has_permission("account", "edit"): + raise HTTPException(status_code=403, detail="Insufficient permissions") + + templates = get_jinja_renderer() + + accounts = session.scalars(select(Account)).all() + + return templates.TemplateResponse( + "accounts.html.jinja", + context={"request": request, "accounts": accounts}, + ) diff --git a/src/allmende_payment_system/api/dependencies.py b/src/allmende_payment_system/api/dependencies.py index a2de773..6dac5ee 100644 --- a/src/allmende_payment_system/api/dependencies.py +++ b/src/allmende_payment_system/api/dependencies.py @@ -30,7 +30,10 @@ async def get_user(request: Request) -> dict: if "ynh_user" not in request.headers: raise HTTPException(status_code=401, detail="Missing ynh_user header") - return {"username": request.headers["ynh_user"], "display_name": request.headers["ynh_user_fullname"]} + return { + "username": request.headers["ynh_user"], + "display_name": request.headers["ynh_user_fullname"], + } async def get_user_object(request: Request, session: SessionDep) -> User: diff --git a/src/allmende_payment_system/templates/accounts.html.jinja b/src/allmende_payment_system/templates/accounts.html.jinja new file mode 100644 index 0000000..e5977b7 --- /dev/null +++ b/src/allmende_payment_system/templates/accounts.html.jinja @@ -0,0 +1,35 @@ +{% extends "base.html.jinja" %} +{% block content %} +
+

Konten verwalten

+ Neues Konto erstellen +
+ + {% if accounts|length == 0 %} +
Keine Konten vorhanden.
+ {% else %} +
+ + + + + + + + + + + {% for account in accounts %} + + + + + + + {% endfor %} + +
NameNutzerKontostand
{{ account.name }}{{ account.users | map(attribute='display_name') | join(", ") }}{{ account.balance | format_number }} € actions
+
+ {% endif %} + +{% endblock %} \ No newline at end of file diff --git a/src/allmende_payment_system/templates/base.html.jinja b/src/allmende_payment_system/templates/base.html.jinja index 35e5086..8d822c7 100644 --- a/src/allmende_payment_system/templates/base.html.jinja +++ b/src/allmende_payment_system/templates/base.html.jinja @@ -48,6 +48,13 @@ {% endif %} + {% if request.state.user.has_permission("account", "edit") %} + + {% endif %}