This commit is contained in:
Nathan 2025-12-15 02:28:36 +07:00
commit 2a9b7a4edc
2 changed files with 115 additions and 51 deletions

View File

@ -1,6 +1,6 @@
import tkinter as tk import tkinter as tk
from database import connect
from tkinter import messagebox from tkinter import messagebox
from database import connect
class AdminMenu: class AdminMenu:
def __init__(self, root): def __init__(self, root):
@ -18,7 +18,7 @@ class AdminMenu:
).pack(pady=15) ).pack(pady=15)
# ===================== # =====================
# FORM INPUT (RAPI) # FORM INPUT
# ===================== # =====================
form = tk.Frame(self.frame) form = tk.Frame(self.frame)
form.pack(pady=10) form.pack(pady=10)
@ -28,15 +28,27 @@ class AdminMenu:
self.nama = tk.Entry(form, width=30) self.nama = tk.Entry(form, width=30)
self.nama.grid(row=0, column=1) self.nama.grid(row=0, column=1)
tk.Label(form, text="Harga", width=15, anchor="w")\ tk.Label(form, text="Kategori", width=15, anchor="w")\
.grid(row=1, column=0, pady=5) .grid(row=1, column=0, pady=5)
self.kategori = tk.StringVar()
tk.OptionMenu(
form,
self.kategori,
"Makanan",
"Minuman",
"Dessert"
).grid(row=1, column=1, sticky="w")
self.kategori.set("Makanan")
tk.Label(form, text="Harga", width=15, anchor="w")\
.grid(row=2, column=0, pady=5)
self.harga = tk.Entry(form, width=30) self.harga = tk.Entry(form, width=30)
self.harga.grid(row=1, column=1) self.harga.grid(row=2, column=1)
tk.Label(form, text="Path Gambar", width=15, anchor="w")\ tk.Label(form, text="Path Gambar", width=15, anchor="w")\
.grid(row=2, column=0, pady=5) .grid(row=3, column=0, pady=5)
self.gambar = tk.Entry(form, width=30) self.gambar = tk.Entry(form, width=30)
self.gambar.grid(row=2, column=1) self.gambar.grid(row=3, column=1)
# ===================== # =====================
# BUTTON CRUD # BUTTON CRUD
@ -44,76 +56,109 @@ class AdminMenu:
btn_frame = tk.Frame(self.frame) btn_frame = tk.Frame(self.frame)
btn_frame.pack(pady=10) btn_frame.pack(pady=10)
tk.Button(btn_frame, text="Tambah", bg="#d1e7dd", tk.Button(btn_frame, text="Tambah", width=10,
width=10, command=self.tambah).grid(row=0, column=0, padx=5) bg="#d1e7dd", command=self.tambah).grid(row=0, column=0, padx=5)
tk.Button(btn_frame, text="Update", bg="#cfe2ff", tk.Button(btn_frame, text="Update", width=10,
width=10, command=self.update).grid(row=0, column=1, padx=5) bg="#cfe2ff", command=self.update).grid(row=0, column=1, padx=5)
tk.Button(btn_frame, text="Hapus", bg="#f8d7da", tk.Button(btn_frame, text="Hapus", width=10,
width=10, command=self.hapus).grid(row=0, column=2, padx=5) bg="#f8d7da", command=self.hapus).grid(row=0, column=2, padx=5)
tk.Button(btn_frame, text="Refresh", tk.Button(btn_frame, text="Refresh", width=10,
width=10, command=self.load_menu).grid(row=0, column=3, padx=5) command=self.load_menu).grid(row=0, column=3, padx=5)
tk.Button(btn_frame, text="Logout", tk.Button(btn_frame, text="Logout", width=10,
width=10, command=self.logout).grid(row=0, column=4, padx=5) command=self.logout).grid(row=0, column=4, padx=5)
# =====================
# FILTER
# =====================
filter_frame = tk.Frame(self.frame)
filter_frame.pack(pady=5)
tk.Label(filter_frame, text="Filter Kategori:").pack(side=tk.LEFT)
self.filter_kategori = tk.StringVar()
tk.OptionMenu(
filter_frame,
self.filter_kategori,
"Semua",
"Makanan",
"Minuman",
"Dessert",
command=self.load_menu
).pack(side=tk.LEFT)
self.filter_kategori.set("Semua")
# ===================== # =====================
# LIST MENU # LIST MENU
# ===================== # =====================
tk.Label(self.frame, text="Daftar Menu", font=("Arial", 12, "bold"))\ self.listbox = tk.Listbox(self.frame, width=80, height=10)
.pack(pady=5) self.listbox.pack(pady=10)
self.listbox = tk.Listbox(self.frame, width=60, height=10)
self.listbox.pack(pady=5)
self.listbox.bind("<<ListboxSelect>>", self.pilih_menu) self.listbox.bind("<<ListboxSelect>>", self.pilih_menu)
self.menu_data = [] self.menu_data = []
self.load_menu() self.load_menu()
# ===================== # =====================
# DATABASE FUNCTION # LOAD MENU + FILTER
# ===================== # =====================
def load_menu(self): def load_menu(self, *_):
self.listbox.delete(0, tk.END) self.listbox.delete(0, tk.END)
db = connect() db = connect()
cur = db.cursor() cur = db.cursor()
if self.filter_kategori.get() == "Semua":
cur.execute("SELECT * FROM menu") cur.execute("SELECT * FROM menu")
else:
cur.execute(
"SELECT * FROM menu WHERE kategori=?",
(self.filter_kategori.get(),)
)
self.menu_data = cur.fetchall() self.menu_data = cur.fetchall()
db.close() db.close()
for menu in self.menu_data: for m in self.menu_data:
self.listbox.insert( self.listbox.insert(
tk.END, tk.END,
f"{menu[0]} | {menu[1]} | Rp {menu[2]:,.0f}" f"{m[0]:<3} | {m[1]:<20} | {m[2]:<10} | Rp {m[3]:,.0f}"
) )
# =====================
# PILIH MENU
# =====================
def pilih_menu(self, event): def pilih_menu(self, event):
idx = self.listbox.curselection() idx = self.listbox.curselection()
if not idx: if not idx:
return return
menu = self.menu_data[idx[0]] menu = self.menu_data[idx[0]]
self.clear_form() self.clear_form()
self.nama.insert(0, menu[1]) self.nama.insert(0, menu[1])
self.harga.insert(0, menu[2]) self.kategori.set(menu[2])
self.gambar.insert(0, menu[3]) self.harga.insert(0, menu[3])
self.gambar.insert(0, menu[4])
# ===================== # =====================
# CRUD # CRUD
# ===================== # =====================
def tambah(self): def tambah(self):
if not self.nama.get() or not self.harga.get(): if not self.nama.get() or not self.harga.get():
messagebox.showwarning("Error", "Nama dan Harga wajib diisi") messagebox.showwarning("Error", "Data belum lengkap")
return return
db = connect() db = connect()
cur = db.cursor() cur = db.cursor()
cur.execute( cur.execute(
"INSERT INTO menu(nama,harga,gambar) VALUES (?,?,?)", "INSERT INTO menu(nama,kategori,harga,gambar) VALUES (?,?,?,?)",
(self.nama.get(), float(self.harga.get()), self.gambar.get()) (
self.nama.get(),
self.kategori.get(),
float(self.harga.get()),
self.gambar.get()
)
) )
db.commit() db.commit()
db.close() db.close()
@ -125,7 +170,7 @@ class AdminMenu:
def update(self): def update(self):
idx = self.listbox.curselection() idx = self.listbox.curselection()
if not idx: if not idx:
messagebox.showwarning("Pilih", "Pilih menu yang ingin diupdate") messagebox.showwarning("Pilih", "Pilih menu dulu")
return return
menu_id = self.menu_data[idx[0]][0] menu_id = self.menu_data[idx[0]][0]
@ -133,8 +178,14 @@ class AdminMenu:
db = connect() db = connect()
cur = db.cursor() cur = db.cursor()
cur.execute( cur.execute(
"UPDATE menu SET nama=?, harga=?, gambar=? WHERE id=?", "UPDATE menu SET nama=?, kategori=?, harga=?, gambar=? WHERE id=?",
(self.nama.get(), float(self.harga.get()), self.gambar.get(), menu_id) (
self.nama.get(),
self.kategori.get(),
float(self.harga.get()),
self.gambar.get(),
menu_id
)
) )
db.commit() db.commit()
db.close() db.close()
@ -145,7 +196,7 @@ class AdminMenu:
def hapus(self): def hapus(self):
idx = self.listbox.curselection() idx = self.listbox.curselection()
if not idx: if not idx:
messagebox.showwarning("Pilih", "Pilih menu yang ingin dihapus") messagebox.showwarning("Pilih", "Pilih menu dulu")
return return
menu_id = self.menu_data[idx[0]][0] menu_id = self.menu_data[idx[0]][0]
@ -165,6 +216,7 @@ class AdminMenu:
self.nama.delete(0, tk.END) self.nama.delete(0, tk.END)
self.harga.delete(0, tk.END) self.harga.delete(0, tk.END)
self.gambar.delete(0, tk.END) self.gambar.delete(0, tk.END)
self.kategori.set("Makanan")
def logout(self): def logout(self):
self.frame.destroy() self.frame.destroy()

View File

@ -7,7 +7,9 @@ def setup_database():
db = connect() db = connect()
cur = db.cursor() cur = db.cursor()
# Tabel Users # =====================
# TABEL USERS
# =====================
cur.execute(""" cur.execute("""
CREATE TABLE IF NOT EXISTS users( CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
@ -17,23 +19,28 @@ def setup_database():
) )
""") """)
# Tabel Menu # =====================
# TABEL MENU (ADA KATEGORI)
# =====================
cur.execute(""" cur.execute("""
CREATE TABLE IF NOT EXISTS menu( CREATE TABLE IF NOT EXISTS menu(
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT, nama TEXT,
kategori TEXT,
harga REAL, harga REAL,
gambar TEXT gambar TEXT
) )
""") """)
# Tambah kolom kategori (aman) # Jaga-jaga DB lama (tidak error)
try: try:
cur.execute("ALTER TABLE menu ADD COLUMN kategori TEXT") cur.execute("ALTER TABLE menu ADD COLUMN kategori TEXT")
except sqlite3.OperationalError: except sqlite3.OperationalError:
pass pass
# Tabel Transaksi # =====================
# TABEL TRANSAKSI
# =====================
cur.execute(""" cur.execute("""
CREATE TABLE IF NOT EXISTS transaksi( CREATE TABLE IF NOT EXISTS transaksi(
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
@ -44,7 +51,9 @@ def setup_database():
) )
""") """)
# Tabel Detail Transaksi # =====================
# DETAIL TRANSAKSI
# =====================
cur.execute(""" cur.execute("""
CREATE TABLE IF NOT EXISTS detail_transaksi( CREATE TABLE IF NOT EXISTS detail_transaksi(
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
@ -56,23 +65,26 @@ def setup_database():
) )
""") """)
# Insert Akun Default # =====================
# INSERT USER DEFAULT
# =====================
cur.execute("SELECT COUNT(*) FROM users") cur.execute("SELECT COUNT(*) FROM users")
if cur.fetchone()[0] == 0: if cur.fetchone()[0] == 0:
users = [ users = [
("admin","admin","admin"), ("admin", "admin", "admin"),
("kasir","kasir","kasir"), ("kasir", "kasir", "kasir"),
("pembeli","pembeli","pembeli"), ("pembeli", "pembeli", "pembeli"),
("waiter","waiter","waiter"), ("waiter", "waiter", "waiter"),
("pemilik","pemilik","pemilik") ("pemilik", "pemilik", "pemilik")
] ]
cur.executemany( cur.executemany(
"INSERT INTO users(username,password,role) VALUES (?,?,?)", "INSERT INTO users(username,password,role) VALUES (?,?,?)",
users users
) )
db.commit()
# Insert Menu Default # =====================
# INSERT MENU DEFAULT
# =====================
cur.execute("SELECT COUNT(*) FROM menu") cur.execute("SELECT COUNT(*) FROM menu")
if cur.fetchone()[0] == 0: if cur.fetchone()[0] == 0:
menus = [ menus = [
@ -80,13 +92,13 @@ def setup_database():
('Bakso', 'Makanan', 15000, 'aset/bakso.jpg'), ('Bakso', 'Makanan', 15000, 'aset/bakso.jpg'),
('Mie Ayam', 'Makanan', 12000, 'aset/mie_ayam.jpg'), ('Mie Ayam', 'Makanan', 12000, 'aset/mie_ayam.jpg'),
('Es Teh', 'Minuman', 5000, 'aset/es_teh.jpg'), ('Es Teh', 'Minuman', 5000, 'aset/es_teh.jpg'),
('Es Teler', 'Minuman', 15000, 'aset/es_teler.jpg'), ('Es Teler', 'Dessert', 15000, 'aset/es_teler.jpg'),
('Jus Jeruk', 'Minuman', 8000, 'aset/jus_jeruk.jpg') ('Jus Jeruk', 'Minuman', 8000, 'aset/jus_jeruk.jpg')
] ]
cur.executemany( cur.executemany(
"INSERT INTO menu (nama, kategori, harga, gambar) VALUES (?,?,?,?)", "INSERT INTO menu (nama, kategori, harga, gambar) VALUES (?,?,?,?)",
menus menus
) )
db.commit()
db.commit()
db.close() db.close()