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

174 lines
6.5 KiB
Python

import flet as ft
import requests
import json
from config import API_BASE_URL
class Tenants:
def __init__(self, page):
self.page = page
self.search_field = ft.TextField(label="Search", on_submit=self.on_search_btn_click, expand=True)
self.all_tenants = self.get_all_tenants()
self.tenants_list = ft.ListView(
controls=self.create_list(self.all_tenants, self.on_tenant_btn_click),
spacing=10,
expand=4
)
self.name = ft.TextField(label="Company Name")
self.address = ft.TextField(label="Company Address")
self.contact_name = ft.TextField(label="Contact Name")
self.email = ft.TextField(label="Email")
self.phone = ft.TextField(label="Phone")
self.first_order_number = ft.TextField(label="First Order Number")
self.register_number = ft.TextField(label="Register Number")
self.terms = ft.TextField(label="Terms and Conditions", multiline=True, min_lines=5, max_lines=10)
self.logo_filename = ft.TextField(label="Logo")
self.save = ft.Button("Save", on_click=self.on_save_btn_click, width=100)
self.error = ft.Text("")
self.user_id = None
self.user_details = ft.Column(
[
self.name,
self.address,
self.contact_name,
self.email,
self.phone,
self.first_order_number,
self.register_number,
self.logo_filename,
self.terms,
self.save,
self.error
],
expand=6
)
def on_save_btn_click(self, e):
user_data = {
'name': self.name.value,
'contact_name': self.contact_name.value,
'email': self.email.value,
'phone': self.phone.value,
'register_number': self.register_number.value,
'address': self.address.value,
'logo_filename': self.logo_filename.value,
'terms': self.terms.value,
'first_order_number': self.first_order_number.value,
'user_id': self.user_id
}
try:
token = self.page.client_storage.get("token")
headers = {"Authorization": f"Bearer {token}"}
response = requests.post(f"{API_BASE_URL}/admin/users/update", headers=headers, json = user_data)
if response.status_code == 200:
self.error.value = 'Tenant data saved!'
self.error.color = ft.Colors.GREEN
self.error.update()
else:
self.error.value = 'Tenant data not saved!'
self.error.color = ft.Colors.RED
self.error.update()
except Exception as e:
print("Error saving tenant data:", e)
def on_search_btn_click(self, e):
value = self.search_field.value
print(f'Search for {value}')
buffer = []
for tenant in self.all_tenants:
if value in tenant['name']:
buffer.append(tenant)
self.tenants_list.controls.clear()
self.tenants_list.controls = self.create_list(buffer, self.on_tenant_btn_click)
self.tenants_list.update()
def on_tenant_btn_click(self, item):
self.error.value = ''
self.error.color = ft.Colors.RED
self.error.update()
self.name.value = item['name']
self.name.update()
self.address.value = item['address']
self.address.update()
self.contact_name.value = item['contact_name']
self.contact_name.update()
self.email.value = item['email']
self.email.update()
self.phone.value = item['phone']
self.phone.update()
self.first_order_number.value = item['first_order_number']
self.first_order_number.update()
self.register_number.value = item['register_number']
self.register_number.update()
self.terms.value = item['terms']
self.terms.update()
self.logo_filename.value = item['logo_filename']
self.logo_filename.update()
self.user_id = item['id']
def get_all_tenants(self):
try:
token = self.page.client_storage.get("token")
headers = {"Authorization": f"Bearer {token}"}
response = requests.get(f"{API_BASE_URL}/admin/users", headers=headers)
return response.json() if response.status_code == 200 else []
except Exception as e:
print("Error loading clients:", e)
def create_list(self, items, on_click_handler):
"""Helper to create list items for a column."""
return [
ft.Container(
content=ft.Row(
[
ft.Text(item['name'], expand=True),
],
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
),
width=300,
bgcolor=ft.Colors.BLUE_50,
padding=10,
border_radius=8,
border=ft.border.all(1, ft.Colors.GREY_300),
ink=True, # To enable click effect
on_click=lambda e, id=item: on_click_handler(id), # Attach the click handler
)
for item in items
]
def build(self):
return ft.Container(
content=ft.Column(
[
ft.Text("Tenants", size=24, weight=ft.FontWeight.BOLD),
ft.Column(
[
ft.Row(
[
self.search_field,
ft.Button(
"Search",
icon=ft.Icons.SEARCH,
width=100,
on_click=self.on_search_btn_click
)
]
),
]
),
ft.Row(
[
self.tenants_list,
self.user_details
],
vertical_alignment=ft.CrossAxisAlignment.START
)
],
scroll=ft.ScrollMode.ADAPTIVE
),
expand=True
)