Promo Manage Admin
This commit is contained in:
parent
5139061a1a
commit
069178fd7d
160
main.py
160
main.py
@ -590,3 +590,163 @@ def select_file(self, var):
|
|||||||
filetypes=[("Image files","*.png;*.jpg;*.jpeg;*.gif;*.bmp"),("All files","*.*")])
|
filetypes=[("Image files","*.png;*.jpg;*.jpeg;*.gif;*.bmp"),("All files","*.*")])
|
||||||
if p:
|
if p:
|
||||||
var.set(p)
|
var.set(p)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Promo manage Khusus Admin
|
||||||
|
|
||||||
|
|
||||||
|
def build_promo_tab(self, parent):
|
||||||
|
for w in parent.winfo_children():
|
||||||
|
w.destroy()
|
||||||
|
top = ttk.Frame(parent)
|
||||||
|
top.pack(fill='x', pady=6)
|
||||||
|
ttk.Label(top, text="Promo Codes", font=("Arial", 14, "bold")).pack(side='left', padx=6)
|
||||||
|
ttk.Button(top, text="Tambah Promo", command=self.open_add_promo).pack(side='right', padx=6)
|
||||||
|
cols = ("Code","Type","Value","MinTotal")
|
||||||
|
self.promo_tree = ttk.Treeview(parent, columns=cols, show='headings', height=12)
|
||||||
|
for c in cols:
|
||||||
|
self.promo_tree.heading(c, text=c)
|
||||||
|
self.promo_tree.column(c, width=120)
|
||||||
|
self.promo_tree.pack(fill='x', padx=6, pady=6)
|
||||||
|
btnfrm = ttk.Frame(parent)
|
||||||
|
btnfrm.pack(pady=6)
|
||||||
|
ttk.Button(btnfrm, text="Edit Promo", command=self.open_edit_promo).pack(side='left', padx=6)
|
||||||
|
ttk.Button(btnfrm, text="Hapus Promo", command=self.delete_selected_promo).pack(side='left', padx=6)
|
||||||
|
ttk.Button(btnfrm, text="Reload", command=self.reload_promo_table).pack(side='left', padx=6)
|
||||||
|
self.reload_promo_table()
|
||||||
|
|
||||||
|
def reload_promo_table(self):
|
||||||
|
for r in self.promo_tree.get_children():
|
||||||
|
self.promo_tree.delete(r)
|
||||||
|
for p in promo_list():
|
||||||
|
self.promo_tree.insert("", tk.END, values=p)
|
||||||
|
|
||||||
|
def open_add_promo(self):
|
||||||
|
w = tk.Toplevel(self.root)
|
||||||
|
w.title("Tambah Promo")
|
||||||
|
w.geometry("350x230")
|
||||||
|
w.transient(self.root)
|
||||||
|
w.grab_set()
|
||||||
|
|
||||||
|
frm = ttk.Frame(w, padding=15)
|
||||||
|
frm.pack(fill="both", expand=True)
|
||||||
|
|
||||||
|
vars = {
|
||||||
|
'code': tk.StringVar(),
|
||||||
|
'type': tk.StringVar(value='percent'),
|
||||||
|
'value': tk.StringVar(),
|
||||||
|
'min_total': tk.StringVar(value='0')
|
||||||
|
}
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Code:").grid(row=0, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['code'], width=20).grid(row=0, column=1)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Type (percent/fixed):").grid(row=1, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['type'], width=20).grid(row=1, column=1)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Value:").grid(row=2, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['value'], width=20).grid(row=2, column=1)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Min Total:").grid(row=3, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['min_total'], width=20).grid(row=3, column=1)
|
||||||
|
|
||||||
|
def save():
|
||||||
|
try:
|
||||||
|
code = vars['code'].get().strip().upper()
|
||||||
|
ptype = vars['type'].get().strip()
|
||||||
|
val = float(vars['value'].get())
|
||||||
|
mt = float(vars['min_total'].get() or 0)
|
||||||
|
|
||||||
|
if ptype not in ('percent', 'fixed'):
|
||||||
|
raise ValueError("type harus 'percent' atau 'fixed'")
|
||||||
|
except Exception as e:
|
||||||
|
messagebox.showerror("Error", f"Input salah: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
promo_add(code, ptype, val, mt)
|
||||||
|
messagebox.showinfo("Sukses", "Promo ditambahkan")
|
||||||
|
w.destroy()
|
||||||
|
self.reload_promo_table()
|
||||||
|
except sqlite3.IntegrityError:
|
||||||
|
messagebox.showerror("Error", "Kode promo sudah ada")
|
||||||
|
|
||||||
|
ttk.Button(frm, text="Simpan", command=save).grid(row=4, column=1, pady=12)
|
||||||
|
|
||||||
|
|
||||||
|
def open_edit_promo(self):
|
||||||
|
sel = self.promo_tree.selection()
|
||||||
|
if not sel:
|
||||||
|
messagebox.showwarning("Pilih", "Pilih promo untuk diedit")
|
||||||
|
return
|
||||||
|
|
||||||
|
code = self.promo_tree.item(sel)['values'][0]
|
||||||
|
row = promo_get(code)
|
||||||
|
if not row:
|
||||||
|
messagebox.showerror("Error", "Promo tidak ditemukan")
|
||||||
|
return
|
||||||
|
|
||||||
|
code, ptype, val, min_total = row
|
||||||
|
|
||||||
|
w = tk.Toplevel(self.root)
|
||||||
|
w.title("Edit Promo")
|
||||||
|
w.geometry("350x230")
|
||||||
|
w.transient(self.root)
|
||||||
|
w.grab_set()
|
||||||
|
|
||||||
|
frm = ttk.Frame(w, padding=15)
|
||||||
|
frm.pack(fill="both", expand=True)
|
||||||
|
|
||||||
|
vars = {
|
||||||
|
'type': tk.StringVar(value=ptype),
|
||||||
|
'value': tk.StringVar(value=str(val)),
|
||||||
|
'min_total': tk.StringVar(value=str(min_total))
|
||||||
|
}
|
||||||
|
|
||||||
|
ttk.Label(frm, text=f"Code: {code}", font=("Arial", 10, "bold")).grid(row=0, column=0, columnspan=2, pady=5)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Type (percent/fixed):").grid(row=1, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['type'], width=20).grid(row=1, column=1)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Value:").grid(row=2, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['value'], width=20).grid(row=2, column=1)
|
||||||
|
|
||||||
|
ttk.Label(frm, text="Min Total:").grid(row=3, column=0, sticky='e', pady=5)
|
||||||
|
ttk.Entry(frm, textvariable=vars['min_total'], width=20).grid(row=3, column=1)
|
||||||
|
|
||||||
|
def save():
|
||||||
|
try:
|
||||||
|
ptype = vars['type'].get().strip()
|
||||||
|
val = float(vars['value'].get())
|
||||||
|
mt = float(vars['min_total'].get() or 0)
|
||||||
|
|
||||||
|
if ptype not in ('percent', 'fixed'):
|
||||||
|
raise ValueError("type harus 'percent' atau 'fixed'")
|
||||||
|
except Exception as e:
|
||||||
|
messagebox.showerror("Error", f"Input salah: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
promo_update(code, ptype, val, mt)
|
||||||
|
messagebox.showinfo("Sukses", "Promo diperbarui")
|
||||||
|
w.destroy()
|
||||||
|
self.reload_promo_table()
|
||||||
|
|
||||||
|
ttk.Button(frm, text="Update", command=save).grid(row=4, column=1, pady=12)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_selected_promo(self):
|
||||||
|
sel = self.promo_tree.selection()
|
||||||
|
if not sel:
|
||||||
|
messagebox.showwarning("Pilih", "Pilih promo")
|
||||||
|
return
|
||||||
|
code = self.promo_tree.item(sel)['values'][0]
|
||||||
|
if messagebox.askyesno("Konfirmasi", f"Hapus promo {code}?"):
|
||||||
|
promo_delete(code)
|
||||||
|
messagebox.showinfo("Dihapus","Promo terhapus")
|
||||||
|
self.reload_promo_table()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user