Add account details view for admin
This commit is contained in:
@@ -387,3 +387,26 @@ async def add_balance_to_account(
|
|||||||
return RedirectResponse(
|
return RedirectResponse(
|
||||||
url="/admin/accounts", status_code=status.HTTP_303_SEE_OTHER
|
url="/admin/accounts", status_code=status.HTTP_303_SEE_OTHER
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@admin_router.get("/accounts/{account_id}/details")
|
||||||
|
async def view_account_details(
|
||||||
|
request: Request,
|
||||||
|
session: SessionDep,
|
||||||
|
user: UserDep,
|
||||||
|
account_id: int,
|
||||||
|
):
|
||||||
|
if not user.has_permission("account", "edit"):
|
||||||
|
raise HTTPException(status_code=403, detail="Insufficient permissions")
|
||||||
|
|
||||||
|
account = session.execute(
|
||||||
|
select(Account).where(Account.id == account_id)
|
||||||
|
).scalar_one()
|
||||||
|
|
||||||
|
templates = get_jinja_renderer()
|
||||||
|
|
||||||
|
return templates.TemplateResponse(
|
||||||
|
request,
|
||||||
|
"account_details.html.jinja",
|
||||||
|
context={"account": account},
|
||||||
|
)
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
|
||||||
|
{% extends "base.html.jinja" %}
|
||||||
|
{% block content %}
|
||||||
|
<!-- Account Balances Section -->
|
||||||
|
<div class="mb-4">
|
||||||
|
<h2 class="h4 mb-3">Kontodetails für Konto "{{account.name}}"</h2>
|
||||||
|
<div class="row g-3">
|
||||||
|
<div class="col-md-6 col-lg-4">
|
||||||
|
<div class="card border-primary border-3 shadow-lg">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">{{ account.name }}</h5>
|
||||||
|
<p class="h3 mb-2 {% if account.balance < 0 %}text-danger{% else %}text-success{% endif %}">
|
||||||
|
{{ account.balance | format_number }} €
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Latest Transactions Section -->
|
||||||
|
<div class="transactions-section">
|
||||||
|
<div class="card">
|
||||||
|
<div class="list-group list-group-flush">
|
||||||
|
{% if account.transactions|length > 0 %}
|
||||||
|
{% for transaction in account.transactions %}
|
||||||
|
<div class="list-group-item d-flex justify-content-between align-items-start py-3">
|
||||||
|
<div class="flex-grow-1">
|
||||||
|
<div class="fw-semibold d-inline">{{ transaction.type|transaction_type_de }}</div>
|
||||||
|
<small class="text-muted d-inline ms-2">
|
||||||
|
{{ transaction.timestamp | timestamp_de }}
|
||||||
|
</small>
|
||||||
|
{% if transaction.type == "order" %}
|
||||||
|
<div class="mt-2">
|
||||||
|
{% if transaction.order and transaction.order.items|length > 0 %}
|
||||||
|
<div class="small text-muted mb-2">
|
||||||
|
{% for item in transaction.order.items[:3] %}
|
||||||
|
{{ item.product.current_details.name }}{% if loop.index < transaction.order.items[:3]|length %},{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% if transaction.order.items|length > 3 %}
|
||||||
|
<div class="text-muted">+ {{ transaction.order.items|length - 3 }} weitere{% if transaction.order.items|length - 3 == 1 %} Artikel{% else %} Artikel{% endif %}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<a href="/shop/order/{{ transaction.order_id }}" class="btn btn-sm btn-outline-primary">Einkauf ansehen</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="text-end ms-3">
|
||||||
|
<span class="fs-5 fw-bold {% if transaction.total_amount < 0 %}text-danger{% else %}text-success{% endif %}">
|
||||||
|
{{ transaction.total_amount | format_number }} €
|
||||||
|
</span>
|
||||||
|
{% if transaction.quantity %}
|
||||||
|
<div class="small text-muted">{{ transaction.quantity }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<div class="list-group-item text-center py-5 text-muted">
|
||||||
|
<p class="mb-0">Noch keine Buchungen</p>
|
||||||
|
<small>Deine Buchungen werden hier erscheinen</small>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
<td>{{ account.users | map(attribute='display_name') | join(", ") }}</td>
|
<td>{{ account.users | map(attribute='display_name') | join(", ") }}</td>
|
||||||
<td>{{ account.balance | format_number }} €</td>
|
<td>{{ account.balance | format_number }} €</td>
|
||||||
<td>
|
<td>
|
||||||
|
<a class="btn btn-sm btn-primary" href="/admin/accounts/{{account.id}}/details">Details ansehen</a>
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#addUserModal-{{ account.id }}">Benutzer hinzufügen</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#addUserModal-{{ account.id }}">Benutzer hinzufügen</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#addBalanceModal-{{ account.id }}">Guthaben hinzufügen</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-bs-toggle="modal" data-bs-target="#addBalanceModal-{{ account.id }}">Guthaben hinzufügen</button>
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
{% if transaction.order and transaction.order.items|length > 0 %}
|
{% if transaction.order and transaction.order.items|length > 0 %}
|
||||||
<div class="small text-muted mb-2">
|
<div class="small text-muted mb-2">
|
||||||
{% for item in transaction.order.items[:3] %}
|
{% for item in transaction.order.items[:3] %}
|
||||||
{{ item.product.name }}{% if loop.index < transaction.order.items[:3]|length %},{% endif %}
|
{{ item.product.current_details.name }}{% if loop.index < transaction.order.items[:3]|length %},{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if transaction.order.items|length > 3 %}
|
{% if transaction.order.items|length > 3 %}
|
||||||
<div class="text-muted">+ {{ transaction.order.items|length - 3 }} weitere{% if transaction.order.items|length - 3 == 1 %} Artikel{% else %} Artikel{% endif %}</div>
|
<div class="text-muted">+ {{ transaction.order.items|length - 3 }} weitere{% if transaction.order.items|length - 3 == 1 %} Artikel{% else %} Artikel{% endif %}</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user