Python-Menu/project/kasir.py

61 lines
2.4 KiB
Python

import tkinter as tk
from tkinter import messagebox
from database import connect
class KasirPage(tk.Frame):
def __init__(self, parent, controller):
super().__init__(parent)
self.controller = controller
# Header
top = tk.Frame(self, bg="#ddd")
top.pack(fill="x")
tk.Button(top, text="Logout", command=lambda: controller.show_frame("LoginPage")).pack(side="right", padx=10, pady=5)
tk.Label(top, text="KASIR - PEMBAYARAN", font=("Arial", 16, "bold"), bg="#ddd").pack(side="left", padx=10)
# List Order
tk.Label(self, text="Tagihan Belum Lunas (Status: Served):", font=("Arial", 11)).pack(pady=10)
self.order_list = tk.Listbox(self, width=80, height=15, font=("Arial", 10))
self.order_list.pack(pady=5)
tk.Button(self, text="Refresh Data", command=self.update_data).pack(pady=5)
tk.Button(self, text="💰 PROSES BAYAR (LUNAS)", bg="#81C784", height=2, command=self.bayar).pack(fill="x", padx=50, pady=20)
def update_data(self):
self.order_list.delete(0, tk.END)
self.data_orders = []
db = connect()
cur = db.cursor()
# Kasir melihat yang statusnya Served
cur.execute("SELECT id, nama_pelanggan, meja_id, total FROM transaksi WHERE status='Served'")
self.data_orders = cur.fetchall()
db.close()
for item in self.data_orders:
self.order_list.insert(tk.END, f"ID: {item[0]} | Meja {item[2]} | {item[1]} | Tagihan: Rp {int(item[3])}")
def bayar(self):
idx = self.order_list.curselection()
if not idx:
messagebox.showwarning("Pilih", "Pilih tagihan yang mau dibayar!")
return
selected = self.data_orders[idx[0]]
transaksi_id = selected[0]
nama = selected[1]
total = selected[3]
confirm = messagebox.askyesno("Konfirmasi", f"Terima pembayaran Rp {int(total)} dari {nama}?")
if confirm:
db = connect()
cur = db.cursor()
# Update status jadi 'Paid' dan metode pembayaran (misal Cash default)
cur.execute("UPDATE transaksi SET status='Paid', metode_pembayaran='Cash' WHERE id=?", (transaksi_id,))
db.commit()
db.close()
messagebox.showinfo("Lunas", "Transaksi Selesai & Lunas!")
self.update_data()