diff --git a/UI_V2/admin/company_data.py b/UI_V2/admin/company_data.py new file mode 100644 index 0000000..326d577 --- /dev/null +++ b/UI_V2/admin/company_data.py @@ -0,0 +1,80 @@ +import flet as ft +import json + +class CompanyData: + def __init__(self, page: ft.Page): + self.page = page + self.data =self.load_data() + self.comapny_name = ft.TextField(label = "Denumire firma:", value=self.data['company_name'] if self.data else '') + self.vat = ft.TextField(label="CUI", value=self.data['vat'] if self.data else '') + self.register_number = ft.TextField(label="Numar registru comert", value=self.data['register_number'] if self.data else '') + self.company_address = ft.TextField(label="Sediu", value=self.data['address'] if self.data else '') + self.error_mseeage = ft.Text("") + + def on_save_btn_click(self, e): + + data = { + 'company_name': self.comapny_name.value, + 'vat': self.vat.value, + 'register_number': self.register_number.value, + 'address': self.company_address.value + } + + try: + with open('instance/company_data.json', 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=4) + + self.page.snack_bar = ft.SnackBar(ft.Text('Datele companiei au fost salvate cu succes!')) + self.page.snack_bar.open = True + self.page.update() + self.error_mseeage.value = "Datele au fost salvate cu succes!" + self.error_mseeage.update() + except Exception as ex: + self.page.snack_bar = ft.SnackBar(ft.Text(f'Eroare la salvare: {ex}')) + self.page.snack_bar.open = True + self.page.update() + + def load_data(self): + try: + with open('instance/company_data.json', 'r', encoding='utf-8') as f: + data = json.load(f) + return data + except FileNotFoundError: + return { + 'company_name': '', + 'vat': '', + 'register_number': '', + 'address': '' + } + except json.JSONDecodeError: + self.page.snack_bar = ft.SnackBar(ft.Text('Eroare: fișierul company_data.json este corupt.')) + self.page.snack_bar.open = True + self.page.update() + return None + except Exception as ex: + self.page.snack_bar = ft.SnackBar(ft.Text(f'Eroare la citirea datelor companiei: {ex}')) + self.page.snack_bar.open = True + self.page.update() + return None + + + def build(self): + return ft.Container( + content=ft.Column( + [ + ft.Text("Despre noi:", size=18, weight=ft.FontWeight.BOLD), + self.comapny_name, + self.vat, + self.register_number, + self.company_address, + ft.Text(), + ft.Row( + [ + ft.FilledButton("Salveaza", icon=ft.Icons.SAVE, on_click=self.on_save_btn_click) + ], + alignment=ft.MainAxisAlignment.CENTER + ) + + ] + ) + ) \ No newline at end of file diff --git a/UI_V2/admin/company_details.py b/UI_V2/admin/company_details.py new file mode 100644 index 0000000..8b1b7fd --- /dev/null +++ b/UI_V2/admin/company_details.py @@ -0,0 +1,117 @@ +import flet as ft +import json + +class CompanyDetails: + def __init__(self, page: ft.Page): + self.page = page + self.data = self.load_data() + self.confidentialty_policy = ft.TextField( + multiline=True, + min_lines=5, + max_lines=10, + value=self.data['confidentialty_policy'] if self.data else '' + ) + self.delivery_policy = ft.TextField( + multiline=True, + min_lines=5, + max_lines=10, + value=self.data['delivery_policy'] if self.data else '' + ) + self.cancel_policy = ft.TextField( + multiline=True, + min_lines=5, + max_lines=10, + value=self.data['cancel_policy'] if self.data else '' + ) + self.gdpr = ft.TextField( + multiline=True, + min_lines=5, + max_lines=10, + value=self.data['gdpr'] if self.data else '' + ) + self.terms_and_conditions = ft.TextField( + multiline=True, + min_lines=5, + max_lines=10, + value=self.data['terms_and_conditions'] if self.data else '' + ) + self.error_mseeage = ft.Text("") + + def on_save_btn_click(self, e): + policies = { + 'confidentialty_policy': self.confidentialty_policy.value, + 'delivery_policy': self.delivery_policy.value, + 'cancel_policy': self.cancel_policy.value, + 'gdpr': self.gdpr.value, + 'terms_and_conditions': self.terms_and_conditions.value + } + + try: + with open('instance/policies.json', 'w', encoding='utf-8') as f: + json.dump(policies, f, ensure_ascii=False, indent=4) + + self.page.snack_bar = ft.SnackBar(ft.Text('Politicile au fost salvate cu succes!')) + self.page.snack_bar.open = True + self.page.update() + self.error_mseeage.value = "Datele au fost salvate cu succes!" + self.error_mseeage.update() + except Exception as ex: + self.page.snack_bar = ft.SnackBar(ft.Text(f'Eroare la salvare: {ex}')) + self.page.snack_bar.open = True + self.page.update() + + def load_data(self): + try: + with open('instance/policies.json', 'r', encoding='utf-8') as f: + data = json.load(f) + return data + except FileNotFoundError: + return { + 'confidentialty_policy': '', + 'delivery_policy': '', + 'cancel_policy': '', + 'gdpr': '', + 'terms_and_conditions': '' + } + except json.JSONDecodeError: + self.page.snack_bar = ft.SnackBar(ft.Text('Eroare: fișierul policies.json este corupt.')) + self.page.snack_bar.open = True + self.page.update() + return None + except Exception as ex: + self.page.snack_bar = ft.SnackBar(ft.Text(f'Eroare la citirea politicilor: {ex}')) + self.page.snack_bar.open = True + self.page.update() + return None + + def build(self): + return ft.Container( + content=ft.Column( + [ + ft.Text("Politica de confidențialitate", size=18, weight=ft.FontWeight.BOLD), + self.confidentialty_policy, + ft.Divider(height=1), + ft.Text("Politica de livrare comandă", size=18, weight=ft.FontWeight.BOLD), + self.delivery_policy, + ft.Divider(height=1), + ft.Text("Politica de anulare comandă", size=18, weight=ft.FontWeight.BOLD), + self.cancel_policy, + ft.Divider(height=1), + ft.Text("Politica GDPR (siguranța datelor cu caracter personal)", size=18, weight=ft.FontWeight.BOLD), + self.gdpr, + ft.Divider(height=1), + ft.Text("Termeni și condiții", size=18, weight=ft.FontWeight.BOLD), + self.terms_and_conditions, + ft.Text(), + self.error_mseeage, + ft.Row( + [ + ft.FilledButton("Salveaza", icon = ft.Icons.SAVE, on_click=self.on_save_btn_click) + ], + alignment=ft.MainAxisAlignment.CENTER + ) + + ], + scroll=ft.ScrollMode.ADAPTIVE + ) + ) \ No newline at end of file diff --git a/UI_V2/admin/dashboard.py b/UI_V2/admin/dashboard.py index 592fb92..2ae3d68 100644 --- a/UI_V2/admin/dashboard.py +++ b/UI_V2/admin/dashboard.py @@ -5,6 +5,7 @@ from admin.banner import Banner from admin.orders import OrdersPage from admin.clients import Clients from admin.fidelity_cards import FidelityCards +from admin.settings import Settings class Dashboard: def __init__(self, page: ft.Page): @@ -58,6 +59,11 @@ class Dashboard: selected_icon=ft.Icon(ft.Icons.CARD_GIFTCARD), label_content=ft.Text("Card de\nfidelitate"), ), + ft.NavigationRailDestination( + icon=ft.Icons.SETTINGS_APPLICATIONS_OUTLINED, + selected_icon=ft.Icon(ft.Icons.SETTINGS_APPLICATIONS), + label_content=ft.Text("Setari"), + ), ft.NavigationRailDestination( icon=ft.Icons.LOGOUT_OUTLINED, selected_icon=ft.Icon(ft.Icons.LOGOUT_ROUNDED), @@ -97,6 +103,10 @@ class Dashboard: self.placeholder.content = self.fidelity_cards.build() self.placeholder.update() case 7: + self.settings = Settings(self.page, self) + self.placeholder.content = self.settings.build() + self.placeholder.update() + case 8: self.page.client_storage.clear() self.page.session.clear() self.page.go('/') diff --git a/UI_V2/admin/settings.py b/UI_V2/admin/settings.py new file mode 100644 index 0000000..7d4cb7d --- /dev/null +++ b/UI_V2/admin/settings.py @@ -0,0 +1,62 @@ +import flet as ft +from admin.company_data import CompanyData +from admin.company_details import CompanyDetails + +class Settings: + def __init__(self, page: ft.Page, dashboard): + self.page = page + self.dashboard = dashboard + + def on_add_policy_btn_click(self, e): + policy = CompanyDetails(self.page) + self.dashboard.placeholder.content = policy.build() + self.dashboard.placeholder.update() + + def on_add_data_btn_click(self, e): + data = CompanyData(self.page) + self.dashboard.placeholder.content = data.build() + self.dashboard.placeholder.update() + + def build(self): + return ft.Container( + content=ft.Column( + [ + ft.GridView( + [ + ft.Card( + content=ft.Container( + content=ft.Column( + [ + ft.Icon(name=ft.Icons.DATASET, size=100), + ft.Text("Adauga datele companiei"), + ft.Button("Adauga", icon=ft.Icons.ADD, on_click=self.on_add_data_btn_click) + ], + horizontal_alignment=ft.CrossAxisAlignment.CENTER + ), + padding=10 + ) + ), + ft.Card( + content=ft.Container( + content=ft.Column( + [ + ft.Icon(name=ft.Icons.POLICY, size=100), + ft.Text("Adauga politicile companiei"), + ft.Button("Adauga", icon=ft.Icons.ADD, on_click=self.on_add_policy_btn_click) + ], + horizontal_alignment=ft.CrossAxisAlignment.CENTER + ), + padding=10 + ) + ) + ], + spacing=10, + runs_count=4, + max_extent=250, + child_aspect_ratio=1.0, + expand=True, + width=1000 + ) + ] + ) + ) \ No newline at end of file diff --git a/UI_V2/pages/profile/profilepage.py b/UI_V2/pages/profile/profilepage.py index 5fdaa26..984914d 100644 --- a/UI_V2/pages/profile/profilepage.py +++ b/UI_V2/pages/profile/profilepage.py @@ -193,18 +193,23 @@ class ProfilePage: 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() + try: + 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() + except Exception as e: + print ("Unable to save company data", e) + try: + 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() + except Exception as e: + print("Unable to save delivery address.", e) def on_back_btn_click(self, e): self.page.go('/')