Browse Source
[ADD] mail_template_attachment_i18n: Mail Template Language Dependent Attachments (#1367)
pull/1350/merge
[ADD] mail_template_attachment_i18n: Mail Template Language Dependent Attachments (#1367)
pull/1350/merge
Dennis Sluijk
6 years ago
committed by
Pedro M. Baeza
19 changed files with 397 additions and 0 deletions
-
99mail_template_attachment_i18n/README.rst
-
1mail_template_attachment_i18n/__init__.py
-
18mail_template_attachment_i18n/__manifest__.py
-
2mail_template_attachment_i18n/models/__init__.py
-
28mail_template_attachment_i18n/models/ir_attachment_language.py
-
44mail_template_attachment_i18n/models/mail_template.py
-
6mail_template_attachment_i18n/readme/CONFIGURE.rst
-
1mail_template_attachment_i18n/readme/CONTRIBUTORS.rst
-
3mail_template_attachment_i18n/readme/DESCRIPTION.rst
-
10mail_template_attachment_i18n/readme/USAGE.rst
-
3mail_template_attachment_i18n/security/ir.model.access.csv
-
23mail_template_attachment_i18n/views/mail_template_view.xml
-
74test_mail_template_attachment_i18n/README.rst
-
0test_mail_template_attachment_i18n/__init__.py
-
14test_mail_template_attachment_i18n/__manifest__.py
-
1test_mail_template_attachment_i18n/readme/CONTRIBUTORS.rst
-
2test_mail_template_attachment_i18n/readme/DESCRIPTION.rst
-
1test_mail_template_attachment_i18n/tests/__init__.py
-
67test_mail_template_attachment_i18n/tests/test_attaching_by_language.py
@ -0,0 +1,99 @@ |
|||
=========================================== |
|||
Mail Template Language Specific Attachments |
|||
=========================================== |
|||
|
|||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
|
|||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|||
:target: https://odoo-community.org/page/development-status |
|||
:alt: Beta |
|||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github |
|||
:target: https://github.com/OCA/server-tools/tree/11.0/mail_template_attachment_i18n |
|||
:alt: OCA/server-tools |
|||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|||
:target: https://translation.odoo-community.org/projects/server-tools-11-0/server-tools-11-0-mail_template_attachment_i18n |
|||
:alt: Translate me on Weblate |
|||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|||
:target: https://runbot.odoo-community.org/runbot/149/11.0 |
|||
:alt: Try me on Runbot |
|||
|
|||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|||
|
|||
This module extends the functionality of mail templates. |
|||
It allows you to configure attachments based on the language of the partner. |
|||
For example you can use it to localize your company's terms of agreements. |
|||
|
|||
**Table of contents** |
|||
|
|||
.. contents:: |
|||
:local: |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
To configure a language dependent attachment: |
|||
|
|||
#. Activate the developer mode; |
|||
#. go to *Settings > Technical > Email > Templates*; |
|||
#. go to the form view of the template you want to change; |
|||
#. change the field *Language Dependent Attachments* to what you want. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
When a template is selected in the mail composer, the attachments will be automatically added based on the recipients language. |
|||
The language of the recipients can be configured on the Partner form view. |
|||
When partners with different languages are selected all attachments of the partners languages will be added. |
|||
|
|||
To use the functionality: |
|||
|
|||
#. Configure a template (e.g. the sale order mail template) |
|||
#. go to a sale order; |
|||
#. click *Send by Email*; |
|||
#. the attachments are added based on the customer's language. |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_. |
|||
In case of trouble, please check there if your issue has already been reported. |
|||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|||
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20mail_template_attachment_i18n%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|||
|
|||
Do not contact contributors directly about support or help with technical issues. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Authors |
|||
~~~~~~~ |
|||
|
|||
* Onestein |
|||
|
|||
Contributors |
|||
~~~~~~~~~~~~ |
|||
|
|||
* Dennis Sluijk <d.sluijk@onestein.nl> |
|||
|
|||
Maintainers |
|||
~~~~~~~~~~~ |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/11.0/mail_template_attachment_i18n>`_ project on GitHub. |
|||
|
|||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
@ -0,0 +1 @@ |
|||
from . import models |
@ -0,0 +1,18 @@ |
|||
{ |
|||
'name': 'Mail Template Language Specific Attachments', |
|||
'summary': 'Set language specific attachments on mail templates.', |
|||
'author': 'Onestein,Odoo Community Association (OCA)', |
|||
'website': 'https://github.com/oca/server-tools', |
|||
'category': 'Localization', |
|||
'version': '11.0.1.0.0', |
|||
'license': 'AGPL-3', |
|||
'depends': [ |
|||
'mail' |
|||
], |
|||
'data': [ |
|||
'views/mail_template_view.xml', |
|||
|
|||
'security/ir.model.access.csv' |
|||
], |
|||
'installable': True, |
|||
} |
@ -0,0 +1,2 @@ |
|||
from . import ir_attachment_language |
|||
from . import mail_template |
@ -0,0 +1,28 @@ |
|||
# Copyright 2018 Onestein |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from odoo import fields, models |
|||
|
|||
|
|||
class IrAttachmentLanguage(models.Model): |
|||
_name = 'ir.attachment.language' |
|||
|
|||
mail_template_id = fields.Many2one( |
|||
comodel_name='mail.template', |
|||
string='Template', |
|||
required=True, |
|||
ondelete='cascade', |
|||
) |
|||
|
|||
lang = fields.Selection( |
|||
selection=lambda self: self.env['res.lang'].get_installed(), |
|||
string='Language', |
|||
required=True, |
|||
) |
|||
|
|||
attachment_id = fields.Many2one( |
|||
comodel_name='ir.attachment', |
|||
string='Attachment', |
|||
required=True, |
|||
ondelete='cascade', |
|||
) |
@ -0,0 +1,44 @@ |
|||
# Copyright 2018 Onestein |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from odoo import api, fields, models |
|||
|
|||
|
|||
class MailTemplate(models.Model): |
|||
_inherit = 'mail.template' |
|||
|
|||
ir_attachment_language_ids = fields.One2many( |
|||
string='Language Dependent Attachments', |
|||
comodel_name='ir.attachment.language', |
|||
inverse_name='mail_template_id', |
|||
) |
|||
|
|||
@api.multi |
|||
def generate_email(self, res_ids, fields=None): |
|||
self.ensure_one() |
|||
multi = True |
|||
if isinstance(res_ids, int): |
|||
res_ids = [res_ids] |
|||
multi = False |
|||
res = super().generate_email( |
|||
res_ids, fields |
|||
) |
|||
attached = [] |
|||
for res_id in res.keys(): |
|||
mail = res[res_id] |
|||
partner_ids = 'partner_ids' in mail and \ |
|||
mail['partner_ids'] or False |
|||
if not partner_ids: |
|||
continue |
|||
for partner in self.env['res.partner'].browse(partner_ids): |
|||
for lang_attach in self.ir_attachment_language_ids.filtered( |
|||
lambda a: a.lang == partner.lang): |
|||
if lang_attach.attachment_id.id in attached: |
|||
continue |
|||
if not res[res_id].get('attachments'): |
|||
res[res_id]['attachments'] = [] |
|||
res[res_id]['attachments'].append(( |
|||
lang_attach.attachment_id.name, |
|||
lang_attach.attachment_id.datas)) |
|||
attached.append(lang_attach.id) |
|||
return multi and res or res[res_ids[0]] |
@ -0,0 +1,6 @@ |
|||
To configure a language dependent attachment: |
|||
|
|||
#. Activate the developer mode; |
|||
#. go to *Settings > Technical > Email > Templates*; |
|||
#. go to the form view of the template you want to change; |
|||
#. change the field *Language Dependent Attachments* to what you want. |
@ -0,0 +1 @@ |
|||
* Dennis Sluijk <d.sluijk@onestein.nl> |
@ -0,0 +1,3 @@ |
|||
This module extends the functionality of mail templates. |
|||
It allows you to configure attachments based on the language of the partner. |
|||
For example you can use it to localize your company's terms of agreements. |
@ -0,0 +1,10 @@ |
|||
When a template is selected in the mail composer, the attachments will be automatically added based on the recipients language. |
|||
The language of the recipients can be configured on the Partner form view. |
|||
When partners with different languages are selected all attachments of the partners languages will be added. |
|||
|
|||
To use the functionality: |
|||
|
|||
#. Configure a template (e.g. the sale order mail template) |
|||
#. go to a sale order; |
|||
#. click *Send by Email*; |
|||
#. the attachments are added based on the customer's language. |
@ -0,0 +1,3 @@ |
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
|||
access_attachment_language_admin,ir.attachment.language admin,model_ir_attachment_language,base.group_no_one,1,1,1,1 |
|||
access_attachment_language_everyone,ir.attachment.language everyone,model_ir_attachment_language,,1,0,0,0 |
@ -0,0 +1,23 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2018 Onestein |
|||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> |
|||
|
|||
<odoo> |
|||
<record id="mail_template_form" model="ir.ui.view"> |
|||
<field name="name">mail.template.form</field> |
|||
<field name="model">mail.template</field> |
|||
<field name="inherit_id" ref="mail.email_template_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//field[@name='attachment_ids']" position="after"> |
|||
<group> |
|||
<field name="ir_attachment_language_ids"> |
|||
<tree editable="top"> |
|||
<field name="lang" /> |
|||
<field name="attachment_id" domain="[('type', '=', 'binary')]" /> |
|||
</tree> |
|||
</field> |
|||
</group> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,74 @@ |
|||
======================================== |
|||
Tests for mail_template_attachment_i18n |
|||
======================================== |
|||
|
|||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
|
|||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|||
:target: https://odoo-community.org/page/development-status |
|||
:alt: Beta |
|||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github |
|||
:target: https://github.com/OCA/server-tools/tree/11.0/test_mail_template_attachment_i18n |
|||
:alt: OCA/server-tools |
|||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|||
:target: https://translation.odoo-community.org/projects/server-tools-11-0/server-tools-11-0-test_mail_template_attachment_i18n |
|||
:alt: Translate me on Weblate |
|||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|||
:target: https://runbot.odoo-community.org/runbot/149/11.0 |
|||
:alt: Try me on Runbot |
|||
|
|||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|||
|
|||
Tests for mail_template_attachment_i18n. |
|||
This module exists to avoid a weird dependency in mail_template_attachment_i18n to the sale module. |
|||
|
|||
**Table of contents** |
|||
|
|||
.. contents:: |
|||
:local: |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_. |
|||
In case of trouble, please check there if your issue has already been reported. |
|||
If you spotted it first, help us smashing it by providing a detailed and welcomed |
|||
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20test_mail_template_attachment_i18n%0Aversion:%2011.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
|||
|
|||
Do not contact contributors directly about support or help with technical issues. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Authors |
|||
~~~~~~~ |
|||
|
|||
* Onestein |
|||
|
|||
Contributors |
|||
~~~~~~~~~~~~ |
|||
|
|||
* Dennis Sluijk <d.sluijk@onestein.nl> |
|||
|
|||
Maintainers |
|||
~~~~~~~~~~~ |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/11.0/test_mail_template_attachment_i18n>`_ project on GitHub. |
|||
|
|||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
@ -0,0 +1,14 @@ |
|||
{ |
|||
'name': ' Tests for mail_template_attachment_i18n', |
|||
'summary': 'Test suite for mail_template_attachment_i18n.', |
|||
'author': 'Onestein,Odoo Community Association (OCA)', |
|||
'website': 'https://github.com/oca/server-tools', |
|||
'category': 'Generic Modules', |
|||
'version': '11.0.1.0.0', |
|||
'license': 'AGPL-3', |
|||
'depends': [ |
|||
'mail_template_attachment_i18n', |
|||
'sale' |
|||
], |
|||
'installable': True, |
|||
} |
@ -0,0 +1 @@ |
|||
* Dennis Sluijk <d.sluijk@onestein.nl> |
@ -0,0 +1,2 @@ |
|||
Tests for mail_template_attachment_i18n. |
|||
This module exists to avoid a weird dependency in mail_template_attachment_i18n to the sale module. |
@ -0,0 +1 @@ |
|||
from . import test_attaching_by_language |
@ -0,0 +1,67 @@ |
|||
# Copyright 2018 Onestein |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from odoo.tests.common import TransactionCase |
|||
|
|||
|
|||
class TestAttachingByLanguage(TransactionCase): |
|||
def setUp(self): |
|||
super().setUp() |
|||
self.english_partner = self.env['res.partner'].create({ |
|||
'name': 'English Partner', |
|||
'email': 'test@english.nl', |
|||
'lang': 'en_US' |
|||
}) |
|||
self.dutch_partner = self.env['res.partner'].create({ |
|||
'name': 'Dutch Partner', |
|||
'email': 'test@dutch.nl', |
|||
'lang': False |
|||
}) |
|||
self.attachment = self.env['ir.attachment'].create({ |
|||
'name': 'File', |
|||
'type': 'binary' |
|||
}) |
|||
self.template = self.env['mail.template'].create({ |
|||
'name': 'Test', |
|||
'model_id': self.env['ir.model'].search( |
|||
[('model', '=', 'sale.order')]).id, |
|||
'ir_attachment_language_ids': [(0, False, { |
|||
'attachment_id': self.attachment.id, |
|||
'lang': 'en_US' |
|||
})], |
|||
'attachment_ids': [(0, False, { |
|||
'name': 'File 2', |
|||
'type': 'binary' |
|||
})], |
|||
'lang': '${object.partner_id.lang}', |
|||
'email_to': '${object.partner_id.email}', |
|||
'body_html': 'Test' |
|||
}) |
|||
|
|||
def test_attaching(self): |
|||
sale_order = self.env['sale.order'].create({ |
|||
'partner_id': self.english_partner.id, |
|||
}) |
|||
res = self.env['mail.compose.message'].create({ |
|||
'model': 'sale.order', |
|||
'res_id': sale_order.id, |
|||
'email_to': ['test@english.nl'], |
|||
'use_template': True, |
|||
'template_id': self.template.id |
|||
}) |
|||
res.onchange_template_id_wrapper() |
|||
self.assertEqual(len(res.attachment_ids), 2) |
|||
|
|||
def test_not_attaching(self): |
|||
sale_order = self.env['sale.order'].create({ |
|||
'partner_id': self.dutch_partner.id, |
|||
}) |
|||
res = self.env['mail.compose.message'].create({ |
|||
'model': 'sale.order', |
|||
'res_id': sale_order.id, |
|||
'email_to': ['test@dutch.nl'], |
|||
'use_template': True, |
|||
'template_id': self.template.id |
|||
}) |
|||
res.onchange_template_id_wrapper() |
|||
self.assertEqual(len(res.attachment_ids), 1) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue