[FIX]crm_partner_assign: mass lead forward, now one email per partner, even in several partner mode + code/execution time optimization/improvement
bzr revid: dle@openerp.com-20130613163813-315l55kle96sn5gh
This commit is contained in:
parent
03d32a781f
commit
4fc3cc862f
|
@ -1,40 +1,28 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<data noupdate="0">
|
||||
<record id="email_template_lead_forward_mail" model="email.template">
|
||||
<field name="name">Lead Mass Mail</field>
|
||||
<field name="model_id" model="ir.model" search="[('name', '=', 'crm.lead.forward.to.partner')]"></field>
|
||||
<field name="auto_delete" eval="True"/>
|
||||
<field name="email_to">${object.partner_id.email}</field>
|
||||
<field name="email_to">${ctx['partner_id'].email}</field>
|
||||
<field name="email_from">${user.email or ''}</field>
|
||||
<field name="subject">Fwd: Lead: ${object.partner_id.name}</field>
|
||||
<field name="subject">Fwd: Lead: ${ctx['partner_id'].name}</field>
|
||||
<field name="body_html"><![CDATA[
|
||||
|
||||
Hello ${object.partner_id.name},
|
||||
Hello ${ctx['partner_id'].name},
|
||||
</br>
|
||||
</br>
|
||||
% if object.forward_type == 'single':
|
||||
|
||||
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">Some leads have been assigned to you. Here are the various leads we propose: </blockquote></br></br>
|
||||
<b>
|
||||
<ol><ol>
|
||||
% for lead in object.assignation_lines:
|
||||
<li><a href="${lead.lead_link}">${lead.subject}</a>, ${lead.lead_id.contact_name}, ${lead.lead_id.country_id.name}, ${lead.lead_id.email_from}, ${lead.lead_id.phone} </li></br>
|
||||
<ol>
|
||||
% for lead in ctx['partner_leads']:
|
||||
<li><a href="${lead.lead_link}">${lead.lead_id.name or 'Subject Undefined'}</a>, ${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'} </li></br>
|
||||
% endfor
|
||||
</ol></ol>
|
||||
</ol>
|
||||
</b>
|
||||
% endif
|
||||
|
||||
|
||||
|
||||
% if object.forward_type == 'assigned':
|
||||
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">One leads have been assigned to you. Here given lead we propose:</blockquote> </br></br>
|
||||
<b>
|
||||
<ol><ol>
|
||||
<li><a href="${object.lead_single_link}">${object.lead_single_id.name}</a>, ${object.lead_single_id.contact_name}, ${object.lead_single_id.country_id.name}, ${object.lead_single_id.email_from}, ${object.lead_single_id.phone} </br></li>
|
||||
</ol></ol>
|
||||
</b>
|
||||
% endif
|
||||
</br>
|
||||
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">Connect you to your <b><a href="${object.get_portal_url()}">Partner Portal</a></b> to see leads details.</blockquote>
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
Loading…
Reference in New Issue