init commit
This commit is contained in:
247
transportmanager/client/pages/subscription_page.py
Normal file
247
transportmanager/client/pages/subscription_page.py
Normal file
@@ -0,0 +1,247 @@
|
||||
import flet as ft
|
||||
import requests
|
||||
from config import API_BASE_URL
|
||||
|
||||
class Subscription:
|
||||
def __init__(self, page: ft.Page, dashboard):
|
||||
self.page = page
|
||||
self.dashboard = dashboard
|
||||
self.subscription = self.get_current_subscription_plan()
|
||||
self.plan = {
|
||||
'first_2_months':'First Two Months' ,
|
||||
'monthly':'Monthly',
|
||||
'yearly':'Yearly'
|
||||
}
|
||||
self.status = {
|
||||
'active':'Active',
|
||||
'cancelled':'Cancelled',
|
||||
'expired':'Expired',
|
||||
'less_than_5_days':'Less than 5 days'
|
||||
}
|
||||
self.current_subscription_plan = ft.Text(self.plan[self.subscription['plan']] if self.subscription else "No subscription")
|
||||
self.current_subscription_status = ft.Text(self.status[self.subscription['status']] if self.subscription else "None")
|
||||
self.monthly_subscription_price = ft.Text(
|
||||
"100 Euro/Month",
|
||||
weight=ft.FontWeight.BOLD,
|
||||
size=18,
|
||||
color=ft.Colors.WHITE
|
||||
)
|
||||
self.year_subscription_price = ft.Text(
|
||||
"1000 Euro/Year",
|
||||
weight=ft.FontWeight.BOLD,
|
||||
size=18,
|
||||
color=ft.Colors.WHITE
|
||||
)
|
||||
self.first_subscription_price = ft.Text(
|
||||
"0 Euro/Month",
|
||||
weight=ft.FontWeight.BOLD,
|
||||
size=18,
|
||||
color=ft.Colors.WHITE
|
||||
)
|
||||
|
||||
def get_current_subscription_plan(self):
|
||||
try:
|
||||
token = self.page.client_storage.get("token")
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
response = requests.get(f"{API_BASE_URL}/subscription/", headers=headers)
|
||||
#print(response.text)
|
||||
return response.json()[-1] if response.status_code == 200 else None
|
||||
except Exception as e:
|
||||
print("Error loading subscription:", e)
|
||||
|
||||
def on_first_two_months_btn_click(self, e):
|
||||
try:
|
||||
token = self.page.client_storage.get("token")
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
response = requests.post(f"{API_BASE_URL}/subscription/first_2_months", headers=headers, )
|
||||
#print(response.text)
|
||||
self.change_subscription_to_active('first_2_months', 'active')
|
||||
return response.json() if response.status_code == 200 else None
|
||||
except Exception as e:
|
||||
print("Error loading subscription:", e)
|
||||
|
||||
def on_month_subscription_btn_click(self, e):
|
||||
try:
|
||||
token = self.page.client_storage.get("token")
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
response = requests.post(f"{API_BASE_URL}/subscription/one_month", headers=headers)
|
||||
#print(response.text)
|
||||
self.change_subscription_to_active('monthly', 'active')
|
||||
return response.json() if response.status_code == 200 else None
|
||||
except Exception as e:
|
||||
print("Error loading subscription:", e)
|
||||
|
||||
def on_year_subscription_btn_click(self, e):
|
||||
try:
|
||||
token = self.page.client_storage.get("token")
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
response = requests.post(f"{API_BASE_URL}/subscription/one_year", headers=headers)
|
||||
#print(response.text)
|
||||
self.change_subscription_to_active('yearly', 'active')
|
||||
return response.json() if response.status_code == 200 else None
|
||||
except Exception as e:
|
||||
print("Error loading subscription:", e)
|
||||
|
||||
def change_subscription_to_active(self, plan, status):
|
||||
self.dashboard.subscription_status_bottom.value = "Active"
|
||||
self.dashboard.subscription_status_bottom.color = ft.Colors.GREEN
|
||||
self.dashboard.subscription_status_bottom.update()
|
||||
|
||||
self.current_subscription_plan.value = self.plan[plan]
|
||||
self.current_subscription_plan.update()
|
||||
|
||||
self.current_subscription_status.value = self.status[status]
|
||||
self.current_subscription_status.update()
|
||||
|
||||
def build(self):
|
||||
return ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Row(
|
||||
[
|
||||
ft.Text("Subscription", size=24, weight=ft.FontWeight.BOLD),
|
||||
ft.Column(
|
||||
[
|
||||
ft.Row(
|
||||
[
|
||||
ft.Text("Current Subscription Plan:", weight=ft.FontWeight.BOLD),
|
||||
self.current_subscription_plan
|
||||
]
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
ft.Text("Subscription Status:"),
|
||||
self.current_subscription_status
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.SPACE_BETWEEN
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
ft.Container(
|
||||
content = ft.Column(
|
||||
[
|
||||
ft.Icon(
|
||||
name = ft.Icons.AUTORENEW,
|
||||
size=150
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Text("First Two Months", weight=ft.FontWeight.BOLD),
|
||||
self.first_subscription_price
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
expand=True
|
||||
),
|
||||
bgcolor=ft.Colors.BLUE_200,
|
||||
padding=20,
|
||||
width=250
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
ft.FilledButton("Add", width=150, on_click=self.on_first_two_months_btn_click)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
expand=True
|
||||
)
|
||||
],
|
||||
expand = True ,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER
|
||||
),
|
||||
border_radius=20,
|
||||
border=ft.border.all(1, ft.Colors.GREY_300),
|
||||
bgcolor=ft.Colors.BLUE_50,
|
||||
padding = ft.padding.symmetric(vertical=20),
|
||||
width=250,
|
||||
height=350
|
||||
),
|
||||
ft.Container(
|
||||
content = ft.Column(
|
||||
[
|
||||
ft.Icon(
|
||||
name = ft.Icons.AUTORENEW,
|
||||
size=150
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Text("One Month Subscription", weight=ft.FontWeight.BOLD),
|
||||
self.monthly_subscription_price
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
expand=True
|
||||
),
|
||||
bgcolor=ft.Colors.BLUE_200,
|
||||
padding=20,
|
||||
width=250
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
ft.FilledButton("Add / Renew", width=150, on_click=self.on_month_subscription_btn_click)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
expand=True
|
||||
)
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER
|
||||
),
|
||||
border_radius=20,
|
||||
border=ft.border.all(1, ft.Colors.GREY_300),
|
||||
bgcolor=ft.Colors.BLUE_50,
|
||||
padding = ft.padding.symmetric(vertical=20),
|
||||
width=250,
|
||||
height=350
|
||||
),
|
||||
ft.Container(
|
||||
content = ft.Column(
|
||||
[
|
||||
ft.Icon(
|
||||
name = ft.Icons.AUTORENEW,
|
||||
size=150
|
||||
),
|
||||
ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Text("One Year Subscription", weight=ft.FontWeight.BOLD),
|
||||
self.year_subscription_price
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
expand=True
|
||||
),
|
||||
bgcolor=ft.Colors.BLUE_200,
|
||||
padding=20,
|
||||
width=250
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
ft.FilledButton("Add / Renew", width=150, on_click=self.on_year_subscription_btn_click)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
expand=True
|
||||
)
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER
|
||||
),
|
||||
border_radius=20,
|
||||
border=ft.border.all(1, ft.Colors.GREY_300),
|
||||
bgcolor=ft.Colors.BLUE_50,
|
||||
padding = ft.padding.symmetric(vertical=20),
|
||||
width=250,
|
||||
height=350
|
||||
)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
spacing=20
|
||||
)
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.START,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
expand=True,
|
||||
spacing=50
|
||||
),
|
||||
expand=True
|
||||
)
|
||||
Reference in New Issue
Block a user