[REF] website_crm_partner_assign : use stored editable r+w fields
PURPOSE Try to move from onchange / default_get to stored editable computed fields. Behavior should be the same (computed or set by user), with support of create / write / onchange field update without additional code. SPECIFICATIONS Update classic fields updated in some cases by onchange and/or default methods by fields with store=True, readonly=False. It means their value comes either from manual user input, either from trigger based coputation. Remove onchange and default_get when possible, leading to an unique computation method and clearing fields definition. Also clean some fields definition inconsistencies, notably required fields that should instead be correctly computed or default that have no real meaning. SPECIFICATIONS: FIELDS RENAMING In this commit we also rename ``date_assign`` to ``date_partner_assign``. There are already ``date_open`` (crm_lead) and ``assign_date`` (website scoring) fields available. It may be confusing. The field is therefore renamed to better indicate it is linked to partner assignment. LINKS Task ID 2088565 (crm: from onchange to compute) Upgrade PR odoo/upgrade#781
This commit is contained in:
@@ -9,6 +9,7 @@ from odoo.exceptions import AccessDenied, AccessError
|
||||
|
||||
class CrmLead(models.Model):
|
||||
_inherit = "crm.lead"
|
||||
|
||||
partner_latitude = fields.Float('Geo Latitude', digits=(16, 5))
|
||||
partner_longitude = fields.Float('Geo Longitude', digits=(16, 5))
|
||||
partner_assigned_id = fields.Many2one('res.partner', 'Assigned Partner', tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", help="Partner this case has been forwarded/assigned to.", index=True)
|
||||
@@ -18,22 +19,25 @@ class CrmLead(models.Model):
|
||||
'lead_id',
|
||||
'partner_id',
|
||||
string='Partner not interested')
|
||||
date_assign = fields.Date('Partner Assignment Date', help="Last date this case was forwarded/assigned to a partner")
|
||||
date_partner_assign = fields.Date(
|
||||
'Partner Assignment Date', compute='_compute_date_partner_assign',
|
||||
copy=True, readonly=False, store=True,
|
||||
help="Last date this case was forwarded/assigned to a partner")
|
||||
|
||||
def _merge_data(self, fields):
|
||||
fields += ['partner_latitude', 'partner_longitude', 'partner_assigned_id', 'date_assign']
|
||||
return super(CrmLead, self)._merge_data(fields)
|
||||
|
||||
@api.onchange("partner_assigned_id")
|
||||
def onchange_assign_id(self):
|
||||
def _compute_date_partner_assign(self):
|
||||
"""This function updates the "assignation date" automatically, when manually assign a partner in the geo assign tab
|
||||
"""
|
||||
partner_assigned = self.partner_assigned_id
|
||||
if not partner_assigned:
|
||||
self.date_assign = False
|
||||
else:
|
||||
self.date_assign = fields.Date.context_today(self)
|
||||
self.user_id = partner_assigned.user_id
|
||||
for lead in self:
|
||||
if not lead.partner_assigned_id:
|
||||
lead.date_partner_assign = False
|
||||
else:
|
||||
lead.date_assign = fields.Date.context_today(lead)
|
||||
# self.user_id = partner_assigned.user_id
|
||||
|
||||
def assign_salesman_of_assigned_partner(self):
|
||||
salesmans_leads = {}
|
||||
@@ -65,8 +69,7 @@ class CrmLead(models.Model):
|
||||
partner = self.env['res.partner'].browse(partner_id)
|
||||
if partner.user_id:
|
||||
lead.handle_salesmen_assignment(partner.user_id.ids, team_id=partner.team_id.id)
|
||||
values = {'date_assign': fields.Date.context_today(lead), 'partner_assigned_id': partner_id}
|
||||
lead.write(values)
|
||||
lead.write({'partner_assigned_id': partner_id})
|
||||
return res
|
||||
|
||||
def assign_geo_localize(self, latitude=False, longitude=False):
|
||||
|
||||
@@ -37,7 +37,9 @@ class ResPartnerActivation(models.Model):
|
||||
class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
partner_weight = fields.Integer('Level Weight', default=0, tracking=True,
|
||||
partner_weight = fields.Integer(
|
||||
'Level Weight', compute='_compute_partner_weight',
|
||||
copy=True, readonly=False, store=True, tracking=True,
|
||||
help="This should be a numerical value greater than 0 which will decide the contention for this partner to take this lead/opportunity.")
|
||||
grade_id = fields.Many2one('res.partner.grade', 'Partner Level', tracking=True)
|
||||
grade_sequence = fields.Integer(related='grade_id.sequence', readonly=True, store=True)
|
||||
@@ -60,7 +62,7 @@ class ResPartner(models.Model):
|
||||
for partner in self:
|
||||
partner.implemented_count = len(partner.implemented_partner_ids.filtered('website_published'))
|
||||
|
||||
@api.onchange('grade_id')
|
||||
def _onchange_grade_id(self):
|
||||
grade = self.grade_id
|
||||
self.partner_weight = grade.partner_weight if grade else 0
|
||||
@api.depends('grade_id.partner_weight')
|
||||
def _compute_partner_weight(self):
|
||||
for partner in self:
|
||||
partner.partner_weight = partner.grade_id.partner_weight if partner.grade_id else 0
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="before">
|
||||
<field name="partner_assigned_id" optional="show"/>
|
||||
<field name="date_assign" invisible="1"/>
|
||||
<field name="date_partner_assign" invisible="1"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
Reference in New Issue
Block a user