diff --git a/addons/crm_partner_assign/data/lead_mail_template_data.xml b/addons/crm_partner_assign/data/lead_mail_template_data.xml index dac93342f63..a964fc36ddb 100644 --- a/addons/crm_partner_assign/data/lead_mail_template_data.xml +++ b/addons/crm_partner_assign/data/lead_mail_template_data.xml @@ -1,40 +1,28 @@ - + Lead Mass Mail - ${object.partner_id.email} + ${ctx['partner_id'].email} ${user.email or ''} - Fwd: Lead: ${object.partner_id.name} + Fwd: Lead: ${ctx['partner_id'].name}
-% if object.forward_type == 'single':
Some leads have been assigned to you. Here are the various leads we propose:


-
      -% for lead in object.assignation_lines: -
    1. ${lead.subject}, ${lead.lead_id.contact_name}, ${lead.lead_id.country_id.name}, ${lead.lead_id.email_from}, ${lead.lead_id.phone}

    2. +
        +% for lead in ctx['partner_leads']: +
      1. ${lead.lead_id.name or 'Subject Undefined'}, ${lead.lead_id.contact_name or 'Contact Name Undefined'}, ${lead.lead_id.country_id and lead.lead_id.country_id.name or 'Country Undefined' }, ${lead.lead_id.email_from or 'Email Undefined'}, ${lead.lead_id.phone or 'Phone Number Undefined'}

      2. % endfor -
    +
-% endif - - -% if object.forward_type == 'assigned': -
One leads have been assigned to you. Here given lead we propose:


- -
      -
    1. ${object.lead_single_id.name}, ${object.lead_single_id.contact_name}, ${object.lead_single_id.country_id.name}, ${object.lead_single_id.email_from}, ${object.lead_single_id.phone}
    2. -
-
-% endif
Connect you to your Partner Portal to see leads details.
diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py index b4eb0d81f6a..f4c58279b24 100644 --- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py +++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py @@ -46,62 +46,68 @@ class crm_lead_forward_to_partner(osv.TransientModel): if template_id: res['body'] = email_template_obj.get_email_template(cr, uid, template_id).body_html if active_ids: - for lead in lead_obj.browse(cr, uid, active_ids, context=context): + lead_ids = lead_obj.browse(cr, uid, active_ids, context=context) + if default_composition_mode == 'mass_mail': + partner_assigned_ids = lead_obj.search_geo_partner(cr, uid, active_ids, context=context) + else: + partner_assigned_ids = dict((lead.id, lead.partner_assigned_id and lead.partner_assigned_id.id or False) for lead in lead_ids) + res['partner_id'] = lead_ids[0].partner_assigned_id.id + for lead in lead_ids: lead_location = [] partner_location = [] if lead.country_id: lead_location.append(lead.country_id.name) if lead.city: lead_location.append(lead.city) - if (not lead.partner_assigned_id) and default_composition_mode == 'mass_mail': - partner_id = lead_obj.search_geo_partner(cr, uid, [lead.id], context) - partner = partner_obj.browse(cr, uid, partner_id, context=context) - if partner.country_id: - partner_location.append(partner.country_id.name) - if partner.city: - partner_location.append(partner.city) + partner_id = partner_assigned_ids.get(lead.id) or False + if partner_id: + partner = partner_obj.browse(cr, uid, partner_id, context=context) + if partner.country_id: + partner_location.append(partner.country_id.name) + if partner.city: + partner_location.append(partner.city) res['assignation_lines'].append({'lead_id': lead.id, 'lead_location': ", ".join(lead_location), - 'partner_assigned_id': partner_id and partner_id[lead.id] or False, + 'partner_assigned_id': partner_id, 'partner_location': ", ".join(partner_location), 'lead_link': "%s/?db=%s#id=%s&model=crm.lead" % (base_url, cr.dbname, lead.id) }) - elif default_composition_mode == 'forward': - if lead.partner_assigned_id.country_id: - partner_location.append(lead.partner_assigned_id.country_id.name) - if lead.partner_assigned_id.city: - partner_location.append(lead.partner_assigned_id.city) - res['assignation_lines'].append({'lead_id': lead.id, - 'lead_location': ", ".join(lead_location), - 'partner_assigned_id': lead.partner_assigned_id.id, - 'partner_location': ", ".join(partner_location), - 'lead_link': "%s/?db=%s#id=%s&model=crm.lead" % (base_url, cr.dbname, lead.id) - }) - res['partner_id'] = lead.partner_assigned_id.id return res def action_forward(self, cr, uid, ids, context=None): lead_obj = self.pool.get('crm.lead') - record = self.browse(cr, uid, ids, context=context) + record = self.browse(cr, uid, ids[0], context=context) email_template_obj = self.pool.get('email.template') - model, template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail') - if record[0].forward_type == "single": - email_template_obj.send_mail(cr, uid, template_id, ids[0]) - active_ids = context.get('active_ids') - if active_ids: - lead_obj.write(cr, uid, active_ids, {'partner_assigned_id': record[0].partner_id.id, 'user_id': record[0].partner_id.user_id.id}) - else: - for lead in record[0].assignation_lines: + try: + template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1] + except ValueError: + raise osv.except_osv(_('Email Template Error'), + _('The Forward Email Template is not in the database')) + local_context = context.copy() + if not (record.forward_type == 'single'): + for lead in record.assignation_lines: if not lead.partner_assigned_id: raise osv.except_osv(_('Assignation Error'), _('Some leads have not been assigned to any partner so assign partners manualy')) - for lead in record[0].assignation_lines: - self.write(cr, uid, ids, {'partner_id': lead.partner_assigned_id.id, - 'lead_single_link': lead.lead_link, - 'lead_single_id': lead.lead_id.id - }) - email_template_obj.send_mail(cr, uid, template_id, ids[0]) - lead_obj.write(cr, uid, [lead.lead_id.id], {'partner_assigned_id': lead.partner_assigned_id.id, 'user_id': lead.partner_assigned_id.user_id.id}) + partners_leads = {} + for lead in record.assignation_lines: + lead_details = { + 'lead_link': lead.lead_link, + 'lead_id': lead.lead_id, + } + partner = record.forward_type == 'single' and record.partner_id or lead.partner_assigned_id + partner_leads = partners_leads.get(partner.id) + if partner_leads: + partner_leads['leads'].append(lead_details) + else: + partners_leads[partner.id] = {'partner': partner, 'leads': [lead_details]} + for partner_id, partner_leads in partners_leads.items(): + local_context['partner_id'] = partner_leads['partner'] + local_context['partner_leads'] = partner_leads['leads'] + email_template_obj.send_mail(cr, uid, template_id, ids[0], context=local_context) + lead_ids = [lead['lead_id'].id for lead in partner_leads['leads']] + lead_obj.write(cr, uid, lead_ids, {'partner_assigned_id': partner_id, 'user_id': partner_leads['partner'].user_id.id}) + self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner_id], context=context) return True def get_portal_url(self, cr, uid, ids, context=None): @@ -114,8 +120,6 @@ class crm_lead_forward_to_partner(osv.TransientModel): 'assignation_lines': fields.one2many('crm.lead.assignation', 'forward_id', 'Partner Assignation'), 'show_mail': fields.boolean('Show the email will be sent'), 'body': fields.html('Contents', help='Automatically sanitized HTML contents'), - 'lead_single_id': fields.many2one('crm.lead', 'Lead'), - 'lead_single_link': fields.char('Lead Single Links', size=128), } _defaults = {