This commit is contained in:
Jevinca Marvella 2025-12-13 23:30:26 +07:00
parent ddac4df06b
commit 4379a3ca5f

90
main.py
View File

@ -798,21 +798,46 @@ class App:
ttk.Label(frame, text="Password:").grid(row=2, column=0, sticky='e', pady=5) ttk.Label(frame, text="Password:").grid(row=2, column=0, sticky='e', pady=5)
self.password_var = tk.StringVar() self.password_var = tk.StringVar()
ttk.Entry(frame, textvariable=self.password_var, show="*", width=30).grid(row=2, column=1, pady=5) ttk.Entry(frame, textvariable=self.password_var, show="*", width=30).grid(row=2, column=1, pady=5)
# TAMBAHAN: Input nama pembeli (untuk role pembeli)
ttk.Label(frame, text="Nama Lengkap:", font=("Arial", 9)).grid(row=3, column=0, sticky='e', pady=5)
self.customer_name_var = tk.StringVar()
customer_entry = ttk.Entry(frame, textvariable=self.customer_name_var, width=30)
customer_entry.grid(row=3, column=1, pady=5)
ttk.Label(frame, text="(Khusus untuk Pembeli)", font=("Arial", 7), foreground='gray').grid(row=4, column=1, sticky='w')
ttk.Button(frame, text="Login", command=self.handle_login).grid(row=3, column=0, columnspan=2, pady=12) ttk.Button(frame, text="Login", command=self.handle_login).grid(row=5, column=0, columnspan=2, pady=12)
def handle_login(self): def handle_login(self):
u = self.username_var.get().strip() u = self.username_var.get().strip()
p = self.password_var.get().strip() p = self.password_var.get().strip()
if not u or not p: if not u or not p:
messagebox.showwarning("Input", "Masukkan username & password") messagebox.showwarning("Input", "Masukkan username & password")
return return
user = authenticate(u,p)
user = authenticate(u, p)
if not user: if not user:
messagebox.showerror("Gagal", "Username atau password salah") messagebox.showerror("Gagal", "Username atau password salah")
return return
# TAMBAHAN: Validasi nama pembeli untuk role pembeli
if user['role'] in ['pembeli', 'user']:
customer_name = self.customer_name_var.get().strip()
if not customer_name:
messagebox.showwarning("Nama Pembeli", "Pembeli harus mengisi Nama Lengkap!")
return
# Simpan nama pembeli di session
user['customer_name'] = customer_name
self.session = user self.session = user
messagebox.showinfo("Sukses", f"Login berhasil sebagai {user['role']}")
# Pesan selamat datang
welcome_msg = f"Login berhasil sebagai {user['role']}"
if user['role'] in ['pembeli', 'user']:
welcome_msg = f"Selamat datang, {user.get('customer_name')}!\n\nSilakan pilih menu dan tentukan nomor meja Anda."
messagebox.showinfo("Sukses", welcome_msg)
self.dashboard_frame() self.dashboard_frame()
def logout(self): def logout(self):
@ -826,11 +851,19 @@ class App:
w.destroy() w.destroy()
top = ttk.Frame(self.root) top = ttk.Frame(self.root)
top.pack(fill='x') top.pack(fill='x')
# Text untuk header
if self.session['role'] in ['pembeli', 'user'] and 'customer_name' in self.session:
header_text = f"👤 {self.session['customer_name']} | User: {self.session['username']} | Role: {self.session['role']}"
else:
header_text = f"User: {self.session['username']} | Role: {self.session['role']}"
ttk.Label( ttk.Label(
top, top,
text=f"User: {self.session['username']} | Role: {self.session['role']}", text=header_text,
font=("Arial", 12) font=("Arial", 12)
).pack(side='left', padx=10, pady=6) ).pack(side='left', padx=10, pady=6)
ttk.Button(top, text="Logout", command=self.logout).pack(side='right', padx=10) ttk.Button(top, text="Logout", command=self.logout).pack(side='right', padx=10)
main = ttk.Notebook(self.root) main = ttk.Notebook(self.root)
main.pack(fill='both', expand=True, padx=10, pady=8) main.pack(fill='both', expand=True, padx=10, pady=8)
@ -2458,6 +2491,45 @@ class App:
ttk.Label(header, text="💰 Pembayaran Transaksi", font=("Arial", 14, "bold")).pack(side='left') ttk.Label(header, text="💰 Pembayaran Transaksi", font=("Arial", 14, "bold")).pack(side='left')
ttk.Button(header, text="🔄 Refresh", command=self.reload_payment_orders).pack(side='right', padx=6) ttk.Button(header, text="🔄 Refresh", command=self.reload_payment_orders).pack(side='right', padx=6)
# ===== TAMBAHAN: SUMMARY PENJUALAN HARI INI UNTUK KASIR =====
if self.session['role'] == 'kasir':
summary_frame = ttk.LabelFrame(parent, text="📊 Penjualan Hari Ini", padding=10)
summary_frame.pack(fill='x', padx=10, pady=6)
summary_inner = ttk.Frame(summary_frame)
summary_inner.pack()
# Hitung total hari ini
from datetime import datetime
today_income = 0
today_count = 0
today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
all_transaksi = transaksi_list(status='dibayar')
for trx in all_transaksi:
tid, uid, meja, total, status, promo_code, tanggal = trx
try:
trx_date = datetime.strptime(tanggal, "%Y-%m-%d %H:%M:%S")
if trx_date >= today_start:
today_income += total
today_count += 1
except:
pass
ttk.Label(summary_inner, text="Total Transaksi Hari Ini:", font=("Arial", 10)).grid(row=0, column=0, sticky='w', padx=10, pady=3)
ttk.Label(summary_inner, text=str(today_count), font=("Arial", 10, "bold"), foreground='blue').grid(row=0, column=1, sticky='w', padx=10, pady=3)
ttk.Label(summary_inner, text="Total Pendapatan Hari Ini:", font=("Arial", 10)).grid(row=1, column=0, sticky='w', padx=10, pady=3)
ttk.Label(summary_inner, text=f"Rp {today_income:,.0f}", font=("Arial", 10, "bold"), foreground='green').grid(row=1, column=1, sticky='w', padx=10, pady=3)
# Container utama
main_container = ttk.Frame(parent)
main_container.pack(fill='both', expand=True, padx=10, pady=6)
ttk.Label(header, text="💰 Pembayaran Transaksi", font=("Arial", 14, "bold")).pack(side='left')
ttk.Button(header, text="🔄 Refresh", command=self.reload_payment_orders).pack(side='right', padx=6)
# Container utama # Container utama
main_container = ttk.Frame(parent) main_container = ttk.Frame(parent)
main_container.pack(fill='both', expand=True, padx=10, pady=6) main_container.pack(fill='both', expand=True, padx=10, pady=6)
@ -3418,6 +3490,16 @@ class App:
struk += f"No. Transaksi : {tid}\n" struk += f"No. Transaksi : {tid}\n"
struk += f"Tanggal : {tanggal}\n" struk += f"Tanggal : {tanggal}\n"
struk += f"Meja : {meja}\n" struk += f"Meja : {meja}\n"
# Cari nama pembeli (dari user_id transaksi)
users = read_all(USERS_CSV)
customer_name = "Guest"
for u in users:
if u.get('id') == str(uid):
customer_name = u.get('username')
break
struk += f"Pelanggan : {customer_name}\n"
struk += f"Kasir : {self.session['username']}\n" struk += f"Kasir : {self.session['username']}\n"
if payment_data: if payment_data: