Debug
This commit is contained in:
parent
19ddb1dc98
commit
6b61f5446b
204
main.py
204
main.py
@ -2185,17 +2185,25 @@ class App:
|
|||||||
ttk.Button(search_frame, text="Cari", command=self.reload_order_menu_cards).pack(side='left', padx=3)
|
ttk.Button(search_frame, text="Cari", command=self.reload_order_menu_cards).pack(side='left', padx=3)
|
||||||
ttk.Button(search_frame, text="Reset", command=self.reset_order_search).pack(side='left', padx=3)
|
ttk.Button(search_frame, text="Reset", command=self.reset_order_search).pack(side='left', padx=3)
|
||||||
|
|
||||||
# Scrollable frame untuk cards (DENGAN BACKGROUND PUTIH)
|
# Scrollable frame untuk cards (FULL WIDTH FIX)
|
||||||
canvas = tk.Canvas(left, bg='#f5f5f5', height=450, highlightthickness=0)
|
canvas = tk.Canvas(left, bg='#f5f5f5', highlightthickness=0)
|
||||||
scrollbar = ttk.Scrollbar(left, orient="vertical", command=canvas.yview)
|
scrollbar = ttk.Scrollbar(left, orient="vertical", command=canvas.yview)
|
||||||
|
|
||||||
self.menu_cards_frame = ttk.Frame(canvas)
|
self.menu_cards_frame = ttk.Frame(canvas)
|
||||||
|
|
||||||
self.menu_cards_frame.bind(
|
# 1. Simpan ID Window saat create_window
|
||||||
"<Configure>",
|
frame_window_id = canvas.create_window((0, 0), window=self.menu_cards_frame, anchor="nw")
|
||||||
lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
|
|
||||||
)
|
# 2. Fungsi agar scroll region update saat konten bertambah
|
||||||
|
def configure_scroll_region(event):
|
||||||
|
canvas.configure(scrollregion=canvas.bbox("all"))
|
||||||
|
self.menu_cards_frame.bind("<Configure>", configure_scroll_region)
|
||||||
|
|
||||||
|
# 3. FUNGSI KUNCI: Paksa frame selebar canvas (Full Width)
|
||||||
|
def configure_frame_width(event):
|
||||||
|
canvas.itemconfig(frame_window_id, width=event.width)
|
||||||
|
canvas.bind("<Configure>", configure_frame_width)
|
||||||
|
|
||||||
canvas.create_window((0, 0), window=self.menu_cards_frame, anchor="nw")
|
|
||||||
canvas.configure(yscrollcommand=scrollbar.set)
|
canvas.configure(yscrollcommand=scrollbar.set)
|
||||||
|
|
||||||
canvas.pack(side="left", fill="both", expand=True)
|
canvas.pack(side="left", fill="both", expand=True)
|
||||||
@ -2286,23 +2294,23 @@ class App:
|
|||||||
|
|
||||||
|
|
||||||
def reload_order_menu_cards(self):
|
def reload_order_menu_cards(self):
|
||||||
"""Load menu dalam bentuk cards dengan gambar + tombol +/-"""
|
"""Load menu dalam bentuk cards 4 kolom FULL WIDTH"""
|
||||||
# Clear existing cards
|
# Clear existing cards
|
||||||
for widget in self.menu_cards_frame.winfo_children():
|
for widget in self.menu_cards_frame.winfo_children():
|
||||||
widget.destroy()
|
widget.destroy()
|
||||||
|
|
||||||
# Get menu data
|
|
||||||
search = self.order_search_var.get().strip() or None
|
search = self.order_search_var.get().strip() or None
|
||||||
results = menu_list(search_text=search, available_only=True)
|
results = menu_list(search_text=search, available_only=True)
|
||||||
|
|
||||||
# Buat dict untuk qty di cart
|
cart_dict = {item['menu_id']: item['qty'] for item in self.cart_items}
|
||||||
cart_dict = {}
|
|
||||||
for cart_item in self.cart_items:
|
|
||||||
cart_dict[cart_item['menu_id']] = cart_item['qty']
|
|
||||||
|
|
||||||
# Configure grid columns (2 kolom sama lebar)
|
# === KONFIGURASI 4 KOLOM AGAR RATA (UNIFORM) ===
|
||||||
self.menu_cards_frame.columnconfigure(0, weight=1)
|
total_columns = 4
|
||||||
self.menu_cards_frame.columnconfigure(1, weight=1)
|
|
||||||
|
# 'uniform' membuat lebar setiap kolom identik/sama persis
|
||||||
|
for i in range(total_columns):
|
||||||
|
self.menu_cards_frame.columnconfigure(i, weight=1, uniform='menu_col')
|
||||||
|
# ===============================================
|
||||||
|
|
||||||
row = 0
|
row = 0
|
||||||
col = 0
|
col = 0
|
||||||
@ -2310,153 +2318,73 @@ class App:
|
|||||||
for menu_data in results:
|
for menu_data in results:
|
||||||
mid, nama, kategori, harga, stok, foto, tersedia, item_disc = menu_data
|
mid, nama, kategori, harga, stok, foto, tersedia, item_disc = menu_data
|
||||||
|
|
||||||
|
# Buat Card (HAPUS width/height fix agar responsif)
|
||||||
card = tk.Frame(
|
card = tk.Frame(
|
||||||
self.menu_cards_frame,
|
self.menu_cards_frame,
|
||||||
relief='solid',
|
relief='solid',
|
||||||
borderwidth=1,
|
borderwidth=1,
|
||||||
bg='white',
|
bg='white',
|
||||||
padx=10,
|
padx=5, pady=5
|
||||||
pady=10,
|
|
||||||
width=200,
|
|
||||||
height=320
|
|
||||||
)
|
)
|
||||||
card.grid_propagate(False)
|
|
||||||
card.grid(row=row, column=col, padx=8, pady=8, sticky='nsew')
|
# sticky='nsew' MEMAKSA card memenuhi kotak grid-nya
|
||||||
|
card.grid(row=row, column=col, padx=5, pady=5, sticky='nsew')
|
||||||
|
|
||||||
# Gambar
|
# --- Bagian Gambar ---
|
||||||
if foto and os.path.exists(foto):
|
if foto and os.path.exists(foto):
|
||||||
try:
|
try:
|
||||||
img = Image.open(foto)
|
img = Image.open(foto)
|
||||||
img = img.resize((150, 100), Image.Resampling.LANCZOS)
|
# Resize agak kecil agar muat 4 kolom
|
||||||
|
img = img.resize((120, 85), Image.Resampling.LANCZOS)
|
||||||
photo = ImageTk.PhotoImage(img)
|
photo = ImageTk.PhotoImage(img)
|
||||||
|
lbl = tk.Label(card, image=photo, bg='white')
|
||||||
img_label = tk.Label(card, image=photo, bg='white')
|
lbl.image = photo
|
||||||
img_label.image = photo
|
lbl.pack(pady=5)
|
||||||
img_label.pack(pady=(5, 5))
|
|
||||||
except:
|
except:
|
||||||
tk.Label(
|
tk.Label(card, text="[No Image]", bg='#eee', height=4).pack(fill='x')
|
||||||
card,
|
|
||||||
text="[No Image]",
|
|
||||||
bg='#e0e0e0',
|
|
||||||
width=20,
|
|
||||||
height=6
|
|
||||||
).pack()
|
|
||||||
else:
|
else:
|
||||||
tk.Label(
|
tk.Label(card, text="[No Image]", bg='#eee', height=4).pack(fill='x')
|
||||||
card,
|
|
||||||
text="[No Image]",
|
|
||||||
bg='#e0e0e0',
|
|
||||||
width=18,
|
|
||||||
height=5
|
|
||||||
).pack()
|
|
||||||
|
|
||||||
# Nama menu
|
# --- Bagian Info ---
|
||||||
tk.Label(
|
tk.Label(card, text=nama, font=("Arial", 10, "bold"), bg='white', wraplength=110).pack()
|
||||||
card,
|
tk.Label(card, text=kategori, font=("Arial", 8), fg='gray', bg='white').pack()
|
||||||
text=nama,
|
|
||||||
font=("Arial", 10, "bold"),
|
txt_harga = f"Rp {harga:,.0f}"
|
||||||
bg='white',
|
|
||||||
wraplength=140,
|
|
||||||
justify='center',
|
|
||||||
height=2
|
|
||||||
).pack(pady=(3, 2))
|
|
||||||
|
|
||||||
# Kategori
|
|
||||||
tk.Label(
|
|
||||||
card,
|
|
||||||
text=kategori,
|
|
||||||
font=("Arial", 8),
|
|
||||||
fg='gray',
|
|
||||||
bg='white'
|
|
||||||
).pack(pady=1)
|
|
||||||
|
|
||||||
# Harga
|
|
||||||
harga_text = f"Rp {harga:,.0f}"
|
|
||||||
if item_disc > 0:
|
if item_disc > 0:
|
||||||
harga_text += f"\n(-{item_disc}%)"
|
txt_harga += f"\n(-{item_disc}%)"
|
||||||
tk.Label(
|
fg = '#4CAF50'
|
||||||
card,
|
|
||||||
text=harga_text,
|
|
||||||
font=("Arial", 9, "bold"),
|
|
||||||
fg='#4CAF50',
|
|
||||||
bg='white',
|
|
||||||
justify='center'
|
|
||||||
).pack(pady=2)
|
|
||||||
else:
|
else:
|
||||||
tk.Label(
|
fg = 'green'
|
||||||
card,
|
tk.Label(card, text=txt_harga, font=("Arial", 9, "bold"), fg=fg, bg='white').pack(pady=2)
|
||||||
text=harga_text,
|
|
||||||
font=("Arial", 9, "bold"),
|
color = 'blue' if stok > 0 else 'red'
|
||||||
fg='green',
|
tk.Label(card, text=f"Stok: {stok}", font=("Arial", 8), fg=color, bg='white').pack()
|
||||||
bg='white'
|
|
||||||
).pack(pady=2)
|
|
||||||
|
|
||||||
# Stok
|
# --- Bagian Tombol ---
|
||||||
stok_color = 'blue' if stok > 0 else 'red'
|
qty = cart_dict.get(mid, 0)
|
||||||
tk.Label(
|
act_frame = tk.Frame(card, bg='white')
|
||||||
card,
|
# Pack side bottom agar tombol selalu di bawah card
|
||||||
text=f"Stok: {stok}",
|
act_frame.pack(pady=5, fill='x', side='bottom')
|
||||||
font=("Arial", 8),
|
|
||||||
fg=stok_color,
|
|
||||||
bg='white'
|
|
||||||
).pack(pady=2)
|
|
||||||
|
|
||||||
qty_in_cart = cart_dict.get(mid, 0)
|
if qty > 0:
|
||||||
|
tk.Button(act_frame, text="-", bg='#FF5722', fg='white', width=2, borderwidth=0,
|
||||||
btn_frame = tk.Frame(card, bg='white')
|
command=lambda m=mid: self.decrease_from_card(m)).pack(side='left', padx=2)
|
||||||
btn_frame.pack(pady=(5, 5), fill='x')
|
tk.Label(act_frame, text=str(qty), bg='white').pack(side='left', expand=True)
|
||||||
|
tk.Button(act_frame, text="+", bg='#4CAF50', fg='white', width=2, borderwidth=0,
|
||||||
if qty_in_cart > 0:
|
command=lambda m=mid, s=stok: self.increase_from_card(m, s)).pack(side='right', padx=2)
|
||||||
tk.Button(
|
|
||||||
btn_frame,
|
|
||||||
text="➖",
|
|
||||||
font=("Arial", 10, "bold"),
|
|
||||||
bg='#FF5722',
|
|
||||||
fg='white',
|
|
||||||
width=3,
|
|
||||||
borderwidth=0,
|
|
||||||
cursor='hand2',
|
|
||||||
command=lambda m=mid: self.decrease_from_card(m)
|
|
||||||
).pack(side='left', padx=2)
|
|
||||||
|
|
||||||
tk.Label(
|
|
||||||
btn_frame,
|
|
||||||
text=str(qty_in_cart),
|
|
||||||
font=("Arial", 10, "bold"),
|
|
||||||
bg='white',
|
|
||||||
width=4
|
|
||||||
).pack(side='left', padx=3)
|
|
||||||
|
|
||||||
tk.Button(
|
|
||||||
btn_frame,
|
|
||||||
text="➕",
|
|
||||||
font=("Arial", 10, "bold"),
|
|
||||||
bg='#4CAF50',
|
|
||||||
fg='white',
|
|
||||||
width=3,
|
|
||||||
borderwidth=0,
|
|
||||||
cursor='hand2',
|
|
||||||
command=lambda m=mid, s=stok: self.increase_from_card(m, s)
|
|
||||||
).pack(side='left', padx=2)
|
|
||||||
else:
|
else:
|
||||||
tk.Button(
|
tk.Button(act_frame, text="+ Tambah", bg='#4CAF50', fg='white', borderwidth=0,
|
||||||
btn_frame,
|
command=lambda m=mid, s=stok: self.increase_from_card(m, s)).pack(fill='x')
|
||||||
text="➕ Tambah",
|
|
||||||
font=("Arial", 9, "bold"),
|
|
||||||
bg='#4CAF50',
|
|
||||||
fg='white',
|
|
||||||
borderwidth=0,
|
|
||||||
cursor='hand2',
|
|
||||||
command=lambda m=mid, s=stok: self.increase_from_card(m, s)
|
|
||||||
).pack(fill='x', padx=2)
|
|
||||||
|
|
||||||
|
# --- Logika Pindah Baris ---
|
||||||
col += 1
|
col += 1
|
||||||
if col >= 2:
|
if col >= total_columns:
|
||||||
col = 0
|
col = 0
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
|
# Reset row weight
|
||||||
for i in range(row + 1):
|
for i in range(row + 1):
|
||||||
self.menu_cards_frame.rowconfigure(i, weight=1)
|
self.menu_cards_frame.rowconfigure(i, weight=0)
|
||||||
|
|
||||||
|
|
||||||
def reset_order_search(self):
|
def reset_order_search(self):
|
||||||
|
|||||||
10
meja.csv
10
meja.csv
@ -1,11 +1,11 @@
|
|||||||
nomor_meja,status,transaksi_id
|
nomor_meja,status,transaksi_id
|
||||||
1,terisi,
|
1,kosong,
|
||||||
2,kosong,
|
2,terisi,
|
||||||
3,kosong,
|
3,kosong,
|
||||||
4,kosong,
|
4,terisi,
|
||||||
5,terisi,
|
5,kosong,
|
||||||
6,kosong,
|
6,kosong,
|
||||||
7,kosong,
|
7,kosong,
|
||||||
8,kosong,
|
8,kosong,
|
||||||
9,terisi,
|
9,kosong,
|
||||||
10,kosong,
|
10,kosong,
|
||||||
|
|||||||
|
Loading…
x
Reference in New Issue
Block a user