[WIP] email_template: WIP about debugging the use of email_templates. A method to get and handle values coming from generate_emial has been added. TODO: use it where necessary, clean the remaining of the code, add some tests. Added some new tests.
bzr revid: tde@openerp.com-20120903181111-yy9y6omu4vyhdc11
This commit is contained in:
parent
88ce376c32
commit
a3db9b35bd
|
@ -71,23 +71,50 @@ class test_message_compose(common.TransactionCase):
|
|||
_subject1 = 'Pigs'
|
||||
_subject2 = 'Bird'
|
||||
_body_text1 = 'Pigs rules'
|
||||
_body_text_html1 = 'Pigs rules<pre>Admin</pre>'
|
||||
_body_text_html1 = 'Fans of Pigs, unite !\n<pre>Admin</pre>\n'
|
||||
_body_text2 = 'I am angry !'
|
||||
_body_text_html2 = 'I am angry !<pre>Admin</pre>'
|
||||
|
||||
# CASE1: create in mass_mail composition mode that should work with email_template installed
|
||||
# CASE1: create in comment
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{'subject': 'Forget me subject', 'body': 'Dummy body'},
|
||||
{'default_composition_mode': 'comment', 'default_model': 'mail.group',
|
||||
'default_res_id': self.group_pigs_id, 'default_use_template': True,
|
||||
'active_ids': [self.group_pigs_id, group_bird_id] })
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
|
||||
# Perform 'onchange_template_id' with 'use_template' set
|
||||
values = mail_compose.onchange_template_id(cr, uid, [], compose.use_template, email_template_id, compose.composition_mode, compose.model, compose.res_id)
|
||||
compose.write(values.get('value', {}), {'default_composition_mode': 'comment', 'default_model': 'mail.group'})
|
||||
compose.refresh()
|
||||
message_pids = [partner.id for partner in compose.partner_ids]
|
||||
partner_ids = self.res_partner.search(cr, uid, [('email', 'in', ['b@b.b', 'c@c.c', 'd@d.d'])])
|
||||
partners = self.res_partner.browse(cr, uid, partner_ids)
|
||||
# Test: subject, body, partner_ids
|
||||
self.assertEqual(compose.subject, _subject1, 'mail.compose.message subject incorrect')
|
||||
self.assertEqual(compose.body, _body_text_html1, 'mail.compose.message body incorrect')
|
||||
self.assertEqual(set(message_pids), set(partner_ids), 'mail.compose.message partner_ids incorrect')
|
||||
|
||||
# Perform 'onchange_use_template': use_template is not set anymore
|
||||
values = mail_compose.onchange_use_template(cr, uid, [], not compose.use_template, compose.template_id, compose.composition_mode, compose.model, compose.res_id)
|
||||
compose.write(values.get('value', {}), {'default_composition_mode': 'comment', 'default_model': 'mail.group'})
|
||||
compose.refresh()
|
||||
# Test: subject, body, partner_ids
|
||||
self.assertEqual(compose.subject, False, 'mail.compose.message subject incorrect')
|
||||
self.assertEqual(compose.body, '', 'mail.compose.message body incorrect')
|
||||
|
||||
# CASE12 create in mass_mail composition
|
||||
compose_id = mail_compose.create(cr, uid,
|
||||
{'subject': 'Forget me subject', 'body': 'Dummy body'},
|
||||
{'default_composition_mode': 'mass_mail', 'default_model': 'mail.group',
|
||||
'default_res_id': -1, 'default_use_template': True,
|
||||
'active_ids': [self.group_pigs_id, group_bird_id], 'default_template_id': email_template_id})
|
||||
'active_ids': [self.group_pigs_id, group_bird_id] })
|
||||
compose = mail_compose.browse(cr, uid, compose_id)
|
||||
# print compose.subject
|
||||
|
||||
|
||||
# Try the 'onchange_template_id'
|
||||
values = mail_compose.onchange_template_id(cr, uid, [], compose.use_template, compose.template_id, compose.composition_mode, compose.model, compose.res_id)
|
||||
# Test 'onchange_template_id' with 'use_template' set
|
||||
values = mail_compose.onchange_template_id(cr, uid, [], compose.use_template, email_template_id, compose.composition_mode, compose.model, compose.res_id)
|
||||
print values
|
||||
# self.assertEqual()
|
||||
# compose.write(values['value'])
|
||||
values = mail_compose.onchange_use_template(cr, uid, [], not compose.use_template, compose.template_id, compose.composition_mode, compose.model, compose.res_id)
|
||||
print values
|
||||
|
|
|
@ -28,15 +28,17 @@ from tools.translate import _
|
|||
|
||||
class mail_compose_message(osv.osv_memory):
|
||||
_inherit = 'mail.compose.message'
|
||||
_compose_fields = ['body', 'body_html', 'subject', 'partner_ids', 'attachment_ids']
|
||||
|
||||
def _get_templates(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
model = False
|
||||
email_template_obj= self.pool.get('email.template')
|
||||
message_id = context.get('default_parent_id', context.get('message_id', context.get('active_id')))
|
||||
|
||||
if context.get('default_composition_mode') == 'reply' and context.get('active_id'):
|
||||
message_data = self.pool.get('mail.message').browse(cr, uid, int(context.get('active_id')), context)
|
||||
if context.get('default_composition_mode') == 'reply' and message_id:
|
||||
message_data = self.pool.get('mail.message').browse(cr, uid, message_id, context=context)
|
||||
if message_data:
|
||||
model = message_data.model
|
||||
else:
|
||||
|
@ -62,32 +64,17 @@ class mail_compose_message(osv.osv_memory):
|
|||
|
||||
def onchange_template_id(self, cr, uid, ids, use_template, template_id, composition_mode, model, res_id, context=None):
|
||||
""" - use_template not set: return default_get
|
||||
- use_template set:
|
||||
- mass_mailing: we cannot render, so return the template values
|
||||
- else: return rendered values """
|
||||
fields = ['body', 'body_html', 'subject', 'partner_ids', 'email_to', 'email_cc']
|
||||
- use_template set in mass_mailing: we cannot render, so return the template values
|
||||
- use_template set: return rendered values """
|
||||
if use_template and template_id and composition_mode == 'mass_mail':
|
||||
values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
|
||||
values = self.pool.get('email.template').read(cr, uid, template_id, self._compose_fields, context)
|
||||
elif use_template and template_id:
|
||||
values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
|
||||
|
||||
values['attachment_ids'] = []
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
for attach_fname, attach_datas in values.get('attachments', []):
|
||||
data_attach = {
|
||||
'name': attach_fname,
|
||||
'datas': attach_datas,
|
||||
'datas_fname': attach_fname,
|
||||
'description': fname,
|
||||
'res_model': model,
|
||||
'res_id': res_id,
|
||||
}
|
||||
values['attachment_ids'].append(attachment_obj.create(cr, uid, data_attach), context=context)
|
||||
values = self.generate_email_for_composer(cr, uid, template_id, res_id, context=context)
|
||||
else:
|
||||
values = self.default_get(cr, uid, fields, context=context)
|
||||
values = self.default_get(cr, uid, self._compose_fields, context=context)
|
||||
|
||||
if values.get('body_html') and not values.get('body'):
|
||||
values['body'] = values.get('body_html')
|
||||
if values.get('body_html'):
|
||||
values['body'] = values.pop('body_html')
|
||||
values.update(use_template=use_template, template_id=template_id)
|
||||
|
||||
return {'value': values}
|
||||
|
@ -98,14 +85,17 @@ class mail_compose_message(osv.osv_memory):
|
|||
for record in self.browse(cr, uid, ids, context=context):
|
||||
onchange_res = self.onchange_use_template(cr, uid, ids, not record.use_template,
|
||||
record.template_id, record.composition_mode, record.model, record.res_id, context=context)['value']
|
||||
record.write(onchange_res)
|
||||
record.write(onchange_res.get('value', {}))
|
||||
return True
|
||||
|
||||
def onchange_use_template(self, cr, uid, ids, use_template, template_id, composition_mode, model, res_id, context=None):
|
||||
""" onchange_use_template (values: True or False). If use_template is
|
||||
False, we do like an onchange with template_id False for values """
|
||||
return self.onchange_template_id(cr, uid, ids, use_template,
|
||||
values = self.onchange_template_id(cr, uid, ids, use_template,
|
||||
template_id, composition_mode, model, res_id, context=context)
|
||||
if use_template:
|
||||
values['content_subtype'] = 'html'
|
||||
return values
|
||||
|
||||
def save_as_template(self, cr, uid, ids, context=None):
|
||||
""" hit save as template button: current form value will be a new
|
||||
|
@ -113,8 +103,7 @@ class mail_compose_message(osv.osv_memory):
|
|||
email_template = self.pool.get('email.template')
|
||||
ir_model_pool = self.pool.get('ir.model')
|
||||
for record in self.browse(cr, uid, ids, context=context):
|
||||
model = record.model
|
||||
model_ids = ir_model_pool.search(cr, uid, [('model', '=', model)])
|
||||
model_ids = ir_model_pool.search(cr, uid, [('model', '=', record.model)], context=context)
|
||||
model_id = model_ids and model_ids[0] or False
|
||||
model_name = ''
|
||||
if model_id:
|
||||
|
@ -135,14 +124,49 @@ class mail_compose_message(osv.osv_memory):
|
|||
# Wizard validation and send
|
||||
#------------------------------------------------------
|
||||
|
||||
def generate_email_for_composer(self, cr, uid, template_id, res_id, context=None):
|
||||
""" Call email_template.generate_email(), get fields relevant for
|
||||
mail.compose.message, transform email_cc and email_to into partner_ids """
|
||||
fields = ['body', 'body_html', 'subject', 'email_to', 'email_cc', 'attachment_ids']
|
||||
template_values = self.pool.get('email.template').generate_email(cr, uid, template_id, res_id, context=context)
|
||||
values = {field: template_values[field] for field in fields if template_values.get(field)}
|
||||
|
||||
# transform email_to, email_cc into partner_ids
|
||||
values['partner_ids'] = []
|
||||
mails = tools.email_split(values.pop('email_to', '') + ' ' + values.pop('email_cc', ''))
|
||||
for mail in mails:
|
||||
partner_search_ids = self.pool.get('res.partner').search(cr, uid, [('email', 'ilike', mail)], context=context)
|
||||
if partner_search_ids:
|
||||
values['partner_ids'].append((4, partner_search_ids[0]))
|
||||
else:
|
||||
partner_id = self.pool.get('res.partner').name_create(cr, uid, mail, context=context)[0]
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
values['partner_ids'].append((4, partner_id))
|
||||
|
||||
# transform attachments into attachment_ids
|
||||
values['attachment_ids'] = []
|
||||
for attach_fname, attach_datas in template_values.get('attachments', []):
|
||||
data_attach = {
|
||||
'name': attach_fname,
|
||||
'datas': attach_datas,
|
||||
'datas_fname': attach_fname,
|
||||
'res_model': model,
|
||||
'res_id': res_id,
|
||||
}
|
||||
values['attachment_ids'].append((0, 0, data_attach))
|
||||
|
||||
return values
|
||||
|
||||
def render_message(self, cr, uid, wizard, model, res_id, context=None):
|
||||
""" Generate an email from the template for given (model, res_id) pair.
|
||||
This method is meant to be inherited by email_template that will
|
||||
produce a more complete dictionary, with email_to, ...
|
||||
"""
|
||||
# render the template to get the email
|
||||
fields = ['body', 'body_html', 'subject', 'email_to', 'email_cc', 'partner_ids', 'attachment_ids']
|
||||
template_values = self.pool.get('email.template').generate_email(cr, uid, wizard.template_id, res_id, context=context)
|
||||
# TDE TODO: handle fields to update / not to update (mail_server_id, auto_delete, ...)
|
||||
template_values = {field: template_values[field] for field in fields if template_values.get(field)}
|
||||
|
||||
# transform email_to, email_cc into partner_ids
|
||||
partner_ids = []
|
||||
mails = tools.email_split(template_values.pop('email_to', '') + ' ' + template_values.pop('email_cc', ''))
|
||||
|
@ -154,10 +178,10 @@ class mail_compose_message(osv.osv_memory):
|
|||
partner_id = self.pool.get('res.partner').name_create(cr, uid, mail, context=context)[0]
|
||||
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
partner_ids.append((4, partner_id))
|
||||
|
||||
# get values to return
|
||||
email_dict = super(mail_compose_message, self).render_message(cr, uid, wizard, model, res_id, context)
|
||||
email_dict.update(template_values)
|
||||
email_dict.update(partner_ids=partner_ids, attachments=template_values.get('attachments'))
|
||||
email_dict.update(template_values, partner_ids=partner_ids)
|
||||
return email_dict
|
||||
|
||||
def render_template(self, cr, uid, template, model, res_id, context=None):
|
||||
|
|
Loading…
Reference in New Issue