From 1414b3e56eb784cef935cdbf33c85a62ebcb1b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Maes?= Date: Tue, 3 May 2016 11:14:32 +0200 Subject: [PATCH] [REF] crm : some code improvements - remove backward compatibility method `case_mark_won` and `case_mark_lost` - change signature of `find_stage` method, by setting team_id optional, since we can get if from `self.team_id` - remove unused methods in crm_lead.py - remove unsed code in base_merge_partner.py - remove unused method in res_partner.py --- addons/crm/models/crm_lead.py | 29 +++---- addons/crm/models/res_partner.py | 37 -------- addons/crm/tests/test_crm_lead.py | 2 +- addons/crm/tests/test_lead2opportunity.py | 2 +- addons/crm/views/crm_lead_views.xml | 2 +- addons/crm/wizard/base_partner_merge.py | 101 ---------------------- 6 files changed, 14 insertions(+), 159 deletions(-) diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index c997249c453..031ab22ef29 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -65,7 +65,7 @@ class Lead(FormatAddress, models.Model): def _default_stage_id(self): team = self.env['crm.team'].sudo()._get_default_team_id(user_id=self.env.uid) - return self.stage_find(team.id, [('fold', '=', False)]) + return self.stage_find(team_id=team.id, domain=[('fold', '=', False)]) name = fields.Char('Opportunity', required=True, index=True) partner_id = fields.Many2one('res.partner', string='Customer', track_visibility='onchange', index=True, @@ -172,6 +172,7 @@ class Lead(FormatAddress, models.Model): # restore order of the search order_mapping = dict((item[0], stage_ids.index(item[0])) for item in result) # match stage_id with its index result.sort(key=lambda item: order_mapping.get(item[0])) + fold = {} for stage in stages: fold[stage.id] = stage.fold or False @@ -363,10 +364,6 @@ class Lead(FormatAddress, models.Model): """ Lost semantic: probability = 0, active = False """ return self.write({'probability': 0, 'active': False}) - # TODO JEM : check, nad remove this - # Backward compatibility - case_mark_lost = action_set_lost - @api.multi def action_set_active(self): return self.write({'active': True}) @@ -379,14 +376,10 @@ class Lead(FormatAddress, models.Model): def action_set_won(self): """ Won semantic: probability = 100 (active untouched) """ for lead in self: - stage_id = lead.stage_find(lead.team_id.id, [('probability', '=', 100.0), ('on_change', '=', True)]) + stage_id = lead.stage_find(domain=[('probability', '=', 100.0), ('on_change', '=', True)]) lead.write({'stage_id': stage_id, 'probability': 100}) return True - # TODO JEM : check, nad remove this - # Backward compatibility - case_mark_won = action_set_won - @api.multi def action_schedule_meeting(self): """ Open meeting's calendar view to schedule meeting on current opportunity. @@ -414,9 +407,9 @@ class Lead(FormatAddress, models.Model): # ---------------------------------------- # Business Methods # ---------------------------------------- - # TODO JEM : team_id should be optional + @api.multi - def stage_find(self, team_id, domain=None, order='sequence'): + def stage_find(self, team_id=False, domain=None, order='sequence'): """ Determine the stage of the current lead with its teams, the given domain and the given team_id :param team_id :param domain : base search domain for stage @@ -435,7 +428,8 @@ class Lead(FormatAddress, models.Model): else: search_domain = [('team_id', '=', False)] # AND with the domain in parameter - search_domain += list(domain) + if domain: + search_domain += list(domain) # perform search, return the first found stage = self.env['crm.stage'].search(search_domain, order=order, limit=1) if stage: @@ -711,7 +705,7 @@ class Lead(FormatAddress, models.Model): 'date_conversion': fields.Datetime.now(), } if not self.stage_id: - stage_id = self.stage_find(team_id, []) + stage_id = self.stage_find(team_id=team_id) value['stage_id'] = stage_id if stage_id: value['probability'] = self.env['crm.stage'].browse(stage_id).probability @@ -1012,11 +1006,10 @@ class Lead(FormatAddress, models.Model): max_date = fields.Datetime.to_string(datetime.now() + timedelta(days=8)) meetings_domain = [ ('start', '>=', min_date), - ('start', '<=', max_date) + ('start', '<=', max_date), + ('partner_ids', 'in', [self.env.user.partner_id.id]) ] - #TODO JEM : remove this stupid context key - # We need to add 'mymeetings' in the context for the search to be correct. - meetings = self.env['calendar.event'].with_context(mymeetings=1).search(meetings_domain) + meetings = self.env['calendar.event'].search(meetings_domain) for meeting in meetings: if meeting['start']: start = datetime.strptime(meeting['start'], tools.DEFAULT_SERVER_DATETIME_FORMAT).date() diff --git a/addons/crm/models/res_partner.py b/addons/crm/models/res_partner.py index 1ed44567065..df28ad5013b 100644 --- a/addons/crm/models/res_partner.py +++ b/addons/crm/models/res_partner.py @@ -37,43 +37,6 @@ class Partner(models.Model): for partner in self: partner.activities_count = mapped_data.get(partner.id, 0) - # TODO JEM : it is still used ? - @api.v7 - def redirect_partner_form(self, cr, uid, partner_id, context=None): - search_view = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'view_res_partner_filter') - value = { - 'domain': "[]", - 'view_type': 'form', - 'view_mode': 'form,tree', - 'res_model': 'res.partner', - 'res_id': int(partner_id), - 'view_id': False, - 'context': context, - 'type': 'ir.actions.act_window', - 'search_view_id': search_view and search_view[1] or False - } - return value - - # TODO JEM : it is still used ? - @api.v7 - def make_opportunity(self, cr, uid, ids, opportunity_summary, planned_revenue=0.0, probability=0.0, partner_id=None, context=None): - lead_obj = self.pool.get('crm.lead') - tag_ids = self.pool['crm.lead.tag'].search(cr, uid, []) - opportunity_ids = {} - for partner in self.browse(cr, uid, ids, context=context): - if not partner_id: - partner_id = partner.id - opportunity_id = lead_obj.create(cr, uid, { - 'name' : opportunity_summary, - 'planned_revenue' : planned_revenue, - 'probability' : probability, - 'partner_id' : partner_id, - 'tag_ids' : tag_ids and tag_ids[0] or [], - 'type': 'opportunity' - }, context=context) - opportunity_ids[partner_id] = opportunity_id - return opportunity_ids - @api.multi def schedule_meeting(self): partner_ids = self.ids diff --git a/addons/crm/tests/test_crm_lead.py b/addons/crm/tests/test_crm_lead.py index 7ff20c4ab5e..156c7ff48db 100644 --- a/addons/crm/tests/test_crm_lead.py +++ b/addons/crm/tests/test_crm_lead.py @@ -40,7 +40,7 @@ class TestCRMLead(TestCrmCases): # Now I change the stage of opportunity to won. lead.action_set_won() # I check stage of opp should won, after change stage. - stage_id = lead._stage_find(domain=[('probability', '=', 100.0)]) + stage_id = lead.stage_find(domain=[('probability', '=', 100.0)]) self.assertEqual(stage_id, lead.stage_id, "Stage of opportunity is incorrect!") def test_crm_lead_message(self): diff --git a/addons/crm/tests/test_lead2opportunity.py b/addons/crm/tests/test_lead2opportunity.py index d69e58e7fb9..861444b3f7c 100644 --- a/addons/crm/tests/test_lead2opportunity.py +++ b/addons/crm/tests/test_lead2opportunity.py @@ -57,7 +57,7 @@ class TestLead2opportunity2win(TestCrmCases): self.assertEqual(crm_case_2.stage_id.id, default_stage_id, "Stage of probability is incorrect!") # I loose the second opportunity - crm_case_2.case_mark_lost() + crm_case_2.action_set_lost() # I check details of the opportunity after the loose self.assertEqual(crm_case_2.probability, 0.0, "Revenue probability should be 0.0!") diff --git a/addons/crm/views/crm_lead_views.xml b/addons/crm/views/crm_lead_views.xml index b2d545b68ee..a4fe5b49298 100644 --- a/addons/crm/views/crm_lead_views.xml +++ b/addons/crm/views/crm_lead_views.xml @@ -673,7 +673,7 @@ code if context.get('active_model') == 'crm.lead' and context.get('active_ids'): - self.case_mark_lost(cr, uid, context['active_ids'], context=context) + self.action_set_lost(cr, uid, context['active_ids'], context=context) diff --git a/addons/crm/wizard/base_partner_merge.py b/addons/crm/wizard/base_partner_merge.py index 17220184c7d..680ea6fff26 100644 --- a/addons/crm/wizard/base_partner_merge.py +++ b/addons/crm/wizard/base_partner_merge.py @@ -336,60 +336,6 @@ class MergePartnerAutomatic(models.TransientModel): # delete source partner, since they are merged src_partners.unlink() - #TODO JEM : remove me, since it is not used anymore - def clean_emails(self, cr, uid, context=None): - """ - Clean the email address of the partner, if there is an email field with - a mimum of two addresses, the system will create a new partner, with the - information of the previous one and will copy the new cleaned email into - the email field. - """ - context = dict(context or {}) - - proxy_model = self.pool['ir.model.fields'] - field_ids = proxy_model.search(cr, uid, [('model', '=', 'res.partner'), - ('ttype', 'like', '%2many')], - context=context) - fields = proxy_model.read(cr, uid, field_ids, context=context) - reset_fields = dict((field['name'], []) for field in fields) - - proxy_partner = self.pool['res.partner'] - context['active_test'] = False - ids = proxy_partner.search(cr, uid, [], context=context) - - fields = ['name', 'var' 'partner_id' 'is_company', 'email'] - partners = proxy_partner.read(cr, uid, ids, fields, context=context) - - partners.sort(key=operator.itemgetter('id')) - partners_len = len(partners) - - _logger.info('partner_len: %r', partners_len) - - for idx, partner in enumerate(partners): - if not partner['email']: - continue - - percent = (idx / float(partners_len)) * 100.0 - _logger.info('idx: %r', idx) - _logger.info('percent: %r', percent) - try: - emails = sanitize_email(partner['email']) - head, tail = emails[:1], emails[1:] - email = head[0] if head else False - - proxy_partner.write(cr, uid, [partner['id']], - {'email': email}, context=context) - - for email in tail: - values = dict(reset_fields, email=email) - proxy_partner.copy(cr, uid, partner['id'], values, - context=context) - - except Exception: - _logger.exception("There is a problem with this partner: %r", partner) - raise - return True - # ---------------------------------------- # Helpers # ---------------------------------------- @@ -716,50 +662,3 @@ class MergePartnerAutomatic(models.TransientModel): self.current_line_id.unlink() return self._next_screen() - - - # TODO JEM : remove me since it is not used ? - def auto_set_parent_id(self, cr, uid, ids, context=None): - - # select partner who have one least invoice - partner_treated = ['@gmail.com'] - cr.execute(""" SELECT p.id, p.email - FROM res_partner as p - LEFT JOIN account_invoice as a - ON p.id = a.partner_id AND a.state in ('open','paid') - WHERE p.grade_id is NOT NULL - GROUP BY p.id - ORDER BY COUNT(a.id) DESC - """) - re_email = re.compile(r".*@") - for id, email in cr.fetchall(): - # check email domain - email = re_email.sub("@", email or "") - if not email or email in partner_treated: - continue - partner_treated.append(email) - - # don't update the partners if they are more of one who have invoice - cr.execute(""" SELECT * - FROM res_partner as p - WHERE p.id != %s AND p.email LIKE %s AND - EXISTS (SELECT * FROM account_invoice as a WHERE p.id = a.partner_id AND a.state in ('open','paid')) - """, (id, '%' + email)) - - if len(cr.fetchall()) > 1: - _logger.info("%s MORE OF ONE COMPANY", email) - continue - - # to display changed values - cr.execute(""" SELECT id,email - FROM res_partner - WHERE parent_id != %s AND id != %s AND email LIKE %s - """, (id, id, '%' + email)) - _logger.info("%r", cr.fetchall()) - - # upgrade - cr.execute(""" UPDATE res_partner - SET parent_id = %s - WHERE id != %s AND email LIKE %s - """, (id, id, '%' + email)) - return False