From 5139061a1a19d9b9432d5c146fff484d6ad3bdcc Mon Sep 17 00:00:00 2001 From: Bluwww Date: Wed, 26 Nov 2025 21:25:44 +0700 Subject: [PATCH] Menu Manage Admin --- main.py | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/main.py b/main.py index 3071466..db5a8c3 100644 --- a/main.py +++ b/main.py @@ -463,3 +463,130 @@ def on_view_select(self, event): else: self.preview_img_label.config(image='') + + + + + + +# bagian menu manage khusus admin + + +def build_menu_manage_tab(self, parent): + for w in parent.winfo_children(): + w.destroy() + topfrm = ttk.Frame(parent) + topfrm.pack(fill='x', padx=6, pady=6) + ttk.Label(topfrm, text="Kelola Menu", font=("Arial", 14, "bold")).pack(side='left') + ttk.Button(topfrm, text="Tambah Menu", command=self.open_add_menu_window).pack(side='right', padx=6) + cols = ("ID","Nama","Kategori","Harga","Stok","Tersedia","ItemDisc%") + self.manage_tree = ttk.Treeview(parent, columns=cols, show='headings', height=18) + for c in cols: + self.manage_tree.heading(c, text=c) + self.manage_tree.column(c, width=100 if c!="Nama" else 220) + self.manage_tree.pack(fill='both', padx=6, pady=6) + btnfrm = ttk.Frame(parent) + btnfrm.pack(pady=6) + ttk.Button(btnfrm, text="Edit Terpilih", command=self.open_edit_menu_window).pack(side='left', padx=6) + ttk.Button(btnfrm, text="Hapus Terpilih", command=self.delete_selected_menu).pack(side='left', padx=6) + ttk.Button(btnfrm, text="Reload", command=self.reload_manage_table).pack(side='left', padx=6) + self.reload_manage_table() + +def reload_manage_table(self): + for r in self.manage_tree.get_children(): + self.manage_tree.delete(r) + rows = menu_list() + for row in rows: + mid,nama,kategori,harga,stok,foto,tersedia,item_disc = row + self.manage_tree.insert("", tk.END, values=(mid,nama,kategori,harga,stok,"Yes" if tersedia else "No", item_disc)) + +def open_add_menu_window(self): + w = tk.Toplevel(self.root) + w.title("Tambah Menu") + frm = ttk.Frame(w,padding=10) + frm.pack() + labels = ["Nama","Kategori","Harga","Stok","Foto path","Item Discount (%)"] + vars = {} + for i,lab in enumerate(labels): + ttk.Label(frm, text=lab).grid(row=i, column=0, sticky='e', pady=4) + vars[lab] = tk.StringVar() + ttk.Entry(frm, textvariable=vars[lab], width=40).grid(row=i, column=1, pady=4) + ttk.Button(frm, text="Pilih Foto", command=lambda: self.select_file(vars["Foto path"])).grid(row=4, column=2, padx=6) + def save(): + try: + nama = vars["Nama"].get().strip() + kategori = vars["Kategori"].get().strip() + harga = float(vars["Harga"].get()) + stok = int(vars["Stok"].get()) + foto = vars["Foto path"].get().strip() or None + item_disc = float(vars["Item Discount (%)"].get() or 0) + except Exception as e: + messagebox.showerror("Input error", "Periksa kembali input (Harga/Stok harus angka)") + return + menu_add(nama,kategori,harga,stok,foto,item_disc) + messagebox.showinfo("Sukses","Menu ditambahkan") + w.destroy() + self.reload_manage_table() + self.reload_view_table() + ttk.Button(frm, text="Simpan", command=save).grid(row=len(labels), column=1, pady=8) + +def open_edit_menu_window(self): + sel = self.manage_tree.selection() + if not sel: + messagebox.showwarning("Pilih", "Pilih menu terlebih dahulu") + return + item = self.manage_tree.item(sel)['values'] + menu_id = item[0] + data = menu_get(menu_id) + if not data: + messagebox.showerror("Error", "Data menu tidak ditemukan") + return + mid,nama,kategori,harga,stok,foto,tersedia,item_disc = data + w = tk.Toplevel(self.root) + w.title("Edit Menu") + frm = ttk.Frame(w,padding=10) + frm.pack() + labels = ["Nama","Kategori","Harga","Stok","Foto path","Item Discount (%)"] + vars = {} + defaults = [nama,kategori,str(harga),str(stok),foto or "",str(item_disc or 0)] + for i,lab in enumerate(labels): + ttk.Label(frm, text=lab).grid(row=i, column=0, sticky='e', pady=4) + vars[lab] = tk.StringVar(value=defaults[i]) + ttk.Entry(frm, textvariable=vars[lab], width=40).grid(row=i, column=1, pady=4) + ttk.Button(frm, text="Pilih Foto", command=lambda: self.select_file(vars["Foto path"])).grid(row=4, column=2, padx=6) + def save(): + try: + nama = vars["Nama"].get().strip() + kategori = vars["Kategori"].get().strip() + harga = float(vars["Harga"].get()) + stok = int(vars["Stok"].get()) + foto = vars["Foto path"].get().strip() or None + item_disc = float(vars["Item Discount (%)"].get() or 0) + except: + messagebox.showerror("Input error", "Periksa input") + return + menu_update(menu_id, nama, kategori, harga, stok, foto, item_disc) + messagebox.showinfo("Sukses","Menu diperbarui") + w.destroy() + self.reload_manage_table() + self.reload_view_table() + ttk.Button(frm, text="Update", command=save).grid(row=len(labels), column=1, pady=8) + +def delete_selected_menu(self): + sel = self.manage_tree.selection() + if not sel: + messagebox.showwarning("Pilih", "Pilih menu untuk dihapus") + return + item = self.manage_tree.item(sel)['values'] + menu_id = item[0] + if messagebox.askyesno("Konfirmasi", "Hapus menu terpilih?"): + menu_delete(menu_id) + messagebox.showinfo("Dihapus", "Menu berhasil dihapus") + self.reload_manage_table() + self.reload_view_table() + +def select_file(self, var): + p = filedialog.askopenfilename(title="Pilih file gambar", + filetypes=[("Image files","*.png;*.jpg;*.jpeg;*.gif;*.bmp"),("All files","*.*")]) + if p: + var.set(p)