diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index 5be17a4118a..20a5145faad 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -101,6 +101,13 @@ class SaleOrder(models.Model): else: order.is_abandoned_cart = False + @api.depends('partner_id') + def _compute_payment_term_id(self): + super()._compute_payment_term_id() + for order in self: + if order.website_id: + order.payment_term_id = order.website_id.with_company(order.company_id).sale_get_payment_term(order.partner_id) + def _search_abandoned_cart(self, operator, value): website_ids = self.env['website'].search_read(fields=['id', 'cart_abandoned_delay', 'partner_id']) deadlines = [[ diff --git a/addons/website_sale/tests/test_sale_process.py b/addons/website_sale/tests/test_sale_process.py index 879d96e1f28..2fec09a3707 100644 --- a/addons/website_sale/tests/test_sale_process.py +++ b/addons/website_sale/tests/test_sale_process.py @@ -683,3 +683,32 @@ class TestWebsiteSaleCheckoutAddress(TransactionCaseWithUserDemo, HttpCaseWithUs }) invoice.action_post() self.assertFalse(partner_1._can_edit_name()) + + def test_11_payment_term_when_address_change(self): + ''' This test ensures that the payment term set when triggering + `onchange_partner_id` by changing the address of a website sale + order is computed by `sale_get_payment_term`. + ''' + self._setUp_multicompany_env() + product_id = self.env['product.product'].create({ + 'name': 'Product A', + 'list_price': 100, + 'website_published': True, + 'sale_ok': True}).id + + env = api.Environment(self.env.cr, self.portal_user.id, {}) + with MockRequest(env, website=self.website.with_env(env).with_context(website_id=self.website.id)) as req: + req.httprequest.method = "POST" + + self.WebsiteSaleController.cart_update(product_id) + so = self.portal_user.sale_order_ids[0] + self.assertTrue(so.payment_term_id, "A payment term should be set by default on the sale order") + + self.default_address_values['partner_id'] = self.portal_partner.id + self.default_address_values['name'] = self.portal_partner.name + self.WebsiteSaleController.address(**self.default_address_values) + self.assertTrue(so.payment_term_id, "A payment term should still be set on the sale order") + + so.website_id = False + self.WebsiteSaleController.address(**self.default_address_values) + self.assertFalse(so.payment_term_id, "The website default payment term should not be set on a sale order not coming from the website")