diff --git a/store/models.py b/store/models.py index d84ac9d95150c9e744dda6b44d4136443525f74f..5927166f2fd7082bb0945b96428b3dd6282e2ccb 100644 --- a/store/models.py +++ b/store/models.py @@ -74,7 +74,7 @@ class ItemSet(db.Model): return len(self.items) def __repr__(self): - return f"id: {self.id}, description: {self.description}, items: {self.items}, quantity: {self.price}, price: { self.price() }" # TODO: Rename price to quantity + return f"id: {self.id}, description: {self.description}, items: {self.items}, quantity: {self.price}, price: { self.price }" # TODO: Rename price to quantity class User(db.Model, UserMixin): diff --git a/store/routes.py b/store/routes.py index fd157b035b9d4faeab29c967189690397f61e830..9d64c8741dcbaf5fa7a556795b71b408bb97705c 100644 --- a/store/routes.py +++ b/store/routes.py @@ -597,15 +597,15 @@ def checkout(): total_price = total_price + item["price"] if request.method == "POST" and form.validate(): session["address"] = str(form.address.data + ", " + form.postcode.data) - try: - for item_id, item, is_item_set in session["basket"]: - if is_item_set == True: - sell_item(get_item_set_by_id(item_id)) - else: - sell_item(get_item_by_id(item_id)) - return redirect(url_for("order_summary")) - except: - flash("One or more items in basket have already been sold!") + for item_id in session["basket"]: + item = session["basket"][item_id] + if item["is_item_set"] == True: + print("Sell item set: ", item_id) + sell_item_set(get_item_set_by_id(item_id)) + else: + print("Sell item: ", item_id) + sell_item(get_item_by_id(item_id)) + return redirect(url_for("order_summary")) csrf_token = generate_csrf() return render_template( "checkout.html", diff --git a/store/utility.py b/store/utility.py index 8100bee533c651ca87165a5157e2f21c1e990efa..2b20c98af45a59f108e043de05f828408f4523b6 100644 --- a/store/utility.py +++ b/store/utility.py @@ -82,10 +82,13 @@ def get_by_keyword(substring): This is most useful for a user keyword search. """ substring = substring.lower() - return ( - ItemSet.query.filter(func.lower(ItemSet.description.contains(substring))).all() - + Item.query.filter(func.lower(Item.description.contains(substring))).all() - ) + items = Item.query.filter(func.lower(Item.description.contains(substring))).all() + items = [item for item in items if item.date_sold == None] + item_sets = ItemSet.query.filter( + func.lower(ItemSet.description.contains(substring)) + ).all() + + return item_sets + items def get_itemsets_by_item_id(item_id): @@ -125,6 +128,17 @@ def remove_item_set(item): db.session.commit() +def sell_item_set(item_set, date=datetime.datetime.today()): + for item in item_set.items: + print(item) + item.date_sold = date + print(item) + + db.session.commit() + remove_item_set(item_set) + db.session.commit() + + def sell_item(item, date=datetime.datetime.today()): update_set(item) item.date_sold = date