add fidelity card module
This commit is contained in:
@@ -4,6 +4,7 @@ from admin.products import ProductsPage
|
||||
from admin.banner import Banner
|
||||
from admin.orders import OrdersPage
|
||||
from admin.clients import Clients
|
||||
from admin.fidelity_cards import FidelityCards
|
||||
|
||||
class Dashboard:
|
||||
def __init__(self, page: ft.Page):
|
||||
@@ -52,6 +53,11 @@ class Dashboard:
|
||||
selected_icon=ft.Icon(ft.Icons.IMAGE_ROUNDED),
|
||||
label_content=ft.Text("Banner"),
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.CARD_GIFTCARD_OUTLINED,
|
||||
selected_icon=ft.Icon(ft.Icons.CARD_GIFTCARD),
|
||||
label_content=ft.Text("Card de\nfidelitate"),
|
||||
),
|
||||
ft.NavigationRailDestination(
|
||||
icon=ft.Icons.LOGOUT_OUTLINED,
|
||||
selected_icon=ft.Icon(ft.Icons.LOGOUT_ROUNDED),
|
||||
@@ -87,6 +93,10 @@ class Dashboard:
|
||||
self.placeholder.content = self.banner.build()
|
||||
self.placeholder.update()
|
||||
case 6:
|
||||
self.fidelity_cards = FidelityCards(self.page)
|
||||
self.placeholder.content = self.fidelity_cards.build()
|
||||
self.placeholder.update()
|
||||
case 7:
|
||||
self.page.client_storage.clear()
|
||||
self.page.session.clear()
|
||||
self.page.go('/')
|
||||
|
||||
230
UI_V2/admin/fidelity_cards.py
Normal file
230
UI_V2/admin/fidelity_cards.py
Normal file
@@ -0,0 +1,230 @@
|
||||
import flet as ft
|
||||
from dbActions.fidelity_cards import FidelityCards as FC
|
||||
|
||||
class FidelityCards:
|
||||
def __init__(self, page: ft.Page):
|
||||
self.page = page
|
||||
self.fidelity_cards_manager = FC()
|
||||
|
||||
self.all_cards = self.fidelity_cards_manager.get_all_fidelity_cards()
|
||||
self.list_of_cars = ft.ListView(
|
||||
controls=self.create_list(self.all_cards, self.on_delete_btn_click, self.on_edit_btn_click),
|
||||
expand=True,
|
||||
spacing=10
|
||||
)
|
||||
|
||||
self.search_bar = ft.TextField(label = "Cauta dupa numar de telefon", on_submit=self.on_search_btn_click, expand=True)
|
||||
self.search_btn = ft.IconButton(icon=ft.Icons.SEARCH, on_click=self.on_search_btn_click)
|
||||
|
||||
self.card_id = ft.TextField(label="Id card")
|
||||
self.card_type = ft.Dropdown(
|
||||
label='Reducere (%)',
|
||||
options=[
|
||||
ft.dropdown.Option(key='10', text="10%"),
|
||||
ft.dropdown.Option(key='20', text="20%"),
|
||||
ft.dropdown.Option(key='30', text="30%"),
|
||||
],
|
||||
expand=True
|
||||
)
|
||||
self.client_name = ft.TextField(label="Nume client")
|
||||
self.phone_number = ft.TextField(label="Numar telefon")
|
||||
|
||||
self.item_to_be_edit = None
|
||||
self.add_dialog = ft.AlertDialog(
|
||||
title=ft.Text(value = "Adauga card de fidelitate" if self.item_to_be_edit == None else "Actualizeaza card de fidelitate"),
|
||||
content=ft.Column(
|
||||
[
|
||||
self.card_id,
|
||||
self.card_type,
|
||||
self.client_name,
|
||||
self.phone_number
|
||||
],
|
||||
height=250,
|
||||
width=400
|
||||
),
|
||||
actions = [
|
||||
ft.Button("Salveaza", on_click=self.on_save_btn_click, icon=ft.Icons.SAVE),
|
||||
ft.TextButton("Anuleaza", on_click=self.on_cancel_btn_click, icon=ft.Icons.CANCEL)
|
||||
]
|
||||
)
|
||||
|
||||
self.delete_dialog = ft.AlertDialog(
|
||||
title=ft.Text("Setergeti cardul?"),
|
||||
actions = [
|
||||
ft.Button("Da", on_click=self.on_condifm_delete_btn_click, icon=ft.Icons.DELETE),
|
||||
ft.TextButton("Nu", on_click=self.on_cancel_delete_btn_click, icon=ft.Icons.CANCEL)
|
||||
]
|
||||
)
|
||||
|
||||
self.item_to_be_delete = None
|
||||
|
||||
|
||||
def on_condifm_delete_btn_click(self, e):
|
||||
self.fidelity_cards_manager.remove_fidelity_card(self.item_to_be_delete)
|
||||
self.page.close(self.delete_dialog)
|
||||
self.update_list()
|
||||
self.item_to_be_delete = None
|
||||
|
||||
def on_cancel_delete_btn_click(self, e):
|
||||
self.page.close(self.delete_dialog)
|
||||
self.item_to_be_delete = None
|
||||
|
||||
def on_save_btn_click(self, e):
|
||||
card_id = self.card_id.value
|
||||
card_type = self.card_type.value
|
||||
client_name = self.client_name.value
|
||||
phone_number = self.phone_number.value
|
||||
|
||||
if self.item_to_be_edit == None:
|
||||
self.fidelity_cards_manager.add_fidelity_card(
|
||||
card_id,
|
||||
card_type,
|
||||
client_name,
|
||||
phone_number
|
||||
)
|
||||
else:
|
||||
self.fidelity_cards_manager.update_card(
|
||||
self.item_to_be_edit,
|
||||
card_id,
|
||||
card_type,
|
||||
client_name,
|
||||
phone_number
|
||||
)
|
||||
self.item_to_be_edit = None
|
||||
|
||||
#set to defualt
|
||||
self.card_id.value = ''
|
||||
self.card_id.update()
|
||||
self.card_type.value = ''
|
||||
self.card_type.update()
|
||||
self.client_name.value = ''
|
||||
self.client_name.update()
|
||||
self.phone_number.value = ''
|
||||
self.phone_number.update()
|
||||
|
||||
#close popup
|
||||
self.page.close(self.add_dialog)
|
||||
|
||||
#update_list
|
||||
self.update_list()
|
||||
|
||||
def update_list(self):
|
||||
self.all_cards = self.fidelity_cards_manager.get_all_fidelity_cards()
|
||||
self.list_of_cars.controls = self.create_list(
|
||||
self.all_cards,
|
||||
self.on_delete_btn_click,
|
||||
self.on_edit_btn_click
|
||||
)
|
||||
self.list_of_cars.update()
|
||||
|
||||
def on_cancel_btn_click(self, e):
|
||||
self.page.close(self.add_dialog)
|
||||
self.item_to_be_edit = None
|
||||
|
||||
def on_add_btn_click(self, e):
|
||||
self.page.open(self.add_dialog)
|
||||
|
||||
def create_list(self, items, on_click_handler2, on_click_handler3):
|
||||
return [
|
||||
ft.Container(
|
||||
content=ft.Row(
|
||||
[
|
||||
|
||||
ft.Column(
|
||||
[
|
||||
ft.Text(value=f"Nume: {item['client_name']}", weight=ft.FontWeight.BOLD),
|
||||
ft.Row(
|
||||
[
|
||||
ft.Text(value=f"Id card: {item['card_id']};", size=12),
|
||||
ft.Text(value=f"Reducere: {item['card_type']}%;", size=12),
|
||||
ft.Text(value=f"Telefon: {item['phone_number']}%", size=12)
|
||||
],
|
||||
spacing=10
|
||||
)
|
||||
]
|
||||
),
|
||||
|
||||
ft.Row(
|
||||
[
|
||||
ft.IconButton(
|
||||
icon=ft.Icons.EDIT,
|
||||
on_click=lambda e, id=item: on_click_handler3(id),
|
||||
),
|
||||
ft.IconButton(
|
||||
icon=ft.Icons.DELETE,
|
||||
on_click=lambda e, id=item['id']: on_click_handler2(id),
|
||||
icon_color=ft.Colors.RED,
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
|
||||
),
|
||||
width=300,
|
||||
bgcolor=ft.Colors.BROWN_50,
|
||||
border = ft.border.all(1, ft.Colors.GREY),
|
||||
padding=10,
|
||||
border_radius=8,
|
||||
)
|
||||
for item in items
|
||||
]
|
||||
|
||||
def on_search_btn_click(self, e):
|
||||
print(self.search_bar.value)
|
||||
|
||||
for card in self.all_cards:
|
||||
buffer = []
|
||||
if self.search_bar.value in card['phone_number']:
|
||||
buffer.append(card)
|
||||
self.list_of_cars.controls = self.create_list(
|
||||
buffer,
|
||||
self.on_delete_btn_click,
|
||||
self.on_edit_btn_click
|
||||
)
|
||||
self.list_of_cars.update()
|
||||
|
||||
#set to default
|
||||
self.search_bar.value = ''
|
||||
self.search_bar.update()
|
||||
|
||||
def on_delete_btn_click(self, id):
|
||||
self.item_to_be_delete = id
|
||||
self.page.open(self.delete_dialog)
|
||||
|
||||
def on_edit_btn_click(self, item):
|
||||
self.page.open(self.add_dialog)
|
||||
self.item_to_be_edit = item['id']
|
||||
self.card_id.value = item['card_id']
|
||||
self.card_id.update()
|
||||
self.card_type.value = item['card_type']
|
||||
self.card_type.update()
|
||||
self.client_name.value = item['client_name']
|
||||
self.client_name.update()
|
||||
self.phone_number.value = item['phone_number']
|
||||
self.phone_number.update()
|
||||
|
||||
def build(self):
|
||||
return ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Row(
|
||||
[
|
||||
ft.Text("Card de fidelitate", size=18, weight=ft.FontWeight.BOLD),
|
||||
ft.Button("Adauga", icon=ft.Icons.ADD, on_click=self.on_add_btn_click),
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.SPACE_BETWEEN
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
self.search_bar,
|
||||
self.search_btn
|
||||
]
|
||||
),
|
||||
self.list_of_cars
|
||||
],
|
||||
alignment=ft.MainAxisAlignment.START,
|
||||
expand=True
|
||||
),
|
||||
expand=True
|
||||
)
|
||||
@@ -3,6 +3,7 @@ from dbActions.orders import Orders
|
||||
from dbActions.users import Users
|
||||
from dbActions.products import Products
|
||||
from helpers.default_user import DefaultUser
|
||||
from helpers.emails import send_gmail
|
||||
|
||||
class OrdersPage:
|
||||
def __init__(self, page: ft.Page):
|
||||
@@ -190,12 +191,22 @@ class OrdersPage:
|
||||
self.oll_orders_list.update()
|
||||
self.order_details_placeholder.content = None
|
||||
self.order_details_placeholder.update()
|
||||
#-------------------------------------------> TBI Send information email to customer
|
||||
message = self.message_field.value
|
||||
self.message_field.value = ''
|
||||
self.message_field.update()
|
||||
print(message)
|
||||
email = self.customer_email
|
||||
status_values = {
|
||||
"on_hold":"in asteptare",
|
||||
"new": "noua",
|
||||
"in_progress":"in lucru",
|
||||
"completed": "la curier",
|
||||
}
|
||||
send_gmail(
|
||||
to_email=email,
|
||||
subject=f"Comanda cumneavoastra este: {status_values[status]}",
|
||||
body=message
|
||||
)
|
||||
|
||||
def on_cancel_state_btn_click(self, e):
|
||||
self.buttons_state.value = self.original_status
|
||||
@@ -230,9 +241,10 @@ class OrdersPage:
|
||||
if products:
|
||||
for product in products:
|
||||
prod = self.products.get(product['prdouct_id'])
|
||||
print(prod)
|
||||
if prod:
|
||||
prod['pices'] = product['quantity']
|
||||
self.selected_order_products.append(prod)
|
||||
print(prod)
|
||||
|
||||
self.name.value = self.selected_user['name'] if '@default.com' not in self.selected_user['email'] else 'Anonim user'
|
||||
self.name.update()
|
||||
@@ -259,16 +271,28 @@ class OrdersPage:
|
||||
)
|
||||
image = ft.Image(
|
||||
src=product['image'],
|
||||
width=200,
|
||||
height=200,
|
||||
width=120,
|
||||
height=120,
|
||||
fit=ft.ImageFit.CONTAIN
|
||||
)
|
||||
quantity_label = ft.Text("Cantitate")
|
||||
quantity = ft.Text(product['quantity'])
|
||||
quantity_row = ft.Row(
|
||||
pices_label = ft.Text("Numar bucati")
|
||||
pices = ft.Text(product['pices'])
|
||||
quantity_row = ft.Column(
|
||||
[
|
||||
quantity_label,
|
||||
quantity
|
||||
ft.Row(
|
||||
[
|
||||
quantity_label,
|
||||
quantity
|
||||
]
|
||||
),
|
||||
ft.Row(
|
||||
[
|
||||
pices_label,
|
||||
pices
|
||||
]
|
||||
)
|
||||
]
|
||||
)
|
||||
product_row = ft.Row(
|
||||
|
||||
Reference in New Issue
Block a user