add fidelity card module
This commit is contained in:
@@ -3,19 +3,21 @@ from dbActions.orders import Orders
|
||||
from dbActions.products import Products
|
||||
from dbActions.company import Company
|
||||
from dbActions.users import Users
|
||||
from helpers.emails import send_gmail
|
||||
import re
|
||||
|
||||
class Cart:
|
||||
def __init__(self, page: ft.Page):
|
||||
self.page = page
|
||||
self.user = self.page.session.get('user')
|
||||
self.orders = Orders()
|
||||
self.orders_manager = Orders()
|
||||
self.productsDB = Products()
|
||||
self.company_manager = Company()
|
||||
self.user_manager = Users()
|
||||
self.products = []
|
||||
self.is_second_address = None
|
||||
self.is_company = None
|
||||
|
||||
self.pret_total = ft.Text("Pret total: 0", weight=ft.FontWeight.BOLD)
|
||||
self.delete_dialog = ft.AlertDialog(
|
||||
title=ft.Text("Stergeti?"),
|
||||
actions=[
|
||||
@@ -24,9 +26,9 @@ class Cart:
|
||||
]
|
||||
)
|
||||
|
||||
self.on_hold_orders = self.orders.get_on_hold_order(self.user['id'])
|
||||
self.on_hold_orders = self.orders_manager.get_on_hold_order(self.user['id'])
|
||||
if self.on_hold_orders:
|
||||
self.order_products = self.orders.get_order_products(self.on_hold_orders['id'])
|
||||
self.order_products = self.orders_manager.get_order_products(self.on_hold_orders['id'])
|
||||
|
||||
for product in self.order_products:
|
||||
self.products.append(
|
||||
@@ -70,14 +72,13 @@ class Cart:
|
||||
]
|
||||
)
|
||||
|
||||
if '@default.com' not in self.user['email']:
|
||||
self.all_orders = self.orders.get_orders_for_user(self.page.session.get('user')['id'])
|
||||
self.all_orders = self.all_orders[::-1]
|
||||
self.orders_list = ft.ListView(
|
||||
controls=self.create_history_list(self.all_orders),
|
||||
spacing=10,
|
||||
expand=True
|
||||
)
|
||||
self.all_orders = self.orders_manager.get_orders_for_user(self.page.session.get('user')['id'])
|
||||
self.all_orders = self.all_orders[::-1]
|
||||
self.orders_manager_list = ft.ListView(
|
||||
controls=self.create_history_list(self.all_orders),
|
||||
spacing=10,
|
||||
expand=True
|
||||
)
|
||||
self.user = self.page.session.get("user")
|
||||
self.company = self.company_manager.get_company(self.user['id'])
|
||||
self.user_name = ft.TextField(
|
||||
@@ -87,7 +88,7 @@ class Cart:
|
||||
self.email = ft.TextField(
|
||||
label="E-mail",
|
||||
value=self.user['email'] if "@default.com" not in self.user['email'] else None,
|
||||
read_only=True
|
||||
read_only=True if "@default.com" not in self.user['email'] else False
|
||||
)
|
||||
self.phone = ft.TextField(
|
||||
label="Telefon",
|
||||
@@ -195,14 +196,7 @@ class Cart:
|
||||
vertical_alignment=ft.CrossAxisAlignment.START
|
||||
)
|
||||
self.order_list_placeholder = ft.Column()
|
||||
if '@default.com' not in self.user['email']:
|
||||
self.order_list_placeholder.controls.append(
|
||||
ft.Text(
|
||||
"Istoric comenzi",
|
||||
weight=ft.FontWeight.BOLD
|
||||
)
|
||||
)
|
||||
self.order_list_placeholder.controls.append(self.orders_list)
|
||||
self.order_list_placeholder.controls.append(self.orders_manager_list)
|
||||
|
||||
self.item_to_be_deleted = None
|
||||
|
||||
@@ -229,16 +223,26 @@ class Cart:
|
||||
else:
|
||||
pass
|
||||
|
||||
def order_products(self, id):
|
||||
products = self.orders.get_order_products(id)
|
||||
def get_order_products(self, id):
|
||||
products = self.orders_manager.get_order_products(id)
|
||||
total = 0
|
||||
|
||||
all_products = []
|
||||
for product in products:
|
||||
name = self.productsDB.get(product['prdouct_id'])['name']
|
||||
item = self.productsDB.get(product['prdouct_id'])
|
||||
total += item['price']
|
||||
name = item['name']
|
||||
if name not in all_products:
|
||||
all_products.append(name)
|
||||
try:
|
||||
self.pret_total.value = f'Pret total: {total}'
|
||||
self.pret_total.update()
|
||||
except:
|
||||
pass
|
||||
return ft.Text(
|
||||
value=' '.join(all_products)
|
||||
)
|
||||
|
||||
|
||||
def on_go_back_button_click(self, e):
|
||||
self.page.go("/")
|
||||
@@ -296,6 +300,12 @@ class Cart:
|
||||
]
|
||||
|
||||
def create_history_list(self, items):
|
||||
status_value = {
|
||||
'new':'Noua',
|
||||
'on_hold':'In asteptare',
|
||||
'in_progress': 'In lucru',
|
||||
'completed':'Complete'
|
||||
}
|
||||
return [
|
||||
ft.Container(
|
||||
content=ft.Column(
|
||||
@@ -303,7 +313,7 @@ class Cart:
|
||||
|
||||
ft.Row(
|
||||
[
|
||||
ft.Icon(ft.icons.ARROW_RIGHT, size=20),
|
||||
ft.Icon(ft.Icons.ARROW_RIGHT, size=20),
|
||||
ft.Text(value="Numar comanda: "),
|
||||
ft.Text(value=item['id'])
|
||||
]
|
||||
@@ -314,7 +324,7 @@ class Cart:
|
||||
value='Status: '
|
||||
),
|
||||
ft.Text(
|
||||
value=item['status']
|
||||
value=status_value[item['status']]
|
||||
)
|
||||
]
|
||||
),
|
||||
@@ -323,7 +333,7 @@ class Cart:
|
||||
ft.Text(
|
||||
value='Produse: '
|
||||
),
|
||||
#self.order_products(item['id'])
|
||||
self.get_order_products(item['id'])
|
||||
]
|
||||
)
|
||||
],
|
||||
@@ -337,8 +347,7 @@ class Cart:
|
||||
)
|
||||
for item in items
|
||||
]
|
||||
|
||||
|
||||
|
||||
def on_delete_product_click(self, item):
|
||||
print('Delte item', item)
|
||||
|
||||
@@ -349,9 +358,9 @@ class Cart:
|
||||
def on_confirm_delete_btn_click(self, e):
|
||||
print("confirm delete item", self.item_to_be_deleted)
|
||||
#remove item
|
||||
self.orders.remove_product_from_order(self.on_hold_orders['id'], self.item_to_be_deleted)
|
||||
self.orders_manager.remove_product_from_order(self.on_hold_orders['id'], self.item_to_be_deleted)
|
||||
#update list
|
||||
self.order_products = self.orders.get_order_products(self.on_hold_orders['id'])
|
||||
self.order_products = self.orders_manager.get_order_products(self.on_hold_orders['id'])
|
||||
self.products = []
|
||||
for product in self.order_products:
|
||||
self.products.append(
|
||||
@@ -372,7 +381,6 @@ class Cart:
|
||||
self.item_to_be_deleted = None
|
||||
self.page.close(self.delete_dialog)
|
||||
|
||||
|
||||
def open_confirm_dialog(self, e):
|
||||
print('open dialog')
|
||||
print(self.on_hold_orders)
|
||||
@@ -392,18 +400,24 @@ class Cart:
|
||||
self.error_message.value = "Va rugam inserati adresa de livrare!"
|
||||
self.error_message.color = ft.Colors.RED
|
||||
self.error_message.update()
|
||||
print('Second address found')
|
||||
return True
|
||||
print('Second address not found')
|
||||
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:
|
||||
print("Comapny name not found")
|
||||
found = True
|
||||
if vat is None or len(vat)< 1:
|
||||
print("Vat not found")
|
||||
found = True
|
||||
if register_number is None or len(register_number)< 1:
|
||||
print("Register number not found")
|
||||
found = True
|
||||
if company_address is None or len(company_address)< 1:
|
||||
print("Company address not found")
|
||||
found = True
|
||||
if found:
|
||||
self.error_message.value = "Toate campurile sunt obligatori!"
|
||||
@@ -411,13 +425,19 @@ class Cart:
|
||||
self.error_message.update()
|
||||
return found
|
||||
|
||||
def check_inserted_user_data(self, username, phone, address):
|
||||
def check_inserted_user_data(self, username, phone, address, email):
|
||||
found = False
|
||||
if username is None or len(username)< 1:
|
||||
print('Username not found')
|
||||
found = True
|
||||
if phone is None or len(phone)< 1:
|
||||
print("Phone not found")
|
||||
found = True
|
||||
if address is None or len(address)< 1:
|
||||
print("Adress not found")
|
||||
found = True
|
||||
if email is None or len(email)<1:
|
||||
print("email not found")
|
||||
found = True
|
||||
if found:
|
||||
self.error_message.value = "Toate campurile sunt obligatori!"
|
||||
@@ -425,26 +445,54 @@ class Cart:
|
||||
self.error_message.update()
|
||||
|
||||
return found
|
||||
|
||||
def check_email_is_valid(self, email):
|
||||
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
|
||||
if re.fullmatch(email_regex, email) is not None:
|
||||
self.error_message.value = ""
|
||||
self.error_message.update()
|
||||
return True
|
||||
else:
|
||||
self.error_message.value = "Va rugam inserati un e-mail valid!"
|
||||
self.error_message.update()
|
||||
return False
|
||||
|
||||
def create_update_user_details(self):
|
||||
username = self.user_name.value
|
||||
phone = self.phone.value
|
||||
address = self.address.value
|
||||
email = self.email.value
|
||||
|
||||
if self.is_second_address:
|
||||
print("Second address has been selected (button click)")
|
||||
if self.check_second_address_inserted(self.second_address.value):
|
||||
return
|
||||
return False
|
||||
address = self.address.value + '~' + self.second_address.value
|
||||
if self.check_inserted_user_data(username, phone, address):
|
||||
return
|
||||
if self.check_inserted_user_data(username, phone, address, email):
|
||||
return False
|
||||
|
||||
if not self.check_email_is_valid(email):
|
||||
return False
|
||||
|
||||
if '@default.com' in self.user['email']:
|
||||
self.user = self.user_manager.invite_user()
|
||||
self.page.session.set("user", self.user)
|
||||
print("User is default @default.com in name")
|
||||
try:
|
||||
user_id = self.user_manager.invite_user(
|
||||
email, username, phone, address
|
||||
)
|
||||
self.user = self.user_manager.get(user_id)
|
||||
print("User invited")
|
||||
self.page.session.set("user", self.user)
|
||||
self.orders_manager.update_order_user_id(user_id, self.on_hold_orders['id'])
|
||||
except:
|
||||
print("Unable to create user, user already exists")
|
||||
self.error_message.value = "Exita deja un utilizator cu aceasta adresa de email!"
|
||||
return False
|
||||
else:
|
||||
self.user_manager.update_user_data(username, phone, address, self.user['id'])
|
||||
|
||||
if self.is_company:
|
||||
print("Compani selected (company button has been pressed)")
|
||||
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:
|
||||
@@ -462,36 +510,75 @@ class Cart:
|
||||
'address': self.company_address.value
|
||||
}
|
||||
self.company_manager.add_company(company)
|
||||
return True
|
||||
|
||||
def on_confim_btn_click(self, e):
|
||||
self.error_message.color = ft.Colors.RED
|
||||
self.error_message.update()
|
||||
#create / update user details:
|
||||
self.create_update_user_details()
|
||||
|
||||
print('confirm')
|
||||
print("Confirm button Selected ")
|
||||
self.page.close(self.confirm_dialog)
|
||||
self.orders.update_order_status("new", self.on_hold_orders['id'])
|
||||
|
||||
self.products = []
|
||||
self.on_hold_orders = self.orders.get_on_hold_order(self.user['id'])
|
||||
if self.on_hold_orders:
|
||||
self.order_products = self.orders.get_order_products(self.on_hold_orders['id'])
|
||||
if self.create_update_user_details():
|
||||
print('User details updated')
|
||||
|
||||
for product in self.order_products:
|
||||
self.products.append(
|
||||
{
|
||||
'product':self.productsDB.get(product['prdouct_id']),
|
||||
'quantity':product['quantity']
|
||||
}
|
||||
self.orders_manager.update_order_status("new", self.on_hold_orders['id'])
|
||||
print('Order status is set to new')
|
||||
self.products = []
|
||||
self.on_hold_orders = self.orders_manager.get_on_hold_order(self.user['id'])
|
||||
if self.on_hold_orders:
|
||||
self.order_products = self.orders_manager.get_order_products(self.on_hold_orders['id'])
|
||||
|
||||
for product in self.order_products:
|
||||
self.products.append(
|
||||
{
|
||||
'product':self.productsDB.get(product['prdouct_id']),
|
||||
'quantity':product['quantity']
|
||||
}
|
||||
)
|
||||
self.product_list.controls.clear()
|
||||
self.product_list.controls = self.create_list(self.products, self.on_delete_product_click)
|
||||
self.product_list.update()
|
||||
|
||||
#hiostory
|
||||
if '@default.com' not in self.user['email']:
|
||||
self.all_orders = self.orders_manager.get_orders_for_user(self.page.session.get('user')['id'])
|
||||
self.all_orders = self.all_orders[::-1]
|
||||
self.orders_manager_list.controls.clear()
|
||||
self.orders_manager_list.controls = self.create_history_list(self.all_orders)
|
||||
self.orders_manager_list.update()
|
||||
|
||||
#notify admin
|
||||
users = self.user_manager.get_all()
|
||||
admins = []
|
||||
for user in users:
|
||||
if user['role'] == 'admin':
|
||||
admins.append(user)
|
||||
for admin in admins:
|
||||
send_gmail(
|
||||
to_email=admin['email'],
|
||||
subject="Comanda noua pe tainagustului.ro",
|
||||
body=f'''
|
||||
Ati primit o noua comanda de la {self.user['email']}.
|
||||
Va rugam accesati wwww.tainagusutului.ro pentru detalii.
|
||||
'''
|
||||
)
|
||||
self.product_list.controls.clear()
|
||||
self.product_list.controls = self.create_list(self.products, self.on_delete_product_click)
|
||||
self.product_list.update()
|
||||
if '@default.com' not in self.user['email']:
|
||||
self.all_orders = self.orders.get_orders_for_user(self.page.session.get('user')['id'])
|
||||
self.all_orders = self.all_orders[::-1]
|
||||
self.orders_list.controls.clear()
|
||||
self.orders_list.controls = self.create_history_list(self.all_orders)
|
||||
self.orders_list.update()
|
||||
|
||||
send_gmail(
|
||||
to_email=self.user['email'],
|
||||
subject="Multumim pentru comanda!",
|
||||
body=f'''
|
||||
Buna ziua,
|
||||
|
||||
Comanda a fost primita si va fi livrata in cel mai scurt timp.
|
||||
|
||||
Va multumim,
|
||||
Echipa tainagustului.ro
|
||||
'''
|
||||
)
|
||||
|
||||
self.error_message.value = "Comanda a fost trimisa cu success!"
|
||||
self.error_message.color = ft.Colors.GREEN
|
||||
self.error_message.update()
|
||||
|
||||
def build(self):
|
||||
return ft.Container(
|
||||
@@ -505,10 +592,15 @@ class Cart:
|
||||
ft.Icons.SHOPPING_CART_CHECKOUT,
|
||||
size=40,
|
||||
),
|
||||
ft.Text(
|
||||
"Produse adugate:",
|
||||
weight=ft.FontWeight.BOLD,
|
||||
size=15
|
||||
ft.Column(
|
||||
[
|
||||
self.pret_total,
|
||||
ft.Text(
|
||||
"Produse adugate:",
|
||||
weight=ft.FontWeight.BOLD,
|
||||
size=15
|
||||
),
|
||||
]
|
||||
)
|
||||
]
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user