[IMP] sale: Convert onchange_partner_shipping_id into compute method

This commit is contained in:
Yannick Tivisse
2021-12-02 12:12:01 +01:00
parent b9194406ec
commit f0f30828fc
6 changed files with 12 additions and 15 deletions
@@ -56,6 +56,5 @@ class ChooseDeliveryCarrier(models.TransientModel):
})
if partner_shipping != self.order_id.partner_shipping_id:
self.order_id.partner_shipping_id = partner_shipping
self.order_id.onchange_partner_shipping_id()
return super().button_confirm()
+11 -4
View File
@@ -242,6 +242,7 @@ class SaleOrder(models.Model):
fiscal_position_id = fields.Many2one(
'account.fiscal.position', string='Fiscal Position',
domain="[('company_id', '=', company_id)]", check_company=True,
compute='_compute_fiscal_position_id', store=True, readonly=False,
help="Fiscal positions are used to adapt taxes and accounts for particular customers or sales orders/invoices."
"The default value comes from the customer.")
tax_country_id = fields.Many2one(
@@ -398,13 +399,19 @@ class SaleOrder(models.Model):
return self.env.ref('sale.mt_order_sent')
return super(SaleOrder, self)._track_subtype(init_values)
@api.onchange('partner_shipping_id', 'partner_id', 'company_id')
def onchange_partner_shipping_id(self):
@api.depends('partner_shipping_id', 'partner_id', 'company_id')
def _compute_fiscal_position_id(self):
"""
Trigger the change of fiscal position when the shipping address is modified.
"""
self.fiscal_position_id = self.env['account.fiscal.position'].with_company(self.company_id).get_fiscal_position(self.partner_id.id, self.partner_shipping_id.id)
return {}
cache = {}
for order in self:
key = (order.company_id, order.partner_id, order.partner_shipping_id)
if key not in cache:
cache[key] = self.env['account.fiscal.position'].with_company(
order.company_id
)._get_fiscal_position(order.partner_id, order.partner_shipping_id)
order.fiscal_position_id = cache[key]
@api.onchange('partner_id')
def onchange_partner_id(self):
@@ -118,7 +118,6 @@ class ProjectCreateSalesOrder(models.TransientModel):
'company_id': self.project_id.company_id.id,
})
sale_order.onchange_partner_id()
sale_order.onchange_partner_shipping_id()
# rewrite the user as the onchange_partner_id erases it
sale_order.write({'user_id': self.project_id.user_id.id})
sale_order.onchange_user_id()
-1
View File
@@ -925,7 +925,6 @@ class WebsiteSale(http.Controller):
if redirection:
return redirection
order.onchange_partner_shipping_id()
order.order_line._compute_tax_id()
request.session['sale_last_order_id'] = order.id
request.website.sale_get_order(update_pricelist=True)
+1 -7
View File
@@ -305,16 +305,11 @@ class Website(models.Model):
sale_order = self.env['sale.order'].with_company(request.website.company_id.id).with_user(SUPERUSER_ID).create(so_data)
# set fiscal position
if request.website.partner_id.id != partner.id:
sale_order.onchange_partner_shipping_id()
else: # For public user, fiscal position based on geolocation
if request.website.partner_id.id == partner.id: # For public user, fiscal position based on geolocation
country_code = request.session['geoip'].get('country_code')
if country_code:
country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1).id
sale_order.fiscal_position_id = request.env['account.fiscal.position'].sudo().with_company(request.website.company_id.id)._get_fpos_by_region(country_id)
else:
# if no geolocation, use the public user fp
sale_order.onchange_partner_shipping_id()
request.session['sale_order_id'] = sale_order.id
@@ -336,7 +331,6 @@ class Website(models.Model):
sale_order.write({'partner_id': partner.id})
sale_order.with_context(not_self_saleperson=True).onchange_partner_id()
sale_order.write({'partner_invoice_id': partner.id})
sale_order.onchange_partner_shipping_id() # fiscal position
sale_order['payment_term_id'] = self.sale_get_payment_term(partner)
# check the pricelist : update it if the pricelist is not the 'forced' one
@@ -31,7 +31,6 @@ class MondialRelay(http.Controller):
})
if order.partner_shipping_id != partner_shipping:
order.partner_shipping_id = partner_shipping
order.onchange_partner_shipping_id()
return {
'address': request.env['ir.qweb']._render('website_sale.address_on_payment', {