From fde3ed053233a3d0cf31fc2717413c8f0dcf28d6 Mon Sep 17 00:00:00 2001 From: Unai Beristain Date: Thu, 17 Oct 2024 17:31:25 +0200 Subject: [PATCH] [IMP] website_sale_cart_with_unconfirmed_budget: Remove fork --- .../controllers/website_sale.py | 30 +++++++++--- .../models/sale_order.py | 49 +++++++++++-------- 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/website_sale_cart_with_unconfirmed_budget/controllers/website_sale.py b/website_sale_cart_with_unconfirmed_budget/controllers/website_sale.py index f55bf691..babfdbbc 100644 --- a/website_sale_cart_with_unconfirmed_budget/controllers/website_sale.py +++ b/website_sale_cart_with_unconfirmed_budget/controllers/website_sale.py @@ -8,12 +8,29 @@ class WebsiteSale(WebsiteSale): @http.route(["/shop/cart"], type="http", auth="public", website=True, sitemap=False) def cart(self, access_token=None, revive="", **post): + response = super().cart(access_token=access_token, revive=revive, **post) order = request.website.sale_get_order() + if order and order.state != "draft": request.session["sale_order_id"] = None order = request.website.sale_get_order() - request.session["website_sale_cart_quantity"] = order.cart_quantity + if not order: + last_order = request.env["sale.order"].search( + [ + ("partner_id", "=", request.env.user.partner_id.id), + ("state", "=", "sent"), + ], + order="date_order desc", + limit=1, + ) + if last_order: + last_order.write({"state": "draft"}) + order = last_order + + request.session["website_sale_cart_quantity"] = ( + order.cart_quantity if order else 0 + ) values = { "website_sale_order": order, @@ -29,7 +46,8 @@ def cart(self, access_token=None, revive="", **post): values["suggested_products"] = order._cart_accessories() values.update(self._get_express_shop_payment_values(order)) - return request.render("website_sale.cart", values) + response.qcontext.update(values) + return response @http.route( ["/shop/cart/update"], @@ -46,7 +64,7 @@ def cart_update( product_custom_attribute_values=None, no_variant_attribute_values=None, express=False, - **kwargs + **kwargs, ): sale_order = super().cart_update( product_id=product_id, @@ -55,7 +73,7 @@ def cart_update( product_custom_attribute_values=product_custom_attribute_values, no_variant_attribute_values=no_variant_attribute_values, express=express, - **kwargs + **kwargs, ) request.session["website_sale_cart_quantity"] = sale_order.cart_quantity @@ -82,7 +100,7 @@ def cart_update_json( display=True, product_custom_attribute_values=None, no_variant_attribute_values=None, - **kw + **kw, ): values = super().cart_update_json( product_id=product_id, @@ -92,7 +110,7 @@ def cart_update_json( display=display, product_custom_attribute_values=product_custom_attribute_values, no_variant_attribute_values=no_variant_attribute_values, - **kw + **kw, ) request.session["website_sale_cart_quantity"] = values.get("cart_quantity", 0) diff --git a/website_sale_cart_with_unconfirmed_budget/models/sale_order.py b/website_sale_cart_with_unconfirmed_budget/models/sale_order.py index 3b8e76fd..e0e0a5e2 100644 --- a/website_sale_cart_with_unconfirmed_budget/models/sale_order.py +++ b/website_sale_cart_with_unconfirmed_budget/models/sale_order.py @@ -5,25 +5,34 @@ class SaleOrder(models.Model): _inherit = "sale.order" @api.model - def create(self, vals): - unconfirmed_budget = self.env["sale.order"].search( - [ - ("state", "=", "draft"), - ("partner_id", "=", vals.get("partner_id")), - ], - limit=1, - ) + def create(self, vals_list): + if isinstance(vals_list, dict): + vals_list = [vals_list] - if unconfirmed_budget: - unconfirmed_budget.order_line.unlink() - for line in vals.get("order_line", []): - unconfirmed_budget.order_line.create( - { - "order_id": unconfirmed_budget.id, - "product_id": line[2]["product_id"], - "product_uom_qty": line[2]["product_uom_qty"], - } - ) - return unconfirmed_budget + created_orders = self.browse() - return super().create(vals) + for vals in vals_list: + unconfirmed_budget = self.env["sale.order"].search( + [ + ("state", "=", "draft"), + ("partner_id", "=", vals.get("partner_id")), + ], + limit=1, + ) + + if unconfirmed_budget: + unconfirmed_budget.order_line.unlink() + for line in vals.get("order_line", []): + unconfirmed_budget.order_line.create( + { + "order_id": unconfirmed_budget.id, + "product_id": line[2]["product_id"], + "product_uom_qty": line[2]["product_uom_qty"], + } + ) + created_orders += unconfirmed_budget + else: + created_order = super().create(vals) + created_orders += created_order + + return created_orders