Files
ELM/src/elm/pages/PayPalReturnPage.py
T
Typhus 1753d67752 prerelease/0.6.0 (#1)
Co-authored-by: David Rodenkirchen <drodenkirchen@linetco.com>
Reviewed-on: #1
2026-05-27 23:17:52 +00:00

69 lines
2.6 KiB
Python

from __future__ import annotations
import logging
from asyncio import sleep
from rio import Component, Column, Row, Text, Spacer, page, Rectangle, QueryParameter, ProgressCircle
from rio.event import on_populate
from elm.services import AccountingService
logger = logging.getLogger(__name__.split(".")[-1])
@page(name="PayPal Return", url_segment="return-paypal")
class PayPalReturnPage(Component):
token: QueryParameter[str] = "No Value"
in_progress: bool = True
error_message: str = ""
success_message: str = ""
@on_populate
async def on_populate(self) -> None:
result = await self.session[AccountingService].finalize_paypal_process(self.token)
await sleep(1)
if result:
self.in_progress = False
self.success_message = "Aufladung erfolgreich. Du kannst dieses Fenster schließen."
else:
self.in_progress = False
self.error_message = "Es ist ein Fehler aufgetreten, bitte kontaktiere uns"
def build(self) -> Component:
col_contents = []
if self.in_progress:
col_contents.append(ProgressCircle(min_size=5, color=self.session.theme.primary_color))
col_contents.append(Text("Wir prüfen deine Aufladung", overflow="wrap", justify="center"))
else:
if self.error_message:
col_contents.append(Text(self.error_message, overflow="wrap", justify="center", fill=self.session.theme.danger_color))
elif self.success_message:
col_contents.append(Text(self.success_message, overflow="wrap", justify="center", fill=self.session.theme.success_color))
return Row(
Rectangle(
content=Column(
Rectangle(
content=Rectangle(
content=Text("Paypal Aufladung", margin=0.5, selectable=False, overflow="wrap"),
fill=self.session.theme.header_box_background_color,
margin=0.4
),
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color,
),
Column(
*col_contents,
margin=1,
spacing=1
),
Spacer()
),
fill=self.session.theme.box_color,
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color,
min_width=1 if self.session.is_mobile() else 25
),
align_x=0.5,
align_y=0.5
)