diff --git a/project/waiter_dashboard.py b/project/waiter_dashboard.py index 48d7a37..f6a86a8 100644 --- a/project/waiter_dashboard.py +++ b/project/waiter_dashboard.py @@ -6,64 +6,123 @@ class WaiterDashboard: def __init__(self, parent): self.parent = parent self.frame = tk.Frame(parent) - self.frame.pack(fill="both", expand=True) + self.frame.pack(fill="both", expand=True, padx=20, pady=10) - tk.Label(self.frame, text="DASHBOARD WAITER (Dapur)", font=("Arial", 18, "bold")).pack(pady=10) - - tk.Button(self.frame, text="Logout", command=self.logout).pack(pady=5) - tk.Button(self.frame, text="Refresh Data", bg="#cfe2ff", command=self.load_orders).pack(pady=5) + # ===================== + # HEADER + # ===================== + tk.Label( + self.frame, + text="DASHBOARD WAITER (DAPUR)", + font=("Arial", 18, "bold") + ).pack(pady=10) - # List Pesanan Masuk - self.listbox = tk.Listbox(self.frame, width=80, height=15) - self.listbox.pack(pady=10) + top_btn = tk.Frame(self.frame) + top_btn.pack(pady=5) - tk.Button(self.frame, text="Selesai Disajikan / Validasi", bg="#d1e7dd", command=self.validasi_layanan).pack(pady=10) + tk.Button(top_btn, text="Refresh Data", bg="#cfe2ff", + width=15, command=self.load_orders).grid(row=0, column=0, padx=5) - self.order_ids = [] # Untuk menyimpan ID transaksi sesuai urutan listbox + tk.Button(top_btn, text="Logout", bg="#f8d7da", + width=10, command=self.logout).grid(row=0, column=1, padx=5) + + # ===================== + # LIST PESANAN + SCROLL + # ===================== + list_frame = tk.Frame(self.frame) + list_frame.pack(pady=10) + + scrollbar = tk.Scrollbar(list_frame) + scrollbar.pack(side=tk.RIGHT, fill=tk.Y) + + self.listbox = tk.Listbox( + list_frame, + width=90, + height=15, + yscrollcommand=scrollbar.set + ) + self.listbox.pack(side=tk.LEFT) + + scrollbar.config(command=self.listbox.yview) + + # ===================== + # BUTTON VALIDASI + # ===================== + tk.Button( + self.frame, + text="✔ Pesanan Selesai Disajikan", + bg="#d1e7dd", + font=("Arial", 11, "bold"), + width=30, + command=self.validasi_layanan + ).pack(pady=10) + + self.order_ids = [] self.load_orders() + # ===================== + # LOAD DATA + # ===================== def load_orders(self): self.listbox.delete(0, tk.END) self.order_ids = [] - + db = connect() cur = db.cursor() - # Ambil pesanan yang statusnya 'Pending' - cur.execute("SELECT id, meja_id, total, status FROM transaksi WHERE status='Pending'") - rows = cur.fetchall() - - for row in rows: - t_id, meja, total, status = row - # Ambil detail menu untuk ditampilkan - cur.execute("SELECT menu_nama FROM detail_transaksi WHERE transaksi_id=?", (t_id,)) - menus = [r[0] for r in cur.fetchall()] - menu_str = ", ".join(menus) - display_text = f"[Meja {meja}] ID:{t_id} | Menu: {menu_str} | Status: {status}" - self.listbox.insert(tk.END, display_text) + cur.execute( + "SELECT id, meja_id, total FROM transaksi WHERE status='Pending'" + ) + rows = cur.fetchall() + + for t_id, meja, total in rows: + cur.execute( + "SELECT menu_nama, jumlah FROM detail_transaksi WHERE transaksi_id=?", + (t_id,) + ) + details = cur.fetchall() + + self.listbox.insert(tk.END, f"Meja {meja} | ID Transaksi: {t_id}") + for menu, qty in details: + self.listbox.insert(tk.END, f" - {menu} x{qty}") + + self.listbox.insert(tk.END, f"Total : Rp {total:,.0f}") + self.listbox.insert(tk.END, "-" * 70) + self.order_ids.append(t_id) - + db.close() + # ===================== + # VALIDASI + # ===================== def validasi_layanan(self): idx = self.listbox.curselection() if not idx: messagebox.showwarning("Pilih", "Pilih pesanan yang sudah disajikan") return - - selected_id = self.order_ids[idx[0]] - + + # Cari ID terdekat ke atas + selected_index = idx[0] + transaksi_index = selected_index // 5 + transaksi_id = self.order_ids[transaksi_index] + db = connect() cur = db.cursor() - # Ubah status jadi 'Disajikan' agar muncul di kasir - cur.execute("UPDATE transaksi SET status='Disajikan' WHERE id=?", (selected_id,)) + cur.execute( + "UPDATE transaksi SET status='Disajikan' WHERE id=?", + (transaksi_id,) + ) db.commit() db.close() - - messagebox.showinfo("Sukses", "Pesanan selesai disajikan. Pelanggan bisa bayar di kasir.") + + messagebox.showinfo( + "Sukses", + "Pesanan ditandai selesai.\nKasir bisa memproses pembayaran." + ) self.load_orders() def logout(self): self.frame.destroy() from main import LoginScreen - LoginScreen(self.parent) \ No newline at end of file + LoginScreen(self.parent)