Update
This commit is contained in:
parent
ddac4df06b
commit
4379a3ca5f
90
main.py
90
main.py
@ -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:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user