-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
148 lines (123 loc) · 5.95 KB
/
main.py
File metadata and controls
148 lines (123 loc) · 5.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import tkinter as tk
from chef_interface import chef_interface
from manage_orders import manage_orders
from reservations import show_reservation_page
from assign_table import show_table_assignment_page
from common import get_db_connection
from PIL import Image, ImageTk
# Funzione per pulire il frame principale
def clear_main_frame():
for widget in main_frame.winfo_children():
widget.destroy()
# Funzione per mostrare l'interfaccia dello chef
def show_chef_interface():
chef_interface(clear_main_frame, main_frame, show_homepage)
# Funzione per mostrare i tavoli assegnati a un cameriere
def show_waiter_tables(waiter_id):
clear_main_frame()
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute(
"""
SELECT Tavoli.id, Tavoli.posti, Tavoli.stato, Prenotazioni.data, Prenotazioni.turno
FROM Tavoli
LEFT JOIN Prenotazioni ON Tavoli.id = Prenotazioni.tavolo_id
WHERE Tavoli.cameriere_id = ?
""",
(waiter_id,)
)
tables = cursor.fetchall()
cursor.execute("SELECT nome FROM Camerieri WHERE id = ?", (waiter_id,))
waiter_name = cursor.fetchone()[0]
conn.close()
tk.Label(main_frame, text=f"{waiter_name}'s Assigned Tables", font=("Arial", 16, "bold")).pack(pady=10)
for table_id, posti, stato, data, turno in tables:
frame = tk.Frame(main_frame)
frame.pack(fill="x", padx=10, pady=5)
status_display = f"Table {table_id} - Seats: {posti} - Status: {stato}"
tk.Label(frame, text=status_display, font=("Arial", 12)).pack(side="left")
if stato == 'occupato':
tk.Button(
frame,
text="Manage Orders",
command=lambda t=table_id: manage_orders(clear_main_frame, main_frame, t, show_homepage)
).pack(side="right")
tk.Button(main_frame, text="Back to Home", command=show_homepage).pack(pady=20)
# Funzione per mostrare la homepage
def show_homepage():
clear_main_frame()
# Contenitore per centrare tutti gli elementi
container = tk.Frame(main_frame, width=800, height=800, bg="white")
container.pack_propagate(False) # Disabilita il ridimensionamento automatico
container.pack(expand=True, fill="both")
# Titolo della homepage
tk.Label(container, text="Homepage Pizzeria", font=("Arial", 36, "bold"), bg="white", fg="black").pack(pady=(20, 10))
# Sottotitolo della homepage
tk.Label(container, text="Benvenuto al sistema di gestione della pizzeria!", font=("Arial", 18), bg="white").pack(pady=(10, 20))
# Descrizione delle funzionalità
description = (
"Questa applicazione è progettata per semplificare ed efficientare tutte le operazioni del tuo locale. Puoi:\n\n"
"- Prenotare e assegnare tavoli: organizza le prenotazioni dei clienti e assegna i tavoli in base alla disponibilità.\n\n"
"- Gestire gli ordini: invia e monitora gli ordini dei tavoli, controllando lo stato di preparazione.\n\n"
"- Visualizzare lo stato dei tavoli: tieni traccia di quali tavoli sono liberi, occupati o riservati.\n\n"
"- Supportare lo staff: agevola il lavoro di chef e camerieri, migliorando la collaborazione.\n\n"
"- Elaborare i pagamenti: calcola rapidamente il totale degli ordini e libera i tavoli una volta completata la transazione.\n\n"
"Questa interfaccia grafica intuitiva ti permette di concentrarti su ciò che conta di più: offrire un'esperienza eccezionale ai tuoi clienti!"
)
tk.Label(container, text=description, font=("Arial", 14), bg="white", justify="left", wraplength=750).pack(pady=20)
# Logo della pizza
try:
logo = Image.open("pizza.png") # Percorso del logo della pizza
logo = logo.resize((250, 250), Image.Resampling.LANCZOS) # Ridimensiona il logo se necessario
logo_image = ImageTk.PhotoImage(logo)
logo_label = tk.Label(container, image=logo_image, bg="white")
logo_label.image = logo_image # Mantieni il riferimento per evitare il garbage collection
logo_label.pack(pady=10)
except Exception as e:
print(f"Errore nel caricamento del logo: {e}")
# Configurazione GUI
root = tk.Tk()
root.title("Restaurant Management System")
root.geometry("1000x800") # Dimensione fissa per la finestra
main_frame = tk.Frame(root, width=800, height=800)
main_frame.pack(side="right", fill="both", expand=True)
main_frame.pack_propagate(False)
# Variabili
date_var = tk.StringVar()
turn_var = tk.StringVar()
customer_name_var = tk.StringVar()
num_people_var = tk.StringVar()
waiter_var = tk.StringVar()
# Recupera i camerieri dal database
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("SELECT id, nome FROM Camerieri")
waiters = cursor.fetchall()
conn.close()
# Sidebar
sidebar = tk.Frame(root, width=200, bg="lightgray") # Sidebar standard
sidebar.pack(side="left", fill="y")
def add_sidebar_button(parent, text, command):
button = tk.Button(
parent,
text=text,
command=command,
font=("Arial", 12),
bd=1, # Bordo standard
relief="raised"
)
button.pack(fill="x", pady=2, padx=5)
# Sidebar con i bottoni principali
tk.Label(sidebar, text="Menu", font=("Arial", 16, "bold"), bg="lightgray").pack(pady=10)
add_sidebar_button(sidebar, "Homepage", show_homepage)
add_sidebar_button(sidebar, "Reservations", lambda: show_reservation_page(main_frame, customer_name_var, num_people_var, date_var, turn_var, waiter_var))
add_sidebar_button(sidebar, "Assign Table", lambda: show_table_assignment_page(main_frame))
# Pulsanti per Chef e Camerieri
tk.Label(sidebar, text="Chef", font=("Arial", 16, "bold"), bg="lightgray").pack(pady=10)
add_sidebar_button(sidebar, "Chef Interface", show_chef_interface)
tk.Label(sidebar, text="Waiters", font=("Arial", 16, "bold"), bg="lightgray").pack(pady=10)
for waiter_id, waiter_name in waiters:
add_sidebar_button(sidebar, waiter_name, lambda w=waiter_id: show_waiter_tables(w))
# Mostra la homepage all'avvio
show_homepage()
root.mainloop()