diff --git a/website_sale_order_type/models/website.py b/website_sale_order_type/models/website.py index c988e6921e..d162c86d30 100644 --- a/website_sale_order_type/models/website.py +++ b/website_sale_order_type/models/website.py @@ -16,3 +16,19 @@ def _get_current_pricelist_id(self, partner_sudo): if partner_sudo.sale_type.pricelist_id: return partner_sudo.sale_type.pricelist_id.id return super()._get_current_pricelist_id(partner_sudo) + + def _prepare_sale_order_values(self, partner_sudo): + self.ensure_one() + values = super()._prepare_sale_order_values(partner_sudo) + sale_order_model = self.env["sale.order"].with_company(self.company_id) + partner = partner_sudo.with_company(self.company_id) + sale_type_id = ( + partner.sale_type.id or partner.commercial_partner_id.sale_type.id + ) + if not sale_type_id: + sale_type_id = sale_order_model.default_get(["type_id"]).get("type_id") + if not sale_type_id: + sale_type_id = sale_order_model._default_type_id().id + if sale_type_id: + values["type_id"] = sale_type_id + return values diff --git a/website_sale_order_type/tests/test_website_sale_order_type.py b/website_sale_order_type/tests/test_website_sale_order_type.py index 9922140718..59a08e6346 100644 --- a/website_sale_order_type/tests/test_website_sale_order_type.py +++ b/website_sale_order_type/tests/test_website_sale_order_type.py @@ -1,6 +1,7 @@ # Copyright 2018 Simone Rubino - Agile Business Group # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo.tests import HttpCase, tagged +from odoo.addons.website.tools import MockRequest @tagged("post_install", "-at_install") @@ -53,3 +54,24 @@ def test_website_sale_order_type(self): [("id", "not in", existing_orders.ids)] ) self.assertEqual(created_order.type_id, self.sale_type) + + def test_prepare_sale_order_values(self): + self.partner.sale_type = self.sale_type + website = self.env["website"].get_current_website() + with MockRequest(self.env, website=website): + vals = website._prepare_sale_order_values(self.partner) + self.assertIn( + "type_id", + vals, + "The key 'type_id' should be in the returned values dictionary.", + ) + self.assertEqual( + vals["type_id"], + self.sale_type.id, + f"The type_id in vals ({vals['type_id']}) should match the partner's type ({self.sale_type.id})", + ) + order = self.env["sale.order"].create(vals) + self.assertTrue( + order.name.startswith("TSO"), + f"The sequence failed to apply. Expected prefix 'TSO', got '{order.name}'", + )