[IMP] sale: Convert onchange_user_id into a compute method
This commit is contained in:
@@ -579,7 +579,7 @@ class PurchaseOrder(models.Model):
|
||||
'narration': self.notes,
|
||||
'currency_id': self.currency_id.id,
|
||||
'invoice_user_id': self.user_id and self.user_id.id or self.env.user.id,
|
||||
'partner_id': partner_invoice,
|
||||
'partner_id': partner_invoice.id,
|
||||
'fiscal_position_id': (self.fiscal_position_id or self.fiscal_position_id._get_fiscal_position(partner_invoice)).id,
|
||||
'payment_reference': self.partner_ref or '',
|
||||
'partner_bank_id': self.partner_id.bank_ids[:1].id,
|
||||
|
||||
@@ -117,10 +117,6 @@ class SaleOrder(models.Model):
|
||||
return _('Terms & Conditions: %s', baseurl)
|
||||
return use_invoice_terms and self.env.company.invoice_terms or ''
|
||||
|
||||
@api.model
|
||||
def _get_default_team(self):
|
||||
return self.env['crm.team']._get_default_team_id()
|
||||
|
||||
def _search_invoice_ids(self, operator, value):
|
||||
if operator == 'in' and value:
|
||||
self.env.cr.execute("""
|
||||
@@ -179,30 +175,31 @@ class SaleOrder(models.Model):
|
||||
create_date = fields.Datetime(string='Creation Date', readonly=True, index=True, help="Date on which sales order is created.")
|
||||
|
||||
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,
|
||||
'res.users', string='Salesperson', index=True, tracking=2,
|
||||
compute='_compute_user_id', store=True, readonly=False, pre_compute=True,
|
||||
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, pre_compute=True,
|
||||
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
|
||||
'res.partner', string='Customer', readonly=False, pre_compute=True,
|
||||
states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]},
|
||||
required=True, change_default=True, index=True, tracking=1,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
partner_invoice_id = fields.Many2one(
|
||||
'res.partner', string='Invoice Address',
|
||||
readonly=False, required=True, pre_compute=True,
|
||||
states={'draft': [('done', True)], 'cancel': [('readonly', True)]},
|
||||
states={'done': [('readonly', 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=False, required=True,
|
||||
states={'draft': [('done', True)], 'cancel': [('readonly', True)]},
|
||||
states={'done': [('readonly', True)], 'cancel': [('readonly', True)]},
|
||||
compute='_compute_order_info_from_partner', store=True, pre_compute=True,
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",)
|
||||
|
||||
pricelist_id = fields.Many2one(
|
||||
'product.pricelist', string='Pricelist', check_company=True, # Unrequired company
|
||||
required=True, readonly=True, pre_compute=True,
|
||||
states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
|
||||
required=False, readonly=False, store=True,
|
||||
compute='_compute_order_info_from_partner', pre_compute=True,
|
||||
states={'sale': [('readonly', True)], 'done': [('readonly', True)], 'cancel': [('readonly', True)]},
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", tracking=1,
|
||||
help="If you change the pricelist, only newly added lines will be affected.")
|
||||
currency_id = fields.Many2one(related='pricelist_id.currency_id', depends=["pricelist_id"], store=True, ondelete="restrict")
|
||||
@@ -253,8 +250,8 @@ 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
|
||||
compute='_compute_team_id', store=True, readonly=False, pre_compute=True,
|
||||
change_default=True, check_company=True, # Unrequired company
|
||||
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
|
||||
|
||||
signature = fields.Image('Signature', help='Signature received through the portal.', copy=False, attachment=True, max_width=1024, max_height=1024)
|
||||
@@ -440,18 +437,12 @@ class SaleOrder(models.Model):
|
||||
order = order.with_company(order.company_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 order.terms_type == 'html' and self.env.company.invoice_terms_html:
|
||||
@@ -459,18 +450,22 @@ class SaleOrder(models.Model):
|
||||
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):
|
||||
if self.user_id:
|
||||
self.team_id = self.env['crm.team'].with_context(
|
||||
default_team_id=self.team_id.id
|
||||
)._get_default_team_id(user_id=self.user_id.id, domain=None)
|
||||
@api.depends('partner_id')
|
||||
def _compute_user_id(self):
|
||||
for order in self:
|
||||
order.user_id = order.partner_id.user_id or order.partner_id.commercial_partner_id.user_id or self.env.user
|
||||
|
||||
@api.depends('partner_id', 'user_id')
|
||||
def _compute_team_id(self):
|
||||
for order in self:
|
||||
order.team_id = self.env['crm.team'].with_context(
|
||||
default_team_id=(order.team_id or order.partner_id.team_id).id
|
||||
)._get_default_team_id(
|
||||
user_id=self.user_id.id,
|
||||
domain=[('company_id', 'in', [self.company_id.id, False])]
|
||||
)
|
||||
|
||||
@api.onchange('partner_id')
|
||||
def _onchange_partner_id_warning(self):
|
||||
|
||||
@@ -534,7 +534,6 @@ class TestSaleOrder(TestSaleCommon):
|
||||
'team_id': self.crm_team1.id
|
||||
})
|
||||
sale_order.user_id = self.user_in_team
|
||||
sale_order.onchange_user_id()
|
||||
self.assertEqual(sale_order.team_id.id, self.crm_team0.id, 'Should assign to team of sales person')
|
||||
|
||||
def test_keep_sales_team_when_changing_user_with_no_team(self):
|
||||
@@ -544,7 +543,6 @@ class TestSaleOrder(TestSaleCommon):
|
||||
'team_id': self.crm_team1.id
|
||||
})
|
||||
sale_order.user_id = self.user_not_in_team
|
||||
sale_order.onchange_user_id()
|
||||
self.assertEqual(sale_order.team_id.id, self.crm_team1.id, 'Should not reset the team to default')
|
||||
|
||||
def test_onchange_packaging_00(self):
|
||||
|
||||
@@ -17,12 +17,6 @@ _logger = logging.getLogger(__name__)
|
||||
class SaleOrder(models.Model):
|
||||
_inherit = "sale.order"
|
||||
|
||||
@api.model
|
||||
def _default_warehouse_id(self):
|
||||
# !!! Any change to the default value may have to be repercuted
|
||||
# on _init_column() below.
|
||||
return self.env.user._get_default_warehouse_id()
|
||||
|
||||
incoterm = fields.Many2one(
|
||||
'account.incoterms', 'Incoterm',
|
||||
help="International Commercial Terms are a series of predefined commercial terms used in international transactions.")
|
||||
@@ -34,9 +28,10 @@ class SaleOrder(models.Model):
|
||||
,help="If you deliver all products at once, the delivery order will be scheduled based on the greatest "
|
||||
"product lead time. Otherwise, it will be based on the shortest.")
|
||||
warehouse_id = fields.Many2one(
|
||||
'stock.warehouse', string='Warehouse',
|
||||
required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]},
|
||||
default=_default_warehouse_id, check_company=True)
|
||||
'stock.warehouse', string='Warehouse', required=True,
|
||||
compute='_compute_warehouse_id', store=True, readonly=False, pre_compute=True,
|
||||
states={'sale': [('readonly', True)], 'done': [('readonly', False)], 'cancel': [('readonly', False)]},
|
||||
check_company=True)
|
||||
picking_ids = fields.One2many('stock.picking', 'sale_id', string='Transfers')
|
||||
delivery_count = fields.Integer(string='Delivery Orders', compute='_compute_picking_ids')
|
||||
procurement_group_id = fields.Many2one('procurement.group', 'Procurement Group', copy=False)
|
||||
@@ -155,17 +150,19 @@ class SaleOrder(models.Model):
|
||||
for order in self:
|
||||
order.delivery_count = len(order.picking_ids)
|
||||
|
||||
@api.onchange('company_id')
|
||||
def _onchange_company_id(self):
|
||||
if self.company_id:
|
||||
warehouse_id = self.env['ir.default'].get_model_defaults('sale.order').get('warehouse_id')
|
||||
self.warehouse_id = warehouse_id or self.user_id.with_company(self.company_id.id)._get_default_warehouse_id().id
|
||||
|
||||
@api.onchange('user_id')
|
||||
def onchange_user_id(self):
|
||||
super().onchange_user_id()
|
||||
if self.state in ['draft', 'sent']:
|
||||
self.warehouse_id = self.user_id.with_company(self.company_id.id)._get_default_warehouse_id().id
|
||||
@api.depends('user_id', 'company_id')
|
||||
def _compute_warehouse_id(self):
|
||||
default_warehouse_id = self.env['ir.default'].get_model_defaults('sale.order').get('warehouse_id')
|
||||
for order in self:
|
||||
if order.company_id and order.company_id != order._origin.company_id:
|
||||
warehouse = default_warehouse_id
|
||||
else:
|
||||
warehouse = self.env['stock.warehouse']
|
||||
if order.state in ['draft', 'sent']:
|
||||
order.warehouse_id = warehouse or order.user_id.with_company(order.company_id.id)._get_default_warehouse_id()
|
||||
# In case we create a record in another state (eg: demo data, or business code)
|
||||
if not order.warehouse_id:
|
||||
order.warehouse_id = self.env.user._get_default_warehouse_id()
|
||||
|
||||
@api.onchange('partner_shipping_id')
|
||||
def _onchange_partner_shipping_id(self):
|
||||
|
||||
@@ -119,7 +119,6 @@ class ProjectCreateSalesOrder(models.TransientModel):
|
||||
})
|
||||
# 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()
|
||||
|
||||
# create the sale lines, the map (optional), and assign existing timesheet to sale lines
|
||||
self._make_billable(sale_order)
|
||||
|
||||
Reference in New Issue
Block a user