def store_delivery_date()

in projects/conversational-commerce-agent/conversational-agent-examples/assets/apparel-search-cf/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.debug("REACHED /STORE_DELIVERY_DATE")
    request_json = request.get_json(silent=False)
    app.logger.debug("REQUEST: %s", request_json)

    shopping_cart = request_json["shopping_cart"]
    preferred_delivery_dates = request_json["preferred_delivery_date"]
    app.logger.debug("SHOPPING CART: %s", shopping_cart)
    app.logger.debug("PREFERRED DELIVERY DATES: %s", preferred_delivery_dates)

    response = {
        "status": "failure",
        "reason": "There is an internal system problem with updating the delivery dates",
    }

    if len(preferred_delivery_dates) > 0:
        for item in preferred_delivery_dates:
            app.logger.debug("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.debug(
        "DELIVERY DATES CHANGE STATUS: %s", preferred_delivery_dates
    )

    return flask.jsonify(
        {
            "shopping_cart": shopping_cart,
            "preferred_delivery_date": preferred_delivery_dates,
        }
    )