Files
TMS/transportmanager/client/pages/admin_page.py
2025-08-31 17:55:26 +03:00

147 lines
5.8 KiB
Python

import flet as ft
from pages.admin_tenants_page import Tenants
from pages.admin_subscriptions_page import Subscriptions
import requests
from config import API_BASE_URL
class Admin:
def __init__(self, page: ft.Page):
self.page = page
self.placeholder = ft.Column(expand=True)
self.total_tenants = ft.Text("Total tenants: 0")
self.revenues = ft.Text("Total revenue: 0")
def get_subscriptions(self):
try:
token = self.page.client_storage.get("token")
headers = {"Authorization": f"Bearer {token}"}
response = requests.get(f"{API_BASE_URL}/admin/subscriptions", headers=headers)
return response.json() if response.status_code == 200 else []
except Exception as e:
print("Error loading clients:", e)
def build_dashboard(self):
all_subscriptions = self.get_subscriptions()
total_tenants = len(all_subscriptions)
self.total_tenants.value = f"Total tenants: {total_tenants}"
sum = 0
for subscription in all_subscriptions:
if subscription['status'] == 'active':
if subscription['plan'] == 'first_2_months':
sum += 0
elif subscription['plan'] == 'monthly':
sum += 100
elif subscription['plan'] == 'yearly':
sum += 1000
self.revenues.value = f"Total revenue: {sum}"
return ft.Row(
[
ft.Container(
content = ft.Column(
[
ft.Icon(name=ft.Icons.PEOPLE, size=50),
self.total_tenants,
],
alignment=ft.MainAxisAlignment.CENTER,
horizontal_alignment=ft.CrossAxisAlignment.CENTER
),
bgcolor=ft.Colors.BLUE_100,
border_radius=20,
padding=20
),
ft.Container(
content = ft.Column(
[
ft.Icon(name=ft.Icons.AUTORENEW, size=50),
self.revenues,
],
alignment=ft.MainAxisAlignment.CENTER,
horizontal_alignment=ft.CrossAxisAlignment.CENTER
),
bgcolor=ft.Colors.BLUE_100,
border_radius=20,
padding=20
),
]
)
def on_tenants_btn_click(self, e):
tenents = Tenants(self.page)
self.placeholder.controls = [tenents.build()]
self.placeholder.update()
def on_subscription_btn_click(self, e):
subscription = Subscriptions(self.page)
self.placeholder.controls = [subscription.build()]
self.placeholder.update()
def on_dashboard_btn_click(self, e):
self.placeholder.controls = [
ft.Text("Admin Dashboard", size=24, weight=ft.FontWeight.BOLD),
self.build_dashboard()
]
self.placeholder.update()
def on_logout_btn_click(self, e):
self.page.client_storage.remove("token")
self.page.session.clear()
self.page.go("/auth")
def build(self):
self.placeholder.controls = [
ft.Text("Admin Dashboard", size=24, weight=ft.FontWeight.BOLD),
self.build_dashboard()
]
return ft.Container(
content= ft.Row(
[
ft.Column(
[
ft.Column(
[
ft.Button(
"Dashboard",
on_click=self.on_dashboard_btn_click,
width=150,
icon=ft.Icons.DASHBOARD
),
ft.Button(
"Tenents",
on_click= self.on_tenants_btn_click,
width=150,
icon=ft.Icons.PEOPLE
),
ft.Button(
"Subscriptions",
on_click=self.on_subscription_btn_click,
width=150,
icon=ft.Icons.AUTORENEW
)
]
),
ft.Button(
"Logout",
on_click=self.on_logout_btn_click,
width=150,
icon=ft.Icons.LOGOUT
)
],
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
#width=180
),
ft.VerticalDivider(),
ft.Container(
content=ft.Column(
[
self.placeholder,
]
),
expand=True
)
],
expand=True
),
expand=True,
padding=20
)