From 4379a3ca5fd0a6883fcfcbc1010cd9642230aecc Mon Sep 17 00:00:00 2001 From: Jevinca Marvella Date: Sat, 13 Dec 2025 23:30:26 +0700 Subject: [PATCH] Update --- main.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 86 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 8d050fb..e2e6e2d 100644 --- a/main.py +++ b/main.py @@ -798,21 +798,46 @@ class App: ttk.Label(frame, text="Password:").grid(row=2, column=0, sticky='e', pady=5) self.password_var = tk.StringVar() 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): u = self.username_var.get().strip() p = self.password_var.get().strip() + if not u or not p: messagebox.showwarning("Input", "Masukkan username & password") return - user = authenticate(u,p) + + user = authenticate(u, p) if not user: messagebox.showerror("Gagal", "Username atau password salah") 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 - 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() def logout(self): @@ -826,11 +851,19 @@ class App: w.destroy() top = ttk.Frame(self.root) 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( top, - text=f"User: {self.session['username']} | Role: {self.session['role']}", + text=header_text, font=("Arial", 12) ).pack(side='left', padx=10, pady=6) + ttk.Button(top, text="Logout", command=self.logout).pack(side='right', padx=10) main = ttk.Notebook(self.root) 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.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 main_container = ttk.Frame(parent) 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"Tanggal : {tanggal}\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" if payment_data: