add admin settings menu
This commit is contained in:
80
UI_V2/admin/company_data.py
Normal file
80
UI_V2/admin/company_data.py
Normal file
@@ -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
|
||||
)
|
||||
|
||||
]
|
||||
)
|
||||
)
|
||||
117
UI_V2/admin/company_details.py
Normal file
117
UI_V2/admin/company_details.py
Normal file
@@ -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
|
||||
)
|
||||
)
|
||||
@@ -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('/')
|
||||
|
||||
62
UI_V2/admin/settings.py
Normal file
62
UI_V2/admin/settings.py
Normal file
@@ -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
|
||||
)
|
||||
]
|
||||
)
|
||||
)
|
||||
@@ -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('/')
|
||||
|
||||
Reference in New Issue
Block a user