- Add resolve_page_config() to determine PageConfig from cart/calendar context - Set page_config_id on Order during checkout - Pass page_config to SumUp create_checkout and build_sumup_reference - check_sumup_status uses order.page_config for per-page credential resolution - Fix: use session.flush() instead of g.s.flush() in check_sumup_status Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
from suma_browser.app.payments.sumup import get_checkout as sumup_get_checkout
|
|
from sqlalchemy import update
|
|
from models.calendars import CalendarEntry
|
|
|
|
|
|
async def check_sumup_status(session, order):
|
|
# Use order's page_config for per-page SumUp credentials
|
|
page_config = getattr(order, "page_config", None)
|
|
checkout_data = await sumup_get_checkout(order.sumup_checkout_id, page_config=page_config)
|
|
order.sumup_status = checkout_data.get("status") or order.sumup_status
|
|
sumup_status = (order.sumup_status or "").upper()
|
|
|
|
if sumup_status == "PAID":
|
|
if order.status != "paid":
|
|
order.status = "paid"
|
|
filters = [
|
|
CalendarEntry.deleted_at.is_(None),
|
|
CalendarEntry.state == "ordered",
|
|
CalendarEntry.order_id==order.id,
|
|
]
|
|
if order.user_id is not None:
|
|
filters.append(CalendarEntry.user_id == order.user_id)
|
|
elif order.session_id is not None:
|
|
filters.append(CalendarEntry.session_id == order.session_id)
|
|
|
|
await session.execute(
|
|
update(CalendarEntry)
|
|
.where(*filters)
|
|
.values(state="provisional")
|
|
)
|
|
elif sumup_status == "FAILED":
|
|
order.status = "failed"
|
|
else:
|
|
order.status = sumup_status.lower() or order.status
|
|
|
|
await session.flush()
|