diff options
| author | Thibault Delavallée <tde@openerp.com> | 2014-01-06 14:57:00 +0100 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2014-01-06 14:57:00 +0100 |
| commit | 49c0b7a82003a889edc19cb189d0d6d0ebda2c5f (patch) | |
| tree | d24c9d3fe3baad3ba06f11d4bf334e2504fb6092 /addons/email_template | |
| parent | c4c268c902a134efdf0f097053c9b28d6b14417c (diff) | |
| parent | ced63415b7319e12fb9d31a3e370850278f697c1 (diff) | |
[MERGE] Sync with trunk
bzr revid: tde@openerp.com-20140106135700-rt0g44w5xmpbtxiu
Diffstat (limited to 'addons/email_template')
| -rw-r--r-- | addons/email_template/email_template.py | 22 | ||||
| -rw-r--r-- | addons/email_template/i18n/he.po | 488 | ||||
| -rw-r--r-- | addons/email_template/tests/test_ir_actions.py | 2 | ||||
| -rw-r--r-- | addons/email_template/tests/test_mail.py | 42 | ||||
| -rw-r--r-- | addons/email_template/wizard/mail_compose_message.py | 8 |
5 files changed, 551 insertions, 11 deletions
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 6e19b1eb8aa..904481096d3 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -411,7 +411,17 @@ class email_template(osv.osv): # create a mail_mail based on values, without attachments values = self.generate_email(cr, uid, template_id, res_id, context=context) assert values.get('email_from'), 'email_from is missing or empty after template rendering, send_mail() cannot proceed' - del values['partner_to'] # TODO Properly use them. + + # process partner_to field that is a comma separated list of partner_ids -> recipient_ids + # NOTE: only usable if force_send is True, because otherwise the value is + # not stored on the mail_mail, and therefore lost -> fixed in v8 + values['recipient_ids'] = [] + partner_to = values.pop('partner_to', '') + if partner_to: + # placeholders could generate '', 3, 2 due to some empty field values + tpl_partner_ids = [pid for pid in partner_to.split(',') if pid] + values['recipient_ids'] += [(4, pid) for pid in self.pool['res.partner'].exists(cr, SUPERUSER_ID, tpl_partner_ids, context=context)] + attachment_ids = values.pop('attachment_ids', []) attachments = values.pop('attachments', []) msg_id = mail_mail.create(cr, uid, values, context=context) @@ -420,11 +430,11 @@ class email_template(osv.osv): # manage attachments for attachment in attachments: attachment_data = { - 'name': attachment[0], - 'datas_fname': attachment[0], - 'datas': attachment[1], - 'res_model': 'mail.message', - 'res_id': mail.mail_message_id.id, + 'name': attachment[0], + 'datas_fname': attachment[0], + 'datas': attachment[1], + 'res_model': 'mail.message', + 'res_id': mail.mail_message_id.id, } context.pop('default_type', None) attachment_ids.append(ir_attachment.create(cr, uid, attachment_data, context=context)) diff --git a/addons/email_template/i18n/he.po b/addons/email_template/i18n/he.po new file mode 100644 index 00000000000..2ce04ed39e5 --- /dev/null +++ b/addons/email_template/i18n/he.po @@ -0,0 +1,488 @@ +# Hebrew translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-12-30 18:51+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Hebrew <he@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-12-31 04:47+0000\n" +"X-Generator: Launchpad (build 16877)\n" + +#. module: email_template +#: field:email.template,email_from:0 +#: field:email_template.preview,email_from:0 +msgid "From" +msgstr "" + +#. module: email_template +#: field:mail.compose.message,template_id:0 +msgid "Template" +msgstr "" + +#. module: email_template +#: help:email.template,ref_ir_value:0 +#: help:email_template.preview,ref_ir_value:0 +msgid "Sidebar button to open the sidebar action" +msgstr "" + +#. module: email_template +#: field:res.partner,opt_out:0 +msgid "Opt-Out" +msgstr "" + +#. module: email_template +#: field:email.template,email_to:0 +#: field:email_template.preview,email_to:0 +msgid "To (Emails)" +msgstr "" + +#. module: email_template +#: field:email.template,mail_server_id:0 +#: field:email_template.preview,mail_server_id:0 +msgid "Outgoing Mail Server" +msgstr "" + +#. module: email_template +#: help:email.template,ref_ir_act_window:0 +#: help:email_template.preview,ref_ir_act_window:0 +msgid "" +"Sidebar action to make this template available on records of the related " +"document model" +msgstr "" + +#. module: email_template +#: field:email.template,model_object_field:0 +#: field:email_template.preview,model_object_field:0 +msgid "Field" +msgstr "" + +#. module: email_template +#: help:email.template,email_from:0 +#: help:email_template.preview,email_from:0 +msgid "Sender address (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Remove context action" +msgstr "" + +#. module: email_template +#: help:email.template,mail_server_id:0 +#: help:email_template.preview,mail_server_id:0 +msgid "" +"Optional preferred server for outgoing mails. If not set, the highest " +"priority one will be used." +msgstr "" + +#. module: email_template +#: field:email.template,report_name:0 +#: field:email_template.preview,report_name:0 +msgid "Report Filename" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Preview" +msgstr "" + +#. module: email_template +#: field:email.template,reply_to:0 +#: field:email_template.preview,reply_to:0 +msgid "Reply-To" +msgstr "" + +#. module: email_template +#: view:mail.compose.message:0 +msgid "Use template" +msgstr "" + +#. module: email_template +#: field:email.template,body_html:0 +#: field:email_template.preview,body_html:0 +msgid "Body" +msgstr "" + +#. module: email_template +#: code:addons/email_template/email_template.py:247 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: email_template +#: help:email.template,user_signature:0 +#: help:email_template.preview,user_signature:0 +msgid "" +"If checked, the user's signature will be appended to the text version of the " +"message" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "SMTP Server" +msgstr "" + +#. module: email_template +#: view:mail.compose.message:0 +msgid "Save as new template" +msgstr "" + +#. module: email_template +#: help:email.template,sub_object:0 +#: help:email_template.preview,sub_object:0 +msgid "" +"When a relationship field is selected as first field, this field shows the " +"document model the relationship goes to." +msgstr "" + +#. module: email_template +#: model:ir.model,name:email_template.model_email_template +msgid "Email Templates" +msgstr "" + +#. module: email_template +#: help:email.template,report_name:0 +#: help:email_template.preview,report_name:0 +msgid "" +"Name to use for the generated report file (may contain placeholders)\n" +"The extension can be omitted and will then come from the report type." +msgstr "" + +#. module: email_template +#: field:email.template,ref_ir_act_window:0 +#: field:email_template.preview,ref_ir_act_window:0 +msgid "Sidebar action" +msgstr "" + +#. module: email_template +#: help:email.template,lang:0 +#: help:email_template.preview,lang:0 +msgid "" +"Optional translation language (ISO code) to select when sending out an " +"email. If not set, the english version will be used. This should usually be " +"a placeholder expression that provides the appropriate language code, e.g. " +"${object.partner_id.lang.code}." +msgstr "" + +#. module: email_template +#: field:email_template.preview,res_id:0 +msgid "Sample Document" +msgstr "" + +#. module: email_template +#: help:email.template,model_object_field:0 +#: help:email_template.preview,model_object_field:0 +msgid "" +"Select target field from the related document model.\n" +"If it is a relationship field you will be able to select a target field at " +"the destination of the relationship." +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Dynamic Value Builder" +msgstr "" + +#. module: email_template +#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview +msgid "Template Preview" +msgstr "" + +#. module: email_template +#: view:mail.compose.message:0 +msgid "Save as a new template" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "" +"Display an option on related documents to open a composition wizard with " +"this template" +msgstr "" + +#. module: email_template +#: help:email.template,email_cc:0 +#: help:email_template.preview,email_cc:0 +msgid "Carbon copy recipients (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: help:email.template,email_to:0 +#: help:email_template.preview,email_to:0 +msgid "Comma-separated recipient addresses (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Advanced" +msgstr "" + +#. module: email_template +#: view:email_template.preview:0 +msgid "Preview of" +msgstr "" + +#. module: email_template +#: view:email_template.preview:0 +msgid "Using sample document" +msgstr "" + +#. module: email_template +#: view:email.template:0 +#: model:ir.actions.act_window,name:email_template.action_email_template_tree_all +#: model:ir.ui.menu,name:email_template.menu_email_templates +msgid "Templates" +msgstr "" + +#. module: email_template +#: field:email.template,name:0 +#: field:email_template.preview,name:0 +msgid "Name" +msgstr "" + +#. module: email_template +#: field:email.template,lang:0 +#: field:email_template.preview,lang:0 +msgid "Language" +msgstr "" + +#. module: email_template +#: model:ir.model,name:email_template.model_email_template_preview +msgid "Email Template Preview" +msgstr "" + +#. module: email_template +#: view:email_template.preview:0 +msgid "Email Preview" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "" +"Remove the contextual action to use this template on related documents" +msgstr "" + +#. module: email_template +#: field:email.template,copyvalue:0 +#: field:email_template.preview,copyvalue:0 +msgid "Placeholder Expression" +msgstr "" + +#. module: email_template +#: field:email.template,sub_object:0 +#: field:email_template.preview,sub_object:0 +msgid "Sub-model" +msgstr "" + +#. module: email_template +#: help:email.template,subject:0 +#: help:email_template.preview,subject:0 +msgid "Subject (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: help:email.template,reply_to:0 +#: help:email_template.preview,reply_to:0 +msgid "Preferred response address (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: field:email.template,ref_ir_value:0 +#: field:email_template.preview,ref_ir_value:0 +msgid "Sidebar Button" +msgstr "" + +#. module: email_template +#: field:email.template,report_template:0 +#: field:email_template.preview,report_template:0 +msgid "Optional report to print and attach" +msgstr "" + +#. module: email_template +#: help:email.template,null_value:0 +#: help:email_template.preview,null_value:0 +msgid "Optional value to use if the target field is empty" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Model" +msgstr "" + +#. module: email_template +#: model:ir.model,name:email_template.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Add context action" +msgstr "" + +#. module: email_template +#: help:email.template,model_id:0 +#: help:email_template.preview,model_id:0 +msgid "The kind of document with with this template can be used" +msgstr "" + +#. module: email_template +#: field:email.template,email_recipients:0 +#: field:email_template.preview,email_recipients:0 +msgid "To (Partners)" +msgstr "" + +#. module: email_template +#: field:email.template,auto_delete:0 +#: field:email_template.preview,auto_delete:0 +msgid "Auto Delete" +msgstr "" + +#. module: email_template +#: help:email.template,copyvalue:0 +#: help:email_template.preview,copyvalue:0 +msgid "" +"Final placeholder expression, to be copy-pasted in the desired template " +"field." +msgstr "" + +#. module: email_template +#: field:email.template,model:0 +#: field:email_template.preview,model:0 +msgid "Related Document Model" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Addressing" +msgstr "" + +#. module: email_template +#: help:email.template,email_recipients:0 +#: help:email_template.preview,email_recipients:0 +msgid "" +"Comma-separated ids of recipient partners (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: field:email.template,attachment_ids:0 +#: field:email_template.preview,attachment_ids:0 +msgid "Attachments" +msgstr "" + +#. module: email_template +#: code:addons/email_template/email_template.py:234 +#, python-format +msgid "Deletion of the action record failed." +msgstr "" + +#. module: email_template +#: field:email.template,email_cc:0 +#: field:email_template.preview,email_cc:0 +msgid "Cc" +msgstr "" + +#. module: email_template +#: field:email.template,model_id:0 +#: field:email_template.preview,model_id:0 +msgid "Applies to" +msgstr "" + +#. module: email_template +#: field:email.template,sub_model_object_field:0 +#: field:email_template.preview,sub_model_object_field:0 +msgid "Sub-field" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Email Details" +msgstr "" + +#. module: email_template +#: code:addons/email_template/email_template.py:199 +#, python-format +msgid "Send Mail (%s)" +msgstr "" + +#. module: email_template +#: help:res.partner,opt_out:0 +msgid "" +"If checked, this partner will not receive any automated email notifications, " +"such as the availability of invoices." +msgstr "" + +#. module: email_template +#: help:email.template,auto_delete:0 +#: help:email_template.preview,auto_delete:0 +msgid "Permanently delete this email after sending it, to save space" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Group by..." +msgstr "" + +#. module: email_template +#: help:email.template,sub_model_object_field:0 +#: help:email_template.preview,sub_model_object_field:0 +msgid "" +"When a relationship field is selected as first field, this field lets you " +"select the target field within the destination document model (sub-model)." +msgstr "" + +#. module: email_template +#: code:addons/email_template/email_template.py:234 +#, python-format +msgid "Warning" +msgstr "" + +#. module: email_template +#: field:email.template,user_signature:0 +#: field:email_template.preview,user_signature:0 +msgid "Add Signature" +msgstr "" + +#. module: email_template +#: model:ir.model,name:email_template.model_res_partner +msgid "Partner" +msgstr "" + +#. module: email_template +#: field:email.template,null_value:0 +#: field:email_template.preview,null_value:0 +msgid "Default Value" +msgstr "" + +#. module: email_template +#: help:email.template,attachment_ids:0 +#: help:email_template.preview,attachment_ids:0 +msgid "" +"You may attach files to this template, to be added to all emails created " +"from this template" +msgstr "" + +#. module: email_template +#: help:email.template,body_html:0 +#: help:email_template.preview,body_html:0 +msgid "Rich-text/HTML version of the message (placeholders may be used here)" +msgstr "" + +#. module: email_template +#: view:email.template:0 +msgid "Contents" +msgstr "" + +#. module: email_template +#: field:email.template,subject:0 +#: field:email_template.preview,subject:0 +msgid "Subject" +msgstr "" diff --git a/addons/email_template/tests/test_ir_actions.py b/addons/email_template/tests/test_ir_actions.py index d323ee36c1f..9b408a45316 100644 --- a/addons/email_template/tests/test_ir_actions.py +++ b/addons/email_template/tests/test_ir_actions.py @@ -33,7 +33,7 @@ class TestServerActionsEmail(TestServerActionsBase): 'name': 'TestTemplate', 'email_from': 'myself@example.com', 'email_to': 'brigitte@example.com', - 'partner_to': '[%s]' % self.test_partner_id, + 'partner_to': '%s' % self.test_partner_id, 'model_id': self.res_partner_model_id, 'subject': 'About ${object.name}', 'body_html': '<p>Dear ${object.name}, your parent is ${object.parent_id and object.parent_id.name or "False"}</p>', diff --git a/addons/email_template/tests/test_mail.py b/addons/email_template/tests/test_mail.py index ccc8a49b875..a43bbe79713 100644 --- a/addons/email_template/tests/test_mail.py +++ b/addons/email_template/tests/test_mail.py @@ -21,6 +21,7 @@ import base64 from openerp.addons.mail.tests.common import TestMail +from openerp.tools import mute_logger class test_message_compose(TestMail): @@ -200,3 +201,44 @@ class test_message_compose(TestMail): # Generate messsage with default email and partner on template mail_value = mail_compose.generate_email_for_composer(cr, uid, email_template_id, uid) self.assertEqual(set(mail_value['partner_ids']), set(send_to), 'mail.message partner_ids list created by template is incorrect') + + @mute_logger('openerp.osv.orm', 'openerp.osv.orm') + def test_10_email_templating(self): + """ Tests designed for the mail.compose.message wizard updated by email_template. """ + cr, uid, context = self.cr, self.uid, {} + + # create the email.template on mail.group model + group_model_id = self.registry('ir.model').search(cr, uid, [('model', '=', 'mail.group')])[0] + email_template = self.registry('email.template') + email_template_id = email_template.create(cr, uid, { + 'model_id': group_model_id, + 'name': 'Pigs Template', + 'email_from': 'Raoul Grosbedon <raoul@example.com>', + 'subject': '${object.name}', + 'body_html': '${object.description}', + 'user_signature': True, + 'email_to': 'b@b.b c@c.c', + 'email_cc': 'd@d.d', + 'partner_to': '${user.partner_id.id},%s,%s,-1' % (self.user_raoul.partner_id.id, self.user_bert.partner_id.id) + }) + + # not force send: email_recipients is not taken into account + msg_id = email_template.send_mail(cr, uid, email_template_id, self.group_pigs_id, context=context) + mail = self.mail_mail.browse(cr, uid, msg_id, context=context) + self.assertEqual(mail.subject, 'Pigs', 'email_template: send_mail: wrong subject') + self.assertEqual(mail.email_to, 'b@b.b c@c.c', 'email_template: send_mail: wrong email_to') + self.assertEqual(mail.email_cc, 'd@d.d', 'email_template: send_mail: wrong email_cc') + self.assertEqual( + set([partner.id for partner in mail.recipient_ids]), + set((self.partner_admin_id, self.user_raoul.partner_id.id, self.user_bert.partner_id.id)), + 'email_template: send_mail: wrong management of partner_to') + + # force send: take email_recipients into account + email_template.send_mail(cr, uid, email_template_id, self.group_pigs_id, force_send=True, context=context) + sent_emails = self._build_email_kwargs_list + email_to_lst = [ + ['b@b.b', 'c@c.c'], ['"Followers of Pigs" <admin@example.com>'], + ['"Followers of Pigs" <raoul@raoul.fr>'], ['"Followers of Pigs" <bert@bert.fr>']] + self.assertEqual(len(sent_emails), 4, 'email_template: send_mail: 3 valid email recipients + email_to -> should send 4 emails') + for email in sent_emails: + self.assertIn(email['email_to'], email_to_lst, 'email_template: send_mail: wrong email_recipients') diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index db6485d19ae..2ef1d5d80ff 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -19,7 +19,7 @@ # ############################################################################## -from openerp import tools +from openerp import tools, SUPERUSER_ID from openerp.osv import osv, fields @@ -157,9 +157,9 @@ class mail_compose_message(osv.TransientModel): partner_ids.append(partner_id) partner_to = rendered_values.pop('partner_to', '') if partner_to: - for partner_id in partner_to.split(','): - if partner_id: # placeholders could generate '', 3, 2 due to some empty field values - partner_ids.append(int(partner_id)) + # placeholders could generate '', 3, 2 due to some empty field values + tpl_partner_ids = [pid for pid in partner_to.split(',') if pid] + partner_ids += self.pool['res.partner'].exists(cr, SUPERUSER_ID, tpl_partner_ids, context=context) return partner_ids def generate_email_for_composer_batch(self, cr, uid, template_id, res_ids, context=None): |
