Promo
This commit is contained in:
parent
0c0f2bfdf2
commit
164c5a7e8a
89
main.py
89
main.py
@ -186,3 +186,92 @@ def menu_decrease_stock(menu_id, qty):
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return True, newstok
|
||||
|
||||
|
||||
|
||||
# Bagian Promooo
|
||||
|
||||
|
||||
def promo_add(code, ptype, value, min_total=0):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("INSERT INTO promo (code,type,value,min_total) VALUES (?,?,?,?)", (code,ptype,value,min_total))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def promo_update(code, ptype, value, min_total=0):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("UPDATE promo SET type=?, value=?, min_total=? WHERE code=?", (ptype,value,min_total,code))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def promo_delete(code):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("DELETE FROM promo WHERE code=?", (code,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def promo_list():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT code,type,value,min_total FROM promo ORDER BY code")
|
||||
rows = c.fetchall()
|
||||
conn.close()
|
||||
return rows
|
||||
|
||||
def promo_get(code):
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
c.execute("SELECT code,type,value,min_total FROM promo WHERE code=?", (code,))
|
||||
r = c.fetchone()
|
||||
conn.close()
|
||||
return r
|
||||
|
||||
def apply_discounts_and_promo(cart_items, promo_code=None):
|
||||
"""
|
||||
cart_items: list of dicts: [{'menu_id':..,'qty':..}, ...]
|
||||
returns breakdown: subtotal, item_discount_total, promo_code, promo_discount, total
|
||||
- uses item_discount_pct from menu table
|
||||
- promo_code can be percent or fixed, with min_total
|
||||
"""
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
c = conn.cursor()
|
||||
subtotal = 0.0
|
||||
item_discount_total = 0.0
|
||||
for it in cart_items:
|
||||
c.execute("SELECT harga,item_discount_pct FROM menu WHERE id=?", (it['menu_id'],))
|
||||
r = c.fetchone()
|
||||
if not r:
|
||||
continue
|
||||
price, item_disc_pct = r
|
||||
qty = it.get('qty',1)
|
||||
line = price * qty
|
||||
subtotal += line
|
||||
if item_disc_pct and item_disc_pct > 0:
|
||||
item_discount_total += (price * qty) * (item_disc_pct/100.0)
|
||||
promo_discount = 0.0
|
||||
promo_applied = None
|
||||
if promo_code:
|
||||
c.execute("SELECT type,value,min_total FROM promo WHERE code=?", (promo_code,))
|
||||
row = c.fetchone()
|
||||
if row:
|
||||
ptype, val, min_total = row
|
||||
if subtotal >= min_total:
|
||||
if ptype == 'percent':
|
||||
promo_discount = (subtotal - item_discount_total) * (val/100.0)
|
||||
else:
|
||||
promo_discount = val
|
||||
promo_applied = promo_code
|
||||
total = subtotal - item_discount_total - promo_discount
|
||||
if total < 0:
|
||||
total = 0.0
|
||||
conn.close()
|
||||
return {
|
||||
'subtotal': round(subtotal,2),
|
||||
'item_discount': round(item_discount_total,2),
|
||||
'promo_code': promo_applied,
|
||||
'promo_discount': round(promo_discount,2),
|
||||
'total': round(total,2)
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user