Menu Manage Admin
This commit is contained in:
parent
a2497722bd
commit
5139061a1a
127
main.py
127
main.py
@ -463,3 +463,130 @@ def on_view_select(self, event):
|
|||||||
else:
|
else:
|
||||||
self.preview_img_label.config(image='')
|
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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user