From 42db87f04c4af8b296516f21dd64f5e35506e9e9 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/23] [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 000000000..4aa642643 --- /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 000000000..0650744f6 --- /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 000000000..1c970d302 --- /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 000000000..a1147e83c --- /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 000000000..5b48b0882 --- /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 000000000..3e5486eab --- /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 000000000..0fb5bbd0c --- /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 000000000..c26742ed4 --- /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 000000000..86bed07b4 --- /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 000000000..b0f16877f --- /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 000000000..2b0727f1a --- /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 000000000..49bed60a7 --- /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 000000000..bc15034ae --- /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 000000000..21bf700d9 --- /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 000000000..b0f2b2eff --- /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 000000000..7ecde6e0c --- /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 000000000..7dd4e5a94 --- /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 72b582a15203c56a26d34312870dee095a49b0b8 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Mon, 15 Feb 2021 14:28:18 +0100 Subject: [PATCH 02/23] [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 1c970d302..7302252f4 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 0fb5bbd0c..60a713a54 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 c26742ed4..8743fcb80 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 7ecde6e0c..dfd672e31 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 7dd4e5a94..e2b333002 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 e199a72ee6245bd69832dbee03f64aec7a48e8aa Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Tue, 16 Feb 2021 08:54:52 +0100 Subject: [PATCH 03/23] [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 4aa642643..b6a9ecbe7 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 7302252f4..10429becc 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 a1147e83c..0f19a648f 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 5b48b0882..ff5b60ad3 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 60a713a54..5aaeeccc1 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 86bed07b4..c777ed3ae 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 b0f16877f..e7d295ba9 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 21bf700d9..49265e85b 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 dfd672e31..e9a89967d 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 e2b333002..14ecd80d6 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 1618ef3f64a3743e2ef96179e6e9c856a047473f 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/23] [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 e9a89967d..26222b0fa 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 fe2d45e0bf7ed1b8b81617c2693feaf319283190 Mon Sep 17 00:00:00 2001 From: Naglis Jonaitis Date: Thu, 12 Aug 2021 12:57:11 +0300 Subject: [PATCH 05/23] [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 5aaeeccc1..19a48f65d 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 8743fcb80..96d9abe89 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 26222b0fa..68cbc7f72 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 5b2f3159de5e51fd399655195cb814610bd1a5a5 Mon Sep 17 00:00:00 2001 From: Naglis Jonaitis Date: Thu, 12 Aug 2021 13:58:35 +0300 Subject: [PATCH 06/23] [MIG] mail_notification_custom_subject: Migration to 14.0 --- mail_notification_custom_subject/README.rst | 13 ++-- .../__manifest__.py | 2 +- .../i18n/mail_notification_custom_subject.pot | 10 ++- .../models/mail_message_custom_subject.py | 1 + .../models/mail_thread.py | 42 ++++++----- .../readme/CONTRIBUTORS.rst | 3 + .../static/description/index.html | 14 +++- .../test_mail_notification_custom_subject.py | 71 ++++++++++--------- ...mail_notification_custom_subject_views.xml | 4 +- 9 files changed, 94 insertions(+), 66 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index b6a9ecbe7..13b55c9d4 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/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 10429becc..11b954557 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/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot index ff5b60ad3..ba3a62327 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/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py index 19a48f65d..fe6fda0f3 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 96d9abe89..6c9708867 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 e7d295ba9..4231ca13b 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/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index 49265e85b..e0922890b 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.

    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 68cbc7f72..bdc736773 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 14ecd80d6..6ab163196 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 9d07ab31b62290ca9f3f47ddbf6f0f24822ee180 Mon Sep 17 00:00:00 2001 From: Olga Marco Date: Mon, 24 Jan 2022 10:32:01 +0100 Subject: [PATCH 07/23] [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 6c9708867..17d8042f1 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 20522ee8d180db3105c28da4ed2f7790022a7302 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 08/23] [MIG] mail_notification_custom_subject: Migration to 15.0 TT36470 [UPD] Update mail_notification_custom_subject.pot [UPD] README.rst Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: social-15.0/social-15.0-mail_notification_custom_subject Translate-URL: https://translation.odoo-community.org/projects/social-15-0/social-15-0-mail_notification_custom_subject/ --- mail_notification_custom_subject/README.rst | 11 +- .../__manifest__.py | 2 +- .../i18n/es_ES.po | 8 +- .../i18n/mail_notification_custom_subject.pot | 5 +- .../models/mail_message_custom_subject.py | 2 - .../models/mail_thread.py | 4 +- .../readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 +- .../test_mail_notification_custom_subject.py | 19 ++-- ...mail_notification_custom_subject_views.xml | 106 +++++++++--------- 10 files changed, 77 insertions(+), 88 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index 13b55c9d4..b687e2cce 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. @@ -80,6 +80,7 @@ Contributors * Pedro M. Baeza * João Marques * Carlos Roca + * Víctor Martínez * Versada * Naglis Jonaitis @@ -105,6 +106,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 11b954557..1fdd60104 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/i18n/es_ES.po b/mail_notification_custom_subject/i18n/es_ES.po index 0f19a648f..680c521d3 100644 --- a/mail_notification_custom_subject/i18n/es_ES.po +++ b/mail_notification_custom_subject/i18n/es_ES.po @@ -122,11 +122,6 @@ msgstr "Plantillas de Sustitución de Asuntos" 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 "" @@ -135,3 +130,6 @@ msgid "" msgstr "" "Ya sea para reemplazar, agregar al principio o agregar al final a otras " "plantillas que se aplican a un contexto determinado" + +#~ 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 index ba3a62327..50d826a7b 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 14.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -40,7 +40,6 @@ 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 "" @@ -51,13 +50,11 @@ 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 "" 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 fe6fda0f3..4c8db6a8c 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 17d8042f1..d7bb14417 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 4231ca13b..82fac20ef 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 e0922890b..f51472099 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.

    @@ -436,6 +436,7 @@

    Contributors

  • Pedro M. Baeza
  • João Marques
  • Carlos Roca
  • +
  • Víctor Martínez
  • @@ -458,7 +459,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 bdc736773..97ca33fa7 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,11 +1,12 @@ # Copyright 2020 Tecnativa - João Marques +# Copyright 2022 Tecnativa - Víctor Martínez # 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.SavepointCase): +class TestMailNotificationCustomSubject(common.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -26,7 +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])], - "subject_template": "${object.name or 'n/a'} and something more", + "subject_template": "{{object.name or 'n/a'}} and something more", } ) # Send message in partner @@ -56,7 +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])], - "subject_template": "${object.name or 'n/a'} and something more", + "subject_template": "{{object.name or 'n/a'}} and something more", } ) # Send note in partner @@ -72,7 +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])], - "subject_template": "${object.name or 'n/a'} and something more", + "subject_template": "{{object.name or 'n/a'}} and something more", } ) self.env["mail.message.custom.subject"].create( @@ -80,7 +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])], - "subject_template": "${object.name or 'n/a'} and something different", + "subject_template": "{{object.name or 'n/a'}} and something different", } ) # Send message in partner @@ -96,7 +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])], - "subject_template": "${' and yet something else'}", + "subject_template": "{{' and yet something else'}}", "position": "append_after", } ) @@ -114,7 +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])], - "subject_template": "${'Re: '}", + "subject_template": "{{'Re: '}}", "position": "append_before", } ) @@ -134,7 +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])], - "subject_template": "${' and something more'}", + "subject_template": "{{' and something more'}}", "position": "append_after", } ) @@ -154,7 +155,7 @@ def test_bad_template_does_not_break(self): "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", + "subject_template": "{{obaject.number_a}} and something", "position": "append_after", } ) 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 6ab163196..3267af9fb 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,59 +1,53 @@ - - - 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,tree - - - - - -
    + + 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,tree + + +
    From fcef384da104c45fbf6bb63bc60ef9b0a5f98570 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 2 Dec 2022 08:57:08 +0000 Subject: [PATCH 09/23] [FIX] mail_notification_custom_subject: do not require being admin to send messages After installing the module, any user was required to have admin rights to be able to search across models. This fix does just that search with sudo and returns back to non-sudo mode immediately after. This way, we don't need to increase permissions for everybody. Tests now run unprivileged, to assert this problem never happens again. @moduon MT-1644 MT-1645 --- .../models/mail_thread.py | 12 +- .../test_mail_notification_custom_subject.py | 149 ++++++++++-------- 2 files changed, 91 insertions(+), 70 deletions(-) diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index d7bb14417..bc9c33b42 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -33,8 +33,16 @@ def message_post( 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)] + custom_subjects = ( + self.env["mail.message.custom.subject"] + .sudo() + .search( + [ + ("model_id.model", "=", self._name), + ("subtype_ids", "=", subtype_id), + ] + ) + .sudo(False) ) if not subject: subject = "Re: %s" % self.env["mail.message"].with_context( 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 97ca33fa7..078e19d5a 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 @@ -20,16 +20,22 @@ def setUpClass(cls): ] ) ) + cls.admin = common.new_test_user(cls.env, "boss", "base.group_system") + + def setUp(self): + super().setUp() + self.uid = common.new_test_user(self.env, "worker") 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", - } - ) + with self.with_user("boss"): + 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_xmlid="mail.mt_comment" @@ -52,14 +58,15 @@ def test_email_subject_template_overrides(self): 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( - { - "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", - } - ) + with self.with_user("boss"): + 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_xmlid="mail.mt_note", subject="Test" @@ -68,22 +75,24 @@ def test_email_subject_template_normal(self): self.assertEqual(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", - } - ) + with self.with_user("boss"): + 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", + } + ) + with self.with_user("boss"): + 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_xmlid="mail.mt_comment" @@ -92,15 +101,16 @@ def test_email_subject_template_multi(self): self.assertEqual( 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", - } - ) + with self.with_user("boss"): + 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_xmlid="mail.mt_comment" @@ -110,15 +120,16 @@ def test_email_subject_template_multi(self): 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", - } - ) + with self.with_user("boss"): + 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_xmlid="mail.mt_comment" @@ -130,15 +141,16 @@ def test_email_subject_template_multi(self): ) 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", - } - ) + with self.with_user("boss"): + 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", @@ -150,15 +162,16 @@ def test_email_subject_template_w_original(self): 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", - "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", - } - ) + with self.with_user("boss"): + 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 with mute_logger("odoo.addons.mail.models.mail_render_mixin"): mail_message_1 = self.partner_1.message_post( From ab6ff281bed1eceddd23d803c910d89dcb471aff Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 2 Dec 2022 09:02:06 +0000 Subject: [PATCH 10/23] [BUILD] mail_notification_custom_subject: change maintainer [UPD] README.rst mail_notification_custom_subject 15.0.1.0.1 --- mail_notification_custom_subject/README.rst | 8 ++++---- mail_notification_custom_subject/__manifest__.py | 4 ++-- .../static/description/index.html | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index b687e2cce..04dad65c2 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -98,13 +98,13 @@ 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 +.. |maintainer-yajo| image:: https://github.com/yajo.png?size=40px + :target: https://github.com/yajo + :alt: yajo Current `maintainer `__: -|maintainer-joao-p-marques| +|maintainer-yajo| This module is part of the `OCA/social `_ project on GitHub. diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index 1fdd60104..fa6b8cb2c 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": "15.0.1.0.0", + "version": "15.0.1.0.1", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", @@ -17,5 +17,5 @@ "views/mail_notification_custom_subject_views.xml", ], "development_status": "Production/Stable", - "maintainers": ["joao-p-marques"], + "maintainers": ["yajo"], } diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index f51472099..ad6a658c3 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -458,7 +458,7 @@

    Maintainers

    mission is to support the collaborative development of Odoo features and promote its widespread use.

    Current maintainer:

    -

    joao-p-marques

    +

    yajo

    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 897067832f7e671922559d57383202ea17db4cd4 Mon Sep 17 00:00:00 2001 From: Eduardo De Miguel Date: Wed, 14 Dec 2022 11:32:59 +0100 Subject: [PATCH 11/23] [FIX] mail_notification_custom_subject: Use same approach as Odoo when selecting subtype_id [UPD] README.rst mail_notification_custom_subject 15.0.1.0.2 --- mail_notification_custom_subject/README.rst | 3 +++ mail_notification_custom_subject/__manifest__.py | 2 +- mail_notification_custom_subject/models/mail_thread.py | 5 ++++- mail_notification_custom_subject/readme/CONTRIBUTORS.rst | 3 +++ .../static/description/index.html | 8 ++++++++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index 04dad65c2..f480bedab 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -85,6 +85,9 @@ Contributors * Versada * Naglis Jonaitis +* Moduon + * Eduardo de Miguel + Maintainers ~~~~~~~~~~~ diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py index fa6b8cb2c..3b28f21c7 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": "15.0.1.0.1", + "version": "15.0.1.0.2", "category": "Social Network", "website": "https://github.com/OCA/social", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index bc9c33b42..8b97a636c 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -1,5 +1,6 @@ # Copyright 2020-2021 Tecnativa - João Marques # Copyright 2021 Tecnativa - Pedro M. Baeza +# Copyright 2022 Moduon - Eduardo de Miguel # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import api, models @@ -27,11 +28,13 @@ def message_post( record_name=False, **kwargs ): - if not subtype_id and subtype_xmlid: + if subtype_xmlid: subtype_id = self.env["ir.model.data"]._xmlid_to_res_id( subtype_xmlid, raise_if_not_found=False, ) + if not subtype_id: + subtype_id = self.env["ir.model.data"]._xmlid_to_res_id("mail.mt_note") if subtype_id: custom_subjects = ( self.env["mail.message.custom.subject"] diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst index 82fac20ef..f88a42efe 100644 --- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst +++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst @@ -7,3 +7,6 @@ * Versada * Naglis Jonaitis + +* Moduon + * Eduardo de Miguel diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index ad6a658c3..019229a1c 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -448,6 +448,14 @@

    Contributors

    +
  • +
    Moduon <https://www.moduon.team>
    +
      +
    • Eduardo de Miguel
    • +
    +
    +
    +
  • From 36465cfb5d5564843442d7243206503df50bec42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Ernesto=20Garc=C3=ADa=20Medina?= Date: Thu, 30 Mar 2023 23:44:29 -0600 Subject: [PATCH 12/23] [IMP] mail_notification_custom_subject: add migration script for convert syntaxis of jinja2 to jinja3 [UPD] README.rst --- mail_notification_custom_subject/README.rst | 15 +- mail_notification_custom_subject/i18n/es.po | 129 ++++++++++++++++++ .../migrations/15.0.1.0.0/post-migration.py | 20 +++ .../static/description/index.html | 44 +++--- 4 files changed, 181 insertions(+), 27 deletions(-) create mode 100644 mail_notification_custom_subject/i18n/es.po create mode 100644 mail_notification_custom_subject/migrations/15.0.1.0.0/post-migration.py diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index f480bedab..4ba9b2eac 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -2,10 +2,13 @@ Mail Notification Custom Subject ================================ -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b873c6dfb9d094a1b5ebcd5c16a0c39a2127f4e7707aa54dd51dd4049f65d3fe + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Mail Notification Custom Subject .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :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/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=15.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows you to specify templates to override the subject on the notification emails sent by Odoo @@ -59,7 +62,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 +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. diff --git a/mail_notification_custom_subject/i18n/es.po b/mail_notification_custom_subject/i18n/es.po new file mode 100644 index 000000000..03ff0f053 --- /dev/null +++ b/mail_notification_custom_subject/i18n/es.po @@ -0,0 +1,129 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_notification_custom_subject +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-28 13:30+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_notification_custom_subject +#: 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 +#: 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 de" + +#. 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 "Mostrar Nombre" + +#. 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 +#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id +msgid "ID" +msgstr "ID (identificación)" + +#. 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 "Actualizado por Última vez 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 +msgid "Mail Message Custom Subject" +msgstr "Mensaje de correo Asunto personalizado" + +#. 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 "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 al que se aplica esta 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 "Reemplazar" + +#. 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 (pueden utilizarse marcadores de posición)" + +#. 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 Temas" + +#. 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 "Tema Plantilla" + +#. 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 "Nombre de Plantilla" + +#. 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 "" +"Si reemplazar, añadir al principio o añadir al final a otras plantillas que " +"se aplican a un contexto determinado" diff --git a/mail_notification_custom_subject/migrations/15.0.1.0.0/post-migration.py b/mail_notification_custom_subject/migrations/15.0.1.0.0/post-migration.py new file mode 100644 index 000000000..1428aa955 --- /dev/null +++ b/mail_notification_custom_subject/migrations/15.0.1.0.0/post-migration.py @@ -0,0 +1,20 @@ +# pylint: disable=C7902 +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + env.cr.execute( + """ + UPDATE mail_message_custom_subject + SET subject_template=REPLACE( + REPLACE( + subject_template, + '${', + '{{'), + '}', + '}}' + ) + """ + ) diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index 019229a1c..c73471ddf 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -1,20 +1,20 @@ - + - + Mail Notification Custom Subject -
    -

    Mail Notification Custom Subject

    +
    + + +Odoo Community Association + +
    +

    Mail Notification Custom Subject

    -

    Production/Stable License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

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

    Table of contents

    @@ -387,7 +392,7 @@

    Mail Notification Custom Subject

    -

    Configuration

    +

    Configuration

    • Activate access to Technical Features (debug mode).

    • @@ -412,7 +417,7 @@

      Configuration

    -

    Usage

    +

    Usage

    To use this module, you need to:

    • Open the chatter in Odoo (e.g. Open an Invoice).
    • @@ -421,7 +426,7 @@

      Usage

    -

    Bug Tracker

    +

    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 @@ -429,15 +434,15 @@

    Bug Tracker

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Tecnativa
    -

    Contributors

    +

    Contributors

    +
  • Codeforward <https://www.codeforward.nl>

    +
      +
    • Sander Lienaerts
    • +
    +
  • -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -477,5 +487,6 @@

    Maintainers

    +
    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 3ea48855a..446e0fde1 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 @@ -20,6 +20,7 @@ def setUpClass(cls): ) cls.admin = new_test_user(cls.env, "boss", "base.group_system") new_test_user(cls.env, "worker_custom_subject") + new_test_user(cls.env, "portal_custom_subject", "base.group_portal") cls.subject_model = cls.env["mail.message.custom.subject"].with_user(cls.admin) @users("worker_custom_subject") @@ -210,3 +211,32 @@ def test_no_template_default_result(self): # Get message and check subject # No exception should be raised but subject should remain as original. self.assertEqual(mail_message_1.subject, "Test partner 1") + + @users("portal_custom_subject") + def test_email_subject_template_portal_user(self): + """Portal users triggering message_post via sudo (e.g. from a portal + controller) must render custom subject templates without hitting ACL + errors on mail.message.custom.subject — templates are admin-managed + configuration records and should be read with sudo.""" + self.subject_model.create( + { + "name": "Test portal template", + "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'}} - portal", + } + ) + portal_user = self.env.user + self.assertTrue(portal_user.has_group("base.group_portal")) + self.assertFalse(portal_user.has_group("base.group_user")) + # Mimic the portal controller pattern: the caller is the portal user, + # the record is sudo'd for message_post, and author_id is set to the + # portal user's partner. + partner = self.env["res.partner"].browse(self.partner_1.id) + mail_message = partner.sudo().message_post( + body="Test from portal", + subtype_xmlid="mail.mt_comment", + author_id=portal_user.partner_id.id, + ) + self.assertEqual(mail_message.author_id, portal_user.partner_id) + self.assertEqual(mail_message.subject, "Test partner 1 - portal") From 947ddd5e03b85b63d628a670f47ed9fd6ab06cb5 Mon Sep 17 00:00:00 2001 From: Quoc - Pham Ngoc Date: Thu, 2 Jul 2026 15:41:22 +0700 Subject: [PATCH 22/23] [IMP] mail_notification_custom_subject: pre-commit execution --- .../tests/test_mail_notification_custom_subject.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 446e0fde1..d7598d691 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 @@ -107,8 +107,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])], - "subject_template": "{{object.name or 'n/a'}} and " - "something different", + "subject_template": "{{object.name or 'n/a'}} and something different", } ) # Send message in partner From 25d680f9748d3f03c86f8cc008b5d5fbd3234295 Mon Sep 17 00:00:00 2001 From: Quoc - Pham Ngoc Date: Thu, 2 Jul 2026 15:41:29 +0700 Subject: [PATCH 23/23] [MIG] mail_notification_custom_subject: Migration to 19.0 --- mail_notification_custom_subject/README.rst | 10 ++--- .../__manifest__.py | 2 +- .../models/mail_thread.py | 38 ++----------------- .../static/description/index.html | 6 +-- ...mail_notification_custom_subject_views.xml | 2 +- 5 files changed, 14 insertions(+), 44 deletions(-) diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst index b4b2950c5..49b99d8c0 100644 --- a/mail_notification_custom_subject/README.rst +++ b/mail_notification_custom_subject/README.rst @@ -21,13 +21,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%2Fmail-lightgray.png?logo=github - :target: https://github.com/OCA/mail/tree/18.0/mail_notification_custom_subject + :target: https://github.com/OCA/mail/tree/19.0/mail_notification_custom_subject :alt: OCA/mail .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_notification_custom_subject + :target: https://translation.odoo-community.org/projects/mail-19-0/mail-19-0-mail_notification_custom_subject :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/mail&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -75,7 +75,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 to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -130,6 +130,6 @@ Current `maintainer `__: |maintainer-yajo| -This module is part of the `OCA/mail `_ project on GitHub. +This module is part of the `OCA/mail `_ 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 9f8a0d505..331edcda6 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": "18.0.1.0.1", + "version": "19.0.1.0.0", "category": "Social Network", "website": "https://github.com/OCA/mail", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py index b88874d58..3ce2dce5f 100644 --- a/mail_notification_custom_subject/models/mail_thread.py +++ b/mail_notification_custom_subject/models/mail_thread.py @@ -5,7 +5,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import logging -from odoo import api, models +from odoo import models _logger = logging.getLogger(__name__) @@ -13,23 +13,8 @@ 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", - email_from=None, - author_id=None, - parent_id=False, - subtype_xmlid=None, - subtype_id=False, - partner_ids=None, - attachments=None, - attachment_ids=None, - body_is_html=False, - **kwargs, + self, *args, subject=None, subtype_xmlid=None, subtype_id=False, **kwargs ): if subtype_xmlid: subtype_id = self.env["ir.model.data"]._xmlid_to_res_id( @@ -54,14 +39,7 @@ def message_post( self.env["mail.message.custom.subject"].sudo().search(domain) ) if not subject: - record_name = ( - self.env["mail.message"] - .with_context( - default_model=self._name, - default_res_id=self.id, - ) - ._get_record_name({}) - ) + record_name = self.message_ids[:1].record_name subject = f"Re: {record_name}" for template in custom_subjects: try: @@ -98,17 +76,9 @@ def message_post( f"message custom subject {template.name}" ) return super().message_post( - body=body, + *args, subject=subject, - message_type=message_type, - email_from=email_from, - author_id=author_id, - parent_id=parent_id, subtype_xmlid=subtype_xmlid, subtype_id=subtype_id, - partner_ids=partner_ids, - attachments=attachments, - attachment_ids=attachment_ids, - body_is_html=body_is_html, **kwargs, ) diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html index d6b4e6eda..5684a9eb5 100644 --- a/mail_notification_custom_subject/static/description/index.html +++ b/mail_notification_custom_subject/static/description/index.html @@ -374,7 +374,7 @@

    Mail Notification Custom Subject

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:9529c3d98aeed27dd9b25bf12787be628ef15efc44bc0b2c13171f73d0137c24 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Production/Stable License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/mail Translate me on Weblate Try me on Runboat

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

    Table of contents

    @@ -430,7 +430,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 to smash it by providing a detailed and welcomed -feedback.

    +feedback.

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

    @@ -482,7 +482,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    yajo

    -

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

    +

    This module is part of the OCA/mail 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/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml index eb57e6f86..a97f40a46 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 @@ -31,7 +31,7 @@
    - mail.message.custom.subject.tree + mail.message.custom.subject.list mail.message.custom.subject