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

+
This module allows you to specify templates to override the subject on the notification
+emails sent by Odoo
+
Table of contents
+
+
+
+
+
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.
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
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:
+

+
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. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

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

+

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 @@
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.
@@ -450,7 +458,7 @@
promote its widespread use.
Current maintainer:

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

+

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 @@
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 @@
Pedro M. Baeza
João Marques
Carlos Roca
+
Víctor Martínez
@@ -458,7 +459,7 @@
promote its widespread use.
Current maintainer:

-
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 @@
mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainer:
-
+
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 @@
+
+- Moduon <https://www.moduon.team>
+-
+
+
+
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
+
+
+
+
+
+
+
Mail Notification Custom Subject
-

+

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
-
+
To use this module, you need to:
- Open the chatter in Odoo (e.g. Open an Invoice).
@@ -421,7 +426,7 @@
-
+
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 @@
Do not contact contributors directly about support or help with technical issues.
+
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
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

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