From 7eadcbd72add36d3c6e4fba54e204c3790b4cd4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?=
Date: Tue, 5 Jan 2021 09:18:36 +0000
Subject: [PATCH 01/25] [ADD] mail_notification_custom_subject: Apply a custom
subject to mail notifications
This module allows you to specify templates to override the subject on the notification
emails sent by Odoo.
TT27191
Co-authored-by: Pedro M. Baeza
---
mail_notification_custom_subject/README.rst | 106 ++++
mail_notification_custom_subject/__init__.py | 1 +
.../__manifest__.py | 23 +
.../i18n/es_ES.po | 69 +++
.../i18n/mail_notification_custom_subject.pot | 134 +++++
.../models/__init__.py | 2 +
.../models/mail_message_custom_subject.py | 38 ++
.../models/mail_thread.py | 75 +++
.../readme/CONFIGURE.rst | 8 +
.../readme/CONTRIBUTORS.rst | 4 +
.../readme/DESCRIPTION.rst | 2 +
.../readme/USAGE.rst | 5 +
.../security/ir.model.access.csv | 3 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 458 ++++++++++++++++++
.../tests/__init__.py | 1 +
.../test_mail_notification_custom_subject.py | 245 ++++++++++
...mail_notification_custom_subject_views.xml | 50 ++
18 files changed, 1224 insertions(+)
create mode 100644 mail_notification_custom_subject/README.rst
create mode 100644 mail_notification_custom_subject/__init__.py
create mode 100644 mail_notification_custom_subject/__manifest__.py
create mode 100644 mail_notification_custom_subject/i18n/es_ES.po
create mode 100644 mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
create mode 100644 mail_notification_custom_subject/models/__init__.py
create mode 100644 mail_notification_custom_subject/models/mail_message_custom_subject.py
create mode 100644 mail_notification_custom_subject/models/mail_thread.py
create mode 100644 mail_notification_custom_subject/readme/CONFIGURE.rst
create mode 100644 mail_notification_custom_subject/readme/CONTRIBUTORS.rst
create mode 100644 mail_notification_custom_subject/readme/DESCRIPTION.rst
create mode 100644 mail_notification_custom_subject/readme/USAGE.rst
create mode 100644 mail_notification_custom_subject/security/ir.model.access.csv
create mode 100644 mail_notification_custom_subject/static/description/icon.png
create mode 100644 mail_notification_custom_subject/static/description/index.html
create mode 100644 mail_notification_custom_subject/tests/__init__.py
create mode 100644 mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
create mode 100644 mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst
new file mode 100644
index 0000000000..4aa6426432
--- /dev/null
+++ b/mail_notification_custom_subject/README.rst
@@ -0,0 +1,106 @@
+================================
+Mail Notification Custom Subject
+================================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Production/Stable
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
+ :target: https://github.com/OCA/social/tree/12.0/mail_notification_custom_subject
+ :alt: OCA/social
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_notification_custom_subject
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/205/12.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows you to specify templates to override the subject on the notification
+emails sent by Odoo
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Configuration
+=============
+
+
+* Activate access to **Technical Features** (debug mode).
+* Go to **Settings > Technical > Email > Subject Replacement Templates**
+* Create a new template.
+
+ * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo.
+ * The field **Subject Template** accepts `Jinjah` expressions.
+ * The field **Replace** specifies if the template should replace existing content or append to it.
+
+Usage
+=====
+
+To use this module, you need to:
+
+* Open the chatter in Odoo (e.g. Open an Invoice).
+* Send a message.
+* Observe the rendered Subject template.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* Tecnativa
+
+ * Pedro M. Baeza
+ * João Marques
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-joao-p-marques| image:: https://github.com/joao-p-marques.png?size=40px
+ :target: https://github.com/joao-p-marques
+ :alt: joao-p-marques
+
+Current `maintainer `__:
+
+|maintainer-joao-p-marques|
+
+This module is part of the `OCA/social `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/mail_notification_custom_subject/__init__.py b/mail_notification_custom_subject/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/mail_notification_custom_subject/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py
new file mode 100644
index 0000000000..1c970d302a
--- /dev/null
+++ b/mail_notification_custom_subject/__manifest__.py
@@ -0,0 +1,23 @@
+# Copyright 2020-2021 Tecnativa - João Marques
+# Copyright 2021 Tecnativa - Pedro M. Baeza
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+{
+ "name": "Mail Notification Custom Subject",
+ "summary": "Apply a custom subject to mail notifications",
+ "version": "12.0.1.0.0",
+ "category": "Social Network",
+ "website": "https://github.com/OCA/social/",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "installable": True,
+ "depends": [
+ "mail",
+ ],
+ "data": [
+ "security/ir.model.access.csv",
+ "views/mail_notification_custom_subject_views.xml",
+ ],
+ "development_status": "Production/Stable",
+ "maintainers": ["joao-p-marques"],
+}
diff --git a/mail_notification_custom_subject/i18n/es_ES.po b/mail_notification_custom_subject/i18n/es_ES.po
new file mode 100644
index 0000000000..a1147e83c6
--- /dev/null
+++ b/mail_notification_custom_subject/i18n/es_ES.po
@@ -0,0 +1,69 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mail_notification_custom_subject
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-01-05 09:11+0000\n"
+"PO-Revision-Date: 2021-01-05 09:17+0000\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
+"Last-Translator: \n"
+"Language: es_ES\n"
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:150
+#, python-format
+msgid "Append After"
+msgstr "Añadir después"
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:149
+#, python-format
+msgid "Append Before"
+msgstr "Añadir antes"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model,name:mail_notification_custom_subject.model_mail_thread
+msgid "Email Thread"
+msgstr "Hilo de correo electrónico"
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:238
+#, python-format
+msgid "Failed to render template %r using values %r"
+msgstr "Error al procesar la plantilla %r usando los valores %r"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject
+msgid "Mail Message Custom Subject"
+msgstr "Asunto Personalizado en Mensaje de Correo"
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:151
+#, python-format
+msgid "Replace"
+msgstr "Sustituir"
+
+#. module: mail_notification_custom_subject
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form
+msgid "Subject (placeholders may be used here)"
+msgstr "Asunto (se pueden utilizar aquí expresiones de campos)"
+
+#. module: mail_notification_custom_subject
+#: model:ir.actions.act_window,name:mail_notification_custom_subject.action_mail_notification_custom_subject_tree_all
+#: model:ir.ui.menu,name:mail_notification_custom_subject.menu_mail_notification_custom_subject
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form
+msgid "Subject Replacement Templates"
+msgstr "Plantillas de Sustitución de Asuntos"
+
+#. module: mail_notification_custom_subject
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree
+msgid "Templates"
+msgstr "Plantillas"
diff --git a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
new file mode 100644
index 0000000000..5b48b0882b
--- /dev/null
+++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
@@ -0,0 +1,134 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * mail_notification_custom_subject
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:31
+#: selection:mail.message.custom.subject,position:0
+#, python-format
+msgid "Append After"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:30
+#: selection:mail.message.custom.subject,position:0
+#, python-format
+msgid "Append Before"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subtype_ids
+msgid "Applied Subtypes"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model,name:mail_notification_custom_subject.model_mail_thread
+msgid "Email Thread"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id
+msgid "ID"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject
+msgid "Mail Message Custom Subject"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__model_id
+msgid "Model"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__model_id
+msgid "Model where this template applies"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__position
+msgid "Position"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:32
+#: selection:mail.message.custom.subject,position:0
+#, python-format
+msgid "Replace"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form
+msgid "Subject (placeholders may be used here)"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.actions.act_window,name:mail_notification_custom_subject.action_mail_notification_custom_subject_tree_all
+#: model:ir.ui.menu,name:mail_notification_custom_subject.menu_mail_notification_custom_subject
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form
+msgid "Subject Replacement Templates"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template
+msgid "Subject Template"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__name
+msgid "Template Name"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree
+msgid "Templates"
+msgstr ""
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position
+msgid "Whether to replace, append at beggining or append at end to other templates that apply to a given context"
+msgstr ""
+
diff --git a/mail_notification_custom_subject/models/__init__.py b/mail_notification_custom_subject/models/__init__.py
new file mode 100644
index 0000000000..3e5486eab2
--- /dev/null
+++ b/mail_notification_custom_subject/models/__init__.py
@@ -0,0 +1,2 @@
+from . import mail_thread
+from . import mail_message_custom_subject
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
new file mode 100644
index 0000000000..0fb5bbd0c8
--- /dev/null
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -0,0 +1,38 @@
+# Copyright 2020 Tecnativa - João Marques
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, fields, models
+
+
+class MailMessageCustomSubject(models.Model):
+ _name = "mail.message.custom.subject"
+ _description = "Mail Message Custom Subject"
+
+ name = fields.Char(string="Template Name")
+ model_id = fields.Many2one(
+ comodel_name="ir.model",
+ string="Model",
+ required=True,
+ help="Model where this template applies",
+ )
+ subtype_ids = fields.Many2many(
+ comodel_name="mail.message.subtype",
+ string="Applied Subtypes",
+ required=True,
+ )
+ subject_template = fields.Char(
+ string="Subject Template",
+ required=True,
+ help="Subject (placeholders may be used here)",
+ )
+ position = fields.Selection(
+ selection=[
+ ("append_before", _("Append Before")),
+ ("append_after", _("Append After")),
+ ("replace", _("Replace")),
+ ],
+ string="Position",
+ default="replace",
+ help="Whether to replace, append at beggining or append at end to other"
+ " templates that apply to a given context",
+ )
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
new file mode 100644
index 0000000000..c26742ed43
--- /dev/null
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -0,0 +1,75 @@
+# Copyright 2020-2021 Tecnativa - João Marques
+# Copyright 2021 Tecnativa - Pedro M. Baeza
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, models
+
+
+class MailThread(models.AbstractModel):
+ _inherit = "mail.thread"
+
+ @api.returns("mail.message", lambda value: value.id)
+ def message_post(
+ self,
+ body="",
+ subject=None,
+ message_type="notification",
+ subtype=None,
+ parent_id=False,
+ attachments=None,
+ notif_layout=False,
+ add_sign=True,
+ model_description=False,
+ mail_auto_delete=True,
+ **kwargs
+ ):
+ subtype_id = kwargs.get('subtype_id', False)
+ if not subtype_id:
+ subtype = subtype or 'mt_note'
+ if '.' not in subtype:
+ subtype = 'mail.%s' % subtype
+ subtype_id = self.env['ir.model.data'].xmlid_to_res_id(
+ subtype, raise_if_not_found=False,
+ )
+ if subtype_id:
+ custom_subjects = self.env["mail.message.custom.subject"].search(
+ [
+ ("model_id.model", "=", self._name),
+ ("subtype_ids", "=", subtype_id),
+ ]
+ )
+ if not subject:
+ subject = 'Re: %s' % self.env["mail.message"].with_context(
+ default_model=self._name,
+ default_res_id=self.id,
+ )._get_record_name({})
+ for template in custom_subjects:
+ try:
+ rendered_subject_template = self.env[
+ "mail.template"
+ ]._render_template(
+ template_txt=template.subject_template,
+ model=self._name,
+ res_ids=self.id,
+ )
+ if template.position == "replace":
+ subject = rendered_subject_template
+ elif template.position == "append_before":
+ subject = rendered_subject_template + subject
+ elif template.position == "append_after":
+ subject += rendered_subject_template
+ except Exception:
+ rendered_subject_template = False
+ return super().message_post(
+ body=body,
+ subject=subject,
+ message_type=message_type,
+ subtype=subtype,
+ parent_id=parent_id,
+ attachments=attachments,
+ notif_layout=notif_layout,
+ add_sign=add_sign,
+ model_description=model_description,
+ mail_auto_delete=mail_auto_delete,
+ **kwargs
+ )
diff --git a/mail_notification_custom_subject/readme/CONFIGURE.rst b/mail_notification_custom_subject/readme/CONFIGURE.rst
new file mode 100644
index 0000000000..86bed07b43
--- /dev/null
+++ b/mail_notification_custom_subject/readme/CONFIGURE.rst
@@ -0,0 +1,8 @@
+
+* Activate access to **Technical Features** (debug mode).
+* Go to **Settings > Technical > Email > Subject Replacement Templates**
+* Create a new template.
+
+ * The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo.
+ * The field **Subject Template** accepts `Jinjah` expressions.
+ * The field **Replace** specifies if the template should replace existing content or append to it.
diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
new file mode 100644
index 0000000000..b0f16877f3
--- /dev/null
+++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* Tecnativa
+
+ * Pedro M. Baeza
+ * João Marques
diff --git a/mail_notification_custom_subject/readme/DESCRIPTION.rst b/mail_notification_custom_subject/readme/DESCRIPTION.rst
new file mode 100644
index 0000000000..2b0727f1ad
--- /dev/null
+++ b/mail_notification_custom_subject/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module allows you to specify templates to override the subject on the notification
+emails sent by Odoo
diff --git a/mail_notification_custom_subject/readme/USAGE.rst b/mail_notification_custom_subject/readme/USAGE.rst
new file mode 100644
index 0000000000..49bed60a72
--- /dev/null
+++ b/mail_notification_custom_subject/readme/USAGE.rst
@@ -0,0 +1,5 @@
+To use this module, you need to:
+
+* Open the chatter in Odoo (e.g. Open an Invoice).
+* Send a message.
+* Observe the rendered Subject template.
diff --git a/mail_notification_custom_subject/security/ir.model.access.csv b/mail_notification_custom_subject/security/ir.model.access.csv
new file mode 100644
index 0000000000..bc15034ae6
--- /dev/null
+++ b/mail_notification_custom_subject/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_mail_notification_custom_subject_user,mail_notification_custom_object,model_mail_message_custom_subject,base.group_user,1,0,0,0
+access_mail_notification_custom_subject_admin,mail_notification_custom_object,model_mail_message_custom_subject,base.group_system,1,1,1,1
diff --git a/mail_notification_custom_subject/static/description/icon.png b/mail_notification_custom_subject/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html
new file mode 100644
index 0000000000..21bf700d99
--- /dev/null
+++ b/mail_notification_custom_subject/static/description/index.html
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+Mail Notification Custom Subject
+
+
+
+
+
Mail Notification Custom Subject
+
+
+
+
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 0000000000..b0f2b2eff5
--- /dev/null
+++ b/mail_notification_custom_subject/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_mail_notification_custom_subject
diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
new file mode 100644
index 0000000000..7ecde6e0cd
--- /dev/null
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -0,0 +1,245 @@
+# Copyright 2020 Tecnativa - João Marques
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests import common
+
+
+class TestMailNotificationCustomSubject(common.TransactionCase):
+ def setUp(self):
+ super(TestMailNotificationCustomSubject, self).setUp()
+ self.partner_1 = self.env["res.partner"].create(
+ {
+ "name": "Test partner 1",
+ "supplier": True,
+ "email": "partner1@example.com",
+ }
+ )
+ self.partner_2 = self.env["res.partner"].create(
+ {
+ "name": "Test partner 2",
+ "supplier": True,
+ "email": "partner2@example.com",
+ }
+ )
+
+ def test_email_subject_template_overrides(self):
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 1",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${object.name or 'n/a'} and something more",
+ }
+ )
+ # Send message in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment"
+ )
+ # Get message and check subject
+ self.assertEquals(mail_message_1.subject, "Test partner 1 and something more")
+
+ # Send message in partner 2
+ mail_message_2 = self.partner_2.message_post(
+ body="Test", subtype="mail.mt_comment"
+ )
+ # Get message and check subject
+ self.assertEquals(mail_message_2.subject, "Test partner 2 and something more")
+
+ # Explicit subject should also be overwritten
+ mail_message_3 = self.partner_2.message_post(
+ body="Test", subtype="mail.mt_comment", subject="Test"
+ )
+ # Get message and check subject
+ self.assertEquals(mail_message_3.subject, "Test partner 2 and something more")
+
+ def test_email_subject_template_normal(self):
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 1",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${object.name or 'n/a'} and something more",
+ }
+ )
+ # Send note in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_note", subject="Test"
+ )
+ # Get message and check subject. Subject Template should not apply
+ self.assertEquals(mail_message_1.subject, "Test")
+
+ def test_email_subject_template_multi(self):
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 1",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${object.name or 'n/a'} and something more",
+ }
+ )
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 2",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${object.name or 'n/a'} and something different",
+ }
+ )
+ # Send message in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment"
+ )
+ # Get message and check subject
+ self.assertEquals(
+ mail_message_1.subject, "Test partner 1 and something different"
+ )
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 3",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${' and yet something else'}",
+ "position": "append_after",
+ }
+ )
+ # Send message in partner
+ mail_message_2 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment"
+ )
+ # Get message and check subject
+ self.assertEquals(
+ mail_message_2.subject,
+ "Test partner 1 and something different and yet something else",
+ )
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 4",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${'Re: '}",
+ "position": "append_before",
+ }
+ )
+ # Send message in partner
+ mail_message_3 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment"
+ )
+ # Get message and check subject
+ self.assertEquals(
+ mail_message_3.subject,
+ "Re: Test partner 1 and something different and yet something else",
+ )
+
+ def test_email_subject_template_w_original(self):
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test template 1",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${' and something more'}",
+ "position": "append_after",
+ }
+ )
+ # Send message in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment", subject="Test",
+ )
+ # Get message and check subject
+ self.assertEquals(
+ mail_message_1.subject, "Test and something more"
+ )
+
+ def test_bad_template_does_not_break(self):
+ self.env["mail.message.custom.subject"].create(
+ {
+ "name": "Test bad template 1",
+ "model_id": self.env.ref("base.model_res_partner").id,
+ "subtype_ids": [
+ (
+ 6,
+ 0,
+ [
+ self.env.ref("mail.mt_comment").id,
+ ],
+ )
+ ],
+ "subject_template": "${obaject.number_a} and something",
+ "position": "append_after",
+ }
+ )
+ # Send message in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment", subject="Test",
+ )
+ # Get message and check subject
+ # No exception should be raised but subject should remain as original.
+ self.assertEquals(
+ mail_message_1.subject, "Test"
+ )
+
+ def test_no_template_default_result(self):
+ # Send message in partner
+ mail_message_1 = self.partner_1.message_post(
+ body="Test", subtype="mail.mt_comment", subject="Test partner 1"
+ )
+ # Get message and check subject
+ # No exception should be raised but subject should remain as original.
+ self.assertEquals(
+ mail_message_1.subject, "Test partner 1"
+ )
diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
new file mode 100644
index 0000000000..7dd4e5a94e
--- /dev/null
+++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
@@ -0,0 +1,50 @@
+
+
+
+
+ mail.message.custom.subject.form
+ mail.message.custom.subject
+
+
+
+
+
+
+ mail.message.custom.subject.tree
+ mail.message.custom.subject
+
+
+
+
+
+
+
+
+
+
+
+ Subject Replacement Templates
+ mail.message.custom.subject
+ form
+ form,tree
+
+
+
+
+
+
+
From e5bc9035e49c63741e30318adbf35a4aede87ace Mon Sep 17 00:00:00 2001
From: Carlos Roca
Date: Mon, 15 Feb 2021 14:28:18 +0100
Subject: [PATCH 02/25] [IMP] mail_notification_custom_subject: black, isort,
prettier
---
.../__manifest__.py | 6 +-
.../models/mail_message_custom_subject.py | 4 +-
.../models/mail_thread.py | 20 ++--
.../test_mail_notification_custom_subject.py | 94 +++----------------
...mail_notification_custom_subject_views.xml | 36 ++++---
5 files changed, 46 insertions(+), 114 deletions(-)
diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py
index 1c970d302a..7302252f4d 100644
--- a/mail_notification_custom_subject/__manifest__.py
+++ b/mail_notification_custom_subject/__manifest__.py
@@ -7,13 +7,11 @@
"summary": "Apply a custom subject to mail notifications",
"version": "12.0.1.0.0",
"category": "Social Network",
- "website": "https://github.com/OCA/social/",
+ "website": "https://github.com/OCA/social",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
- "depends": [
- "mail",
- ],
+ "depends": ["mail"],
"data": [
"security/ir.model.access.csv",
"views/mail_notification_custom_subject_views.xml",
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
index 0fb5bbd0c8..60a713a541 100644
--- a/mail_notification_custom_subject/models/mail_message_custom_subject.py
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -16,9 +16,7 @@ class MailMessageCustomSubject(models.Model):
help="Model where this template applies",
)
subtype_ids = fields.Many2many(
- comodel_name="mail.message.subtype",
- string="Applied Subtypes",
- required=True,
+ comodel_name="mail.message.subtype", string="Applied Subtypes", required=True,
)
subject_template = fields.Char(
string="Subject Template",
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
index c26742ed43..8743fcb809 100644
--- a/mail_notification_custom_subject/models/mail_thread.py
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -23,25 +23,21 @@ def message_post(
mail_auto_delete=True,
**kwargs
):
- subtype_id = kwargs.get('subtype_id', False)
+ subtype_id = kwargs.get("subtype_id", False)
if not subtype_id:
- subtype = subtype or 'mt_note'
- if '.' not in subtype:
- subtype = 'mail.%s' % subtype
- subtype_id = self.env['ir.model.data'].xmlid_to_res_id(
+ subtype = subtype or "mt_note"
+ if "." not in subtype:
+ subtype = "mail.%s" % subtype
+ subtype_id = self.env["ir.model.data"].xmlid_to_res_id(
subtype, raise_if_not_found=False,
)
if subtype_id:
custom_subjects = self.env["mail.message.custom.subject"].search(
- [
- ("model_id.model", "=", self._name),
- ("subtype_ids", "=", subtype_id),
- ]
+ [("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)]
)
if not subject:
- subject = 'Re: %s' % self.env["mail.message"].with_context(
- default_model=self._name,
- default_res_id=self.id,
+ subject = "Re: %s" % self.env["mail.message"].with_context(
+ default_model=self._name, default_res_id=self.id,
)._get_record_name({})
for template in custom_subjects:
try:
diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
index 7ecde6e0cd..dfd672e314 100644
--- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -1,6 +1,6 @@
# Copyright 2020 Tecnativa - João Marques
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
+# pylint: disable=C8107
from odoo.tests import common
@@ -27,15 +27,7 @@ def test_email_subject_template_overrides(self):
{
"name": "Test template 1",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${object.name or 'n/a'} and something more",
}
)
@@ -65,15 +57,7 @@ def test_email_subject_template_normal(self):
{
"name": "Test template 1",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${object.name or 'n/a'} and something more",
}
)
@@ -89,15 +73,7 @@ def test_email_subject_template_multi(self):
{
"name": "Test template 1",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${object.name or 'n/a'} and something more",
}
)
@@ -105,15 +81,7 @@ def test_email_subject_template_multi(self):
{
"name": "Test template 2",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${object.name or 'n/a'} and something different",
}
)
@@ -129,15 +97,7 @@ def test_email_subject_template_multi(self):
{
"name": "Test template 3",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${' and yet something else'}",
"position": "append_after",
}
@@ -155,15 +115,7 @@ def test_email_subject_template_multi(self):
{
"name": "Test template 4",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${'Re: '}",
"position": "append_before",
}
@@ -183,15 +135,7 @@ def test_email_subject_template_w_original(self):
{
"name": "Test template 1",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${' and something more'}",
"position": "append_after",
}
@@ -201,24 +145,14 @@ def test_email_subject_template_w_original(self):
body="Test", subtype="mail.mt_comment", subject="Test",
)
# Get message and check subject
- self.assertEquals(
- mail_message_1.subject, "Test and something more"
- )
+ self.assertEquals(mail_message_1.subject, "Test and something more")
def test_bad_template_does_not_break(self):
self.env["mail.message.custom.subject"].create(
{
"name": "Test bad template 1",
"model_id": self.env.ref("base.model_res_partner").id,
- "subtype_ids": [
- (
- 6,
- 0,
- [
- self.env.ref("mail.mt_comment").id,
- ],
- )
- ],
+ "subtype_ids": [(6, 0, [self.env.ref("mail.mt_comment").id])],
"subject_template": "${obaject.number_a} and something",
"position": "append_after",
}
@@ -229,9 +163,7 @@ def test_bad_template_does_not_break(self):
)
# Get message and check subject
# No exception should be raised but subject should remain as original.
- self.assertEquals(
- mail_message_1.subject, "Test"
- )
+ self.assertEquals(mail_message_1.subject, "Test")
def test_no_template_default_result(self):
# Send message in partner
@@ -240,6 +172,4 @@ def test_no_template_default_result(self):
)
# Get message and check subject
# No exception should be raised but subject should remain as original.
- self.assertEquals(
- mail_message_1.subject, "Test partner 1"
- )
+ self.assertEquals(mail_message_1.subject, "Test partner 1")
diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
index 7dd4e5a94e..e2b333002a 100644
--- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
+++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
@@ -1,4 +1,4 @@
-
+
@@ -8,14 +8,17 @@
@@ -27,15 +30,18 @@
mail.message.custom.subject
-
-
-
-
+
+
+
+
-
+
Subject Replacement Templates
mail.message.custom.subject
form
@@ -43,8 +49,12 @@
-
+
From ea99a7e69f6f46bdd90904f28dbb8bdfafcfc534 Mon Sep 17 00:00:00 2001
From: Carlos Roca
Date: Tue, 16 Feb 2021 08:54:52 +0100
Subject: [PATCH 03/25] [MIG] mail_notification_custom_subject: Migration to
v13.0
---
mail_notification_custom_subject/README.rst | 13 +--
.../__manifest__.py | 2 +-
.../i18n/es_ES.po | 98 ++++++++++++++++---
.../i18n/mail_notification_custom_subject.pot | 23 ++---
.../models/mail_message_custom_subject.py | 8 +-
.../readme/CONFIGURE.rst | 2 +-
.../readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 9 +-
.../test_mail_notification_custom_subject.py | 14 +--
...mail_notification_custom_subject_views.xml | 1 -
10 files changed, 114 insertions(+), 57 deletions(-)
diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst
index 4aa6426432..b6a9ecbe76 100644
--- a/mail_notification_custom_subject/README.rst
+++ b/mail_notification_custom_subject/README.rst
@@ -14,13 +14,13 @@ Mail Notification Custom Subject
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
- :target: https://github.com/OCA/social/tree/12.0/mail_notification_custom_subject
+ :target: https://github.com/OCA/social/tree/13.0/mail_notification_custom_subject
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_notification_custom_subject
+ :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_notification_custom_subject
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/205/12.0
+ :target: https://runbot.odoo-community.org/runbot/205/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -42,7 +42,7 @@ Configuration
* Create a new template.
* The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo.
- * The field **Subject Template** accepts `Jinjah` expressions.
+ * The field **Subject Template** accepts `Jinja `__ expressions.
* The field **Replace** specifies if the template should replace existing content or append to it.
Usage
@@ -60,7 +60,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -79,6 +79,7 @@ Contributors
* Pedro M. Baeza
* João Marques
+ * Carlos Roca
Maintainers
~~~~~~~~~~~
@@ -101,6 +102,6 @@ Current `maintainer `__:
|maintainer-joao-p-marques|
-This module is part of the `OCA/social `_ project on GitHub.
+This module is part of the `OCA/social `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py
index 7302252f4d..10429becc6 100644
--- a/mail_notification_custom_subject/__manifest__.py
+++ b/mail_notification_custom_subject/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Mail Notification Custom Subject",
"summary": "Apply a custom subject to mail notifications",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/mail_notification_custom_subject/i18n/es_ES.po b/mail_notification_custom_subject/i18n/es_ES.po
index a1147e83c6..0f19a648fa 100644
--- a/mail_notification_custom_subject/i18n/es_ES.po
+++ b/mail_notification_custom_subject/i18n/es_ES.po
@@ -6,39 +6,71 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-01-05 09:11+0000\n"
-"PO-Revision-Date: 2021-01-05 09:17+0000\n"
+"POT-Creation-Date: 2021-02-16 10:56+0000\n"
+"PO-Revision-Date: 2021-02-16 11:56+0100\n"
+"Last-Translator: Carlos \n"
"Language-Team: \n"
+"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.4.2\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
+"X-Generator: Poedit 2.0.6\n"
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:150
-#, python-format
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_after
msgid "Append After"
msgstr "Añadir después"
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:149
-#, python-format
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_before
msgid "Append Before"
msgstr "Añadir antes"
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subtype_ids
+msgid "Applied Subtypes"
+msgstr "Subtipos aplicados"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
#. module: mail_notification_custom_subject
#: model:ir.model,name:mail_notification_custom_subject.model_mail_thread
msgid "Email Thread"
msgstr "Hilo de correo electrónico"
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:238
-#, python-format
-msgid "Failed to render template %r using values %r"
-msgstr "Error al procesar la plantilla %r usando los valores %r"
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id
+msgid "ID"
+msgstr "ID"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_uid
+msgid "Last Updated by"
+msgstr "Última modificación por"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
#. module: mail_notification_custom_subject
#: model:ir.model,name:mail_notification_custom_subject.model_mail_message_custom_subject
@@ -46,12 +78,27 @@ msgid "Mail Message Custom Subject"
msgstr "Asunto Personalizado en Mensaje de Correo"
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:151
-#, python-format
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__model_id
+msgid "Model"
+msgstr "Modelo"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__model_id
+msgid "Model where this template applies"
+msgstr "Modelo en el que se aplica la plantilla"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__position
+msgid "Position"
+msgstr "Posición"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__replace
msgid "Replace"
msgstr "Sustituir"
#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template
#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_form
msgid "Subject (placeholders may be used here)"
msgstr "Asunto (se pueden utilizar aquí expresiones de campos)"
@@ -63,7 +110,28 @@ msgstr "Asunto (se pueden utilizar aquí expresiones de campos)"
msgid "Subject Replacement Templates"
msgstr "Plantillas de Sustitución de Asuntos"
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__subject_template
+#, fuzzy
+msgid "Subject Template"
+msgstr "Plantillas de Sustitución de Asuntos"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__name
+#, fuzzy
+msgid "Template Name"
+msgstr "Plantillas"
+
#. module: mail_notification_custom_subject
#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree
msgid "Templates"
msgstr "Plantillas"
+
+#. module: mail_notification_custom_subject
+#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position
+msgid ""
+"Whether to replace, append at beggining or append at end to other templates "
+"that apply to a given context"
+msgstr ""
+"Ya sea para reemplazar, agregar al principio o agregar al final a otras "
+"plantillas que se aplican a un contexto determinado"
diff --git a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
index 5b48b0882b..ff5b60ad3a 100644
--- a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
+++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * mail_notification_custom_subject
+# * mail_notification_custom_subject
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -14,16 +14,12 @@ msgstr ""
"Plural-Forms: \n"
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:31
-#: selection:mail.message.custom.subject,position:0
-#, python-format
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_after
msgid "Append After"
msgstr ""
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:30
-#: selection:mail.message.custom.subject,position:0
-#, python-format
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__append_before
msgid "Append Before"
msgstr ""
@@ -93,9 +89,7 @@ msgid "Position"
msgstr ""
#. module: mail_notification_custom_subject
-#: code:addons/mail_notification_custom_subject/models/mail_message_custom_subject.py:32
-#: selection:mail.message.custom.subject,position:0
-#, python-format
+#: model:ir.model.fields.selection,name:mail_notification_custom_subject.selection__mail_message_custom_subject__position__replace
msgid "Replace"
msgstr ""
@@ -129,6 +123,7 @@ msgstr ""
#. module: mail_notification_custom_subject
#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position
-msgid "Whether to replace, append at beggining or append at end to other templates that apply to a given context"
+msgid ""
+"Whether to replace, append at beggining or append at end to other templates "
+"that apply to a given context"
msgstr ""
-
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
index 60a713a541..5aaeeccc1e 100644
--- a/mail_notification_custom_subject/models/mail_message_custom_subject.py
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -1,7 +1,7 @@
# Copyright 2020 Tecnativa - João Marques
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from odoo import _, fields, models
+from odoo import fields, models
class MailMessageCustomSubject(models.Model):
@@ -25,9 +25,9 @@ class MailMessageCustomSubject(models.Model):
)
position = fields.Selection(
selection=[
- ("append_before", _("Append Before")),
- ("append_after", _("Append After")),
- ("replace", _("Replace")),
+ ("append_before", "Append Before"),
+ ("append_after", "Append After"),
+ ("replace", "Replace"),
],
string="Position",
default="replace",
diff --git a/mail_notification_custom_subject/readme/CONFIGURE.rst b/mail_notification_custom_subject/readme/CONFIGURE.rst
index 86bed07b43..c777ed3ae9 100644
--- a/mail_notification_custom_subject/readme/CONFIGURE.rst
+++ b/mail_notification_custom_subject/readme/CONFIGURE.rst
@@ -4,5 +4,5 @@
* Create a new template.
* The field **Model** specifies the model to which the subject template should apply in the notification emails sent by Odoo.
- * The field **Subject Template** accepts `Jinjah` expressions.
+ * The field **Subject Template** accepts `Jinja `__ expressions.
* The field **Replace** specifies if the template should replace existing content or append to it.
diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
index b0f16877f3..e7d295ba95 100644
--- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
+++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
@@ -2,3 +2,4 @@
* Pedro M. Baeza
* João Marques
+ * Carlos Roca
diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html
index 21bf700d99..49265e85b4 100644
--- a/mail_notification_custom_subject/static/description/index.html
+++ b/mail_notification_custom_subject/static/description/index.html
@@ -367,7 +367,7 @@ Mail Notification Custom Subject
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
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 dfd672e314..e9a89967df 100644
--- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -6,20 +6,12 @@
class TestMailNotificationCustomSubject(common.TransactionCase):
def setUp(self):
- super(TestMailNotificationCustomSubject, self).setUp()
+ super().setUp()
self.partner_1 = self.env["res.partner"].create(
- {
- "name": "Test partner 1",
- "supplier": True,
- "email": "partner1@example.com",
- }
+ {"name": "Test partner 1", "email": "partner1@example.com"}
)
self.partner_2 = self.env["res.partner"].create(
- {
- "name": "Test partner 2",
- "supplier": True,
- "email": "partner2@example.com",
- }
+ {"name": "Test partner 2", "email": "partner2@example.com"}
)
def test_email_subject_template_overrides(self):
diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
index e2b333002a..14ecd80d6b 100644
--- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
+++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
@@ -44,7 +44,6 @@
>
Subject Replacement Templates
mail.message.custom.subject
- form
form,tree
From 469320a5b4fdbf1a7ff708f6e0247c7dfe6d31f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
Date: Mon, 19 Apr 2021 14:26:38 +0200
Subject: [PATCH 04/25] [IMP] mail_notification_custom_subject: Add comment to
explain test_bad_template_does_not_break test
---
.../tests/test_mail_notification_custom_subject.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
index e9a89967df..26222b0fa4 100644
--- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -140,6 +140,7 @@ def test_email_subject_template_w_original(self):
self.assertEquals(mail_message_1.subject, "Test and something more")
def test_bad_template_does_not_break(self):
+ """Create template with error (obaject) to test error."""
self.env["mail.message.custom.subject"].create(
{
"name": "Test bad template 1",
From a2c651812f8367463b6d070c3c01eea37a355b41 Mon Sep 17 00:00:00 2001
From: Naglis Jonaitis
Date: Thu, 12 Aug 2021 12:57:11 +0300
Subject: [PATCH 05/25] [IMP] mail_notification_custom_subject: black, isort,
prettier
---
.../models/mail_message_custom_subject.py | 4 +++-
.../models/mail_thread.py | 15 +++++++++++----
.../test_mail_notification_custom_subject.py | 8 ++++++--
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
index 5aaeeccc1e..19a48f65d1 100644
--- a/mail_notification_custom_subject/models/mail_message_custom_subject.py
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -16,7 +16,9 @@ class MailMessageCustomSubject(models.Model):
help="Model where this template applies",
)
subtype_ids = fields.Many2many(
- comodel_name="mail.message.subtype", string="Applied Subtypes", required=True,
+ comodel_name="mail.message.subtype",
+ string="Applied Subtypes",
+ required=True,
)
subject_template = fields.Char(
string="Subject Template",
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
index 8743fcb809..96d9abe89e 100644
--- a/mail_notification_custom_subject/models/mail_thread.py
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -29,16 +29,23 @@ def message_post(
if "." not in subtype:
subtype = "mail.%s" % subtype
subtype_id = self.env["ir.model.data"].xmlid_to_res_id(
- subtype, raise_if_not_found=False,
+ subtype,
+ raise_if_not_found=False,
)
if subtype_id:
custom_subjects = self.env["mail.message.custom.subject"].search(
[("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)]
)
if not subject:
- subject = "Re: %s" % self.env["mail.message"].with_context(
- default_model=self._name, default_res_id=self.id,
- )._get_record_name({})
+ subject = (
+ "Re: %s"
+ % self.env["mail.message"]
+ .with_context(
+ default_model=self._name,
+ default_res_id=self.id,
+ )
+ ._get_record_name({})
+ )
for template in custom_subjects:
try:
rendered_subject_template = self.env[
diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
index 26222b0fa4..68cbc7f720 100644
--- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -134,7 +134,9 @@ def test_email_subject_template_w_original(self):
)
# Send message in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment", subject="Test",
+ body="Test",
+ subtype="mail.mt_comment",
+ subject="Test",
)
# Get message and check subject
self.assertEquals(mail_message_1.subject, "Test and something more")
@@ -152,7 +154,9 @@ def test_bad_template_does_not_break(self):
)
# Send message in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment", subject="Test",
+ body="Test",
+ subtype="mail.mt_comment",
+ subject="Test",
)
# Get message and check subject
# No exception should be raised but subject should remain as original.
From 1249a3e1928c7e40f3a88000e468d1f2fa2f45f8 Mon Sep 17 00:00:00 2001
From: Naglis Jonaitis
Date: Thu, 12 Aug 2021 13:58:35 +0300
Subject: [PATCH 06/25] [MIG] mail_notification_custom_subject: Migration to
14.0
---
.../__manifest__.py | 2 +-
.../models/mail_message_custom_subject.py | 1 +
.../models/mail_thread.py | 42 ++++++-----
.../readme/CONTRIBUTORS.rst | 3 +
.../test_mail_notification_custom_subject.py | 71 ++++++++++---------
...mail_notification_custom_subject_views.xml | 4 +-
6 files changed, 71 insertions(+), 52 deletions(-)
diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py
index 10429becc6..11b9545574 100644
--- a/mail_notification_custom_subject/__manifest__.py
+++ b/mail_notification_custom_subject/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Mail Notification Custom Subject",
"summary": "Apply a custom subject to mail notifications",
- "version": "13.0.1.0.0",
+ "version": "14.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
index 19a48f65d1..fe6fda0f3a 100644
--- a/mail_notification_custom_subject/models/mail_message_custom_subject.py
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -14,6 +14,7 @@ class MailMessageCustomSubject(models.Model):
string="Model",
required=True,
help="Model where this template applies",
+ ondelete="cascade",
)
subtype_ids = fields.Many2many(
comodel_name="mail.message.subtype",
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
index 96d9abe89e..6c97088674 100644
--- a/mail_notification_custom_subject/models/mail_thread.py
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -11,25 +11,27 @@ class MailThread(models.AbstractModel):
@api.returns("mail.message", lambda value: value.id)
def message_post(
self,
+ *,
body="",
subject=None,
message_type="notification",
- subtype=None,
+ email_from=None,
+ author_id=None,
parent_id=False,
+ subtype_xmlid=None,
+ subtype_id=False,
+ partner_ids=None,
+ channel_ids=None,
attachments=None,
- notif_layout=False,
+ attachment_ids=None,
add_sign=True,
- model_description=False,
- mail_auto_delete=True,
+ record_name=False,
**kwargs
):
subtype_id = kwargs.get("subtype_id", False)
- if not subtype_id:
- subtype = subtype or "mt_note"
- if "." not in subtype:
- subtype = "mail.%s" % subtype
+ if not subtype_id and subtype_xmlid:
subtype_id = self.env["ir.model.data"].xmlid_to_res_id(
- subtype,
+ subtype_xmlid,
raise_if_not_found=False,
)
if subtype_id:
@@ -51,10 +53,12 @@ def message_post(
rendered_subject_template = self.env[
"mail.template"
]._render_template(
- template_txt=template.subject_template,
+ template_src=template.subject_template,
model=self._name,
- res_ids=self.id,
- )
+ res_ids=[self.id],
+ )[
+ self.id
+ ]
if template.position == "replace":
subject = rendered_subject_template
elif template.position == "append_before":
@@ -67,12 +71,16 @@ def message_post(
body=body,
subject=subject,
message_type=message_type,
- subtype=subtype,
+ email_from=email_from,
+ author_id=author_id,
parent_id=parent_id,
+ subtype_xmlid=subtype_xmlid,
+ subtype_id=subtype_id,
+ partner_ids=partner_ids,
+ channel_ids=channel_ids,
attachments=attachments,
- notif_layout=notif_layout,
+ attachment_ids=attachment_ids,
add_sign=add_sign,
- model_description=model_description,
- mail_auto_delete=mail_auto_delete,
- **kwargs
+ record_name=record_name,
+ **kwargs,
)
diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
index e7d295ba95..4231ca13b5 100644
--- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
+++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
@@ -3,3 +3,6 @@
* Pedro M. Baeza
* João Marques
* Carlos Roca
+
+* Versada
+ * Naglis Jonaitis
diff --git a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
index 68cbc7f720..bdc736773d 100644
--- a/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
+++ b/mail_notification_custom_subject/tests/test_mail_notification_custom_subject.py
@@ -2,16 +2,22 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# pylint: disable=C8107
from odoo.tests import common
+from odoo.tools import mute_logger
-class TestMailNotificationCustomSubject(common.TransactionCase):
- def setUp(self):
- super().setUp()
- self.partner_1 = self.env["res.partner"].create(
- {"name": "Test partner 1", "email": "partner1@example.com"}
- )
- self.partner_2 = self.env["res.partner"].create(
- {"name": "Test partner 2", "email": "partner2@example.com"}
+class TestMailNotificationCustomSubject(common.SavepointCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.partner_1, cls.partner_2 = (
+ cls.env["res.partner"]
+ .with_context(tracking_disable=True)
+ .create(
+ [
+ {"name": "Test partner 1", "email": "partner1@example.com"},
+ {"name": "Test partner 2", "email": "partner2@example.com"},
+ ]
+ )
)
def test_email_subject_template_overrides(self):
@@ -25,24 +31,24 @@ def test_email_subject_template_overrides(self):
)
# Send message in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment"
+ body="Test", subtype_xmlid="mail.mt_comment"
)
# Get message and check subject
- self.assertEquals(mail_message_1.subject, "Test partner 1 and something more")
+ self.assertEqual(mail_message_1.subject, "Test partner 1 and something more")
# Send message in partner 2
mail_message_2 = self.partner_2.message_post(
- body="Test", subtype="mail.mt_comment"
+ body="Test", subtype_xmlid="mail.mt_comment"
)
# Get message and check subject
- self.assertEquals(mail_message_2.subject, "Test partner 2 and something more")
+ self.assertEqual(mail_message_2.subject, "Test partner 2 and something more")
# Explicit subject should also be overwritten
mail_message_3 = self.partner_2.message_post(
- body="Test", subtype="mail.mt_comment", subject="Test"
+ body="Test", subtype_xmlid="mail.mt_comment", subject="Test"
)
# Get message and check subject
- self.assertEquals(mail_message_3.subject, "Test partner 2 and something more")
+ self.assertEqual(mail_message_3.subject, "Test partner 2 and something more")
def test_email_subject_template_normal(self):
self.env["mail.message.custom.subject"].create(
@@ -55,10 +61,10 @@ def test_email_subject_template_normal(self):
)
# Send note in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_note", subject="Test"
+ body="Test", subtype_xmlid="mail.mt_note", subject="Test"
)
# Get message and check subject. Subject Template should not apply
- self.assertEquals(mail_message_1.subject, "Test")
+ self.assertEqual(mail_message_1.subject, "Test")
def test_email_subject_template_multi(self):
self.env["mail.message.custom.subject"].create(
@@ -79,10 +85,10 @@ def test_email_subject_template_multi(self):
)
# Send message in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment"
+ body="Test", subtype_xmlid="mail.mt_comment"
)
# Get message and check subject
- self.assertEquals(
+ self.assertEqual(
mail_message_1.subject, "Test partner 1 and something different"
)
self.env["mail.message.custom.subject"].create(
@@ -96,10 +102,10 @@ def test_email_subject_template_multi(self):
)
# Send message in partner
mail_message_2 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment"
+ body="Test", subtype_xmlid="mail.mt_comment"
)
# Get message and check subject
- self.assertEquals(
+ self.assertEqual(
mail_message_2.subject,
"Test partner 1 and something different and yet something else",
)
@@ -114,10 +120,10 @@ def test_email_subject_template_multi(self):
)
# Send message in partner
mail_message_3 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment"
+ body="Test", subtype_xmlid="mail.mt_comment"
)
# Get message and check subject
- self.assertEquals(
+ self.assertEqual(
mail_message_3.subject,
"Re: Test partner 1 and something different and yet something else",
)
@@ -135,11 +141,11 @@ def test_email_subject_template_w_original(self):
# Send message in partner
mail_message_1 = self.partner_1.message_post(
body="Test",
- subtype="mail.mt_comment",
+ subtype_xmlid="mail.mt_comment",
subject="Test",
)
# Get message and check subject
- self.assertEquals(mail_message_1.subject, "Test and something more")
+ self.assertEqual(mail_message_1.subject, "Test and something more")
def test_bad_template_does_not_break(self):
"""Create template with error (obaject) to test error."""
@@ -153,20 +159,21 @@ def test_bad_template_does_not_break(self):
}
)
# Send message in partner
- mail_message_1 = self.partner_1.message_post(
- body="Test",
- subtype="mail.mt_comment",
- subject="Test",
- )
+ with mute_logger("odoo.addons.mail.models.mail_render_mixin"):
+ mail_message_1 = self.partner_1.message_post(
+ body="Test",
+ subtype_xmlid="mail.mt_comment",
+ subject="Test",
+ )
# Get message and check subject
# No exception should be raised but subject should remain as original.
- self.assertEquals(mail_message_1.subject, "Test")
+ self.assertEqual(mail_message_1.subject, "Test")
def test_no_template_default_result(self):
# Send message in partner
mail_message_1 = self.partner_1.message_post(
- body="Test", subtype="mail.mt_comment", subject="Test partner 1"
+ body="Test", subtype_xmlid="mail.mt_comment", subject="Test partner 1"
)
# Get message and check subject
# No exception should be raised but subject should remain as original.
- self.assertEquals(mail_message_1.subject, "Test partner 1")
+ self.assertEqual(mail_message_1.subject, "Test partner 1")
diff --git a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
index 14ecd80d6b..6ab1631961 100644
--- a/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
+++ b/mail_notification_custom_subject/views/mail_notification_custom_subject_views.xml
@@ -16,7 +16,7 @@
name="subject_template"
placeholder="Subject (placeholders may be used here)"
/>
-
+
@@ -29,7 +29,7 @@
mail.message.custom.subject.tree
mail.message.custom.subject
-
+
From a5ec604bc37aa724571718f33598a8a8f633eb8c Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Mon, 30 Aug 2021 08:07:43 +0000
Subject: [PATCH 07/25] [UPD] Update mail_notification_custom_subject.pot
[UPD] README.rst
---
mail_notification_custom_subject/README.rst | 13 ++++++++-----
.../i18n/mail_notification_custom_subject.pot | 10 ++++------
.../static/description/index.html | 14 +++++++++++---
3 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst
index b6a9ecbe76..13b55c9d43 100644
--- a/mail_notification_custom_subject/README.rst
+++ b/mail_notification_custom_subject/README.rst
@@ -14,13 +14,13 @@ Mail Notification Custom Subject
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
- :target: https://github.com/OCA/social/tree/13.0/mail_notification_custom_subject
+ :target: https://github.com/OCA/social/tree/14.0/mail_notification_custom_subject
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_notification_custom_subject
+ :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_notification_custom_subject
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/205/13.0
+ :target: https://runbot.odoo-community.org/runbot/205/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -60,7 +60,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -81,6 +81,9 @@ Contributors
* João Marques
* Carlos Roca
+* Versada
+ * Naglis Jonaitis
+
Maintainers
~~~~~~~~~~~
@@ -102,6 +105,6 @@ Current `maintainer `__:
|maintainer-joao-p-marques|
-This module is part of the `OCA/social `_ project on GitHub.
+This module is part of the `OCA/social `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
index ff5b60ad3a..ba3a62327e 100644
--- a/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
+++ b/mail_notification_custom_subject/i18n/mail_notification_custom_subject.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -40,6 +40,7 @@ msgstr ""
#. module: mail_notification_custom_subject
#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__display_name
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread__display_name
msgid "Display Name"
msgstr ""
@@ -50,11 +51,13 @@ msgstr ""
#. module: mail_notification_custom_subject
#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject__id
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread__id
msgid "ID"
msgstr ""
#. module: mail_notification_custom_subject
#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_message_custom_subject____last_update
+#: model:ir.model.fields,field_description:mail_notification_custom_subject.field_mail_thread____last_update
msgid "Last Modified on"
msgstr ""
@@ -116,11 +119,6 @@ msgstr ""
msgid "Template Name"
msgstr ""
-#. module: mail_notification_custom_subject
-#: model_terms:ir.ui.view,arch_db:mail_notification_custom_subject.mail_notification_custom_subject_tree
-msgid "Templates"
-msgstr ""
-
#. module: mail_notification_custom_subject
#: model:ir.model.fields,help:mail_notification_custom_subject.field_mail_message_custom_subject__position
msgid ""
diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html
index 49265e85b4..e0922890bb 100644
--- a/mail_notification_custom_subject/static/description/index.html
+++ b/mail_notification_custom_subject/static/description/index.html
@@ -367,7 +367,7 @@ Mail Notification Custom Subject
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
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.
From 7035abee2baeefe3d5f1f776b864a2a917e38c1e Mon Sep 17 00:00:00 2001
From: Olga Marco
Date: Mon, 24 Jan 2022 10:32:01 +0100
Subject: [PATCH 08/25] [FIX] mail_notification_custom_subject: Error modifying
subtype_id
[IMP] update dotfiles [ci skip]
---
.../models/mail_thread.py | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
index 6c97088674..17d8042f14 100644
--- a/mail_notification_custom_subject/models/mail_thread.py
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -28,7 +28,6 @@ def message_post(
record_name=False,
**kwargs
):
- subtype_id = kwargs.get("subtype_id", False)
if not subtype_id and subtype_xmlid:
subtype_id = self.env["ir.model.data"].xmlid_to_res_id(
subtype_xmlid,
@@ -39,15 +38,10 @@ def message_post(
[("model_id.model", "=", self._name), ("subtype_ids", "=", subtype_id)]
)
if not subject:
- subject = (
- "Re: %s"
- % self.env["mail.message"]
- .with_context(
- default_model=self._name,
- default_res_id=self.id,
- )
- ._get_record_name({})
- )
+ subject = "Re: %s" % self.env["mail.message"].with_context(
+ default_model=self._name,
+ default_res_id=self.id,
+ )._get_record_name({})
for template in custom_subjects:
try:
rendered_subject_template = self.env[
From 8c6eed2727360aa33a34099936ed942a0555bc7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?=
Date: Wed, 19 Oct 2022 12:45:37 +0200
Subject: [PATCH 09/25] [MIG] mail_notification_custom_subject: Migration to
15.0
TT36470
---
mail_notification_custom_subject/README.rst | 10 +-
.../__manifest__.py | 2 +-
.../models/mail_message_custom_subject.py | 2 -
.../models/mail_thread.py | 4 +-
.../readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 8 +-
.../test_mail_notification_custom_subject.py | 19 ++--
...mail_notification_custom_subject_views.xml | 106 +++++++++---------
8 files changed, 72 insertions(+), 80 deletions(-)
diff --git a/mail_notification_custom_subject/README.rst b/mail_notification_custom_subject/README.rst
index 13b55c9d43..38730b9611 100644
--- a/mail_notification_custom_subject/README.rst
+++ b/mail_notification_custom_subject/README.rst
@@ -14,13 +14,13 @@ Mail Notification Custom Subject
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github
- :target: https://github.com/OCA/social/tree/14.0/mail_notification_custom_subject
+ :target: https://github.com/OCA/social/tree/15.0/mail_notification_custom_subject
:alt: OCA/social
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_notification_custom_subject
+ :target: https://translation.odoo-community.org/projects/social-15-0/social-15-0-mail_notification_custom_subject
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/205/14.0
+ :target: https://runbot.odoo-community.org/runbot/205/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -60,7 +60,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -105,6 +105,6 @@ Current `maintainer `__:
|maintainer-joao-p-marques|
-This module is part of the `OCA/social `_ project on GitHub.
+This module is part of the `OCA/social `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/mail_notification_custom_subject/__manifest__.py b/mail_notification_custom_subject/__manifest__.py
index 11b9545574..1fdd601046 100644
--- a/mail_notification_custom_subject/__manifest__.py
+++ b/mail_notification_custom_subject/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Mail Notification Custom Subject",
"summary": "Apply a custom subject to mail notifications",
- "version": "14.0.1.0.0",
+ "version": "15.0.1.0.0",
"category": "Social Network",
"website": "https://github.com/OCA/social",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/mail_notification_custom_subject/models/mail_message_custom_subject.py b/mail_notification_custom_subject/models/mail_message_custom_subject.py
index fe6fda0f3a..4c8db6a8c2 100644
--- a/mail_notification_custom_subject/models/mail_message_custom_subject.py
+++ b/mail_notification_custom_subject/models/mail_message_custom_subject.py
@@ -22,7 +22,6 @@ class MailMessageCustomSubject(models.Model):
required=True,
)
subject_template = fields.Char(
- string="Subject Template",
required=True,
help="Subject (placeholders may be used here)",
)
@@ -32,7 +31,6 @@ class MailMessageCustomSubject(models.Model):
("append_after", "Append After"),
("replace", "Replace"),
],
- string="Position",
default="replace",
help="Whether to replace, append at beggining or append at end to other"
" templates that apply to a given context",
diff --git a/mail_notification_custom_subject/models/mail_thread.py b/mail_notification_custom_subject/models/mail_thread.py
index 17d8042f14..d7bb14417e 100644
--- a/mail_notification_custom_subject/models/mail_thread.py
+++ b/mail_notification_custom_subject/models/mail_thread.py
@@ -21,7 +21,6 @@ def message_post(
subtype_xmlid=None,
subtype_id=False,
partner_ids=None,
- channel_ids=None,
attachments=None,
attachment_ids=None,
add_sign=True,
@@ -29,7 +28,7 @@ def message_post(
**kwargs
):
if not subtype_id and subtype_xmlid:
- subtype_id = self.env["ir.model.data"].xmlid_to_res_id(
+ subtype_id = self.env["ir.model.data"]._xmlid_to_res_id(
subtype_xmlid,
raise_if_not_found=False,
)
@@ -71,7 +70,6 @@ def message_post(
subtype_xmlid=subtype_xmlid,
subtype_id=subtype_id,
partner_ids=partner_ids,
- channel_ids=channel_ids,
attachments=attachments,
attachment_ids=attachment_ids,
add_sign=add_sign,
diff --git a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
index 4231ca13b5..82fac20ef2 100644
--- a/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
+++ b/mail_notification_custom_subject/readme/CONTRIBUTORS.rst
@@ -3,6 +3,7 @@
* Pedro M. Baeza
* João Marques
* Carlos Roca
+ * Víctor Martínez
* Versada
* Naglis Jonaitis
diff --git a/mail_notification_custom_subject/static/description/index.html b/mail_notification_custom_subject/static/description/index.html
index e0922890bb..3a98523173 100644
--- a/mail_notification_custom_subject/static/description/index.html
+++ b/mail_notification_custom_subject/static/description/index.html
@@ -3,7 +3,7 @@
-
+
Mail Notification Custom Subject