add fidelity card module

This commit is contained in:
2025-11-02 18:03:19 +02:00
parent ee4913487a
commit 4fe190ddad
7 changed files with 539 additions and 75 deletions

View File

@@ -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('/')

View 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
)

View File

@@ -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(