[IMP] sale: Convert onchange_partner_id into compute method
This commit is contained in:
@@ -187,6 +187,7 @@ class SaleOrder(models.Model):
|
||||
|
||||
user_id = fields.Many2one(
|
||||
'res.users', string='Salesperson', index=True, tracking=2, default=lambda self: self.env.user,
|
||||
compute='_compute_order_info_from_partner', store=True, readonly=False,
|
||||
domain=lambda self: [('groups_id', 'in', self.env.ref('sales_team.group_sale_salesman').id)])
|
||||
partner_id = fields.Many2one(
|
||||
'res.partner', string='Customer', readonly=True,
|
||||
@@ -195,12 +196,14 @@ class SaleOrder(models.Model):
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
partner_invoice_id = fields.Many2one(
|
||||
'res.partner', string='Invoice Address',
|
||||
readonly=True, required=True,
|
||||
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]},
|
||||
readonly=False, required=True,
|
||||
states={'draft': [('done', True)], 'cancel': [('readonly', True)]},
|
||||
compute='_compute_order_info_from_partner', store=True,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
partner_shipping_id = fields.Many2one(
|
||||
'res.partner', string='Delivery Address', readonly=True, required=True,
|
||||
states={'draft': [('readonly', False)], 'sent': [('readonly', False)], 'sale': [('readonly', False)]},
|
||||
'res.partner', string='Delivery Address', readonly=False, required=True,
|
||||
states={'draft': [('done', True)], 'cancel': [('readonly', True)]},
|
||||
compute='_compute_order_info_from_partner', store=True,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
|
||||
pricelist_id = fields.Many2one(
|
||||
@@ -227,7 +230,9 @@ class SaleOrder(models.Model):
|
||||
('no', 'Nothing to Invoice')
|
||||
], string='Invoice Status', compute='_get_invoice_status', store=True)
|
||||
|
||||
note = fields.Html('Terms and conditions', default=_default_note)
|
||||
note = fields.Html(
|
||||
'Terms and conditions', default=_default_note,
|
||||
compute='_compute_order_info_from_partner', store=True, readonly=False)
|
||||
terms_type = fields.Selection(related='company_id.terms_type')
|
||||
|
||||
amount_untaxed = fields.Monetary(string='Untaxed Amount', store=True, compute='_amount_all', tracking=5)
|
||||
@@ -238,6 +243,7 @@ class SaleOrder(models.Model):
|
||||
|
||||
payment_term_id = fields.Many2one(
|
||||
'account.payment.term', string='Payment Terms', check_company=True, # Unrequired company
|
||||
compute='_compute_order_info_from_partner', store=True, readonly=False,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
fiscal_position_id = fields.Many2one(
|
||||
'account.fiscal.position', string='Fiscal Position',
|
||||
@@ -253,6 +259,7 @@ class SaleOrder(models.Model):
|
||||
team_id = fields.Many2one(
|
||||
'crm.team', 'Sales Team',
|
||||
ondelete="set null", tracking=True,
|
||||
compute='_compute_order_info_from_partner', store=True, readonly=False,
|
||||
change_default=True, default=_get_default_team, check_company=True, # Unrequired company
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
|
||||
|
||||
@@ -413,8 +420,8 @@ class SaleOrder(models.Model):
|
||||
)._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):
|
||||
@api.depends('partner_id')
|
||||
def _compute_order_info_from_partner(self):
|
||||
"""
|
||||
Update the following fields when the partner is changed:
|
||||
- Pricelist
|
||||
@@ -422,42 +429,45 @@ class SaleOrder(models.Model):
|
||||
- Invoice address
|
||||
- Delivery address
|
||||
- Sales Team
|
||||
- User
|
||||
- Note
|
||||
"""
|
||||
if not self.partner_id:
|
||||
self.update({
|
||||
'partner_invoice_id': False,
|
||||
'partner_shipping_id': False,
|
||||
'fiscal_position_id': False,
|
||||
})
|
||||
return
|
||||
for order in self:
|
||||
if not order.partner_id:
|
||||
order.update({
|
||||
'partner_invoice_id': False,
|
||||
'partner_shipping_id': False,
|
||||
'fiscal_position_id': False,
|
||||
})
|
||||
continue
|
||||
|
||||
self = self.with_company(self.company_id)
|
||||
order = order.with_company(order.company_id)
|
||||
|
||||
addr = self.partner_id.address_get(['delivery', 'invoice'])
|
||||
partner_user = self.partner_id.user_id or self.partner_id.commercial_partner_id.user_id
|
||||
values = {
|
||||
'pricelist_id': self.partner_id.property_product_pricelist and self.partner_id.property_product_pricelist.id or False,
|
||||
'payment_term_id': self.partner_id.property_payment_term_id and self.partner_id.property_payment_term_id.id or False,
|
||||
'partner_invoice_id': addr['invoice'],
|
||||
'partner_shipping_id': addr['delivery'],
|
||||
}
|
||||
user_id = partner_user.id
|
||||
if not self.env.context.get('not_self_saleperson'):
|
||||
user_id = user_id or self.env.context.get('default_user_id', self.env.uid)
|
||||
if user_id and self.user_id.id != user_id:
|
||||
values['user_id'] = user_id
|
||||
addr = order.partner_id.address_get(['delivery', 'invoice'])
|
||||
partner_user = order.partner_id.user_id or order.partner_id.commercial_partner_id.user_id
|
||||
values = {
|
||||
'pricelist_id': order.partner_id.property_product_pricelist and order.partner_id.property_product_pricelist.id or False,
|
||||
'payment_term_id': order.partner_id.property_payment_term_id and order.partner_id.property_payment_term_id.id or False,
|
||||
'partner_invoice_id': addr['invoice'],
|
||||
'partner_shipping_id': addr['delivery'],
|
||||
}
|
||||
user_id = partner_user.id
|
||||
if not self.env.context.get('not_self_saleperson'):
|
||||
user_id = user_id or self.env.context.get('default_user_id', self.env.uid)
|
||||
if user_id and order.user_id.id != user_id:
|
||||
values['user_id'] = user_id
|
||||
|
||||
if self.env['ir.config_parameter'].sudo().get_param('account.use_invoice_terms'):
|
||||
if self.terms_type == 'html' and self.env.company.invoice_terms_html:
|
||||
baseurl = html_keep_url(self.get_base_url() + '/terms')
|
||||
values['note'] = _('Terms & Conditions: %s', baseurl)
|
||||
elif not is_html_empty(self.env.company.invoice_terms):
|
||||
values['note'] = self.with_context(lang=self.partner_id.lang).env.company.invoice_terms
|
||||
if not self.env.context.get('not_self_saleperson') or not self.team_id:
|
||||
values['team_id'] = self.env['crm.team'].with_context(
|
||||
default_team_id=self.partner_id.team_id.id
|
||||
)._get_default_team_id(domain=['|', ('company_id', '=', self.company_id.id), ('company_id', '=', False)], user_id=user_id)
|
||||
self.update(values)
|
||||
if self.env['ir.config_parameter'].sudo().get_param('account.use_invoice_terms'):
|
||||
if order.terms_type == 'html' and self.env.company.invoice_terms_html:
|
||||
baseurl = html_keep_url(order.get_base_url() + '/terms')
|
||||
values['note'] = _('Terms & Conditions: %s', baseurl)
|
||||
elif not is_html_empty(self.env.company.invoice_terms):
|
||||
values['note'] = order.with_context(lang=order.partner_id.lang).env.company.invoice_terms
|
||||
if not self.env.context.get('not_self_saleperson') or not order.team_id:
|
||||
values['team_id'] = self.env['crm.team'].with_context(
|
||||
default_team_id=order.partner_id.team_id.id
|
||||
)._get_default_team_id(domain=['|', ('company_id', '=', self.company_id.id), ('company_id', '=', False)], user_id=user_id)
|
||||
order.update(values)
|
||||
|
||||
@api.onchange('user_id')
|
||||
def onchange_user_id(self):
|
||||
|
||||
@@ -58,7 +58,6 @@ class TestReInvoice(TestSaleCommon):
|
||||
})
|
||||
sale_order_line2.product_id_change()
|
||||
|
||||
self.sale_order.onchange_partner_id()
|
||||
self.sale_order._compute_tax_id()
|
||||
self.sale_order.action_confirm()
|
||||
|
||||
@@ -284,7 +283,6 @@ class TestReInvoice(TestSaleCommon):
|
||||
})
|
||||
so_line2.product_id_change()
|
||||
|
||||
self.sale_order.onchange_partner_id()
|
||||
self.sale_order._compute_tax_id()
|
||||
self.sale_order.action_confirm()
|
||||
|
||||
|
||||
@@ -72,7 +72,6 @@ class TestSaleFlow(TestSaleCommonBase):
|
||||
for line in sale_order.order_line:
|
||||
line.product_id_change()
|
||||
|
||||
sale_order.onchange_partner_id()
|
||||
sale_order._compute_tax_id()
|
||||
sale_order.action_confirm()
|
||||
|
||||
|
||||
@@ -512,7 +512,6 @@ class TestSaleOrder(TestSaleCommon):
|
||||
sale_order = self.env['sale.order'].create({
|
||||
'partner_id': partner.id,
|
||||
})
|
||||
sale_order.onchange_partner_id()
|
||||
self.assertEqual(sale_order.team_id.id, self.crm_team0.id, 'Should assign to team of sales person')
|
||||
|
||||
def test_assign_sales_team_from_partner_team(self):
|
||||
@@ -525,7 +524,6 @@ class TestSaleOrder(TestSaleCommon):
|
||||
sale_order = self.env['sale.order'].create({
|
||||
'partner_id': partner.id,
|
||||
})
|
||||
sale_order.onchange_partner_id()
|
||||
self.assertEqual(sale_order.team_id.id, self.crm_team1.id, 'Should assign to team of partner')
|
||||
|
||||
def test_assign_sales_team_when_changing_user(self):
|
||||
|
||||
@@ -50,11 +50,12 @@ class SaleOrder(models.Model):
|
||||
default['validity_date'] = fields.Date.context_today(self) + timedelta(self.sale_order_template_id.number_of_days)
|
||||
return super(SaleOrder, self).copy(default=default)
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def onchange_partner_id(self):
|
||||
super(SaleOrder, self).onchange_partner_id()
|
||||
template = self.sale_order_template_id.with_context(lang=self.partner_id.lang)
|
||||
self.note = template.note if not is_html_empty(template.note) else self.note
|
||||
@api.depends('partner_id')
|
||||
def _compute_order_info_from_partner(self):
|
||||
super(SaleOrder, self)._compute_order_info_from_partner()
|
||||
for order in self:
|
||||
template = order.sale_order_template_id.with_context(lang=order.partner_id.lang)
|
||||
order.note = template.note if not is_html_empty(template.note) else order.note
|
||||
|
||||
def _compute_line_data_for_template_change(self, line):
|
||||
return {
|
||||
|
||||
@@ -72,7 +72,6 @@ class TestReInvoice(TestCommonSaleTimesheet):
|
||||
})
|
||||
sale_order_line2.product_id_change()
|
||||
|
||||
self.sale_order.onchange_partner_id()
|
||||
self.sale_order._compute_tax_id()
|
||||
self.sale_order.action_confirm()
|
||||
|
||||
|
||||
@@ -117,7 +117,6 @@ class ProjectCreateSalesOrder(models.TransientModel):
|
||||
'client_order_ref': self.project_id.name,
|
||||
'company_id': self.project_id.company_id.id,
|
||||
})
|
||||
sale_order.onchange_partner_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()
|
||||
|
||||
@@ -834,8 +834,7 @@ class WebsiteSale(http.Controller):
|
||||
else:
|
||||
partner_id = self._checkout_form_save(mode, post, kw)
|
||||
if mode[1] == 'billing':
|
||||
order.partner_id = partner_id
|
||||
order.with_context(not_self_saleperson=True).onchange_partner_id()
|
||||
order.with_context(not_self_saleperson=True).partner_id = partner_id
|
||||
# This is the *only* thing that the front end user will see/edit anyway when choosing billing address
|
||||
order.partner_invoice_id = partner_id
|
||||
if not kw.get('use_same'):
|
||||
|
||||
@@ -328,8 +328,7 @@ class Website(models.Model):
|
||||
fiscal_position = sale_order.fiscal_position_id.id
|
||||
|
||||
# change the partner, and trigger the onchange
|
||||
sale_order.write({'partner_id': partner.id})
|
||||
sale_order.with_context(not_self_saleperson=True).onchange_partner_id()
|
||||
sale_order.with_context(not_self_saleperson=True).write({'partner_id': partner.id})
|
||||
sale_order.write({'partner_invoice_id': partner.id})
|
||||
sale_order['payment_term_id'] = self.sale_get_payment_term(partner)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user