import flet as ft from dbActions.users import Users from dbActions.company import Company class ProfilePage: def __init__(self, page: ft.Page): self.page = page self.user_manager = Users() self.company_manager = Company() self.user = self.page.session.get("user") self.company = self.company_manager.get_company(self.user['id']) self.first_name = ft.TextField( label="Prenume", value=self.user['name'].split('~')[0] if "@default.com" not in self.user['email'] and '~' in self.user['email'] else None ) self.last_name = ft.TextField( label="Nume", value=self.user['name'].split('~')[1] if "@default.com" not in self.user['email'] and '~' in self.user['email'] else None ) self.email = ft.TextField(label="E-mail", value=self.user['email'], read_only=True) self.phone = ft.TextField(label="Telefon", value=self.user['phone']) self.address = ft.TextField( label="Strada si numar", multiline=True, min_lines=3, max_lines=5, value = self.user['address'].split("~")[0].split("%")[1] if self.user['address'] and "~" in self.user['address'] else '' ) self.city = ft.TextField( label="Oras", value = self.user['address'].split("~")[0].split('%')[0] if self.user['address'] and "~" in self.user['address'] else '' ) self.company_name = ft.TextField( label="Denumire firma", value=self.company['name'] if self.company else '' ) self.vat = ft.TextField( label="CUI", value=self.company['vat'] if self.company else '' ) self.register_number = ft.TextField( label="Numar registru comert", value=self.company['register_number'] if self.company else '' ) self.company_address = ft.TextField( label="Sediu", multiline=True, min_lines=3, max_lines=5, value=self.company['address'] if self.company else '') self.second_address_placeholder = ft.Column() self.second_address = ft.TextField( label="Adresa de livrare (str, nr, oras, judet)", multiline=True, min_lines=3, max_lines=5, value=self.user['address'].split("~")[1] if self.user['address'] and "~" in self.user['address'] and len(self.user['address'].split("~"))>1 else '' ) self.second_address_placeholder =ft.Column() self.order_placeholder =ft.Column() self.error_message = ft.Text("", text_align=ft.TextAlign.CENTER) if self.user['address'] and len(self.user['address'].split("~"))>1 : self.is_second_address = True self.second_address_placeholder.controls.append(self.second_address) if self.company: self.is_company = True self.order_placeholder.controls.append(self.company_name) self.order_placeholder.controls.append(self.vat) self.order_placeholder.controls.append(self.register_number) self.order_placeholder.controls.append(self.company_address) self.is_company = False self.is_second_address = False def on_second_address_btn_click(self, e): self.is_second_address = True self.second_address_placeholder.controls.append(self.second_address) self.second_address_placeholder.update() def on_order_btn_click(self, e): self.is_company = True self.order_placeholder.controls.append(self.company_name) self.order_placeholder.controls.append(self.vat) self.order_placeholder.controls.append(self.register_number) self.order_placeholder.controls.append(self.company_address) self.order_placeholder.update() def check_inserted_user_data(self, username, phone, address, city): found = False if username is None or len(username)< 1: found = True if phone is None or len(phone)< 1: found = True if address is None or len(address)< 1: found = True if city is None or len(city)< 1: found = True if found: self.error_message.value = "Toate campurile sunt obligatori!" self.error_message.color = ft.Colors.RED self.error_message.update() return found def check_second_address_inserted(self, address): if address is None or len(address)< 1: self.error_message.value = "Va rugam inserati adresa de livrare!" self.error_message.color = ft.Colors.RED self.error_message.update() return True return False def check_company_data_inserted(self, company_name, vat, register_number, company_address): found = False if company_name is None or len(company_name)< 1: found = True if vat is None or len(vat)< 1: found = True if register_number is None or len(register_number)< 1: found = True if company_address is None or len(company_address)< 1: found = True if found: self.error_message.value = "Toate campurile sunt obligatori!" self.error_message.color = ft.Colors.RED self.error_message.update() return found def on_save_btn_click(self, e): username = self.first_name.value + "~" + self.last_name.value phone = self.phone.value address = self.city.value+"%"+self.address.value if self.is_second_address: if self.check_second_address_inserted(self.second_address.value): return address = self.city.value+"%"+self.address.value + '~' + self.second_address.value if self.check_inserted_user_data(username, phone, self.address.value, self.city.value): return self.user_manager.update_user_data(username, phone, address, self.user['id']) if self.is_company: if self.check_company_data_inserted(self.company_name.value, self.vat.value, self.register_number.value, self.company_address.value): return if self.company: company['name'] = self.company_name.value company['vat'] = self.vat.value company['register_number'] = self.register_number.value company['address'] = self.company_address.value self.company_manager.update_company(company) else: company = { 'user_id' : self.user['id'], 'name': self.company_name.value, 'vat': self.vat.value, 'register_number': self.register_number.value, 'address': self.company_address.value } self.company_manager.add_company(company) self.error_message.value = "Profilul a fost salvat!" self.error_message.color = ft.Colors.GREEN self.error_message.update() self.user = self.user_manager.get(self.user['id']) self.page.session.set('user',self.user) self.first_name.value=self.user['name'].split('~')[0] self.first_name.update() self.last_name.value=self.user['name'].split('~')[1] self.last_name.update() self.phone.value = self.user['phone'] self.phone.update() self.address.value = self.user['address'].split("~")[0].split("%")[1] if self.user['address'] else '' self.address.update() self.city.value = self.user['address'].split("~")[0].split("%")[0] if self.user['address'] else '' self.city.update() self.company = self.company_manager.get_company(self.user['id']) self.company_name.value=self.company['name'] if self.company else '' self.company_name.update() self.vat.value = self.company['vat'] if self.company else '' self.vat.update() self.register_number.value=self.company['register_number'] if self.company else '' self.register_number.update() self.company_address.value=self.company['address'] if self.company else '' self.company_address.update() self.second_address.value=self.user['address'].split("~")[1] if self.user['address'] and len(self.user['address'].split("~"))>1 else '' self.second_address.update() def on_back_btn_click(self, e): self.page.go('/') def on_logout_btn_click(self, e): self.page.session.clear() self.page.go('/') def build(self): return ft.Container( content=ft.Column( [ ft.Row( [ ft.FilledButton( "Inapoi", icon=ft.Icons.ARROW_BACK, on_click = self.on_back_btn_click ) ], alignment=ft.MainAxisAlignment.END ), ft.Icon(name=ft.Icons.ACCOUNT_CIRCLE, size=100), self.first_name, self.last_name, self.email, self.phone, self.address, self.city, ft.Divider(), ft.Text("Adresa de livrare difera de adresa de domiciliu?", text_align=ft.TextAlign.CENTER), ft.Button("Adauga adresa livrare", width=400, on_click=self.on_second_address_btn_click), self.second_address_placeholder, ft.Divider(), ft.Button("Doriti Factura?", width=400, on_click=self.on_order_btn_click), self.order_placeholder, self.error_message, ft.FilledButton( "Salveaza", icon=ft.Icons.SAVE, on_click=self.on_save_btn_click, width=400 ), ft.FilledButton( "Deconectare", icon=ft.Icons.LOGOUT, on_click=self.on_logout_btn_click, width=400, bgcolor=ft.Colors.GREY ), ft.Text("") ], width=400, alignment=ft.MainAxisAlignment.START, horizontal_alignment=ft.CrossAxisAlignment.CENTER, scroll=ft.ScrollMode.ADAPTIVE ), padding=10, expand=True )