diff --git a/mail_template_substitute/README.rst b/mail_template_substitute/README.rst new file mode 100644 index 0000000000..514a276050 --- /dev/null +++ b/mail_template_substitute/README.rst @@ -0,0 +1,97 @@ +======================== +Mail Template Substitute +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:1e06d48ed75ce2bed31d943f19a888cd70a0db4d52e0baef3dbeb78db672e613 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/18.0/mail_template_substitute + :alt: OCA/social +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/social-18-0/social-18-0-mail_template_substitute + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to create substitution rules for mail templates. +A typical use case is to replace a standard template by alternative +templates when some conditions are met. For instance, it allows to +configure alternate templates for different companies. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +1. Go to 'Email' / 'Templates' +2. Select the desired template you want to substitute +3. In the substitutions page add a new line +4. Select the substitution template +5. Set a domain to specify when this substitution should happen + +Known issues / Roadmap +====================== + + + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* ACSONE SA/NV + +Contributors +------------ + +- Bejaoui Souheil +- Karthik +- Atchuthan + +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/social `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_template_substitute/__init__.py b/mail_template_substitute/__init__.py new file mode 100644 index 0000000000..aee8895e7a --- /dev/null +++ b/mail_template_substitute/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/mail_template_substitute/__manifest__.py b/mail_template_substitute/__manifest__.py new file mode 100644 index 0000000000..07d44c34d7 --- /dev/null +++ b/mail_template_substitute/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2019 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Mail Template Substitute", + "summary": """ + This module allows to create substitution rules for mail templates. + """, + "version": "18.0.1.0.0", + "license": "AGPL-3", + "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/social", + "depends": ["base", "mail"], + "data": [ + "security/mail_template_substitution_rule.xml", + "views/mail_template.xml", + ], +} diff --git a/mail_template_substitute/i18n/es.po b/mail_template_substitute/i18n/es.po new file mode 100644 index 0000000000..2bd4185854 --- /dev/null +++ b/mail_template_substitute/i18n/es.po @@ -0,0 +1,96 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_template_substitute +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-08 13:36+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__domain +msgid "Domain" +msgstr "Dominio" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template +msgid "Email Templates" +msgstr "Plantillas Correo Electrónico" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Asistente de redacción de correo electrónico" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_uid +msgid "Last Updated by" +msgstr "Actualizado por Última vez por" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__mail_template_id +msgid "Mail Template" +msgstr "Plantilla de Correo" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template_substitution_rule +msgid "Mail Template Substitution Rule" +msgstr "Norma de Sustitución de Plantillas de Correo" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__model +msgid "Model" +msgstr "Modelo" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__substitution_mail_template_id +msgid "Substitution Mail Template" +msgstr "Plantilla de Correo de Sustitución" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template__mail_template_substitution_rule_ids +#: model_terms:ir.ui.view,arch_db:mail_template_substitute.email_template_form +msgid "Substitution Rules" +msgstr "Reglas de Sustitución" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificación el" diff --git a/mail_template_substitute/i18n/it.po b/mail_template_substitute/i18n/it.po new file mode 100644 index 0000000000..b4895a9c5a --- /dev/null +++ b/mail_template_substitute/i18n/it.po @@ -0,0 +1,96 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_template_substitute +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-07 13:37+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__domain +msgid "Domain" +msgstr "Dominio" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template +msgid "Email Templates" +msgstr "Modelli e-mail" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Procedura guidata creazione e-mail" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__id +msgid "ID" +msgstr "ID" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__mail_template_id +msgid "Mail Template" +msgstr "Modello e-mail" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template_substitution_rule +msgid "Mail Template Substitution Rule" +msgstr "Regola sostituzione modello e-mail" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__model +msgid "Model" +msgstr "Modello" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__substitution_mail_template_id +msgid "Substitution Mail Template" +msgstr "Modello e-mail sostituzione" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template__mail_template_substitution_rule_ids +#: model_terms:ir.ui.view,arch_db:mail_template_substitute.email_template_form +msgid "Substitution Rules" +msgstr "Regole sostituzione" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/mail_template_substitute/i18n/mail_template_substitute.pot b/mail_template_substitute/i18n/mail_template_substitute.pot new file mode 100644 index 0000000000..bf2ab748e1 --- /dev/null +++ b/mail_template_substitute/i18n/mail_template_substitute.pot @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_template_substitute +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__create_date +msgid "Created on" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__domain +msgid "Domain" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template +msgid "Email Templates" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_compose_message +msgid "Email composition wizard" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__id +msgid "ID" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__mail_template_id +msgid "Mail Template" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model,name:mail_template_substitute.model_mail_template_substitution_rule +msgid "Mail Template Substitution Rule" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__model +msgid "Model" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template_substitution_rule__substitution_mail_template_id +msgid "Substitution Mail Template" +msgstr "" + +#. module: mail_template_substitute +#: model:ir.model.fields,field_description:mail_template_substitute.field_mail_template__mail_template_substitution_rule_ids +#: model_terms:ir.ui.view,arch_db:mail_template_substitute.email_template_form +msgid "Substitution Rules" +msgstr "" diff --git a/mail_template_substitute/models/__init__.py b/mail_template_substitute/models/__init__.py new file mode 100644 index 0000000000..09e1a8f278 --- /dev/null +++ b/mail_template_substitute/models/__init__.py @@ -0,0 +1,2 @@ +from . import mail_template +from . import mail_template_substitution_rule diff --git a/mail_template_substitute/models/mail_template.py b/mail_template_substitute/models/mail_template.py new file mode 100644 index 0000000000..ddc598dc6f --- /dev/null +++ b/mail_template_substitute/models/mail_template.py @@ -0,0 +1,33 @@ +# Copyright 2019 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models +from odoo.tools.safe_eval import safe_eval + + +class MailTemplate(models.Model): + _inherit = "mail.template" + + mail_template_substitution_rule_ids = fields.One2many( + comodel_name="mail.template.substitution.rule", + inverse_name="mail_template_id", + string="Substitution Rules", + ) + + def _get_substitution_template(self, model_id, active_ids): + self.ensure_one() + if isinstance(active_ids, int): + active_ids = [active_ids] + model = self.env[model_id.sudo().model] + for substitution_template_rule in self.mail_template_substitution_rule_ids: + domain = safe_eval(substitution_template_rule.domain) + domain.append(("id", "in", active_ids)) + if set(model.search(domain).ids) == set(active_ids): + return substitution_template_rule.substitution_mail_template_id + return False + + def _classify_per_lang(self, res_ids, engine="inline_template"): + substitution_template = self._get_substitution_template(self.model_id, res_ids) + if substitution_template: + return substitution_template._classify_per_lang(res_ids, engine=engine) + return super()._classify_per_lang(res_ids, engine=engine) diff --git a/mail_template_substitute/models/mail_template_substitution_rule.py b/mail_template_substitute/models/mail_template_substitution_rule.py new file mode 100644 index 0000000000..ca538086f9 --- /dev/null +++ b/mail_template_substitute/models/mail_template_substitution_rule.py @@ -0,0 +1,23 @@ +# Copyright 2019 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class MailTemplateSubstitutionRule(models.Model): + _name = "mail.template.substitution.rule" + _description = "Mail Template Substitution Rule" + _order = "sequence ASC" + + sequence = fields.Integer(default=10) + mail_template_id = fields.Many2one( + comodel_name="mail.template", required=True, ondelete="cascade" + ) + model = fields.Char(related="mail_template_id.model_id.model", store=True) + domain = fields.Char(required=True, default="[]") + substitution_mail_template_id = fields.Many2one( + comodel_name="mail.template", + required=True, + ondelete="cascade", + domain="[('model', '=', model)]", + ) diff --git a/mail_template_substitute/pyproject.toml b/mail_template_substitute/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/mail_template_substitute/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/mail_template_substitute/readme/CONTRIBUTORS.md b/mail_template_substitute/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..a764529bfa --- /dev/null +++ b/mail_template_substitute/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- Bejaoui Souheil \<\> +- Karthik \<\> +- Atchuthan \<\> diff --git a/mail_template_substitute/readme/DESCRIPTION.md b/mail_template_substitute/readme/DESCRIPTION.md new file mode 100644 index 0000000000..f106cb6040 --- /dev/null +++ b/mail_template_substitute/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +This module allows you to create substitution rules for mail templates. +A typical use case is to replace a standard template by alternative +templates when some conditions are met. For instance, it allows to +configure alternate templates for different companies. diff --git a/mail_template_substitute/readme/ROADMAP.md b/mail_template_substitute/readme/ROADMAP.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/mail_template_substitute/readme/ROADMAP.md @@ -0,0 +1 @@ + diff --git a/mail_template_substitute/readme/USAGE.md b/mail_template_substitute/readme/USAGE.md new file mode 100644 index 0000000000..43527d9f34 --- /dev/null +++ b/mail_template_substitute/readme/USAGE.md @@ -0,0 +1,7 @@ +To use this module, you need to: + +1. Go to 'Email' / 'Templates' +2. Select the desired template you want to substitute +3. In the substitutions page add a new line +4. Select the substitution template +5. Set a domain to specify when this substitution should happen diff --git a/mail_template_substitute/security/mail_template_substitution_rule.xml b/mail_template_substitute/security/mail_template_substitution_rule.xml new file mode 100644 index 0000000000..5009ffb94e --- /dev/null +++ b/mail_template_substitute/security/mail_template_substitution_rule.xml @@ -0,0 +1,14 @@ + + + + + mail.template.substitution.rule access + + + + + + + + diff --git a/mail_template_substitute/static/description/icon.png b/mail_template_substitute/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/mail_template_substitute/static/description/icon.png differ diff --git a/mail_template_substitute/static/description/index.html b/mail_template_substitute/static/description/index.html new file mode 100644 index 0000000000..9be8314464 --- /dev/null +++ b/mail_template_substitute/static/description/index.html @@ -0,0 +1,444 @@ + + + + + +Mail Template Substitute + + + +
+

Mail Template Substitute

+ + +

Beta License: AGPL-3 OCA/social Translate me on Weblate Try me on Runboat

+

This module allows you to create substitution rules for mail templates. +A typical use case is to replace a standard template by alternative +templates when some conditions are met. For instance, it allows to +configure alternate templates for different companies.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to ‘Email’ / ‘Templates’
  2. +
  3. Select the desired template you want to substitute
  4. +
  5. In the substitutions page add a new line
  6. +
  7. Select the substitution template
  8. +
  9. Set a domain to specify when this substitution should happen
  10. +
+
+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ACSONE SA/NV
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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/social project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/mail_template_substitute/tests/__init__.py b/mail_template_substitute/tests/__init__.py new file mode 100644 index 0000000000..18d0cc0260 --- /dev/null +++ b/mail_template_substitute/tests/__init__.py @@ -0,0 +1 @@ +from . import test_mail_template_substitute diff --git a/mail_template_substitute/tests/test_mail_template_substitute.py b/mail_template_substitute/tests/test_mail_template_substitute.py new file mode 100644 index 0000000000..727d4b22b5 --- /dev/null +++ b/mail_template_substitute/tests/test_mail_template_substitute.py @@ -0,0 +1,95 @@ +# Copyright 2019 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import Form, TransactionCase + + +class TestMailTemplateSubstitute(TransactionCase): + def setUp(self): + super().setUp() + self.smt2 = self.env["mail.template"].create( + { + "name": "substitute_template_2", + "model_id": self.env.ref("base.model_res_partner").id, + } + ) + self.smt1 = self.env["mail.template"].create( + { + "name": "substitute_template_1", + "model_id": self.env.ref("base.model_res_partner").id, + "mail_template_substitution_rule_ids": [ + ( + 0, + 0, + { + "substitution_mail_template_id": self.smt2.id, + "domain": "[('id', '=', False)]", + }, + ) + ], + } + ) + self.mt = self.env["mail.template"].create( + { + "name": "base_template", + "model_id": self.env.ref("base.model_res_partner").id, + "mail_template_substitution_rule_ids": [ + (0, 0, {"substitution_mail_template_id": self.smt1.id}) + ], + } + ) + self.mail_compose = self.env["mail.compose.message"].create( + {"template_id": self.mt.id, "composition_mode": "mass_mail"} + ) + self.partners = self.env["res.partner"].search([]) + self.partner = self.env["res.partner"].search([], limit=1) + + def test_get_email_template_partners(self): + self.assertEqual( + self.mt._get_substitution_template( + self.env.ref("base.model_res_partner"), self.partners.ids + ), + self.smt1, + ) + res_ids_to_templates = self.mt._classify_per_lang(self.partners.ids) + self.assertTrue(len(res_ids_to_templates)) + _lang, (template, _res_ids) = list(res_ids_to_templates.items())[0] + self.assertEqual( + template, + self.smt1, + ) + + def test_get_email_template_partner(self): + self.assertEqual( + self.mt._get_substitution_template( + self.env.ref("base.model_res_partner"), self.partner.ids + ), + self.smt1, + ) + res_ids_to_templates = self.mt._classify_per_lang(self.partner.ids) + self.assertTrue(len(res_ids_to_templates)) + _lang, (template, _res_ids) = list(res_ids_to_templates.items())[0] + self.assertEqual( + template, + self.smt1, + ) + + def test_get_substitution_template(self): + self.assertEqual( + self.mail_compose.with_context( + active_ids=self.partners.ids + )._get_substitution_template("mass_mail", self.mt, None), + self.smt1, + ) + + def test_default_get(self): + mail_compose_form = Form( + self.env["mail.compose.message"].with_context( + **{ + "default_template_id": self.mt.id, + "default_model": self.partner._name, + "default_res_ids": self.partner.ids, + } + ) + ) + self.assertEqual(mail_compose_form.template_id, self.smt1) diff --git a/mail_template_substitute/views/mail_template.xml b/mail_template_substitute/views/mail_template.xml new file mode 100644 index 0000000000..812108f24a --- /dev/null +++ b/mail_template_substitute/views/mail_template.xml @@ -0,0 +1,50 @@ + + + + mail.template.form (in mail_template_substitute) + + mail.template + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+
+
diff --git a/mail_template_substitute/wizards/__init__.py b/mail_template_substitute/wizards/__init__.py new file mode 100644 index 0000000000..b528d997d1 --- /dev/null +++ b/mail_template_substitute/wizards/__init__.py @@ -0,0 +1 @@ +from . import mail_compose_message diff --git a/mail_template_substitute/wizards/mail_compose_message.py b/mail_template_substitute/wizards/mail_compose_message.py new file mode 100644 index 0000000000..2df60751c0 --- /dev/null +++ b/mail_template_substitute/wizards/mail_compose_message.py @@ -0,0 +1,32 @@ +# Copyright 2019 ACSONE SA/NV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models +from odoo.tools.safe_eval import safe_eval + + +class MailComposeMessage(models.TransientModel): + _inherit = "mail.compose.message" + + @api.model + def _get_substitution_template(self, composition_mode, template, res_ids): + if template: + if composition_mode == "mass_mail" and self.env.context.get("active_ids"): + res_ids = self.env.context.get("active_ids") + res_ids_to_templates = template._classify_per_lang(res_ids) + if len(res_ids_to_templates): + _lang, (template, _res_ids) = list(res_ids_to_templates.items())[0] + return template + return False + + @api.model + def default_get(self, fields): + result = super().default_get(fields) + substitution_template = self._get_substitution_template( + result.get("composition_mode"), + self.env["mail.template"].browse(result.get("template_id")), + safe_eval(result.get("res_ids")) if result.get("res_ids") else [], + ) + if substitution_template: + result["template_id"] = substitution_template.id + return result