def store_delivery_date()

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,
  })