Add multi account support to shpping cart
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from decimal import Decimal
|
||||
from typing import Annotated
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Request
|
||||
from fastapi import APIRouter, Form, HTTPException, Request
|
||||
from sqlalchemy import select
|
||||
from starlette import status
|
||||
from starlette.responses import RedirectResponse
|
||||
@@ -29,17 +30,32 @@ async def get_cart(request: Request, session: SessionDep, user: UserDep):
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"order.html.jinja",
|
||||
context={"request": request, "order": user.shopping_cart, "is_cart": True},
|
||||
context={
|
||||
"request": request,
|
||||
"user": user,
|
||||
"order": user.shopping_cart,
|
||||
"is_cart": True,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@shop_router.get("/shop/finalize_order")
|
||||
async def finalize_order(request: Request, session: SessionDep, user: UserDep):
|
||||
@shop_router.post("/shop/finalize_order")
|
||||
async def finalize_order(
|
||||
request: Request,
|
||||
session: SessionDep,
|
||||
user: UserDep,
|
||||
account_id: Annotated[float, Form()],
|
||||
):
|
||||
|
||||
cart = user.shopping_cart
|
||||
|
||||
# TODO: Implement
|
||||
cart.finalize(user.accounts[0])
|
||||
for account in user.accounts:
|
||||
if account.id == account_id:
|
||||
break
|
||||
else:
|
||||
raise HTTPException(status_code=400, detail="Invalid account ID.")
|
||||
|
||||
cart.finalize(account)
|
||||
|
||||
return RedirectResponse(url=f"/", status_code=status.HTTP_302_FOUND)
|
||||
|
||||
|
||||
@@ -70,8 +70,20 @@
|
||||
|
||||
{% if is_cart %}
|
||||
<div class="d-flex justify-content-between align-items-center mt-3">
|
||||
<div>
|
||||
<a href="/shop/finalize_order" class="btn btn-primary">Jetzt Buchen</a>
|
||||
<div >
|
||||
<form method="post" action="/shop/finalize_order" class="d-flex align-items-center">
|
||||
{% if user.accounts|length > 1 %}
|
||||
<select name="account_id" class="form-select form-select-sm me-2" required>
|
||||
<option value="">-- Konto wählen --</option>
|
||||
{% for account in user.accounts %}
|
||||
<option value="{{ account.id }}">{{ account.name }} ({{ account.balance | format_number }} €)</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% elif user.accounts|length == 1 %}
|
||||
<input type="hidden" name="account_id" value="{{ user.accounts[0].id }}">
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">Jetzt Bezahlen</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user