def get_user_purchases(user, db=None): """ Gets all purchases by user. :param user: User, the user to find purchases for :param db: optional, the database connection """ db = db or get_db() cur = db.cursor() # insert the purchase cur.execute(""" SELECT PurchaseID, TotalPrice, CreditCard, Address FROM Purchase WHERE Username=? """, [user.username]) purchases = [] for row1 in cur.fetchall(): purchase = Purchase(username=user.username, id_=row1[0], total_price=row1[1], credit_card=row1[2], address=Address().from_str(row1[3])) cur.execute(""" SELECT InventoryItemID, Price, Quantity FROM PurchaseItem WHERE PurchaseID=? """, [purchase.id_]) for row2 in cur.fetchall(): item = get_inventory_item(InventoryItem(row2[0]), db) purchase.items.append(ShoppingCartItem(item=item, price=row2[1], qty=row2[2])) purchases.append(purchase) cur.close() return purchases
def get_shopping_cart(user, db=None): """ Gets all ShoppingCartItems for user :param user: User, the user to request for :param db: optional, the database connection """ db = db or get_db() cur = db.cursor() cur.execute(""" SELECT InventoryItemID, Price, Quantity FROM ShoppingCartItem WHERE UserID = ? """, [user.id_]) cart = ShoppingCart(user) for row in cur.fetchall(): try: item = get_inventory_item(InventoryItem(id_=row[0]), db) cart.items.append(ShoppingCartItem(item=item, price=row[1], qty=row[2])) except Exception as e: print("invalid purchase item:", e) cur.close() return cart
def cart_remove(): if request.args.get('id') is None: return redirect('/cart') id_ = request.args.get('id') qty = request.args.get('qty') db.remove_from_cart(user=User(current_user.get_id()), item=ShoppingCartItem(item=InventoryItem(id_=id_)), qty=qty) return redirect('/cart')
def cart_update(): for id_, qty in request.args.items(): # this makes sure we only use ints # noinspection PyBroadException try: qty = int(qty) inv_item = db.get_inventory_item(InventoryItem(id_)) if inv_item.quantity >= qty: db.update_cart(user=User(current_user.get_id()), item=ShoppingCartItem(item=inv_item), qty=qty) else: flask.flash( "<b>Exceeds stock:</b> {} has no more than {} items available." .format(inv_item.name, inv_item.quantity), "warning") except Exception: continue return redirect('/cart')
def get_purchase(purchase, db=None): """ Gets a purchase from the database based on PurchaseID :param purchase: Purchase, must have id :param db: optional, the database connection """ db = db or get_db() cur = db.cursor() cur.execute(""" SELECT Username, TotalPrice, CreditCard, Address FROM Purchase WHERE PurchaseID = ? """, [purchase.id_]) row = cur.fetchone() try: purchase = Purchase(id_=purchase.id_, username=row[0], total_price=row[1], credit_card=row[2], address=Address().from_str(row[3])) except Exception as e: print("invalid purchase:", e) cur.execute(""" SELECT InventoryItemID, Price, Quantity FROM PurchaseItem WHERE pi.PurchaseID = ? """, [purchase.id_]) for row in cur.fetchall(): try: item = get_inventory_item(InventoryItem(id_=row[0]), db) purchase.items.append(ShoppingCartItem(item=item, price=row[1], qty=row[2])) except Exception as e: print("invalid purchase item:", e) cur.close() return purchase