in dialogflow-prebuilt-agents/cloud-functions/retail_assistant/main.py [0:0]
def store_delivery_date():
"""Store the user's preferred delivery date (should be in future than the earliest estimated delivery date)"""
app.logger.warning("REACHED /STORE_DELIVERY_DATE")
request_json = request.get_json(silent=False)
app.logger.warning("REQUEST: %s", request_json)
shopping_cart = request_json["shopping_cart"]
preferred_delivery_dates = request_json["preferred_delivery_date"]
app.logger.warning("SHOPPING CART: %s", shopping_cart)
app.logger.warning("PREFERRED DELIVERY DATES: %s", preferred_delivery_dates)
if preferred_delivery_dates:
for item in preferred_delivery_dates:
app.logger.warning("PREFERRED DELIVERY DATE ITEM: %s", item)
if item and item["id"] and item["preferred_delivery_date"]:
# copy product by value
product = (
list(filter(lambda x: x["id"] == item["id"], shopping_cart))
)[0]
product_index = shopping_cart.index(product)
# copy product by reference
product = shopping_cart[product_index]
# verify the preferred delivery date is in the future from the earliest delivery date
if datetime.strptime(
item["preferred_delivery_date"], "%B %d, %Y"
) >= datetime.strptime(product["earliest_delivery_date"], "%B %d, %Y"):
# updating product delivery date in the shopping cart
product["delivery_date"] = item["preferred_delivery_date"]
# modification in preferred_delivery_dates object
item["reason"] = (
"The delivery date for the "
+ product["title"]
+ " has been changed to "
+ product["delivery_date"]
)
item["status"] = "success"
else:
# modification in preferred_delivery_dates object
item["reason"] = (
"The preferred delivery date ("
+ item["preferred_delivery_date"]
+ ") is before the earliest delivery date ("
+ product["earliest_delivery_date"]
+ ") for the "
+ product["title"]
)
item["status"] = "fail"
app.logger.warning(
"DELIVERY DATES CHANGE STATUS: %s", preferred_delivery_dates
)
return flask.jsonify({
"shopping_cart": shopping_cart,
"preferred_delivery_date": preferred_delivery_dates,
})