From 6aea7fc6e329a4d7ca5a0c6825bcc3ad63daef7e Mon Sep 17 00:00:00 2001
From: Jude Hutton <jude2.hutton@live.uwe.ac.uk>
Date: Mon, 24 Apr 2023 10:31:45 +0100
Subject: [PATCH] Implemented sell item and itemsets

---
 store/routes.py | 41 ++++++++++++++++++++++-------------------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/store/routes.py b/store/routes.py
index 8d426f6..f882b61 100644
--- a/store/routes.py
+++ b/store/routes.py
@@ -542,14 +542,6 @@ def validate_cvv_2(form, field):
         raise ValidationError("CVV2 is incorrect")
 
 
-# This type of validation does not work for some edge cases such as PO-boxes, post offices etc
-# def validate_postcode(form, field):
-#     regex = "^[A-Z]{1,2}\d{1,2}[A-Z]?\s?\d[A-Z]{2}$"
-#     p = re.compile(regex)
-#     if not re.search(p, field.data):
-#         raise ValidationError("Postcode is not valid")
-
-
 def validate_address(form, field):
     # Uses the google maps geocoding api to check if a postcode or address exists
 
@@ -612,14 +604,19 @@ class CheckoutForm(Form):
 def order_summary():
     total_price = 0
     items = []
-    address = session.get("address", "")
-    for item_id, item in session["basket"].items():
-        items.append(item)
-        total_price = total_price + item["price"]
-    session.clear()
-    return render_template(
-        "order_summary.html", items=items, address=address, total_price=total_price
-    )
+    if "basket" in session:
+        address = session.get("address", "")
+        for item_id, item in session["basket"].items():
+            
+            items.append(item)
+            total_price = total_price + item["price"]
+        session.clear()
+        
+        return render_template(
+            "order_summary.html", items=items, address=address, total_price=total_price
+        )
+    else:
+        return redirect(url_for("index"))
 
 
 @app.route("/checkout", methods=["POST", "GET"])
@@ -634,8 +631,12 @@ def checkout():
     if request.method == "POST" and form.validate():
         session["address"] = str(form.address.data + ", " + form.postcode.data)
         try:
-            # sell_items()
-            return redirect(url_for("order_summary"))
+            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!")
     csrf_token = generate_csrf()
@@ -674,6 +675,7 @@ def add_to_basket():
         "id": item_obj.id,
         "description": item_obj.description,
         "price": item_obj.price,
+        "is_item_set" : False
     }
     if "basket" not in session:
         session["basket"] = {}
@@ -696,7 +698,8 @@ def add_to_basket_set():
     item_dict = {
         "id": item_obj.id,
         "description": item_obj.description,
-        "price": item_obj.price,
+        "price": item_obj.price, 
+        "is_item_set" : True
     }
     if "basket" not in session:
         session["basket"] = {}
-- 
GitLab