From 7eadcbd72add36d3c6e4fba54e204c3790b4cd4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Marques?= Date: Tue, 5 Jan 2021 09:18:36 +0000 Subject: [PATCH 01/24] [ADD] mail_notification_custom_subject: Apply a custom subject to mail notifications This module allows you to specify templates to override the subject on the notification emails sent by Odoo. TT27191 Co-authored-by: Pedro M. Baeza --- mail_notification_custom_subject/README.rst | 106 ++++ mail_notification_custom_subject/__init__.py | 1 + .../__manifest__.py | 23 + .../i18n/es_ES.po | 69 +++ .../i18n/mail_notification_custom_subject.pot | 134 +++++ .../models/__init__.py | 2 + .../models/mail_message_custom_subject.py | 38 ++ .../models/mail_thread.py | 75 +++ .../readme/CONFIGURE.rst | 8 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 5 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 458 ++++++++++++++++++ .../tests/__init__.py | 1 + .../test_mail_notification_custom_subject.py | 245 ++++++++++ ...mail_notification_custom_subject_views.xml | 50 ++ 18 files changed, 1224 insertions(+) create mode 100644 mail_notification_custom_subject/README.rst create mode 100644 mail_notification_custom_subject/__init__.py create mode 100644 mail_notification_custom_subject/__manifest__.py create mode 100644 mail_notification_custom_subject/i18n/es_ES.po create mode 100644 mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot create mode 100644 mail_notification_custom_subject/models/__init__.py create mode 100644 mail_notification_custom_subject/models/mail_message_custom_subject.py create mode 100644 mail_notification_custom_subject/models/mail_thread.py create mode 100644 mail_notification_custom_subject/readme/CONFIGURE.rst create mode 100644 mail_notification_custom_subject/readme/CONTRIBUTORS.rst create mode 100644 mail_notification_custom_subject/readme/DESCRIPTION.rst create mode 100644 mail_notification_custom_subject/readme/USAGE.rst create mode 100644 mail_notification_custom_subject/security/ir.model.access.csv create mode 100644 mail_notification_custom_subject/static/description/icon.png create mode 100644 mail_notification_custom_subject/static/description/index.html create mode 100644 mail_notification_custom_subject/tests/__init__.py create mode 100644 mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py create mode 100644 mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst new file mode 100644 index 0000000000..4aa6426432 --- /dev/null +++ b/mail_notification_custom_subject/README.rst @@ -0,0 +1,106 @@ +================================ +Mail Notification Custom Subject +================================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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/12.0/mail_notification_custom_subject + :alt: OCA/social +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_notification_custom_subject + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/205/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to specify templates to override the subject on the notification +emails sent by Odoo + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + + +* Activate access to **Technical Features** (debug mode). +* Go to **Settings > Technical > Email > Subject Replacement Templates** +* Create a new template. + + * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo. + * The field **Subject Template** accepts `Jinjah` expressions. + * The field **Replace** specifies if the template should replace existing content or append to it. + +Usage +===== + +To use this module, you need to: + +* Open the chatter in Odoo (e.g. Open an Invoice). +* Send a message. +* Observe the rendered Subject template. + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Tecnativa + + * Pedro M. Baeza + * João Marques + +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. + +.. |maintainer-joao-p-marques| image:: https://github.com/joao-p-marques.png?size=40px + :target: https://github.com/joao-p-marques + :alt: joao-p-marques + +Current `maintainer `__: + +|maintainer-joao-p-marques| + +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_notification_custom_subject/__init__.py b/mail_notification_custom_subject/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/mail_notification_custom_subject/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py new file mode 100644 index 0000000000..1c970d302a --- /dev/null +++ b/mail_notification_custom_subject/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2020-2021 Tecnativa - João Marques +# Copyright 2021 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Mail Notification Custom Subject", + "summary": "Apply a custom subject to mail notifications", + "version": "12.0.1.0.0", + "category": "Social Network", + "website": "https://github.com/OCA/social/", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": [ + "mail", + ], + "data": [ + "security/ir.model.access.csv", + "views/mail_notification_custom_subject_views.xml", + ], + "development_status": "Production/Stable", + "maintainers": ["joao-p-marques"], +} diff --git a/mail_notification_custom_subject/i18n/es_ES.po b/mail_notification_custom_subject/i18n/es_ES.po new file mode 100644 index 0000000000..a1147e83c6 --- /dev/null +++ b/mail_notification_custom_subject/i18n/es_ES.po @@ -0,0 +1,69 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_notification_custom_subject +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-05 09:11+0000\n" +"PO-Revision-Date: 2021-01-05 09:17+0000\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" +"Last-Translator: \n" +"Language: es_ES\n" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:150 +#, python-format +msgid "Append After" +msgstr "Añadir después" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:149 +#, python-format +msgid "Append Before" +msgstr "Añadir antes" + +#. module: mail_notification_custom_subject +#: model:ir.model,name:mail_notification_custom_subject.model_mail_thread +msgid "Email Thread" +msgstr "Hilo de correo electrónico" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:238 +#, python-format +msgid "Failed to render template %r using values %r" +msgstr "Error al procesar la plantilla %r usando los valores %r" + +#. module: mail_notification_custom_subject +#: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject +msgid "Mail Message Custom Subject" +msgstr "Asunto Personalizado en Mensaje de Correo" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:151 +#, python-format +msgid "Replace" +msgstr "Sustituir" + +#. module: mail_notification_custom_subject +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form +msgid "Subject (placeholders may be used here)" +msgstr "Asunto (se pueden utilizar aquí expresiones de campos)" + +#. module: mail_notification_custom_subject +#: model:ir.actions.act_window,name:mail_notification_custom_subject.action_mail_notification_custom_subject_tree_all +#: model:ir.ui.menu,name:mail_notification_custom_subject.menu_mail_notification_custom_subject +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form +msgid "Subject Replacement Templates" +msgstr "Plantillas de Sustitución de Asuntos" + +#. module: mail_notification_custom_subject +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree +msgid "Templates" +msgstr "Plantillas" diff --git a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot new file mode 100644 index 0000000000..5b48b0882b --- /dev/null +++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot @@ -0,0 +1,134 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_notification_custom_subject +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:31 +#: selection:mail.message.custom.subject,position:0 +#, python-format +msgid "Append After" +msgstr "" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:30 +#: selection:mail.message.custom.subject,position:0 +#, python-format +msgid "Append Before" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subtype_ids +msgid "Applied Subtypes" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_uid +msgid "Created by" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_date +msgid "Created on" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name +msgid "Display Name" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model,name:mail_notification_custom_subject.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id +msgid "ID" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update +msgid "Last Modified on" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_date +msgid "Last Updated on" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject +msgid "Mail Message Custom Subject" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__model_id +msgid "Model" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__model_id +msgid "Model where this template applies" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__position +msgid "Position" +msgstr "" + +#. module: mail_notification_custom_subject +#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:32 +#: selection:mail.message.custom.subject,position:0 +#, python-format +msgid "Replace" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form +msgid "Subject (placeholders may be used here)" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.actions.act_window,name:mail_notification_custom_subject.action_mail_notification_custom_subject_tree_all +#: model:ir.ui.menu,name:mail_notification_custom_subject.menu_mail_notification_custom_subject +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form +msgid "Subject Replacement Templates" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template +msgid "Subject Template" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__name +msgid "Template Name" +msgstr "" + +#. module: mail_notification_custom_subject +#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree +msgid "Templates" +msgstr "" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position +msgid "Whether to replace, append at beggining or append at end to other templates that apply to a given context" +msgstr "" + diff --git a/mail_notification_custom_subject/models/__init__.py b/mail_notification_custom_subject/models/__init__.py new file mode 100644 index 0000000000..3e5486eab2 --- /dev/null +++ b/mail_notification_custom_subject/models/__init__.py @@ -0,0 +1,2 @@ +from . import mail_thread +from . import mail_message_custom_subject diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py new file mode 100644 index 0000000000..0fb5bbd0c8 --- /dev/null +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -0,0 +1,38 @@ +# Copyright 2020 Tecnativa - João Marques +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, fields, models + + +class MailMessageCustomSubject(models.Model): + _name = "mail.message.custom.subject" + _description = "Mail Message Custom Subject" + + name = fields.Char(string="Template Name") + model_id = fields.Many2one( + comodel_name="ir.model", + string="Model", + required=True, + help="Model where this template applies", + ) + subtype_ids = fields.Many2many( + comodel_name="mail.message.subtype", + string="Applied Subtypes", + required=True, + ) + subject_template = fields.Char( + string="Subject Template", + required=True, + help="Subject (placeholders may be used here)", + ) + position = fields.Selection( + selection=[ + ("append_before", _("Append Before")), + ("append_after", _("Append After")), + ("replace", _("Replace")), + ], + string="Position", + default="replace", + help="Whether to replace, append at beggining or append at end to other" + " templates that apply to a given context", + ) diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py new file mode 100644 index 0000000000..c26742ed43 --- /dev/null +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -0,0 +1,75 @@ +# Copyright 2020-2021 Tecnativa - João Marques +# Copyright 2021 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class MailThread(models.AbstractModel): + _inherit = "mail.thread" + + @api.returns("mail.message", lambda value: value.id) + def message_post( + self, + body="", + subject=None, + message_type="notification", + subtype=None, + parent_id=False, + attachments=None, + notif_layout=False, + add_sign=True, + model_description=False, + mail_auto_delete=True, + **kwargs + ): + subtype_id = kwargs.get('subtype_id', False) + if not subtype_id: + subtype = subtype or 'mt_note' + if '.' not in subtype: + subtype = 'mail.%s' % subtype + subtype_id = self.env['ir.model.data'].xmlid_to_res_id( + subtype, raise_if_not_found=False, + ) + if subtype_id: + custom_subjects = self.env["mail.message.custom.subject"].search( + [ + ("model_id.model", "=", self._name), + ("subtype_ids", "=", subtype_id), + ] + ) + if not subject: + subject = 'Re: %s' % self.env["mail.message"].with_context( + default_model=self._name, + default_res_id=self.id, + )._get_record_name({}) + for template in custom_subjects: + try: + rendered_subject_template = self.env[ + "mail.template" + ]._render_template( + template_txt=template.subject_template, + model=self._name, + res_ids=self.id, + ) + if template.position == "replace": + subject = rendered_subject_template + elif template.position == "append_before": + subject = rendered_subject_template + subject + elif template.position == "append_after": + subject += rendered_subject_template + except Exception: + rendered_subject_template = False + return super().message_post( + body=body, + subject=subject, + message_type=message_type, + subtype=subtype, + parent_id=parent_id, + attachments=attachments, + notif_layout=notif_layout, + add_sign=add_sign, + model_description=model_description, + mail_auto_delete=mail_auto_delete, + **kwargs + ) diff --git a/mail_notification_custom_subject/readme/CONFIGURE.rst b/mail_notification_custom_subject/readme/CONFIGURE.rst new file mode 100644 index 0000000000..86bed07b43 --- /dev/null +++ b/mail_notification_custom_subject/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ + +* Activate access to **Technical Features** (debug mode). +* Go to **Settings > Technical > Email > Subject Replacement Templates** +* Create a new template. + + * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo. + * The field **Subject Template** accepts `Jinjah` expressions. + * The field **Replace** specifies if the template should replace existing content or append to it. diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..b0f16877f3 --- /dev/null +++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Tecnativa + + * Pedro M. Baeza + * João Marques diff --git a/mail_notification_custom_subject/readme/DESCRIPTION.rst b/mail_notification_custom_subject/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..2b0727f1ad --- /dev/null +++ b/mail_notification_custom_subject/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows you to specify templates to override the subject on the notification +emails sent by Odoo diff --git a/mail_notification_custom_subject/readme/USAGE.rst b/mail_notification_custom_subject/readme/USAGE.rst new file mode 100644 index 0000000000..49bed60a72 --- /dev/null +++ b/mail_notification_custom_subject/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +* Open the chatter in Odoo (e.g. Open an Invoice). +* Send a message. +* Observe the rendered Subject template. diff --git a/mail_notification_custom_subject/security/ir.model.access.csv b/mail_notification_custom_subject/security/ir.model.access.csv new file mode 100644 index 0000000000..bc15034ae6 --- /dev/null +++ b/mail_notification_custom_subject/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_mail_notification_custom_subject_user,mail_notification_custom_object,model_mail_message_custom_subject,base.group_user,1,0,0,0 +access_mail_notification_custom_subject_admin,mail_notification_custom_object,model_mail_message_custom_subject,base.group_system,1,1,1,1 diff --git a/mail_notification_custom_subject/static/description/icon.png b/mail_notification_custom_subject/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html new file mode 100644 index 0000000000..21bf700d99 --- /dev/null +++ b/mail_notification_custom_subject/static/description/index.html @@ -0,0 +1,458 @@ + + + + + + +Mail Notification Custom Subject + + + +
+

Mail Notification Custom Subject

+ + +

Production/Stable License: AGPL-3 OCA/social Translate me on Weblate Try me on Runbot

+

This module allows you to specify templates to override the subject on the notification +emails sent by Odoo

+

Table of contents

+ +
+

Configuration

+
    +
  • Activate access to Technical Features (debug mode).

    +
  • +
  • Go to Settings > Technical > Email > Subject Replacement Templates

    +
  • +
  • Create a new template.

    +
    +
      +
    • The field Model specifies the model to which the subject template should apply in the notification emails sent by Odoo.
    • +
    • The field Subject Template accepts Jinjah<ttps://jinja.palletsprojects.com/en/2.11.x/> expressions.
    • +
    • The field Replace specifies if the template should replace existing content or append to it.
    • +
    +
    +
  • +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  • Open the chatter in Odoo (e.g. Open an Invoice).
  • +
  • Send a message.
  • +
  • Observe the rendered Subject template.
  • +
+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

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.

+

Current maintainer:

+

joao-p-marques

+

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_notification_custom_subject/tests/__init__.py b/mail_notification_custom_subject/tests/__init__.py new file mode 100644 index 0000000000..b0f2b2eff5 --- /dev/null +++ b/mail_notification_custom_subject/tests/__init__.py @@ -0,0 +1 @@ +from . import test_mail_notification_custom_subject diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py new file mode 100644 index 0000000000..7ecde6e0cd --- /dev/null +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -0,0 +1,245 @@ +# Copyright 2020 Tecnativa - João Marques +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestMailNotificationCustomSubject(common.TransactionCase): + def setUp(self): + super(TestMailNotificationCustomSubject, self).setUp() + self.partner_1 = self.env["res.partner"].create( + { + "name": "Test partner 1", + "supplier": True, + "email": "partner1@example.com", + } + ) + self.partner_2 = self.env["res.partner"].create( + { + "name": "Test partner 2", + "supplier": True, + "email": "partner2@example.com", + } + ) + + def test_email_subject_template_overrides(self): + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 1", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${object.name or 'n/a'} and something more", + } + ) + # Send message in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment" + ) + # Get message and check subject + self.assertEquals(mail_message_1.subject, "Test partner 1 and something more") + + # Send message in partner 2 + mail_message_2 = self.partner_2.message_post( + body="Test", subtype="mail.mt_comment" + ) + # Get message and check subject + self.assertEquals(mail_message_2.subject, "Test partner 2 and something more") + + # Explicit subject should also be overwritten + mail_message_3 = self.partner_2.message_post( + body="Test", subtype="mail.mt_comment", subject="Test" + ) + # Get message and check subject + self.assertEquals(mail_message_3.subject, "Test partner 2 and something more") + + def test_email_subject_template_normal(self): + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 1", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${object.name or 'n/a'} and something more", + } + ) + # Send note in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_note", subject="Test" + ) + # Get message and check subject. Subject Template should not apply + self.assertEquals(mail_message_1.subject, "Test") + + def test_email_subject_template_multi(self): + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 1", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${object.name or 'n/a'} and something more", + } + ) + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 2", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${object.name or 'n/a'} and something different", + } + ) + # Send message in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment" + ) + # Get message and check subject + self.assertEquals( + mail_message_1.subject, "Test partner 1 and something different" + ) + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 3", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${' and yet something else'}", + "position": "append_after", + } + ) + # Send message in partner + mail_message_2 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment" + ) + # Get message and check subject + self.assertEquals( + mail_message_2.subject, + "Test partner 1 and something different and yet something else", + ) + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 4", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${'Re: '}", + "position": "append_before", + } + ) + # Send message in partner + mail_message_3 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment" + ) + # Get message and check subject + self.assertEquals( + mail_message_3.subject, + "Re: Test partner 1 and something different and yet something else", + ) + + def test_email_subject_template_w_original(self): + self.env["mail.message.custom.subject"].create( + { + "name": "Test template 1", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${' and something more'}", + "position": "append_after", + } + ) + # Send message in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment", subject="Test", + ) + # Get message and check subject + self.assertEquals( + mail_message_1.subject, "Test and something more" + ) + + def test_bad_template_does_not_break(self): + self.env["mail.message.custom.subject"].create( + { + "name": "Test bad template 1", + "model_id": self.env.ref("base.model_res_partner").id, + "subtype_ids": [ + ( + 6, + 0, + [ + self.env.ref("mail.mt_comment").id, + ], + ) + ], + "subject_template": "${obaject.number_a} and something", + "position": "append_after", + } + ) + # Send message in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment", subject="Test", + ) + # Get message and check subject + # No exception should be raised but subject should remain as original. + self.assertEquals( + mail_message_1.subject, "Test" + ) + + def test_no_template_default_result(self): + # Send message in partner + mail_message_1 = self.partner_1.message_post( + body="Test", subtype="mail.mt_comment", subject="Test partner 1" + ) + # Get message and check subject + # No exception should be raised but subject should remain as original. + self.assertEquals( + mail_message_1.subject, "Test partner 1" + ) diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml new file mode 100644 index 0000000000..7dd4e5a94e --- /dev/null +++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml @@ -0,0 +1,50 @@ + + + + + mail.message.custom.subject.form + mail.message.custom.subject + +
+ +
+
+ + + + + + +
+
+
+
+ + + mail.message.custom.subject.tree + mail.message.custom.subject + + + + + + + + + + + + Subject Replacement Templates + mail.message.custom.subject + form + form,tree + + + + + +
+
From e5bc9035e49c63741e30318adbf35a4aede87ace Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Mon, 15 Feb 2021 14:28:18 +0100 Subject: [PATCH 02/24] [IMP] mail_notification_custom_subject: black, isort, prettier --- .../__manifest__.py | 6 +- .../models/mail_message_custom_subject.py | 4 +- .../models/mail_thread.py | 20 ++-- .../test_mail_notification_custom_subject.py | 94 +++---------------- ...mail_notification_custom_subject_views.xml | 36 ++++--- 5 files changed, 46 insertions(+), 114 deletions(-) diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 1c970d302a..7302252f4d 100644 --- a/mail_notification_custom_subject/__manifest__.py +++ b/mail_notification_custom_subject/__manifest__.py @@ -7,13 +7,11 @@ "summary": "Apply a custom subject to mail notifications", "version": "12.0.1.0.0", "category": "Social Network", - "website": "https://github.com/OCA/social/", + "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "installable": True, - "depends": [ - "mail", - ], + "depends": ["mail"], "data": [ "security/ir.model.access.csv", "views/mail_notification_custom_subject_views.xml", diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index 0fb5bbd0c8..60a713a541 100644 --- a/mail_notification_custom_subject/models/mail_message_custom_subject.py +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -16,9 +16,7 @@ class MailMessageCustomSubject(models.Model): help="Model where this template applies", ) subtype_ids = fields.Many2many( - comodel_name="mail.message.subtype", - string="Applied Subtypes", - required=True, + comodel_name="mail.message.subtype", string="Applied Subtypes", required=True, ) subject_template = fields.Char( string="Subject Template", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index c26742ed43..8743fcb809 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -23,25 +23,21 @@ def message_post( mail_auto_delete=True, **kwargs ): - subtype_id = kwargs.get('subtype_id', False) + subtype_id = kwargs.get("subtype_id", False) if not subtype_id: - subtype = subtype or 'mt_note' - if '.' not in subtype: - subtype = 'mail.%s' % subtype - subtype_id = self.env['ir.model.data'].xmlid_to_res_id( + subtype = subtype or "mt_note" + if "." not in subtype: + subtype = "mail.%s" % subtype + subtype_id = self.env["ir.model.data"].xmlid_to_res_id( subtype, raise_if_not_found=False, ) if subtype_id: custom_subjects = self.env["mail.message.custom.subject"].search( - [ - ("model_id.model", "=", self._name), - ("subtype_ids", "=", subtype_id), - ] + [("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)] ) if not subject: - subject = 'Re: %s' % self.env["mail.message"].with_context( - default_model=self._name, - default_res_id=self.id, + subject = "Re: %s" % self.env["mail.message"].with_context( + default_model=self._name, default_res_id=self.id, )._get_record_name({}) for template in custom_subjects: try: diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py index 7ecde6e0cd..dfd672e314 100644 --- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -1,6 +1,6 @@ # Copyright 2020 Tecnativa - João Marques # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - +# pylint: disable=C8107 from odoo.tests import common @@ -27,15 +27,7 @@ def test_email_subject_template_overrides(self): { "name": "Test template 1", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${object.name or 'n/a'} and something more", } ) @@ -65,15 +57,7 @@ def test_email_subject_template_normal(self): { "name": "Test template 1", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${object.name or 'n/a'} and something more", } ) @@ -89,15 +73,7 @@ def test_email_subject_template_multi(self): { "name": "Test template 1", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${object.name or 'n/a'} and something more", } ) @@ -105,15 +81,7 @@ def test_email_subject_template_multi(self): { "name": "Test template 2", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${object.name or 'n/a'} and something different", } ) @@ -129,15 +97,7 @@ def test_email_subject_template_multi(self): { "name": "Test template 3", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${' and yet something else'}", "position": "append_after", } @@ -155,15 +115,7 @@ def test_email_subject_template_multi(self): { "name": "Test template 4", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${'Re: '}", "position": "append_before", } @@ -183,15 +135,7 @@ def test_email_subject_template_w_original(self): { "name": "Test template 1", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${' and something more'}", "position": "append_after", } @@ -201,24 +145,14 @@ def test_email_subject_template_w_original(self): body="Test", subtype="mail.mt_comment", subject="Test", ) # Get message and check subject - self.assertEquals( - mail_message_1.subject, "Test and something more" - ) + self.assertEquals(mail_message_1.subject, "Test and something more") def test_bad_template_does_not_break(self): self.env["mail.message.custom.subject"].create( { "name": "Test bad template 1", "model_id": self.env.ref("base.model_res_partner").id, - "subtype_ids": [ - ( - 6, - 0, - [ - self.env.ref("mail.mt_comment").id, - ], - ) - ], + "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])], "subject_template": "${obaject.number_a} and something", "position": "append_after", } @@ -229,9 +163,7 @@ def test_bad_template_does_not_break(self): ) # Get message and check subject # No exception should be raised but subject should remain as original. - self.assertEquals( - mail_message_1.subject, "Test" - ) + self.assertEquals(mail_message_1.subject, "Test") def test_no_template_default_result(self): # Send message in partner @@ -240,6 +172,4 @@ def test_no_template_default_result(self): ) # Get message and check subject # No exception should be raised but subject should remain as original. - self.assertEquals( - mail_message_1.subject, "Test partner 1" - ) + self.assertEquals(mail_message_1.subject, "Test partner 1") diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml index 7dd4e5a94e..e2b333002a 100644 --- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml +++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml @@ -1,4 +1,4 @@ - + @@ -8,14 +8,17 @@
-
- - + + - +
@@ -27,15 +30,18 @@ mail.message.custom.subject - - - - + + + +
- + Subject Replacement Templates mail.message.custom.subject form @@ -43,8 +49,12 @@ - +
From ea99a7e69f6f46bdd90904f28dbb8bdfafcfc534 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Tue, 16 Feb 2021 08:54:52 +0100 Subject: [PATCH 03/24] [MIG] mail_notification_custom_subject: Migration to v13.0 --- mail_notification_custom_subject/README.rst | 13 +-- .../__manifest__.py | 2 +- .../i18n/es_ES.po | 98 ++++++++++++++++--- .../i18n/mail_notification_custom_subject.pot | 23 ++--- .../models/mail_message_custom_subject.py | 8 +- .../readme/CONFIGURE.rst | 2 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 9 +- .../test_mail_notification_custom_subject.py | 14 +-- ...mail_notification_custom_subject_views.xml | 1 - 10 files changed, 114 insertions(+), 57 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index 4aa6426432..b6a9ecbe76 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -14,13 +14,13 @@ Mail Notification Custom Subject :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/12.0/mail_notification_custom_subject + :target: https://github.com/OCA/social/tree/13.0/mail_notification_custom_subject :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_notification_custom_subject + :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_notification_custom_subject :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/205/12.0 + :target: https://runbot.odoo-community.org/runbot/205/13.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -42,7 +42,7 @@ Configuration * Create a new template. * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo. - * The field **Subject Template** accepts `Jinjah` expressions. + * The field **Subject Template** accepts `Jinja `__ expressions. * The field **Replace** specifies if the template should replace existing content or append to it. Usage @@ -60,7 +60,7 @@ 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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -79,6 +79,7 @@ Contributors * Pedro M. Baeza * João Marques + * Carlos Roca Maintainers ~~~~~~~~~~~ @@ -101,6 +102,6 @@ Current `maintainer `__: |maintainer-joao-p-marques| -This module is part of the `OCA/social `_ project on GitHub. +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_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 7302252f4d..10429becc6 100644 --- a/mail_notification_custom_subject/__manifest__.py +++ b/mail_notification_custom_subject/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Notification Custom Subject", "summary": "Apply a custom subject to mail notifications", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/mail_notification_custom_subject/i18n/es_ES.po b/mail_notification_custom_subject/i18n/es_ES.po index a1147e83c6..0f19a648fa 100644 --- a/mail_notification_custom_subject/i18n/es_ES.po +++ b/mail_notification_custom_subject/i18n/es_ES.po @@ -6,39 +6,71 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-05 09:11+0000\n" -"PO-Revision-Date: 2021-01-05 09:17+0000\n" +"POT-Creation-Date: 2021-02-16 10:56+0000\n" +"PO-Revision-Date: 2021-02-16 11:56+0100\n" +"Last-Translator: Carlos \n" "Language-Team: \n" +"Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 2.4.2\n" -"Last-Translator: \n" -"Language: es_ES\n" +"X-Generator: Poedit 2.0.6\n" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:150 -#, python-format +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_after msgid "Append After" msgstr "Añadir después" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:149 -#, python-format +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_before msgid "Append Before" msgstr "Añadir antes" +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subtype_ids +msgid "Applied Subtypes" +msgstr "Subtipos aplicados" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + #. module: mail_notification_custom_subject #: model:ir.model,name:mail_notification_custom_subject.model_mail_thread msgid "Email Thread" msgstr "Hilo de correo electrónico" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:238 -#, python-format -msgid "Failed to render template %r using values %r" -msgstr "Error al procesar la plantilla %r usando los valores %r" +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id +msgid "ID" +msgstr "ID" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_date +msgid "Last Updated on" +msgstr "Última actualización el" #. module: mail_notification_custom_subject #: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject @@ -46,12 +78,27 @@ msgid "Mail Message Custom Subject" msgstr "Asunto Personalizado en Mensaje de Correo" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:151 -#, python-format +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__model_id +msgid "Model" +msgstr "Modelo" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__model_id +msgid "Model where this template applies" +msgstr "Modelo en el que se aplica la plantilla" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__position +msgid "Position" +msgstr "Posición" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__replace msgid "Replace" msgstr "Sustituir" #. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template #: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form msgid "Subject (placeholders may be used here)" msgstr "Asunto (se pueden utilizar aquí expresiones de campos)" @@ -63,7 +110,28 @@ msgstr "Asunto (se pueden utilizar aquí expresiones de campos)" msgid "Subject Replacement Templates" msgstr "Plantillas de Sustitución de Asuntos" +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template +#, fuzzy +msgid "Subject Template" +msgstr "Plantillas de Sustitución de Asuntos" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__name +#, fuzzy +msgid "Template Name" +msgstr "Plantillas" + #. module: mail_notification_custom_subject #: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree msgid "Templates" msgstr "Plantillas" + +#. module: mail_notification_custom_subject +#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position +msgid "" +"Whether to replace, append at beggining or append at end to other templates " +"that apply to a given context" +msgstr "" +"Ya sea para reemplazar, agregar al principio o agregar al final a otras " +"plantillas que se aplican a un contexto determinado" diff --git a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot index 5b48b0882b..ff5b60ad3a 100644 --- a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot +++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * mail_notification_custom_subject +# * mail_notification_custom_subject # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,16 +14,12 @@ msgstr "" "Plural-Forms: \n" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:31 -#: selection:mail.message.custom.subject,position:0 -#, python-format +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_after msgid "Append After" msgstr "" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:30 -#: selection:mail.message.custom.subject,position:0 -#, python-format +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_before msgid "Append Before" msgstr "" @@ -93,9 +89,7 @@ msgid "Position" msgstr "" #. module: mail_notification_custom_subject -#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:32 -#: selection:mail.message.custom.subject,position:0 -#, python-format +#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__replace msgid "Replace" msgstr "" @@ -129,6 +123,7 @@ msgstr "" #. module: mail_notification_custom_subject #: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position -msgid "Whether to replace, append at beggining or append at end to other templates that apply to a given context" +msgid "" +"Whether to replace, append at beggining or append at end to other templates " +"that apply to a given context" msgstr "" - diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index 60a713a541..5aaeeccc1e 100644 --- a/mail_notification_custom_subject/models/mail_message_custom_subject.py +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -1,7 +1,7 @@ # Copyright 2020 Tecnativa - João Marques # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, fields, models +from odoo import fields, models class MailMessageCustomSubject(models.Model): @@ -25,9 +25,9 @@ class MailMessageCustomSubject(models.Model): ) position = fields.Selection( selection=[ - ("append_before", _("Append Before")), - ("append_after", _("Append After")), - ("replace", _("Replace")), + ("append_before", "Append Before"), + ("append_after", "Append After"), + ("replace", "Replace"), ], string="Position", default="replace", diff --git a/mail_notification_custom_subject/readme/CONFIGURE.rst b/mail_notification_custom_subject/readme/CONFIGURE.rst index 86bed07b43..c777ed3ae9 100644 --- a/mail_notification_custom_subject/readme/CONFIGURE.rst +++ b/mail_notification_custom_subject/readme/CONFIGURE.rst @@ -4,5 +4,5 @@ * Create a new template. * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo. - * The field **Subject Template** accepts `Jinjah` expressions. + * The field **Subject Template** accepts `Jinja `__ expressions. * The field **Replace** specifies if the template should replace existing content or append to it. diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst index b0f16877f3..e7d295ba95 100644 --- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst +++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst @@ -2,3 +2,4 @@ * Pedro M. Baeza * João Marques + * Carlos Roca diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index 21bf700d99..49265e85b4 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -367,7 +367,7 @@

Mail Notification Custom Subject

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/social Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/social Translate me on Weblate Try me on Runbot

This module allows you to specify templates to override the subject on the notification emails sent by Odoo

Table of contents

@@ -395,7 +395,7 @@

Configuration

  • The field Model specifies the model to which the subject template should apply in the notification emails sent by Odoo.
  • -
  • The field Subject Template accepts Jinjah<ttps://jinja.palletsprojects.com/en/2.11.x/> expressions.
  • +
  • The field Subject Template accepts Jinja expressions.
  • The field Replace specifies if the template should replace existing content or append to it.
@@ -416,7 +416,7 @@

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 smashing it by providing a detailed and welcomed -feedback.

+feedback.

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

@@ -435,6 +435,7 @@

Contributors

  • Pedro M. Baeza
  • João Marques
  • +
  • Carlos Roca
@@ -449,7 +450,7 @@

Maintainers

promote its widespread use.

Current maintainer:

joao-p-marques

-

This module is part of the OCA/social project on GitHub.

+

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_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py index dfd672e314..e9a89967df 100644 --- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -6,20 +6,12 @@ class TestMailNotificationCustomSubject(common.TransactionCase): def setUp(self): - super(TestMailNotificationCustomSubject, self).setUp() + super().setUp() self.partner_1 = self.env["res.partner"].create( - { - "name": "Test partner 1", - "supplier": True, - "email": "partner1@example.com", - } + {"name": "Test partner 1", "email": "partner1@example.com"} ) self.partner_2 = self.env["res.partner"].create( - { - "name": "Test partner 2", - "supplier": True, - "email": "partner2@example.com", - } + {"name": "Test partner 2", "email": "partner2@example.com"} ) def test_email_subject_template_overrides(self): diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml index e2b333002a..14ecd80d6b 100644 --- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml +++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml @@ -44,7 +44,6 @@ > Subject Replacement Templates mail.message.custom.subject - form form,tree From 469320a5b4fdbf1a7ff708f6e0247c7dfe6d31f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 19 Apr 2021 14:26:38 +0200 Subject: [PATCH 04/24] [IMP] mail_notification_custom_subject: Add comment to explain test_bad_template_does_not_break test --- .../tests/test_mail_notification_custom_subject.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py index e9a89967df..26222b0fa4 100644 --- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -140,6 +140,7 @@ def test_email_subject_template_w_original(self): self.assertEquals(mail_message_1.subject, "Test and something more") def test_bad_template_does_not_break(self): + """Create template with error (obaject) to test error.""" self.env["mail.message.custom.subject"].create( { "name": "Test bad template 1", From a2c651812f8367463b6d070c3c01eea37a355b41 Mon Sep 17 00:00:00 2001 From: Naglis Jonaitis Date: Thu, 12 Aug 2021 12:57:11 +0300 Subject: [PATCH 05/24] [IMP] mail_notification_custom_subject: black, isort, prettier --- .../models/mail_message_custom_subject.py | 4 +++- .../models/mail_thread.py | 15 +++++++++++---- .../test_mail_notification_custom_subject.py | 8 ++++++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index 5aaeeccc1e..19a48f65d1 100644 --- a/mail_notification_custom_subject/models/mail_message_custom_subject.py +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -16,7 +16,9 @@ class MailMessageCustomSubject(models.Model): help="Model where this template applies", ) subtype_ids = fields.Many2many( - comodel_name="mail.message.subtype", string="Applied Subtypes", required=True, + comodel_name="mail.message.subtype", + string="Applied Subtypes", + required=True, ) subject_template = fields.Char( string="Subject Template", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index 8743fcb809..96d9abe89e 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -29,16 +29,23 @@ def message_post( if "." not in subtype: subtype = "mail.%s" % subtype subtype_id = self.env["ir.model.data"].xmlid_to_res_id( - subtype, raise_if_not_found=False, + subtype, + raise_if_not_found=False, ) if subtype_id: custom_subjects = self.env["mail.message.custom.subject"].search( [("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)] ) if not subject: - subject = "Re: %s" % self.env["mail.message"].with_context( - default_model=self._name, default_res_id=self.id, - )._get_record_name({}) + subject = ( + "Re: %s" + % self.env["mail.message"] + .with_context( + default_model=self._name, + default_res_id=self.id, + ) + ._get_record_name({}) + ) for template in custom_subjects: try: rendered_subject_template = self.env[ diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py index 26222b0fa4..68cbc7f720 100644 --- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -134,7 +134,9 @@ def test_email_subject_template_w_original(self): ) # Send message in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment", subject="Test", + body="Test", + subtype="mail.mt_comment", + subject="Test", ) # Get message and check subject self.assertEquals(mail_message_1.subject, "Test and something more") @@ -152,7 +154,9 @@ def test_bad_template_does_not_break(self): ) # Send message in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment", subject="Test", + body="Test", + subtype="mail.mt_comment", + subject="Test", ) # Get message and check subject # No exception should be raised but subject should remain as original. From 1249a3e1928c7e40f3a88000e468d1f2fa2f45f8 Mon Sep 17 00:00:00 2001 From: Naglis Jonaitis Date: Thu, 12 Aug 2021 13:58:35 +0300 Subject: [PATCH 06/24] [MIG] mail_notification_custom_subject: Migration to 14.0 --- .../__manifest__.py | 2 +- .../models/mail_message_custom_subject.py | 1 + .../models/mail_thread.py | 42 ++++++----- .../readme/CONTRIBUTORS.rst | 3 + .../test_mail_notification_custom_subject.py | 71 ++++++++++--------- ...mail_notification_custom_subject_views.xml | 4 +- 6 files changed, 71 insertions(+), 52 deletions(-) diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 10429becc6..11b9545574 100644 --- a/mail_notification_custom_subject/__manifest__.py +++ b/mail_notification_custom_subject/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Notification Custom Subject", "summary": "Apply a custom subject to mail notifications", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index 19a48f65d1..fe6fda0f3a 100644 --- a/mail_notification_custom_subject/models/mail_message_custom_subject.py +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -14,6 +14,7 @@ class MailMessageCustomSubject(models.Model): string="Model", required=True, help="Model where this template applies", + ondelete="cascade", ) subtype_ids = fields.Many2many( comodel_name="mail.message.subtype", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index 96d9abe89e..6c97088674 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -11,25 +11,27 @@ class MailThread(models.AbstractModel): @api.returns("mail.message", lambda value: value.id) def message_post( self, + *, body="", subject=None, message_type="notification", - subtype=None, + email_from=None, + author_id=None, parent_id=False, + subtype_xmlid=None, + subtype_id=False, + partner_ids=None, + channel_ids=None, attachments=None, - notif_layout=False, + attachment_ids=None, add_sign=True, - model_description=False, - mail_auto_delete=True, + record_name=False, **kwargs ): subtype_id = kwargs.get("subtype_id", False) - if not subtype_id: - subtype = subtype or "mt_note" - if "." not in subtype: - subtype = "mail.%s" % subtype + if not subtype_id and subtype_xmlid: subtype_id = self.env["ir.model.data"].xmlid_to_res_id( - subtype, + subtype_xmlid, raise_if_not_found=False, ) if subtype_id: @@ -51,10 +53,12 @@ def message_post( rendered_subject_template = self.env[ "mail.template" ]._render_template( - template_txt=template.subject_template, + template_src=template.subject_template, model=self._name, - res_ids=self.id, - ) + res_ids=[self.id], + )[ + self.id + ] if template.position == "replace": subject = rendered_subject_template elif template.position == "append_before": @@ -67,12 +71,16 @@ def message_post( body=body, subject=subject, message_type=message_type, - subtype=subtype, + email_from=email_from, + author_id=author_id, parent_id=parent_id, + subtype_xmlid=subtype_xmlid, + subtype_id=subtype_id, + partner_ids=partner_ids, + channel_ids=channel_ids, attachments=attachments, - notif_layout=notif_layout, + attachment_ids=attachment_ids, add_sign=add_sign, - model_description=model_description, - mail_auto_delete=mail_auto_delete, - **kwargs + record_name=record_name, + **kwargs, ) diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst index e7d295ba95..4231ca13b5 100644 --- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst +++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst @@ -3,3 +3,6 @@ * Pedro M. Baeza * João Marques * Carlos Roca + +* Versada + * Naglis Jonaitis diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py index 68cbc7f720..bdc736773d 100644 --- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py +++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py @@ -2,16 +2,22 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # pylint: disable=C8107 from odoo.tests import common +from odoo.tools import mute_logger -class TestMailNotificationCustomSubject(common.TransactionCase): - def setUp(self): - super().setUp() - self.partner_1 = self.env["res.partner"].create( - {"name": "Test partner 1", "email": "partner1@example.com"} - ) - self.partner_2 = self.env["res.partner"].create( - {"name": "Test partner 2", "email": "partner2@example.com"} +class TestMailNotificationCustomSubject(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner_1, cls.partner_2 = ( + cls.env["res.partner"] + .with_context(tracking_disable=True) + .create( + [ + {"name": "Test partner 1", "email": "partner1@example.com"}, + {"name": "Test partner 2", "email": "partner2@example.com"}, + ] + ) ) def test_email_subject_template_overrides(self): @@ -25,24 +31,24 @@ def test_email_subject_template_overrides(self): ) # Send message in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment" + body="Test", subtype_xmlid="mail.mt_comment" ) # Get message and check subject - self.assertEquals(mail_message_1.subject, "Test partner 1 and something more") + self.assertEqual(mail_message_1.subject, "Test partner 1 and something more") # Send message in partner 2 mail_message_2 = self.partner_2.message_post( - body="Test", subtype="mail.mt_comment" + body="Test", subtype_xmlid="mail.mt_comment" ) # Get message and check subject - self.assertEquals(mail_message_2.subject, "Test partner 2 and something more") + self.assertEqual(mail_message_2.subject, "Test partner 2 and something more") # Explicit subject should also be overwritten mail_message_3 = self.partner_2.message_post( - body="Test", subtype="mail.mt_comment", subject="Test" + body="Test", subtype_xmlid="mail.mt_comment", subject="Test" ) # Get message and check subject - self.assertEquals(mail_message_3.subject, "Test partner 2 and something more") + self.assertEqual(mail_message_3.subject, "Test partner 2 and something more") def test_email_subject_template_normal(self): self.env["mail.message.custom.subject"].create( @@ -55,10 +61,10 @@ def test_email_subject_template_normal(self): ) # Send note in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_note", subject="Test" + body="Test", subtype_xmlid="mail.mt_note", subject="Test" ) # Get message and check subject. Subject Template should not apply - self.assertEquals(mail_message_1.subject, "Test") + self.assertEqual(mail_message_1.subject, "Test") def test_email_subject_template_multi(self): self.env["mail.message.custom.subject"].create( @@ -79,10 +85,10 @@ def test_email_subject_template_multi(self): ) # Send message in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment" + body="Test", subtype_xmlid="mail.mt_comment" ) # Get message and check subject - self.assertEquals( + self.assertEqual( mail_message_1.subject, "Test partner 1 and something different" ) self.env["mail.message.custom.subject"].create( @@ -96,10 +102,10 @@ def test_email_subject_template_multi(self): ) # Send message in partner mail_message_2 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment" + body="Test", subtype_xmlid="mail.mt_comment" ) # Get message and check subject - self.assertEquals( + self.assertEqual( mail_message_2.subject, "Test partner 1 and something different and yet something else", ) @@ -114,10 +120,10 @@ def test_email_subject_template_multi(self): ) # Send message in partner mail_message_3 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment" + body="Test", subtype_xmlid="mail.mt_comment" ) # Get message and check subject - self.assertEquals( + self.assertEqual( mail_message_3.subject, "Re: Test partner 1 and something different and yet something else", ) @@ -135,11 +141,11 @@ def test_email_subject_template_w_original(self): # Send message in partner mail_message_1 = self.partner_1.message_post( body="Test", - subtype="mail.mt_comment", + subtype_xmlid="mail.mt_comment", subject="Test", ) # Get message and check subject - self.assertEquals(mail_message_1.subject, "Test and something more") + self.assertEqual(mail_message_1.subject, "Test and something more") def test_bad_template_does_not_break(self): """Create template with error (obaject) to test error.""" @@ -153,20 +159,21 @@ def test_bad_template_does_not_break(self): } ) # Send message in partner - mail_message_1 = self.partner_1.message_post( - body="Test", - subtype="mail.mt_comment", - subject="Test", - ) + with mute_logger("odoo.addons.mail.models.mail_render_mixin"): + mail_message_1 = self.partner_1.message_post( + body="Test", + subtype_xmlid="mail.mt_comment", + subject="Test", + ) # Get message and check subject # No exception should be raised but subject should remain as original. - self.assertEquals(mail_message_1.subject, "Test") + self.assertEqual(mail_message_1.subject, "Test") def test_no_template_default_result(self): # Send message in partner mail_message_1 = self.partner_1.message_post( - body="Test", subtype="mail.mt_comment", subject="Test partner 1" + body="Test", subtype_xmlid="mail.mt_comment", subject="Test partner 1" ) # Get message and check subject # No exception should be raised but subject should remain as original. - self.assertEquals(mail_message_1.subject, "Test partner 1") + self.assertEqual(mail_message_1.subject, "Test partner 1") diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml index 14ecd80d6b..6ab1631961 100644 --- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml +++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml @@ -16,7 +16,7 @@ name="subject_template" placeholder="Subject (placeholders may be used here)" /> - + @@ -29,7 +29,7 @@ mail.message.custom.subject.tree mail.message.custom.subject - + From a5ec604bc37aa724571718f33598a8a8f633eb8c Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 30 Aug 2021 08:07:43 +0000 Subject: [PATCH 07/24] [UPD] Update mail_notification_custom_subject.pot [UPD] README.rst --- mail_notification_custom_subject/README.rst | 13 ++++++++----- .../i18n/mail_notification_custom_subject.pot | 10 ++++------ .../static/description/index.html | 14 +++++++++++--- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index b6a9ecbe76..13b55c9d43 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -14,13 +14,13 @@ Mail Notification Custom Subject :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/13.0/mail_notification_custom_subject + :target: https://github.com/OCA/social/tree/14.0/mail_notification_custom_subject :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_notification_custom_subject + :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_notification_custom_subject :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/205/13.0 + :target: https://runbot.odoo-community.org/runbot/205/14.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -60,7 +60,7 @@ 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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -81,6 +81,9 @@ Contributors * João Marques * Carlos Roca +* Versada + * Naglis Jonaitis + Maintainers ~~~~~~~~~~~ @@ -102,6 +105,6 @@ Current `maintainer `__: |maintainer-joao-p-marques| -This module is part of the `OCA/social `_ project on GitHub. +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_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot index ff5b60ad3a..ba3a62327e 100644 --- a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot +++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -40,6 +40,7 @@ msgstr "" #. module: mail_notification_custom_subject #: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread__display_name msgid "Display Name" msgstr "" @@ -50,11 +51,13 @@ msgstr "" #. module: mail_notification_custom_subject #: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread__id msgid "ID" msgstr "" #. module: mail_notification_custom_subject #: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread____last_update msgid "Last Modified on" msgstr "" @@ -116,11 +119,6 @@ msgstr "" msgid "Template Name" msgstr "" -#. module: mail_notification_custom_subject -#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree -msgid "Templates" -msgstr "" - #. module: mail_notification_custom_subject #: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position msgid "" diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index 49265e85b4..e0922890bb 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -367,7 +367,7 @@

Mail Notification Custom Subject

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Production/Stable License: AGPL-3 OCA/social Translate me on Weblate Try me on Runbot

+

Production/Stable License: AGPL-3 OCA/social Translate me on Weblate Try me on Runbot

This module allows you to specify templates to override the subject on the notification emails sent by Odoo

Table of contents

@@ -416,7 +416,7 @@

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 smashing it by providing a detailed and welcomed -feedback.

+feedback.

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

@@ -439,6 +439,14 @@

Contributors

+
  • +
    Versada <https://versada.eu>
    +
      +
    • Naglis Jonaitis
    • +
    +
    +
    +
  • @@ -450,7 +458,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    joao-p-marques

    -

    This module is part of the OCA/social project on GitHub.

    +

    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.

    From 7035abee2baeefe3d5f1f776b864a2a917e38c1e Mon Sep 17 00:00:00 2001 From: Olga Marco Date: Mon, 24 Jan 2022 10:32:01 +0100 Subject: [PATCH 08/24] [FIX] mail_notification_custom_subject: Error modifying subtype_id [IMP] update dotfiles [ci skip] --- .../models/mail_thread.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index 6c97088674..17d8042f14 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -28,7 +28,6 @@ def message_post( record_name=False, **kwargs ): - subtype_id = kwargs.get("subtype_id", False) if not subtype_id and subtype_xmlid: subtype_id = self.env["ir.model.data"].xmlid_to_res_id( subtype_xmlid, @@ -39,15 +38,10 @@ def message_post( [("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)] ) if not subject: - subject = ( - "Re: %s" - % self.env["mail.message"] - .with_context( - default_model=self._name, - default_res_id=self.id, - ) - ._get_record_name({}) - ) + subject = "Re: %s" % self.env["mail.message"].with_context( + default_model=self._name, + default_res_id=self.id, + )._get_record_name({}) for template in custom_subjects: try: rendered_subject_template = self.env[ From 8c6eed2727360aa33a34099936ed942a0555bc7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 19 Oct 2022 12:45:37 +0200 Subject: [PATCH 09/24] [MIG] mail_notification_custom_subject: Migration to 15.0 TT36470 --- mail_notification_custom_subject/README.rst | 10 +- .../__manifest__.py | 2 +- .../models/mail_message_custom_subject.py | 2 - .../models/mail_thread.py | 4 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 8 +- .../test_mail_notification_custom_subject.py | 19 ++-- ...mail_notification_custom_subject_views.xml | 106 +++++++++--------- 8 files changed, 72 insertions(+), 80 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index 13b55c9d43..38730b9611 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -14,13 +14,13 @@ Mail Notification Custom Subject :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/14.0/mail_notification_custom_subject + :target: https://github.com/OCA/social/tree/15.0/mail_notification_custom_subject :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_notification_custom_subject + :target: https://translation.odoo-community.org/projects/social-15-0/social-15-0-mail_notification_custom_subject :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/205/14.0 + :target: https://runbot.odoo-community.org/runbot/205/15.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -60,7 +60,7 @@ 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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -105,6 +105,6 @@ Current `maintainer `__: |maintainer-joao-p-marques| -This module is part of the `OCA/social `_ project on GitHub. +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_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 11b9545574..1fdd601046 100644 --- a/mail_notification_custom_subject/__manifest__.py +++ b/mail_notification_custom_subject/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Notification Custom Subject", "summary": "Apply a custom subject to mail notifications", - "version": "14.0.1.0.0", + "version": "15.0.1.0.0", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index fe6fda0f3a..4c8db6a8c2 100644 --- a/mail_notification_custom_subject/models/mail_message_custom_subject.py +++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py @@ -22,7 +22,6 @@ class MailMessageCustomSubject(models.Model): required=True, ) subject_template = fields.Char( - string="Subject Template", required=True, help="Subject (placeholders may be used here)", ) @@ -32,7 +31,6 @@ class MailMessageCustomSubject(models.Model): ("append_after", "Append After"), ("replace", "Replace"), ], - string="Position", default="replace", help="Whether to replace, append at beggining or append at end to other" " templates that apply to a given context", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index 17d8042f14..d7bb14417e 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -21,7 +21,6 @@ def message_post( subtype_xmlid=None, subtype_id=False, partner_ids=None, - channel_ids=None, attachments=None, attachment_ids=None, add_sign=True, @@ -29,7 +28,7 @@ def message_post( **kwargs ): if not subtype_id and subtype_xmlid: - subtype_id = self.env["ir.model.data"].xmlid_to_res_id( + subtype_id = self.env["ir.model.data"]._xmlid_to_res_id( subtype_xmlid, raise_if_not_found=False, ) @@ -71,7 +70,6 @@ def message_post( subtype_xmlid=subtype_xmlid, subtype_id=subtype_id, partner_ids=partner_ids, - channel_ids=channel_ids, attachments=attachments, attachment_ids=attachment_ids, add_sign=add_sign, diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst index 4231ca13b5..82fac20ef2 100644 --- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst +++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst @@ -3,6 +3,7 @@ * Pedro M. Baeza * João Marques * Carlos Roca + * Víctor Martínez * Versada * Naglis Jonaitis diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index e0922890bb..3a98523173 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -3,7 +3,7 @@ - + Mail Notification Custom Subject