From 5b4183fdbccf30888b71b30960ad1ee8679393cc Mon Sep 17 00:00:00 2001 From: caleb Date: Sun, 25 Aug 2019 01:00:37 -0700 Subject: [PATCH 01/62] updated ui --- .gitignore | 2 - .idea/workspace.xml | 115 ++++++++------------------------------------ 2 files changed, 19 insertions(+), 98 deletions(-) diff --git a/.gitignore b/.gitignore index a7d4d0a..f855edf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ - -GenJson.py /flask_session/ /bin /include diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3c00da1..3f8d5c5 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,7 @@ - + @@ -16,48 +16,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -770,8 +730,6 @@ - - @@ -807,7 +765,6 @@ - @@ -1022,7 +979,6 @@ - @@ -1042,13 +998,11 @@ - - @@ -1514,7 +1468,6 @@ - @@ -1529,7 +1482,6 @@ - @@ -1558,7 +1510,6 @@ - @@ -1606,7 +1557,6 @@ - @@ -2467,7 +2417,6 @@ - @@ -3694,7 +3643,6 @@ - @@ -4783,7 +4731,6 @@ - @@ -4999,7 +4946,6 @@ - @@ -5009,22 +4955,6 @@ - - - - - - - - - - - - - - - - @@ -5056,14 +4986,7 @@ - - - - - - - - + @@ -5673,7 +5596,6 @@ \ No newline at end of file From cd0ee92b82150a7e1af4af41b91f754fff6ac50a Mon Sep 17 00:00:00 2001 From: caleb Date: Sun, 25 Aug 2019 01:02:25 -0700 Subject: [PATCH 02/62] updated ui 3 --- .idea/workspace.xml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3f8d5c5..0cc45c4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,7 @@ - + @@ -4986,7 +4986,6 @@ - From 19ca8811f3427187e4a5065ec3ad257a233bf219 Mon Sep 17 00:00:00 2001 From: caleb Date: Sun, 25 Aug 2019 16:54:33 -0700 Subject: [PATCH 03/62] added categories --- .gitignore | 2 +- .idea/workspace.xml | 28 +++--- application.py | 182 ++++++++++++++++++++++++++------------- templates/addform.html | 2 + templates/mainOrder.html | 6 +- templates/pickcat.html | 131 ++++++++++++++++++++++++++++ templates/remItems.html | 53 ++++++++++-- 7 files changed, 320 insertions(+), 84 deletions(-) create mode 100644 templates/pickcat.html diff --git a/.gitignore b/.gitignore index f855edf..8973814 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -/flask_session/ +/flask_session /bin /include /lib diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0cc45c4..496051d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4955,6 +4955,10 @@ + + + + @@ -4985,7 +4989,9 @@ - + + + @@ -5595,7 +5601,6 @@ \ No newline at end of file diff --git a/application.py b/application.py index f9e60f4..b526a02 100644 --- a/application.py +++ b/application.py @@ -764,6 +764,7 @@ def addItmForm(): numSizes = int(rsp['numSizes']) menTime = str(rsp['time']).lower() descrip = str(rsp['desc']).lower() + " " + cat = str(rsp['category']).lower() #print(name) #print(numSizes) menuItems = database.get("/restaurants/" + estName + "/menu/", "items") @@ -776,6 +777,7 @@ def addItmForm(): database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/name/", name) database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/time/", menTime) database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/descrip/", descrip) + atabase.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/cat/", cat) database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/inp/", "inp") database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal) + "/extras/" + str(0), "/0/", "") database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal) + "/extras/" + str(0), "/1/", 0) @@ -1002,6 +1004,7 @@ def addCpnResp(): keyVal += 1 database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/name/", name) database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/descrip/", " ") + atabase.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/cat/", " ") database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/sku/", "cpn-" + name) database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/sizes/0/0/", "u") database.put("/restaurants/" + estName + "/menu/items/" + str(keyVal), "/sizes/0/1/", -1) @@ -1043,32 +1046,31 @@ def getUUID(): elif ((len(tickets) - tx) == 1): return render_template("verifyCode2.html", btn=str(uid + "check")) - @application.route('/' + uid + 'order', methods=['GET']) def order(): + request.parameter_storage_class = ImmutableOrderedMultiDict UUID = session.get('UUID', None) #key = session.get('key', None) key = 0 - nameKey = session.get('nameKey', None) - itmKey = random.randint(9999, 1000000) - session['itmKey'] = itmKey + session['key'] = key + #print(UUID, key, itmKey) + #print(rsp) authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', 'cajohn0205@gmail.com', extra={'id': 123}) database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) - data = (database.get("restaurants/" + uid, "/menu/items/")) - currentTime = str((float(datetime.datetime.now().hour)) + ((float(datetime.datetime.now().minute)) / 100.0)) currentTotal = float(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) DBdata = database.get("/restaurants/" + estName, "orders") - try: - subTotal = (DBdata[key]["linkTotal"]) + DBdata[key]["discTotal"] - except KeyError: - subTotal = (DBdata[key]["linkTotal"]) + subTotal = (DBdata[key]["linkTotal"]) Tax = float(subTotal * 0.1) - Total = float(subTotal + float(Tax) + 0.1) + Total = float(subTotal + float(Tax) + 0.15) subTotalStr = ('$' + format(subTotal, ',.2f')) TotalStr = ('$' + format(Total, ',.2f')) TaxStr = ('$' + format(Tax, ',.2f')) dispTotal = subTotalStr + database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/linkTotal/", currentTotal) + data = (database.get("restaurants/" + uid, "/menu/items/")) + currentTime = str((float(datetime.datetime.now().hour)) + ((float(datetime.datetime.now().minute)) / 100.0)) + DBdata = database.get("/restaurants/" + estName, "orders") MenuHrs = ((database.get("restaurants/" + uid, "/Hours/"))) menKeys = list(MenuHrs.keys()) currentMenu = "" @@ -1077,6 +1079,8 @@ def order(): startHrMn = (float(MenuHrs[menKeys[mnx]]["startHr"])) endHrMn = (float(MenuHrs[menKeys[mnx]]["endHr"])) if (startHrMn <= float(currentTime) < endHrMn): + #print("current menu") + #print(menKeys[mnx]) menuIndx = mnx currentMenu = str(menKeys[mnx]) break @@ -1087,6 +1091,7 @@ def order(): itms = database.get("/restaurants/" + estName + "/orders/" + str(key), "/item/") currentItems = [] currKeys = [] + finalOrd = "" if (itms != None): dispKeys = list(itms.keys()) for itmX in range(len(dispKeys)): @@ -1107,6 +1112,7 @@ def order(): wrtStr += str(itms[dispKeys[itmX]]["price"]) currentItems.append(wrtStr) currKeys.append(dispKeys[itmX]) + #print(wrtStr) else: wrtStr = str(itms[dispKeys[itmX]]["name"]) wrtStr += " " @@ -1119,21 +1125,23 @@ def order(): wrtStr += str(itms[dispKeys[itmX]]["price"]) currentItems.append(wrtStr) currKeys.append(dispKeys[itmX]) + #print(wrtStr) except KeyError: pass - names = [] - keys = [] - descrips = [] + else: + dispTotal = "$0.00" + cats = [] + catkeys2 = [] for men in range(len(menuItems)): - if (menuItems[men] != None and (menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): + if ((menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): if (menuItems[men]["sizes"][0][1] != -1): - names.append(str(menuItems[men]["name"]).upper()) - descrips.append(str(menuItems[men]["descrip"]).lower()) - keys.append(men) - return render_template("mainOrder.html", len=len(names), names=names, keys=keys, btn=uid + "orderSz", - len2=(len(currentItems)),descrips=descrips ,currentItms=currentItems, currKeys=currKeys, btn2=uid + "order", - total=dispTotal, btn3=uid + "checkpayment") - + currentCat = menuItems[men]["cat"].upper() + cats.append(currentCat) + catkeys2.append(men) + cats = list(dict.fromkeys(cats)) + return render_template("mainOrder.html", len=len(cats), names=cats,keys=catkeys2, btn=uid + "ordercat", + len2=(len(currentItems)),currentItms=currentItems, total=dispTotal, currKeys=currKeys, + btn2=uid + "order", btn3=uid + "checkpayment") @application.route('/' + uid + 'order', methods=['POST']) def orderX(): @@ -1142,19 +1150,18 @@ def orderX(): UUID = session.get('UUID', None) key = session.get('key', None) itmKey = random.randint(9999, 1000000) - session['itmKey'] = itmKey #print(UUID, key, itmKey) - #print(rsp) - + print(rsp) authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', 'cajohn0205@gmail.com', extra={'id': 123}) database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) - currentPrice = float( - database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str((rsp["rem"])), "price")) + currentPrice = float(database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str((rsp["rem"])), "price")) + print(currentPrice) currentTotal = float(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) currentTotal -= currentPrice + print(currentTotal) DBdata = database.get("/restaurants/" + estName, "orders") - subTotal = (DBdata[key]["linkTotal"]) + DBdata[key]["discTotal"] + subTotal = (currentTotal) Tax = float(subTotal * 0.1) Total = float(subTotal + float(Tax) + 0.15) subTotalStr = ('$' + format(subTotal, ',.2f')) @@ -1179,8 +1186,6 @@ def orderX(): menuIndx = mnx currentMenu = str(menKeys[mnx]) break - session['UUID'] = UUID - session['key'] = key authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', 'cajohn0205@gmail.com', extra={'id': 123}) database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) @@ -1227,29 +1232,81 @@ def orderX(): pass else: dispTotal = "$0.00" + cats = [] + catKeys2 = [] + for men in range(len(menuItems)): + if ((menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): + if (menuItems[men]["sizes"][0][1] != -1): + cats.append(str(menuItems[men]["cat"]).upper()) + catKeys2.append(men) + cats = list(dict.fromkeys(cats)) + print(cats) + return render_template("mainOrder.html", len=len(cats), names=cats,keys=catKeys2, btn=uid + "ordercat", + len2=(len(currentItems)),currentItms=currentItems, total=dispTotal, currKeys=currKeys, + btn2=uid + "order", btn3=uid + "checkpayment") + +@application.route('/' + uid + 'ordercat', methods=['POST']) +def orderCat(): + request.parameter_storage_class = ImmutableOrderedMultiDict + rsp = ((request.form)) + print(rsp) + key = session.get('key', None) + catTgt = rsp["item"] + names = [] + keys = [] + prices = [] + currentTime = str((float(datetime.datetime.now().hour)) + ((float(datetime.datetime.now().minute)) / 100.0)) + authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', + 'cajohn0205@gmail.com', extra={'id': 123}) + database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) + menuItems = database.get("/restaurants/" + estName + "/menu/", "items") + UUID = session.get('UUID', None) + database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) + data = (database.get("restaurants/" + uid, "/menu/items/")) + currentTime = str((float(datetime.datetime.now().hour)) + ((float(datetime.datetime.now().minute)) / 100.0)) + DBdata = database.get("/restaurants/" + estName, "orders") + MenuHrs = ((database.get("restaurants/" + uid, "/Hours/"))) + menKeys = list(MenuHrs.keys()) + currentMenu = "" + menuIndx = 0 + for mnx in range(len(menKeys)): + startHrMn = (float(MenuHrs[menKeys[mnx]]["startHr"])) + endHrMn = (float(MenuHrs[menKeys[mnx]]["endHr"])) + if (startHrMn <= float(currentTime) < endHrMn): + menuIndx = mnx + currentMenu = str(menKeys[mnx]) + break + authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', + 'cajohn0205@gmail.com', extra={'id': 123}) + database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) + menuItems = database.get("/restaurants/" + estName + "/menu/", "items") names = [] keys = [] descrips = [] - #print(type(menuItems)) + cats = [] + for men in range(len(menuItems)): + if ((menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): + if (menuItems[men]["sizes"][0][1] != -1): + cats.append(str(menuItems[men]["cat"]).upper()) + cats = list(dict.fromkeys(cats)) + ct = cats[int(catTgt)] for men in range(len(menuItems)): - if (menuItems[men] != None and (menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): + if (menuItems[men]["cat"].upper() == ct and (menuItems[men]["time"] == currentMenu or menuItems[men]["time"] == "all")): if (menuItems[men]["sizes"][0][1] != -1): names.append(str(menuItems[men]["name"]).upper()) descrips.append(str(menuItems[men]["descrip"]).lower()) keys.append(men) - return render_template("mainOrderBtn.html", len=len(names), names=names, keys=keys, btn=uid + "orderSz", - len2=(len(currentItems)), descrips=descrips ,currentItms=currentItems, total=dispTotal, currKeys=currKeys, - btn2=uid + "order", btn3=uid + "checkpayment") - + return render_template("pickcat.html", len=len(names), names=names, keys=keys, prices=prices, descrips=descrips, + btn=uid + "orderSz", btn2=uid+"order") @application.route('/' + uid + 'orderSz', methods=['POST']) def orderNm(): - newItmKey = session.get('itmKey', None) + request.parameter_storage_class = ImmutableOrderedMultiDict + rsp = ((request.form)) + itmKey = random.randint(9999, 1000000) UUID = session.get('UUID', None) key = session.get('key', None) #print(UUID, key) - request.parameter_storage_class = ImmutableOrderedMultiDict - rsp = ((request.form)) names = [] keys = [] prices = [] @@ -1258,7 +1315,7 @@ def orderNm(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) menuItems = database.get("/restaurants/" + estName + "/menu/", "items") numItms = database.get("/restaurants/" + estName + "/orders/" + str(key), "item") - database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(newItmKey) + "/name/", + database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/name/", str(menuItems[int(rsp['item'])]['name'].lower())) sizes = menuItems[int(rsp['item'])]['sizes'] for sz in range(len(sizes)): @@ -1274,12 +1331,11 @@ def orderNm(): names.append("Standard") keys.append(0) prices.append(menuItems[int(rsp['item'])]['sizes'][sz][1]) - session['itmKey'] = newItmKey + session['itmKey'] = itmKey session['nameKey'] = int(rsp['item']) return render_template("picksize.html", len=len(prices), names=names, keys=keys, prices=prices, btn=uid + "ordertopping") - @application.route('/' + uid + 'ordertopping', methods=['POST']) def ordertp(): request.parameter_storage_class = ImmutableOrderedMultiDict @@ -1337,26 +1393,25 @@ def ConfirmItm(): 'cajohn0205@gmail.com', extra={'id': 123}) database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) menuItems = database.get("/restaurants/" + estName + "/menu/", "items") - #print(menuItems[nameKey], "topping") - #print(rsp, "rsp") + print(menuItems[nameKey], "topping") + print(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) + print(rsp, "rsp") #print(len(rsp)) putStr = "" addPrice = 0 extraIndxs = [] SKUSarr = [] if (len(rsp) > 2): - #print(rsp["quantity"]) - #print(rsp["notes"]) for itx in range(len(menuItems[nameKey]["extras"])): ##print(itx) try: - #print(rsp[str(itx)], "found") - extraIndxs.append(int(itx)) + extraIndxs.append(int(rsp[str(itx)])) except Exception: #print(str(itx), "not found") pass - #print(extraIndxs) + print(extraIndxs) for exx in range(len(extraIndxs)): + print(menuItems[nameKey]["extras"][extraIndxs[exx]]) putStr += str(menuItems[nameKey]["extras"][extraIndxs[exx]][0]) #print(menuItems[nameKey]["extras"][extraIndxs[exx]]) addPrice += float(menuItems[nameKey]["extras"][extraIndxs[exx]][1]) @@ -1367,8 +1422,9 @@ def ConfirmItm(): database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/skus/" + str(skuKey) + "/", str(menuItems[nameKey]["extras"][extraIndxs[exx]][2])) - currentPrice = float( - database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str(itmKey), "price")) + currentPrice = float(database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str(itmKey), "price")) + print(currentPrice,"100") + print(addPrice,"200") currentPrice += addPrice round(currentPrice, 2) database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/toppings/", @@ -1378,21 +1434,17 @@ def ConfirmItm(): if (rsp["quantity"] == ""): database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/qty/", 1) else: - database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/qty/", - int(rsp["quantity"])) + database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/qty/", int(rsp["quantity"])) currentPrice = currentPrice * int(rsp["quantity"]) - #print(currentPrice) - database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/notes/", - rsp["notes"]) - database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/price/", - currentPrice) + database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/notes/",rsp["notes"]) + database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/price/",currentPrice) + print(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) currentTotal = float(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) currentTotal += currentPrice database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/linkTotal/", currentTotal) else: - currentPrice = float( - database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str(itmKey), "price")) - round(currentPrice, 2) + currentPrice = float(database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str(itmKey), "price")) + print(currentPrice) database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/toppings/", putStr) database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/notes/", @@ -1402,20 +1454,26 @@ def ConfirmItm(): currentTotal = float(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) currentTotal += currentPrice round(currentPrice, 2) + print(currentPrice) database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/linkTotal/", currentTotal) else: database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/qty/", int(rsp["quantity"])) currentPrice = currentPrice * int(rsp["quantity"]) - #print(currentPrice) + print(currentPrice,"2") database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/item/" + str(itmKey) + "/notes/", rsp["notes"]) + ''' currentPrice = float( database.get("/restaurants/" + estName + "/orders/" + str(key) + "/item/" + str(itmKey), "price")) round(currentPrice, 2) + print(currentPrice,"3") currentTotal = float(database.get("/restaurants/" + estName + "/orders/" + str(key), "/linkTotal")) + print(currentTotal,"4") currentTotal += currentPrice + print(currentTotal,"5") database.put("/restaurants/" + estName + "/orders/" + str(key) + "/", "/linkTotal/", currentTotal) + ''' return redirect(url_for('order')) diff --git a/templates/addform.html b/templates/addform.html index b786548..3a921f7 100644 --- a/templates/addform.html +++ b/templates/addform.html @@ -38,6 +38,8 @@

Enter Name

Enter description for this item (optional)

+

Enter item category EX. Drinks

+

Enter Number Of Sizes

Enter Menu for This Item Ex. Breakfast if this item is available all day enter 'all'

diff --git a/templates/mainOrder.html b/templates/mainOrder.html index 7c81607..8aad4cf 100644 --- a/templates/mainOrder.html +++ b/templates/mainOrder.html @@ -90,14 +90,14 @@
-

Tap Item to Add

-
+

Menu

+

    {%for i in range(0, len)%}
    -

  • {{descrips[i]}}
  • +

  • {%endfor%} diff --git a/templates/pickcat.html b/templates/pickcat.html new file mode 100644 index 0000000..241d5c9 --- /dev/null +++ b/templates/pickcat.html @@ -0,0 +1,131 @@ + + + + + Order Food + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +

    Tap Item to Add

    +
    +
    +
      +

      + {%for i in range(0, len)%} +
      +

    • {{descrips[i]}}
    • +
      +
      + {%endfor%} +

      +
    +
    +
    + +
    + + + + + diff --git a/templates/remItems.html b/templates/remItems.html index 8585330..c4247a7 100644 --- a/templates/remItems.html +++ b/templates/remItems.html @@ -25,22 +25,61 @@ +
    -

    Edit {{restName}} Menu

    +

    Remove Items


    -

    Remove Items

    +

    Click Item to Remove


    +

    +
    {%for i in range(0, len)%} -

    + +
      +

      - {{names[i]}} - +
    • -

      +
      +

    {%endfor%} - +
+ \ No newline at end of file From 37f5aaf87e03f6b7d6191c084e00338a093767d8 Mon Sep 17 00:00:00 2001 From: caleb Date: Sun, 25 Aug 2019 17:15:07 -0700 Subject: [PATCH 04/62] set items to in and out of stock --- .idea/workspace.xml | 26 ++++++------ application.py | 64 ++++++++++++++++++++++++++++-- templates/outStockv.html | 85 ++++++++++++++++++++++++++++++++++++++++ templates/panel.html | 6 +++ 4 files changed, 163 insertions(+), 18 deletions(-) create mode 100644 templates/outStockv.html diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 496051d..809597d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4955,8 +4955,7 @@ - - + @@ -4989,9 +4988,6 @@ - - -
diff --git a/templates/panel.html b/templates/panel.html index 3132f72..85e36d8 100644 --- a/templates/panel.html +++ b/templates/panel.html @@ -52,6 +52,13 @@



+
+ +
+

+
+
+

diff --git a/templates/payGcard.html b/templates/payGcard.html new file mode 100644 index 0000000..25aea69 --- /dev/null +++ b/templates/payGcard.html @@ -0,0 +1,204 @@ + + + + + Order Food + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+ + +
+

Checkout

+
+ +
+ +
+ + + +
+

+ + +
+


+
+ + +

+
+
powered by Stripe©
+ \ No newline at end of file diff --git a/templates/paymentFinal.html b/templates/paymentFinal.html index 7c92dfc..c4b49bd 100644 --- a/templates/paymentFinal.html +++ b/templates/paymentFinal.html @@ -35,7 +35,6 @@ line-height: 1.8; text-align: center; background-color: black; - } *, label { font-size: 16px; @@ -43,32 +42,27 @@ padding: 0; margin: 0; } - label { font-weight: 500; font-size: 14px; display: block; margin-bottom: 8px; } - #card-errors { height: 20px; padding: 4px 0; color: #ff0000; } - .token { color: #32325d; font-family: 'Source Code Pro', monospace; font-weight: 500; } - .wrapper { width: 100%; margin: 0 auto; height: 100%; } - #stripe-token-handler { position: absolute; top: 0; @@ -86,40 +80,31 @@ opacity: 1; background-color: white; } - #stripe-token-handler.is-hidden { opacity: 0; transform: translateY(-80px); } - /** * The CSS shown here will not be introduced in the Quickstart guide, but shows * how you can use CSS to style your Element's container. */ .StripeElement { box-sizing: border-box; - height: 40px; - padding: 10px 12px; - border: 1px solid transparent; border-radius: 4px; background-color: white; - box-shadow: 0 1px 3px 0 #e6ebf1; -webkit-transition: box-shadow 150ms ease; transition: box-shadow 150ms ease; } - .StripeElement--focus { box-shadow: 0 1px 3px 0 #cfd7df; } - .StripeElement--invalid { border-color: #fa755a; } - .StripeElement--webkit-autofill { background-color: #fefde5 !important; } @@ -132,7 +117,7 @@

-

Secure Payment Gateway

+

Checkout


@@ -153,10 +138,8 @@

Secure Payment Gateway


diff --git a/templates/paymentMethod.html b/templates/paymentMethod.html index f14ac1c..935acae 100644 --- a/templates/paymentMethod.html +++ b/templates/paymentMethod.html @@ -55,12 +55,14 @@

Email for receipt (optional)
-

-

Do You want to pay now and skip the line?


- +

How do you want to pay?

+
+ +

+

- +
diff --git a/templates/paymentMethodKiosk.html b/templates/paymentMethodKiosk.html index fd67f98..32f8377 100644 --- a/templates/paymentMethodKiosk.html +++ b/templates/paymentMethodKiosk.html @@ -56,10 +56,11 @@

Email for receipt (optional)


-

Are you paying with a card or cash

-

- +

How do you want to pay


+ +

+

diff --git a/templates/pickToppings.html b/templates/pickToppings.html index 04ff976..e020539 100644 --- a/templates/pickToppings.html +++ b/templates/pickToppings.html @@ -36,6 +36,8 @@

{%for i in range(0, len)%} {{names[i]}}
+

{{warns[i]}}
+

{%endfor%}
diff --git a/templates/pickcat.html b/templates/pickcat.html index e62a611..09ae429 100644 --- a/templates/pickcat.html +++ b/templates/pickcat.html @@ -97,7 +97,7 @@
{%for i in range(0, len)%}
-

  • {{descrips[i]}}
  • +

  • {{descrips[i]}}
    {{warns[i]}}

  • {%endfor%} From 7c5947217d7809edd4eabb143c6cffd60ff62ce0 Mon Sep 17 00:00:00 2001 From: caleb Date: Mon, 2 Sep 2019 18:43:11 -0700 Subject: [PATCH 43/62] reinforced payment verification added error screens --- .idea/workspace.xml | 41 +++++++++++----------------------- main.py | 37 +++++++++++++++++++++++++----- templates/addgcardFailed.html | 35 +++++++++++++++++++++++++++++ templates/paymentDeclined.html | 35 +++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 34 deletions(-) create mode 100644 templates/addgcardFailed.html create mode 100644 templates/paymentDeclined.html diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e130f42..c449fb0 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,26 +1,11 @@ - - - - - - - + + + - - - - - - - - - - - @@ -631,7 +616,6 @@ \ No newline at end of file diff --git a/main.py b/main.py index f5a31f0..1d350f5 100644 --- a/main.py +++ b/main.py @@ -273,6 +273,23 @@ def inbound_sms(): ) return '200' +@app.route('/failed', methods=['POST']) +def transactionFailed(): + authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', + 'cajohn0205@gmail.com', extra={'id': 123}) + database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) + request.parameter_storage_class = ImmutableOrderedMultiDict + rsp = request.json + if(rsp['data']['object']['description'][0] == "G"): + code = rsp['data']['object']['description'][2:] + database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", -2) + return "200" + DBdata = database.get("/restaurants/" + estName, "orders") + for dbItems in range(len(DBdata)): + if (str(DBdata[dbItems]["UUID"]) == rsp['data']['object']['description']): + database.put("/restaurants/" + estName + "/orders/" + str(dbItems), "/" + str("filled") + "/", "100") + return "200" + @app.route('/ipn', methods=['POST']) def ipn(): @@ -284,7 +301,8 @@ def ipn(): rsp = request.json if(rsp['data']['object']['description'][0] == "G"): code = rsp['data']['object']['description'][2:] - database.put("/restaurants/" + estName + "/giftcards/" + str(name), "/" + str("usedVal") + "/", 0.0) + database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", 0.0) + return "200" DBdata = database.get("/restaurants/" + estName, "orders") for dbItems in range(len(DBdata)): if (str(DBdata[dbItems]["UUID"]) == rsp['data']['object']['description']): @@ -547,6 +565,8 @@ def addgiftcard2(): card = database.get("/restaurants/" + estName, "/giftcards/" + name + "/") if(card["usedVal"] == 0.0): return render_template("addgcard2.html", btn=str(uid)) + if(card["usedVal"] == -2): + return render_template("addgcardFailed.html", btn=str(uid+"giftcard")) else: return render_template("login.html", btn=str(estNameStr), restName=estNameStr) @@ -2238,11 +2258,16 @@ def payX(): currency='usd', description=str(UUID), source=token,) - session.clear() - if (DBdata[dbItems]["kiosk"] == 0): - return render_template("thankMsg.html") - else: - return render_template("thankMsg2.html", btn=str(uid + "kiosk")) + while(DBdata[dbItems]["filled"] != "1"): + DBdata = database.get("/restaurants/" + estName, "orders") + if(DBdata[dbItems]["filled"] == "1"): + session.clear() + if (DBdata[dbItems]["kiosk"] == 0): + return render_template("thankMsg.html") + else: + return render_template("thankMsg2.html", btn=str(uid + "kiosk")) + if(DBdata[dbItems]["filled"] == "100"): + return render_template("paymentDeclined.html",btn="charge") @app.route('/' + uid + 'checkpayment', methods=['POST']) def CheckPaymentMethod(): diff --git a/templates/addgcardFailed.html b/templates/addgcardFailed.html new file mode 100644 index 0000000..32e68c0 --- /dev/null +++ b/templates/addgcardFailed.html @@ -0,0 +1,35 @@ + + + + Order Food + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Your Card has been Declined try again

    + + \ No newline at end of file diff --git a/templates/paymentDeclined.html b/templates/paymentDeclined.html new file mode 100644 index 0000000..a76fc5f --- /dev/null +++ b/templates/paymentDeclined.html @@ -0,0 +1,35 @@ + + + + Order Food + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    Your Card has been Declined please see the staff or try re-entering your details

    + + \ No newline at end of file From 30ed15ac44e9909f20839695f037a713172365c0 Mon Sep 17 00:00:00 2001 From: caleb Date: Mon, 2 Sep 2019 22:21:26 -0700 Subject: [PATCH 44/62] reinforced payment verification added error screens --- .idea/workspace.xml | 26 ++-- main.py | 246 ++++++++++++++++++--------------- templates/paymentDeclined.html | 4 +- templates/pickToppings.html | 4 + 4 files changed, 150 insertions(+), 130 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c449fb0..e3149f6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,11 +1,11 @@ - - - + + + @@ -616,7 +616,6 @@ \ No newline at end of file diff --git a/main.py b/main.py index 1d350f5..907498a 100644 --- a/main.py +++ b/main.py @@ -280,6 +280,7 @@ def transactionFailed(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) request.parameter_storage_class = ImmutableOrderedMultiDict rsp = request.json + print(rsp) if(rsp['data']['object']['description'][0] == "G"): code = rsp['data']['object']['description'][2:] database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", -2) @@ -299,109 +300,120 @@ def ipn(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) request.parameter_storage_class = ImmutableOrderedMultiDict rsp = request.json + print(rsp) + print(rsp['data']['object']['description']) if(rsp['data']['object']['description'][0] == "G"): code = rsp['data']['object']['description'][2:] + print(rsp) database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", 0.0) return "200" DBdata = database.get("/restaurants/" + estName, "orders") for dbItems in range(len(DBdata)): - if (str(DBdata[dbItems]["UUID"]) == rsp['data']['object']['description']): - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/paid/", 1) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "1") - usrIndx = DBdata[dbItems]["userIndx"] - # ticketSize = int(DBdata[dbItems]["tickSize"]) - # startTime = float(DBdata[dbItems]["startTime"]) - number = str(DBdata[dbItems]["number"]) - duration = time.time() - float(DBdata[dbItems]["startTime"]) - numItms = len(DBdata[dbItems]["item"]) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "tickSize/", numItms) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/duration/", duration) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/day/", - calendar.day_name[datetime.datetime.now(tz).today().weekday()]) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/hour/", - int(datetime.datetime.now(tz).hour)) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/month/", - (datetime.datetime.now(tz).strftime("%m"))) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/date/", - (datetime.datetime.now(tz).strftime("%d"))) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/year/", - (datetime.datetime.now(tz).strftime("%Y"))) - numOrders = database.get("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/", estNameStr) - logData = database.get("/log/" + uid + "/", logYM) - # payPalFees = float(logData['paypalFees']) - # payPalFees += float(rsp["mc_fee"]) - cdrFees = logData['CedarFees'] - cdrFees += 1 - database.put("/log/" + uid + "/" + logYM, "/CedarFees/", cdrFees) - totalRev = float(logData["totalRev"]) - totalRev += float((DBdata[dbItems]["linkTotal"] + 0.1) * 1.1) - database.put("/log/" + uid + "/" + logYM, "/totalRev/", totalRev) - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/zipCode/", - rsp['data']['object']['billing_details']["address"]['postal_code']) - numItms = len(DBdata[dbItems]["item"]) - orderIndx = DBdata[dbItems]["orderIndx"] - usrIndx = DBdata[dbItems]["userIndx"] - ret = int(logData["retCustomers"]) - newCust = int(logData["newCustomers"]) - if (DBdata[dbItems]["ret"] == 0): - ret += 1 - database.put("/log/" + uid + "/" + logYM, "/retCustomers/", ret) + print(str(DBdata[dbItems]["UUID"]),str(rsp['data']['object']['description'])) + if (str(DBdata[dbItems]["UUID"]) == str(rsp['data']['object']['description'])): + print(rsp) + if(rsp['data']['object']['outcome']["risk_score"] > 65 or rsp['data']['object']["source"]["address_zip_check"] != "pass"): + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "100") + return "200" else: - newCust += 1 - database.put("/log/" + uid + "/" + logYM, "/newCustomers/", newCust) - - database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( - orderIndx) + "/", "total", - ((DBdata[dbItems]["linkTotal"] + 0.1) * 1.1)) - database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( - orderIndx) + "/", - "tickSize", - numItms) - database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( - orderIndx) + "/", "items", - DBdata[dbItems]["item"]) - database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( - orderIndx) + "/", - "duration", - duration) - # print("sending") - if (DBdata[dbItems]["togo"] == "to-go"): - reply = "-Thank you for your order, you can pick it up and skip the line when it's ready\n-To order again just text " + '"order"' - else: - reply = "-Thank you for your order, your food will be delivered to your table shortly \n-To order again just text " + '"order"' - client.messages.create( - src=botNumber, - dst=number, - text=reply - ) - rec = DBdata[dbItems]['email'] - smtpObj = smtplib.SMTP_SSL("smtp.zoho.com", 465) - smtpObj.login(sender, emailPass) - try: - subTotal = (DBdata[dbItems]["linkTotal"]) + DBdata[dbItems]["discTotal"] - except KeyError: - subTotal = (DBdata[dbItems]["linkTotal"]) - Tax = float(subTotal * 0.1) - Total = float(subTotal + float(Tax) + 0.1) - subTotalStr = ('$' + format(subTotal, ',.2f')) - TotalStr = ('$' + format(Total, ',.2f')) - TaxStr = ('$' + format(Tax, ',.2f')) - # print(TotalStr) - itms = str(DBdata[dbItems]["finalOrder"]) - itms = itms.replace("::", "\n-") - now = datetime.datetime.now(tz) - writeStr = "your order on " + str(now.strftime("%Y-%m-%d @ %H:%M")) + "\nNAME:" + str( - DBdata[dbItems]["name"]) + "\n\nItems\n-" + str(itms) + "\n" + str( - DBdata[dbItems]["discStr"]) \ - + "\n" + str(DBdata[dbItems]["togo"]) + "\n" + str( - DBdata[dbItems]["time"]) + "\nSubtotal " + str(subTotalStr) + "\nTaxes and fees $" + str( - round((Total - subTotal), 2)) + "\nTotal " + TotalStr - SUBJECT = "Your Order from " + estNameStr - message = 'Subject: {}\n\n{}'.format(SUBJECT, writeStr) - smtpObj.sendmail(sender, rec, message) - smtpObj.close() - database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "number/", str((number) + ".")) - # updateLog() + print("confirmed") + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/paid/", 1) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "1") + usrIndx = DBdata[dbItems]["userIndx"] + # ticketSize = int(DBdata[dbItems]["tickSize"]) + # startTime = float(DBdata[dbItems]["startTime"]) + number = str(DBdata[dbItems]["number"]) + duration = time.time() - float(DBdata[dbItems]["startTime"]) + numItms = len(DBdata[dbItems]["item"]) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "tickSize/", numItms) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/duration/", duration) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/day/", + calendar.day_name[datetime.datetime.now(tz).today().weekday()]) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/hour/", + int(datetime.datetime.now(tz).hour)) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/month/", + (datetime.datetime.now(tz).strftime("%m"))) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/date/", + (datetime.datetime.now(tz).strftime("%d"))) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/year/", + (datetime.datetime.now(tz).strftime("%Y"))) + numOrders = database.get("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/", estNameStr) + logData = database.get("/log/" + uid + "/", logYM) + # payPalFees = float(logData['paypalFees']) + # payPalFees += float(rsp["mc_fee"]) + cdrFees = logData['CedarFees'] + cdrFees += 1 + database.put("/log/" + uid + "/" + logYM, "/CedarFees/", cdrFees) + totalRev = float(logData["totalRev"]) + totalRev += float((DBdata[dbItems]["linkTotal"] + 0.1) * 1.1) + database.put("/log/" + uid + "/" + logYM, "/totalRev/", totalRev) + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/zipCode/", + rsp['data']['object']['billing_details']["address"]['postal_code']) + numItms = len(DBdata[dbItems]["item"]) + orderIndx = DBdata[dbItems]["orderIndx"] + usrIndx = DBdata[dbItems]["userIndx"] + ret = int(logData["retCustomers"]) + newCust = int(logData["newCustomers"]) + if (DBdata[dbItems]["ret"] == 0): + ret += 1 + database.put("/log/" + uid + "/" + logYM, "/retCustomers/", ret) + else: + newCust += 1 + database.put("/log/" + uid + "/" + logYM, "/newCustomers/", newCust) + + database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( + orderIndx) + "/", "total", + ((DBdata[dbItems]["linkTotal"] + 0.1) * 1.1)) + database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( + orderIndx) + "/", + "tickSize", + numItms) + database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( + orderIndx) + "/", "items", + DBdata[dbItems]["item"]) + database.put("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/" + estNameStr + "/" + str( + orderIndx) + "/", + "duration", + duration) + # print("sending") + if (DBdata[dbItems]["togo"] == "to-go"): + reply = "-Thank you for your order, you can pick it up and skip the line when it's ready\n-To order again just text " + '"order"' + else: + reply = "-Thank you for your order, your food will be delivered to your table shortly \n-To order again just text " + '"order"' + client.messages.create( + src=botNumber, + dst=number, + text=reply + ) + rec = DBdata[dbItems]['email'] + if(rec != ""): + smtpObj = smtplib.SMTP_SSL("smtp.zoho.com", 465) + smtpObj.login(sender, emailPass) + try: + subTotal = (DBdata[dbItems]["linkTotal"]) + DBdata[dbItems]["discTotal"] + except KeyError: + subTotal = (DBdata[dbItems]["linkTotal"]) + Tax = float(subTotal * 0.1) + Total = float(subTotal + float(Tax) + 0.1) + subTotalStr = ('$' + format(subTotal, ',.2f')) + TotalStr = ('$' + format(Total, ',.2f')) + TaxStr = ('$' + format(Tax, ',.2f')) + # print(TotalStr) + itms = str(DBdata[dbItems]["finalOrder"]) + itms = itms.replace("::", "\n-") + now = datetime.datetime.now(tz) + writeStr = "your order on " + str(now.strftime("%Y-%m-%d @ %H:%M")) + "\nNAME:" + str( + DBdata[dbItems]["name"]) + "\n\nItems\n-" + str(itms) + "\n" + str( + DBdata[dbItems]["discStr"]) \ + + "\n" + str(DBdata[dbItems]["togo"]) + "\n" + str( + DBdata[dbItems]["time"]) + "\nSubtotal " + str(subTotalStr) + "\nTaxes and fees $" + str( + round((Total - subTotal), 2)) + "\nTotal " + TotalStr + SUBJECT = "Your Order from " + estNameStr + message = 'Subject: {}\n\n{}'.format(SUBJECT, writeStr) + smtpObj.sendmail(sender, rec, message) + smtpObj.close() + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "number/", str((number) + ".")) + # updateLog() return (" ", 200) @@ -1659,7 +1671,7 @@ def orderCat(): if (menuItems[men]["sizes"][0][1] != -1): names.append(str(menuItems[men]["name"]).upper()) descrips.append(str(menuItems[men]["descrip"]).lower()) - warns.appenf(tr(menuItems[men]["war"]).lower()) + warns.append(str(menuItems[men]["war"]).lower()) keys.append(men) return render_template("pickcat.html", len=len(names), warns=warns,names=names, keys=keys, prices=prices, descrips=descrips, btn=uid + "orderSz", btn2=uid + "order") @@ -2223,10 +2235,8 @@ def pay(): @app.route("/charge", methods=['POST']) def payX(): - print(request.form) key = session.get('key', None) dbItems = key - print(dbItems) authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', 'cajohn0205@gmail.com', extra={'id': 123}) database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) @@ -2241,30 +2251,40 @@ def payX(): token = request.form['stripeToken'] # Using Flask Total = round(Total, 2) Total = int(Total * 100) - stripe.Charge.create( - amount=Total, - currency='usd', - description=str(UUID), - source=token, - ) + try: + stripe.Charge.create( + amount=Total, + currency='usd', + description=str(UUID), + source=token, + ) + except Exception: + return render_template("paymentDeclined.html", btn="charge") else: Total = float(DBdata[dbItems]["linkTotal"]) stripe.api_key = stripeToken token = request.form['stripeToken'] # Using Flask Total = round(Total, 2) Total = int(Total * 100) - stripe.Charge.create( - amount=Total, - currency='usd', - description=str(UUID), - source=token,) + try: + stripe.Charge.create( + amount=Total, + currency='usd', + description=str(UUID), + source=token) + except Exception: + return render_template("paymentDeclined.html", btn="charge") + print(DBdata[dbItems]["filled"],"testKey") + if(DBdata[dbItems]["filled"] == "100"): + database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "200") while(DBdata[dbItems]["filled"] != "1"): DBdata = database.get("/restaurants/" + estName, "orders") if(DBdata[dbItems]["filled"] == "1"): - session.clear() if (DBdata[dbItems]["kiosk"] == 0): + session.clear() return render_template("thankMsg.html") else: + session.clear() return render_template("thankMsg2.html", btn=str(uid + "kiosk")) if(DBdata[dbItems]["filled"] == "100"): return render_template("paymentDeclined.html",btn="charge") @@ -3421,7 +3441,6 @@ def nextPaymentx(): UUIDcode = DBdata[dbItems]["UUID"] Tax = subTotal * 0.1 Total = float(subTotal) + float(Tax) + 0.5 - link = str(genPayment(str(Total), UUIDcode)) database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "email/", str(rsp['email'])) return redirect(url_for('pay')) else: @@ -3742,9 +3761,6 @@ def not_found_error404(error): if __name__ == '__main__': app.secret_key = 'CedarKey02' app.config['SESSION_TYPE'] = 'filesystem' - app.config['SESSION_PERMANENT'] = True - app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=5) - app.config['SESSION_FILE_THRESHOLD'] = 500 sess = Session() sess.init_app(app) sess.permanent = True diff --git a/templates/paymentDeclined.html b/templates/paymentDeclined.html index a76fc5f..f3a5d38 100644 --- a/templates/paymentDeclined.html +++ b/templates/paymentDeclined.html @@ -3,7 +3,7 @@ Order Food - + @@ -30,6 +30,6 @@
    -

    Your Card has been Declined please see the staff or try re-entering your details

    +

    Your Card has been Declined please see the staff or try re-entering your details

    \ No newline at end of file diff --git a/templates/pickToppings.html b/templates/pickToppings.html index e020539..743f8d5 100644 --- a/templates/pickToppings.html +++ b/templates/pickToppings.html @@ -50,5 +50,9 @@
    {{warns[i]}}
    +
    +
    +
    +
    \ No newline at end of file From f4e5e302428903bc05b68fe36e5a8e2a138a2035 Mon Sep 17 00:00:00 2001 From: caleb Date: Mon, 2 Sep 2019 22:23:05 -0700 Subject: [PATCH 45/62] reinforced payment verification added error screens for giftcard --- main.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 907498a..e923eb6 100644 --- a/main.py +++ b/main.py @@ -303,9 +303,12 @@ def ipn(): print(rsp) print(rsp['data']['object']['description']) if(rsp['data']['object']['description'][0] == "G"): - code = rsp['data']['object']['description'][2:] - print(rsp) - database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", 0.0) + if (rsp['data']['object']['outcome']["risk_score"] > 65 or rsp['data']['object']["source"]["address_zip_check"] != "pass"): + database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", -2) + else: + code = rsp['data']['object']['description'][2:] + print(rsp) + database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", 0.0) return "200" DBdata = database.get("/restaurants/" + estName, "orders") for dbItems in range(len(DBdata)): From 47d381012e398247dd84df0c177d710697a3aa75 Mon Sep 17 00:00:00 2001 From: caleb Date: Tue, 3 Sep 2019 14:54:32 -0700 Subject: [PATCH 46/62] added sms notifiaction when order is filled --- .idea/workspace.xml | 44 ++++++++++++++++++++++------------------ main.py | 37 +++++++++++++++------------------ templates/indexV.html | 1 + templates/thankMsg.html | 3 +-- templates/thankMsg2.html | 2 +- 5 files changed, 43 insertions(+), 44 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e3149f6..0cd0ed6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,11 +1,15 @@ + + - + - - + + + @@ -616,7 +620,6 @@ \ No newline at end of file diff --git a/main.py b/main.py index e923eb6..4f54d00 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,6 @@ import random import smtplib import time -from datetime import timedelta import pandas as pd import plivo import pygsheets @@ -379,15 +378,6 @@ def ipn(): "duration", duration) # print("sending") - if (DBdata[dbItems]["togo"] == "to-go"): - reply = "-Thank you for your order, you can pick it up and skip the line when it's ready\n-To order again just text " + '"order"' - else: - reply = "-Thank you for your order, your food will be delivered to your table shortly \n-To order again just text " + '"order"' - client.messages.create( - src=botNumber, - dst=number, - text=reply - ) rec = DBdata[dbItems]['email'] if(rec != ""): smtpObj = smtplib.SMTP_SSL("smtp.zoho.com", 465) @@ -586,7 +576,7 @@ def addgiftcard2(): return render_template("login.html", btn=str(estNameStr), restName=estNameStr) @app.route('/' + uid + "view", methods=['POST']) -def button(): +def view2(): request.parameter_storage_class = ImmutableOrderedMultiDict rsp = ((request.form)) item = (rsp['item']) @@ -599,6 +589,20 @@ def button(): UUID = orders[ords]["UUID"] if (item == UUID): database.put("/restaurants/" + estName + "/orders/" + str(ords) + "/", "/filled/", "2") + if(orders[ords]["number"][-1] == "."): + number = orders[ords]["number"][:-1] + else: + number = orders[ords]["number"] + print(number) + if (orders[ords]["togo"] == "to-go"): + reply = "-Your Order is ready you can pick it up at the counter\n-To order again just text " + '"order"' + else: + reply = "-Your order is ready and will be delivered to your table shortly\n-To order again just text " + '"order"' + client.messages.create( + src=botNumber, + dst=number, + text=reply + ) else: filled = orders[ords]["filled"] if (filled == "1"): @@ -3042,15 +3046,6 @@ def nextPayment(): else: newCust += 1 database.put("/log/" + uid + "/" + logYM, "/newCustomers/", newCust) - if (DBdata[dbItems]["togo"] == "to-go"): - reply = "-Thank you for your order, you can pick it up and pay at the counter when you arrive \n-To order again just text " + '"order"' - else: - reply = "-Thank you for your order, please pay at the counter, after you pay your food will be delivered to your table \n-To order again just text " + '"order"' - client.messages.create( - src=botNumber, - dst=number, - text=reply - ) updateLog() if (rsp['email'] != ""): smtpObj = smtplib.SMTP_SSL("smtp.zoho.com", 465) @@ -3768,4 +3763,4 @@ def not_found_error404(error): sess.init_app(app) sess.permanent = True # app.debug = True - app.run(host="0.0.0.0", port=8081) + app.run(host="0.0.0.0", port=8081) \ No newline at end of file diff --git a/templates/indexV.html b/templates/indexV.html index e5f7a13..0fd0d44 100644 --- a/templates/indexV.html +++ b/templates/indexV.html @@ -43,6 +43,7 @@



    +

    {%endfor%} diff --git a/templates/thankMsg.html b/templates/thankMsg.html index 9d405a2..fae9ec8 100644 --- a/templates/thankMsg.html +++ b/templates/thankMsg.html @@ -28,7 +28,6 @@ -
    -

    Thank You for your Order!

    +

    Thank You for your Order!


    We'll text you when your order is ready

    \ No newline at end of file diff --git a/templates/thankMsg2.html b/templates/thankMsg2.html index 6aa1c71..576bf26 100644 --- a/templates/thankMsg2.html +++ b/templates/thankMsg2.html @@ -30,6 +30,6 @@
    -

    Thank You for your Order!

    +

    Thank You for your Order!


    We'll text you when your order is ready

    \ No newline at end of file From 30de84a825823c492bb5fbacbd89e5eb8cc7b890 Mon Sep 17 00:00:00 2001 From: caleb Date: Tue, 3 Sep 2019 16:49:03 -0700 Subject: [PATCH 47/62] minor bug fix added sms verification for order completetion --- .idea/workspace.xml | 4 ---- main.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 0cd0ed6..25fa3e9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,10 +6,6 @@ - - - - - + + + + @@ -616,7 +619,6 @@ \ No newline at end of file diff --git a/main.py b/main.py index d07d0a8..dff82d0 100644 --- a/main.py +++ b/main.py @@ -32,8 +32,6 @@ timez = info["timezone"] mainLink = info['mainLink'] stripeToken = info['stripe'] -print(mainLink) -print(mainLink) tz = pytz.timezone(timez) print(datetime.datetime.now(tz)) client = plivo.RestClient(auth_id='MAYTVHN2E1ZDY4ZDA2YZ', auth_token='ODgzZDA1OTFiMjE2ZTRjY2U4ZTVhYzNiODNjNDll') @@ -72,83 +70,196 @@ def updateLog(): logYM = (datetime.datetime.now(tz).strftime("%Y-%m")) sh = gc.open('TestRaunt') - wks = sh.worksheet_by_title(logYM + "-sales") - logData = database.get("/log/" + uid + "/", logYM) - menuItems = database.get("/restaurants/" + estName + "/menu/", "items") - numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) - totalDF = pd.DataFrame() - totalArr = [] - cdrFees = logData['CedarFees'] - totalArr.append(cdrFees) - paypalFees = logData['paypalFees'] - totalArr.append(paypalFees) - totalFees = cdrFees + paypalFees - totalArr.append(totalFees) - totalRev = logData['totalRev'] - totalArr.append(totalRev) - numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) - totalArr.append(numOrders) - numCard = logData['cardPay'] - totalArr.append(numCard) - Totals = pd.DataFrame() - totalDF['Totals'] = totalArr - wks.set_dataframe(totalDF, (1, 6)) - skuDict = logData['skus'] - skuKeys = list(skuDict.keys()) - SKUkeyArr = [] - SKUrev = [] - SKUnumSold = [] - SKUnames = [] - for sk in range(len(skuKeys)): - numSold = skuDict[skuKeys[sk]]["numSold"] - SKUnumSold.append(numSold) - SKUkeyArr.append(skuKeys[sk]) - for men in range(len(menuItems)): - if (menuItems[men] != None): - if ((menuItems[men]["sizes"][0][1] != -1)): - for sz in range(len(menuItems[men]["sizes"])): - if (skuKeys[sk] == str(menuItems[men]["sizes"][sz][2])): - # print("found size") - if (str(menuItems[men]["sizes"][sz][0]).lower() != "u"): - name = str(menuItems[men]["name"]).lower() - name += "-" - name += str(menuItems[men]["sizes"][sz][0]).lower() - SKUnames.append(name) - rev = menuItems[men]["sizes"][sz][1] * numSold - SKUrev.append(rev) + try: + wks = sh.worksheet_by_title(logYM + "-sales") + logData = database.get("/log/" + uid + "/", logYM) + menuItems = database.get("/restaurants/" + estName + "/menu/", "items") + numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) + totalDF = pd.DataFrame() + totalArr = [] + cdrFees = logData['CedarFees'] + totalArr.append(cdrFees) + totalRev = logData['totalRev'] + totalArr.append(totalRev) + numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) + totalArr.append(numOrders) + newCust = logData['newCustomers'] + totalArr.append(newCust) + retCust = logData['retCustomers'] + totalArr.append(retCust) + totalDF = pd.DataFrame() + totalDF['Totals'] = totalArr + wks.set_dataframe(totalDF, (1, 6)) + skuDict = logData['skus'] + skuKeys = list(skuDict.keys()) + SKUkeyArr = [] + SKUrev = [] + SKUnumSold = [] + SKUnames = [] + for sk in range(len(skuKeys)): + numSold = skuDict[skuKeys[sk]]["numSold"] + SKUnumSold.append(numSold) + SKUkeyArr.append(skuKeys[sk]) + for men in range(len(menuItems)): + if (menuItems[men] != None): + if ((menuItems[men]["sizes"][0][1] != -1)): + for sz in range(len(menuItems[men]["sizes"])): + if (skuKeys[sk] == str(menuItems[men]["sizes"][sz][2])): + if (str(menuItems[men]["sizes"][sz][0]).lower() != "u"): + name = str(menuItems[men]["name"]).lower() + name += "-" + name += str(menuItems[men]["sizes"][sz][0]).lower() + SKUnames.append(name) + rev = menuItems[men]["sizes"][sz][1] * numSold + SKUrev.append(rev) - else: - name = str(menuItems[men]["name"]).lower() - SKUnames.append(name) - rev = menuItems[men]["sizes"][sz][1] * numSold - SKUrev.append(rev) - break - if (len(menuItems[men]["sizes"]) - sz == 1): - for ex in range(len(menuItems[men]["extras"])): - if (skuKeys[sk] == str(menuItems[men]["extras"][ex][2])): - # print("found ex") + else: name = str(menuItems[men]["name"]).lower() - name += "||" - name += str(menuItems[men]["extras"][ex][0]).lower() - name += "* TOPPING " SKUnames.append(name) - rev = float(menuItems[men]["extras"][ex][1]) * float(numSold) + rev = menuItems[men]["sizes"][sz][1] * numSold + SKUrev.append(rev) + break + if (len(menuItems[men]["sizes"]) - sz == 1): + for ex in range(len(menuItems[men]["extras"])): + if (skuKeys[sk] == str(menuItems[men]["extras"][ex][2])): + # print("found ex") + name = str(menuItems[men]["name"]).lower() + name += "||" + name += str(menuItems[men]["extras"][ex][0]).lower() + name += "* TOPPING " + SKUnames.append(name) + rev = float(menuItems[men]["extras"][ex][1]) * float(numSold) + SKUrev.append(rev) + break + + SKUkeysDF = pd.DataFrame() + SKUnameDF = pd.DataFrame() + SKUrevDF = pd.DataFrame() + SKUnumSoldDF = pd.DataFrame() + SKUkeysDF['SKU'] = SKUkeyArr + wks.set_dataframe(SKUkeysDF, (1, 1)) + SKUnameDF['Name'] = SKUnames + wks.set_dataframe(SKUnameDF, (1, 2)) + SKUrevDF["Revenue"] = SKUrev + wks.set_dataframe(SKUrevDF, (1, 3)) + SKUnumSoldDF["Number Sold"] = SKUnumSold + wks.set_dataframe(SKUnumSoldDF, (1, 4)) + except Exception: + wks = sh.add_worksheet(str(logYM)+"-sales", rows=50, cols=60) + header = wks.cell('A1') + header.value = 'SKU' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('B1') + header.value = 'NAME' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('C1') + header.value = 'REVENUE' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('D1') + header.value = 'NUMBER SOLD' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('E2') + header.value = 'Cedar Fees' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('E3') + header.value = 'Revenue' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('E4') + header.value = 'Number of Orders' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('E5') + header.value = 'New Customer' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('E5') + header.value = 'Returning Customers' + header.text_format['bold'] = True # make the header bold + header.update() + header = wks.cell('F1') + header.value = 'Totals' + header.text_format['bold'] = True # make the header bold + header.update() + logData = database.get("/log/" + uid + "/", logYM) + menuItems = database.get("/restaurants/" + estName + "/menu/", "items") + numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) + totalDF = pd.DataFrame() + totalArr = [] + cdrFees = logData['CedarFees'] + totalArr.append(cdrFees) + totalRev = logData['totalRev'] + totalArr.append(totalRev) + numOrders = (len(database.get("/restaurants/" + estName, "/orders/")) - 1) + totalArr.append(numOrders) + newCust = logData['newCustomers'] + totalArr.append(newCust) + retCust = logData['retCustomers'] + totalArr.append(retCust) + totalDF = pd.DataFrame() + totalDF['Totals'] = totalArr + wks.set_dataframe(totalDF, (1, 6)) + skuDict = logData['skus'] + skuKeys = list(skuDict.keys()) + SKUkeyArr = [] + SKUrev = [] + SKUnumSold = [] + SKUnames = [] + for sk in range(len(skuKeys)): + numSold = skuDict[skuKeys[sk]]["numSold"] + SKUnumSold.append(numSold) + SKUkeyArr.append(skuKeys[sk]) + for men in range(len(menuItems)): + if (menuItems[men] != None): + if ((menuItems[men]["sizes"][0][1] != -1)): + for sz in range(len(menuItems[men]["sizes"])): + if (skuKeys[sk] == str(menuItems[men]["sizes"][sz][2])): + # print("found size") + if (str(menuItems[men]["sizes"][sz][0]).lower() != "u"): + name = str(menuItems[men]["name"]).lower() + name += "-" + name += str(menuItems[men]["sizes"][sz][0]).lower() + SKUnames.append(name) + rev = menuItems[men]["sizes"][sz][1] * numSold SKUrev.append(rev) - break - - SKUkeysDF = pd.DataFrame() - SKUnameDF = pd.DataFrame() - SKUrevDF = pd.DataFrame() - SKUnumSoldDF = pd.DataFrame() - SKUkeysDF['SKU'] = SKUkeyArr - wks.set_dataframe(SKUkeysDF, (1, 1)) - SKUnameDF['Name'] = SKUnames - wks.set_dataframe(SKUnameDF, (1, 2)) - SKUrevDF["Revenue"] = SKUrev - wks.set_dataframe(SKUrevDF, (1, 3)) - SKUnumSoldDF["Number Sold"] = SKUnumSold - wks.set_dataframe(SKUnumSoldDF, (1, 4)) + else: + name = str(menuItems[men]["name"]).lower() + SKUnames.append(name) + rev = menuItems[men]["sizes"][sz][1] * numSold + SKUrev.append(rev) + break + if (len(menuItems[men]["sizes"]) - sz == 1): + for ex in range(len(menuItems[men]["extras"])): + if (skuKeys[sk] == str(menuItems[men]["extras"][ex][2])): + # print("found ex") + name = str(menuItems[men]["name"]).lower() + name += "||" + name += str(menuItems[men]["extras"][ex][0]).lower() + name += "* TOPPING " + SKUnames.append(name) + rev = float(menuItems[men]["extras"][ex][1]) * float(numSold) + SKUrev.append(rev) + break + + SKUkeysDF = pd.DataFrame() + SKUnameDF = pd.DataFrame() + SKUrevDF = pd.DataFrame() + SKUnumSoldDF = pd.DataFrame() + SKUkeysDF['SKU'] = SKUkeyArr + wks.set_dataframe(SKUkeysDF, (1, 1)) + SKUnameDF['Name'] = SKUnames + wks.set_dataframe(SKUnameDF, (1, 2)) + SKUrevDF["Revenue"] = SKUrev + wks.set_dataframe(SKUrevDF, (1, 3)) + SKUnumSoldDF["Number Sold"] = SKUnumSold + wks.set_dataframe(SKUnumSoldDF, (1, 4)) + def genUsr(name, number, dbIndx): authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', @@ -181,7 +292,6 @@ def getReply(msg, number): msg.replace(".", "") msg.replace(" ", "") msg = ''.join(msg.split()) - print(msg) indx = 0 DBdata = database.get("/restaurants/" + estName, "/orders") UserData = database.get("/restaurants/", uid + "/users") @@ -195,7 +305,27 @@ def getReply(msg, number): str(number) + ".") except KeyError: pass - reply = "Hi, welcome to " + estNameStr + " please enter your name to continue" + tickData = { + "UUID":str(UUID), + "name":"", + "stage":1, + "paid":0, + "kiosk":0, + "giftcard":0, + "cash":"", + "togo":"", + "tickSize":0, + "discUsed":0, + "discTotal":0.0, + "discStr":"", + "filled":0, + "linkTotal":0, + "finalOrder":"", + "startTime": float(time.time()), + "number":str(number) + } + database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)), "/", tickData) + ''' database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/UUID/", str(UUID)) database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/name/", "") database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/number/", str(number)) @@ -213,6 +343,7 @@ def getReply(msg, number): database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/linkTotal/", 0.0) database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "finalOrder/", "") database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "startTime/", time.time()) + ''' UserData = database.get("/restaurants/" + uid + "/", "users") for usr in range(len(UserData)): if (number == UserData[usr]["number"]): @@ -299,26 +430,20 @@ def ipn(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) request.parameter_storage_class = ImmutableOrderedMultiDict rsp = request.json - print(rsp) - print(rsp['data']['object']['description']) if(rsp['data']['object']['description'][0] == "G"): if (rsp['data']['object']['outcome']["risk_score"] > 65 or rsp['data']['object']["source"]["address_zip_check"] != "pass"): database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", -2) else: code = rsp['data']['object']['description'][2:] - print(rsp) database.put("/restaurants/" + estName + "/giftcards/" + str(code), "/" + str("usedVal") + "/", 0.0) return "200" DBdata = database.get("/restaurants/" + estName, "orders") for dbItems in range(len(DBdata)): - print(str(DBdata[dbItems]["UUID"]),str(rsp['data']['object']['description'])) if (str(DBdata[dbItems]["UUID"]) == str(rsp['data']['object']['description'])): - print(rsp) if(rsp['data']['object']['outcome']["risk_score"] > 65 or rsp['data']['object']["source"]["address_zip_check"] != "pass"): database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "100") return "200" else: - print("confirmed") database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/paid/", 1) database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "/filled/", "1") usrIndx = DBdata[dbItems]["userIndx"] @@ -341,8 +466,8 @@ def ipn(): (datetime.datetime.now(tz).strftime("%Y"))) numOrders = database.get("/restaurants/" + uid + "/users/" + str(usrIndx) + "/restaurants/", estNameStr) logData = database.get("/log/" + uid + "/", logYM) - # payPalFees = float(logData['paypalFees']) - # payPalFees += float(rsp["mc_fee"]) + # stripeFees = float(logData['stripeFees']) + # stripeFees += float(rsp["mc_fee"]) cdrFees = logData['CedarFees'] cdrFees += 1 database.put("/log/" + uid + "/" + logYM, "/CedarFees/", cdrFees) @@ -406,7 +531,7 @@ def ipn(): smtpObj.sendmail(sender, rec, message) smtpObj.close() database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "number/", str((number) + ".")) - # updateLog() + updateLog() return (" ", 200) @@ -470,7 +595,7 @@ def panel(): names.append(str([keys[menuNames]][0])) links.append(str(hours[keys[menuNames]]["link"])) # print(links) - return render_template("panel.html", len=len(links),gcard=(str(uid) + "giftcard"), menuLinks=links, menuNames=names, restName=estNameStr, + return render_template("panel.html", len=len(links),gcard=(str(uid) + "giftcardadd"), menuLinks=links, menuNames=names, restName=estNameStr, viewOrders=(uid + "view"), addItm=(addPass), remItms=remPass, addCpn=promoPass, promoSMS=promoPass + "smsPromo" + uid, signOut=estNameStr, outStck=str(uid + "outstock"), @@ -516,7 +641,7 @@ def view(): return render_template("indexV.html", len=len(webDataDisp), webDataDisp=webDataDisp, keys=keys, btn=str(uid + "view"), restName=estNameStr) -@app.route('/'+uid+"giftcard",methods=['GET']) +@app.route('/'+uid+"giftcardadd",methods=['GET']) def addgiftcard(): currentTime = time.time() authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', @@ -524,11 +649,11 @@ def addgiftcard(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) lastLogin = float(database.get("/restaurants/" + uid, "loginTime")) if ((currentTime - lastLogin) < sessionTime): - return render_template("addgcard.html", btn=(str(uid) + "giftcard")) + return render_template("addgcard.html", btn=(str(uid) + "giftcardadd")) else: return render_template("login.html", btn=str(estNameStr), restName=estNameStr) -@app.route('/'+uid+"giftcard",methods=['POST']) +@app.route('/'+uid+"giftcardadd",methods=['POST']) def addgiftcard1(): currentTime = time.time() authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', @@ -542,10 +667,10 @@ def addgiftcard1(): database.put("/restaurants/" + estName + "/giftcards/" + str(name) , "/"+str("actDate")+"/", (datetime.datetime.now(tz).strftime("%Y-%m-%d"))) database.put("/restaurants/" + estName + "/giftcards/" + str(name) , "/" + str("startVal") + "/", amt) database.put("/restaurants/" + estName + "/giftcards/" + str(name) , "/" + str("usedVal") + "/", -1) - return render_template("payGcard.html",Total=amt, btn=str(uid+"giftcard2"),name=name) + return render_template("payGcard.html",Total=amt, btn=str(uid+"giftcard2add"),name=name) else: return render_template("login.html", btn=str(estNameStr), restName=estNameStr) -@app.route('/'+uid+"giftcard2",methods=['POST']) +@app.route('/'+uid+"giftcard2add",methods=['POST']) def addgiftcard2(): currentTime = time.time() authentication = firebase.FirebaseAuthentication('if7swrlQM4k9cBvm0dmWqO3QsI5zjbcdbstSgq1W', @@ -1228,13 +1353,33 @@ def loginKioskx(): UserData = database.get("/restaurants/", uid + "/users") UUID = random.randint(9999999, 100000000) for dbxv in range(len(DBdata)): - database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/number/", str(number)) try: if (DBdata[dbxv]["number"] == number): database.put("/restaurants/" + estName + "/orders/" + str(dbxv) + "/", "/number/", str(number) + ".") except KeyError: pass + tickData = { + "UUID": str(UUID), + "name": "", + "stage": 1, + "paid": 0, + "kiosk": 1, + "giftcard": 0, + "cash": "", + "togo": "", + "tickSize": 0, + "discUsed": 0, + "discTotal": 0.0, + "discStr": "", + "filled": 0, + "linkTotal": 0, + "finalOrder": "", + "startTime": float(time.time()), + "number": str(number) + } + database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)), "/", tickData) + ''' database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/UUID/", str(UUID)) database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/name/", "") database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/stage/", 1) @@ -1251,6 +1396,7 @@ def loginKioskx(): database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "/linkTotal/", 0.0) database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "finalOrder/", "") database.put("/restaurants/" + estName + "/orders/" + str(len(DBdata)) + "/", "startTime/", time.time()) + ''' session['UUID'] = UUID session['key'] = len(DBdata) UserData = database.get("/restaurants/" + uid + "/", "users") @@ -1304,14 +1450,17 @@ def getUUID(): database = firebase.FirebaseApplication("https://cedarchatbot.firebaseio.com/", authentication=authentication) tickets = database.get("restaurants/" + uid, "/orders/") for tx in range(len(tickets)): - if (code == tickets[tx]["number"][-4:]): - key = tx - UUID = tickets[tx]["UUID"] - session['UUID'] = UUID - session['key'] = key - return redirect(url_for('getName')) - elif ((len(tickets) - tx) == 1): - return render_template("verifyCode2.html", btn=str(uid + "check"), number=botNumber) + try: + if (code == tickets[tx]["number"][-4:]): + key = tx + UUID = tickets[tx]["UUID"] + session['UUID'] = UUID + session['key'] = key + return redirect(url_for('getName')) + elif ((len(tickets) - tx) == 1): + return render_template("verifyCode2.html", btn=str(uid + "check"), number=botNumber) + except Exception: + pass @app.route('/' + uid + 'order0', methods=['GET']) @@ -1916,7 +2065,7 @@ def giftcardx(): if (logData == None): database.put("/log/" + uid + "/" + logYM, "/newCustomers/", 0) database.put("/log/" + uid + "/" + logYM, "/retCustomers/", 0) - database.put("/log/" + uid + "/" + logYM, "/paypalFees/", 0.0) + database.put("/log/" + uid + "/" + logYM, "/stripeFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/CedarFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/totalRev/", 0.0) database.put("/log/" + uid + "/" + logYM, "/skus/9Null/numSold", 0) @@ -2167,7 +2316,7 @@ def giftcardx(): reply = "-Thank you for your order, you can pick it up and pay at the counter when you arrive \n-To order again just text " + '"order"' else: reply = "-Thank you for your order, please pay at the counter, after you pay your food will be delivered to your table \n-To order again just text " + '"order"' - #updateLog() + updateLog() if (DBdata[dbItems]['email'] != ""): smtpObj = smtplib.SMTP_SSL("smtp.zoho.com", 465) smtpObj.login(sender, emailPass) @@ -2194,7 +2343,7 @@ def giftcardx(): message = 'Subject: {}\n\n{}'.format(SUBJECT, writeStr) smtpObj.sendmail(sender,DBdata[dbItems]['email'] , message) smtpObj.close() - #updateLog() + updateLog() database.put("/restaurants/" + estName + "/orders/" + str(dbItems) + "/", "number/", str((number) + ".")) print(Total) session.clear() @@ -2494,7 +2643,7 @@ def nextPayment(): if (logData == None): database.put("/log/" + uid + "/" + logYM, "/newCustomers/", 0) database.put("/log/" + uid + "/" + logYM, "/retCustomers/", 0) - database.put("/log/" + uid + "/" + logYM, "/paypalFees/", 0.0) + database.put("/log/" + uid + "/" + logYM, "/stripeFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/CedarFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/totalRev/", 0.0) database.put("/log/" + uid + "/" + logYM, "/skus/9Null/numSold", 0) @@ -3099,7 +3248,7 @@ def nextPaymentx(): if (logData == None): database.put("/log/" + uid + "/" + logYM, "/newCustomers/", 0) database.put("/log/" + uid + "/" + logYM, "/retCustomers/", 0) - database.put("/log/" + uid + "/" + logYM, "/paypalFees/", 0.0) + database.put("/log/" + uid + "/" + logYM, "/stripeFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/CedarFees/", 0.0) database.put("/log/" + uid + "/" + logYM, "/totalRev/", 0.0) database.put("/log/" + uid + "/" + logYM, "/skus/9Null/numSold", 0) diff --git a/templates/panel.html b/templates/panel.html index 85e36d8..7e827d5 100644 --- a/templates/panel.html +++ b/templates/panel.html @@ -90,7 +90,7 @@



    -
    +

    diff --git a/templates/paymentMethodKiosk.html b/templates/paymentMethodKiosk.html index 32f8377..c105594 100644 --- a/templates/paymentMethodKiosk.html +++ b/templates/paymentMethodKiosk.html @@ -38,7 +38,7 @@

    SubTotal::{{subTotal}}


    Tax::{{tax}}


    -

    Process Fee::$0.15

    +

    Process Fee::$0.50


    Total::{{total}}


    From 54425aa279239548cc8c90e504ce69aa43feadf4 Mon Sep 17 00:00:00 2001 From: caleb Date: Tue, 3 Sep 2019 22:44:21 -0700 Subject: [PATCH 49/62] minor bug fix in paying for gift cards --- .idea/workspace.xml | 28 ++++++++++++----------- main.py | 43 +++++++++++++++++++++++------------ templates/addgcard.html | 2 +- templates/addgcard2.html | 2 +- templates/addgcardFailed.html | 4 ++-- templates/payGcard.html | 2 +- 6 files changed, 49 insertions(+), 32 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a8ca00e..c99966b 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,11 +4,13 @@