Browse Source

[ADD] mail_template_attachment_i18n: Mail Template Language Dependent Attachments (#1367)

pull/1350/merge
Dennis Sluijk 6 years ago
committed by Pedro M. Baeza
parent
commit
82d34420ac
  1. 99
      mail_template_attachment_i18n/README.rst
  2. 1
      mail_template_attachment_i18n/__init__.py
  3. 18
      mail_template_attachment_i18n/__manifest__.py
  4. 2
      mail_template_attachment_i18n/models/__init__.py
  5. 28
      mail_template_attachment_i18n/models/ir_attachment_language.py
  6. 44
      mail_template_attachment_i18n/models/mail_template.py
  7. 6
      mail_template_attachment_i18n/readme/CONFIGURE.rst
  8. 1
      mail_template_attachment_i18n/readme/CONTRIBUTORS.rst
  9. 3
      mail_template_attachment_i18n/readme/DESCRIPTION.rst
  10. 10
      mail_template_attachment_i18n/readme/USAGE.rst
  11. 3
      mail_template_attachment_i18n/security/ir.model.access.csv
  12. 23
      mail_template_attachment_i18n/views/mail_template_view.xml
  13. 74
      test_mail_template_attachment_i18n/README.rst
  14. 0
      test_mail_template_attachment_i18n/__init__.py
  15. 14
      test_mail_template_attachment_i18n/__manifest__.py
  16. 1
      test_mail_template_attachment_i18n/readme/CONTRIBUTORS.rst
  17. 2
      test_mail_template_attachment_i18n/readme/DESCRIPTION.rst
  18. 1
      test_mail_template_attachment_i18n/tests/__init__.py
  19. 67
      test_mail_template_attachment_i18n/tests/test_attaching_by_language.py

99
mail_template_attachment_i18n/README.rst

@ -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.

1
mail_template_attachment_i18n/__init__.py

@ -0,0 +1 @@
from . import models

18
mail_template_attachment_i18n/__manifest__.py

@ -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,
}

2
mail_template_attachment_i18n/models/__init__.py

@ -0,0 +1,2 @@
from . import ir_attachment_language
from . import mail_template

28
mail_template_attachment_i18n/models/ir_attachment_language.py

@ -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',
)

44
mail_template_attachment_i18n/models/mail_template.py

@ -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]]

6
mail_template_attachment_i18n/readme/CONFIGURE.rst

@ -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.

1
mail_template_attachment_i18n/readme/CONTRIBUTORS.rst

@ -0,0 +1 @@
* Dennis Sluijk <d.sluijk@onestein.nl>

3
mail_template_attachment_i18n/readme/DESCRIPTION.rst

@ -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.

10
mail_template_attachment_i18n/readme/USAGE.rst

@ -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.

3
mail_template_attachment_i18n/security/ir.model.access.csv

@ -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

23
mail_template_attachment_i18n/views/mail_template_view.xml

@ -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>

74
test_mail_template_attachment_i18n/README.rst

@ -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
test_mail_template_attachment_i18n/__init__.py

14
test_mail_template_attachment_i18n/__manifest__.py

@ -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,
}

1
test_mail_template_attachment_i18n/readme/CONTRIBUTORS.rst

@ -0,0 +1 @@
* Dennis Sluijk <d.sluijk@onestein.nl>

2
test_mail_template_attachment_i18n/readme/DESCRIPTION.rst

@ -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.

1
test_mail_template_attachment_i18n/tests/__init__.py

@ -0,0 +1 @@
from . import test_attaching_by_language

67
test_mail_template_attachment_i18n/tests/test_attaching_by_language.py

@ -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)
Loading…
Cancel
Save