From 6adf1f63a9e58d2fa97a56c5bb3d1c162e421f6a Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 25 May 2016 16:03:38 +0200 Subject: [PATCH 01/55] Add mail_optional_follower_notification module (#60) * [ADD] Add mail_optional_follower_notifications module * [CHG][mail_optional_follower_notifications] Readme. * [IMP][mail_optional_follower_notifications] Code review. * [CHG] Rename mail_optional_follower_notifications to mail_optional_follower_notification * [IMP][mail_optional_follower_notification] Review --- .../README.rst | 60 ++++++++++++++++++ .../__init__.py | 6 ++ .../__openerp__.py | 22 +++++++ .../i18n/ca.po | 45 +++++++++++++ .../i18n/de.po | 45 +++++++++++++ .../i18n/en.po | 45 +++++++++++++ .../i18n/es.po | 45 +++++++++++++ .../i18n/es_CO.po | 45 +++++++++++++ .../i18n/pt_BR.po | 45 +++++++++++++ .../i18n/sl.po | 46 ++++++++++++++ .../models/__init__.py | 6 ++ .../models/mail_message.py | 19 ++++++ .../models/mail_notification.py | 19 ++++++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../description/optional_follower_001.png | Bin 0 -> 27097 bytes .../description/optional_follower_002.png | Bin 0 -> 32104 bytes .../tests/__init__.py | 5 ++ ...st_mail_optional_follower_notifications.py | 54 ++++++++++++++++ .../wizard/__init__.py | 5 ++ .../wizard/mail_compose_message.py | 19 ++++++ .../wizard/mail_compose_message_view.xml | 18 ++++++ 21 files changed, 549 insertions(+) create mode 100644 mail_optional_follower_notification/README.rst create mode 100644 mail_optional_follower_notification/__init__.py create mode 100644 mail_optional_follower_notification/__openerp__.py create mode 100644 mail_optional_follower_notification/i18n/ca.po create mode 100644 mail_optional_follower_notification/i18n/de.po create mode 100644 mail_optional_follower_notification/i18n/en.po create mode 100644 mail_optional_follower_notification/i18n/es.po create mode 100644 mail_optional_follower_notification/i18n/es_CO.po create mode 100644 mail_optional_follower_notification/i18n/pt_BR.po create mode 100644 mail_optional_follower_notification/i18n/sl.po create mode 100644 mail_optional_follower_notification/models/__init__.py create mode 100644 mail_optional_follower_notification/models/mail_message.py create mode 100644 mail_optional_follower_notification/models/mail_notification.py create mode 100644 mail_optional_follower_notification/static/description/icon.png create mode 100644 mail_optional_follower_notification/static/description/optional_follower_001.png create mode 100644 mail_optional_follower_notification/static/description/optional_follower_002.png create mode 100644 mail_optional_follower_notification/tests/__init__.py create mode 100644 mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py create mode 100644 mail_optional_follower_notification/wizard/__init__.py create mode 100644 mail_optional_follower_notification/wizard/mail_compose_message.py create mode 100644 mail_optional_follower_notification/wizard/mail_compose_message_view.xml diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst new file mode 100644 index 000000000..3132e6f05 --- /dev/null +++ b/mail_optional_follower_notification/README.rst @@ -0,0 +1,60 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +==================================== +Mail optional follower notifications +==================================== + +This module adds the possibility to choose if you want to automatically +notify followers on mail.compose.message. By default, Odoo notify +automatically all followers. + +Usage +===== + +To use this module, you need to use the checkbox near "Followers of the document and" on mail.compose.message: + +This field it's initialized to true to keep the standard behavior. + +.. figure:: static/description/optional_follower_001.png + :alt: Default checkbox + +.. figure:: static/description/optional_follower_002.png + :alt: Checkbox to avoid to notify automatically followers + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/205/8.0 + + * https://www.odoo.com/forum/help-1 + + +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 +`here `_. + +Credits +======= + +Contributors +------------ + +* Adrien Peiffer + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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. + +To contribute to this module, please visit https://odoo-community.org. \ No newline at end of file diff --git a/mail_optional_follower_notification/__init__.py b/mail_optional_follower_notification/__init__.py new file mode 100644 index 000000000..98aa84d40 --- /dev/null +++ b/mail_optional_follower_notification/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models +from . import wizard diff --git a/mail_optional_follower_notification/__openerp__.py b/mail_optional_follower_notification/__openerp__.py new file mode 100644 index 000000000..5421f2880 --- /dev/null +++ b/mail_optional_follower_notification/__openerp__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': "Mail optional follower notification", + + 'summary': """ + Choose if you want to automatically notify followers + on mail.compose.message""", + 'author': 'ACSONE SA/NV,' + 'Odoo Community Association (OCA)', + 'website': "http://acsone.eu", + 'category': 'Social Network', + 'version': '8.0.1.0.0', + 'license': 'AGPL-3', + 'depends': [ + 'mail', + ], + 'data': [ + 'wizard/mail_compose_message_view.xml', + ], +} diff --git a/mail_optional_follower_notification/i18n/ca.po b/mail_optional_follower_notification/i18n/ca.po new file mode 100644 index 000000000..2889abdae --- /dev/null +++ b/mail_optional_follower_notification/i18n/ca.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: Catalan (http://www.transifex.com/oca/OCA-social-8-0/language/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Assistent per composició de correus electrònics" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Missatge" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "" diff --git a/mail_optional_follower_notification/i18n/de.po b/mail_optional_follower_notification/i18n/de.po new file mode 100644 index 000000000..460d58dd4 --- /dev/null +++ b/mail_optional_follower_notification/i18n/de.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: German (http://www.transifex.com/oca/OCA-social-8-0/language/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Assistent zum Email verfassen" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Nachricht" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "" diff --git a/mail_optional_follower_notification/i18n/en.po b/mail_optional_follower_notification/i18n/en.po new file mode 100644 index 000000000..31d8f26a4 --- /dev/null +++ b/mail_optional_follower_notification/i18n/en.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-social-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "- Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to)" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Email composition wizard" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Message" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "Notifications" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "Notify followers" diff --git a/mail_optional_follower_notification/i18n/es.po b/mail_optional_follower_notification/i18n/es.po new file mode 100644 index 000000000..122a99fc7 --- /dev/null +++ b/mail_optional_follower_notification/i18n/es.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-social-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Asistente composición Correo Electrónico" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Mensaje" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "Notificaciones" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_CO.po b/mail_optional_follower_notification/i18n/es_CO.po new file mode 100644 index 000000000..5d3380a92 --- /dev/null +++ b/mail_optional_follower_notification/i18n/es_CO.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: Spanish (Colombia) (http://www.transifex.com/oca/OCA-social-8-0/language/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Asistente de redacción de E-mail" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Mensaje" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "" diff --git a/mail_optional_follower_notification/i18n/pt_BR.po b/mail_optional_follower_notification/i18n/pt_BR.po new file mode 100644 index 000000000..2321d5ed3 --- /dev/null +++ b/mail_optional_follower_notification/i18n/pt_BR.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-25 14:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-social-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Assistente de Composição de Email" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Mensagem" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "" diff --git a/mail_optional_follower_notification/i18n/sl.po b/mail_optional_follower_notification/i18n/sl.po new file mode 100644 index 000000000..6942575cd --- /dev/null +++ b/mail_optional_follower_notification/i18n/sl.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +# Matjaž Mozetič , 2016 +msgid "" +msgstr "" +"Project-Id-Version: social (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-26 02:42+0000\n" +"PO-Revision-Date: 2016-05-26 04:13+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-social-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: mail_optional_follower_notification +#: view:mail.compose.message:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +"- Warning : Followers will not be notified but they can access the " +"notification directly from the document (if they are allowed to)" +msgstr "- Pozor : Sledilci ne bodo obveščeni, lahko pa neposredno dostopajo do obvestila v dokumentu (če za to imajo pravice)" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message +msgid "Email composition wizard" +msgstr "Čarovnik za sestavljanje e-pošte" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_message +msgid "Message" +msgstr "Sporočilo" + +#. module: mail_optional_follower_notification +#: model:ir.model,name:mail_optional_follower_notification.model_mail_notification +msgid "Notifications" +msgstr "Obvestila" + +#. module: mail_optional_follower_notification +#: field:mail.compose.message,notify_followers:0 +msgid "Notify followers" +msgstr "Obvesti sledilce" diff --git a/mail_optional_follower_notification/models/__init__.py b/mail_optional_follower_notification/models/__init__.py new file mode 100644 index 000000000..cc213b9fc --- /dev/null +++ b/mail_optional_follower_notification/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import mail_message +from . import mail_notification diff --git a/mail_optional_follower_notification/models/mail_message.py b/mail_optional_follower_notification/models/mail_message.py new file mode 100644 index 000000000..fe64abc01 --- /dev/null +++ b/mail_optional_follower_notification/models/mail_message.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class MailMessage(models.Model): + _inherit = 'mail.message' + + @api.model + def create(self, values): + ctx = self.env.context.copy() + if not ctx.get('notify_followers') and values.get('partner_ids'): + partner_list = self.resolve_2many_commands( + 'partner_ids', values.get('partner_ids'), fields=['id']) + force_partners_to_notify = [d['id'] for d in partner_list] + ctx['force_partners_to_notify'] = force_partners_to_notify + return super(MailMessage, self.with_context(ctx)).create(values) diff --git a/mail_optional_follower_notification/models/mail_notification.py b/mail_optional_follower_notification/models/mail_notification.py new file mode 100644 index 000000000..47cf08b6a --- /dev/null +++ b/mail_optional_follower_notification/models/mail_notification.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class MailNotification(models.Model): + _inherit = 'mail.notification' + + @api.model + def _notify(self, message_id, partners_to_notify=None, + force_send=False, user_signature=True): + if self.env.context.get('force_partners_to_notify'): + partners_to_notify =\ + self.env.context.get('force_partners_to_notify') + super(MailNotification, self)._notify( + message_id, partners_to_notify=partners_to_notify, + force_send=force_send, user_signature=user_signature) diff --git a/mail_optional_follower_notification/static/description/icon.png b/mail_optional_follower_notification/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_optional_follower_notification/static/description/optional_follower_001.png b/mail_optional_follower_notification/static/description/optional_follower_001.png new file mode 100644 index 0000000000000000000000000000000000000000..897e596cfed35f9f294bda200c4ab1ee4ca2cc6f GIT binary patch literal 27097 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 W|6`JU{Q>;ZzMI+xT7}ncKlnfQxV$w0 literal 0 HcmV?d00001 diff --git a/mail_optional_follower_notification/static/description/optional_follower_002.png b/mail_optional_follower_notification/static/description/optional_follower_002.png new file mode 100644 index 0000000000000000000000000000000000000000..24d9d9756f72063c577d84f9761610c13b29ddcc GIT binary patch literal 32104 zcmZs@WmuKl_cgo$5d{&Xq!Eyk?gpj1yJgczcZ+~XgOqehcXvv6cc*lBy-UwIzYqWC z-4~Z^cib!P8Dow)76EcHqR5E2h!6+_SzJs=0Rn;h3W2~9Jc9+V9CV#of?sfU0^&-~ zo;{mekzEG=MYR`Jvsbh-vUmDuYY0&^aj>^Hw1s{dehz`WfrtxzP;#E#TX0gt=z2sr zy2N}LnxSe6t6-7(C9n|>v&0)0lUhG$VLGI-lMouzxrpXAp4$0kxL5chlMMXj+0imIuN6X%NXF2k`t``N` z^;KeT)6@T4;TiEGuC%l?Iy$FpAtNK>K;8WWh|vO` zz`|f6{{7Z9`|~HT5n^v+`>t*Mz6ARG9Zd<#PoPy*PE6wO+}^RjHN^Oi_IDb+$l|%N zQU831q*iOtI9UF}KNFM?BBuI##at;wzb^s`f7hiDhYkJjs}d;Ux!8X%CC(aGUQ8fZ-sXG6B@x*U!Dr`2nYwb99{Gab^d@W(Imi=c!yl=_=F6*a) z{C{(NM^8`B%39gpR!~rIc6K%-t|CSz`Ol}*b8;vd8RgUDAPkI*D_BOx#uOA3aKqp+ zGICuJ^}qFe`}*~3ax&rP;NW0(t3^n6Pmj2S1ne8EATqQbifpOIpZ|=RE+r*}4ULP7 z+uq*x^Yg2%t%X!nRM61S@NIQu{%=WNa&xJsRC_xz;^X6EVq)AMjD@5B+leqm_rV+? zlIwowsDJnA#OCDW1Pu)hVoiE(YHFHtUBm15&v5Ic>swnC8YiMXFsH6Wiij$1d6YdW#R?0l;2jWz?H57k0il`Glp6CTT z|GwY#{}%pDqM5^WHTfU=@%$WsuZZ4%rn2-5QT+MecmD6- z?;^qjKS#xchev(?uA!v#Uibqrsc;mbNC8@AW^^PZJ4ErG*P){5Xk~tFW+V|mB>wu( z29$=Mkuj7}O~cbwsrPXlS`LTsG8mh&ZD^?2?eYMfT&l)qO@wnUJ3IUK=7vtKB(?pd zpnyhKcd6EH%k$II^o$JIBrf5QWpgocaZJQQXP!XOKl3~J$dj!0rbI$o`aV&JkMS+9 z^U?BP5;rX^t=H9xzc(C0*3X|bS~U!8Y!}e6k;%zqMyN=!P9vXV*Zu9KqS#F|1}3H) z&mW%)4-1sww`*FWcsbAScJbo<`}dz48+jqBs#8CIz6}t9O;s({0p5VeZuz9d>2T5G z_F^E8Ia{OB41x{CWBbJ6_0UjNb%DZvH=O#xr=g+259zh5tLtDgFW!4Gv2HLEV9UTG zL_+b^%Z;QVLn-`AWrmXW_7zoCj=PhEaImo8Eu7b{5n86EoVEs&z*yrLf4%jgp06~v zLL>wif<>eDXKZe#gX!sM7W2tHpR|>QdMD%;FTlHG(Gsz=nlULUy6*dhn$;==Y9CEa zYxO%21qFYB$w*|5-re1Su{%0DWqvTEiARznyu{~lzdDMdQuGx_tE@aPGwic>aLC2_ zd*dJKv7sr`k~_P*)Tqy7QurFJmiQpB-l@v@D!=?urpCurFb*3Y z7pLxS;poWrIgZ)bww38~d%IAY+_TTSUYLk}IyyQ^7LR4nE>Ez}@24tc;Y@I&4=%1CM3j`uh4R zcazI$))fLAoX;rC?s`vTVPRn{SzTRSwbjzo@R*oR!^^|wM>YlqlhL2gl^2_PW@-lm zF-2>KwzsLwr)0FNEpPhc68MR86|*nw_i@jL_`Td8@3Hxs1x`gU5QX8Z-J3bp59VDI zDKWCL$O$=0LjQ(_bfmR=Vm*w*#{ zba2xg92|Undu)o(bm~*p`{G5vsdHr zxqC*xW9v}lb9Wxw9=k<-uUia z_>bdTwNvmdvY3wkEYhy;?Cd<4ueDoh@(@U~Uhj@5)To4IFz80r)STO&tM>QxwLh50 z`K(13+hYL1Wi>ln?Fa%65zw(prI;12cjXUW()0C?HQ!l2=wn%FddAy;{wbC8!nb?=L)#=Qid&@w#`|k>$T{ zG980wX5RHj`BlpYGW^+cYsf%?U;_K){ppadZiDk#AAKtxTVi>+opz;}`>{brI@sLD zzVBoRRTlM=B_Hb@cC&I-Oics2LbbDst;%fHT>i$|aH~m*L9&U_QN$O29yE=;BO}LC zx?alnJ;LFTP$K?8j~@&lznIao8!KgkP0`ZQBx%i*jEzy7uC~%Gs*k!uO6Ci>dbpj1 z)TCf7c}#J?(IfdhS53dOjl*WKgPbZ6orjEDQER_lQ@G#GMfuQq9obu3q|2iTe!R=t469OW( z63!Bns3^N7o$05&a+|e=xyoHKEJ?`vxTx^C z<7_SX230H*p3HOWZ~Vi%+?Jj9dKC~5Fjr;4%+7v!exBKTC0kPE2v%|U6`47fju+B0 zT@#p@d0*U|T-4o^Ewg{W;@`19d%pe<91x&Uq9<0YlTlgeU~5;d%>R9K^m`z?+<{M8 zn!3o>lN74HUWv7s9JaYqXivWCNYLv?DlBtR;e~k4a+C>-KgpD+4SP*>bp?1gxSdUg zeORKRqItoOfrrgRc&{(_=4%BZ^YggbnPdxfn6Pj7`43}tvv@pkpD!;q<_8262OUO7 zVc@;8sg%!nnMXE}H-Q>ZVY$@wduQi(wd2=odP2L8=ANFG+dgcT^DE=IyncQPkgm}C zgUv}b5|>Naw_uMo)TRSFX0NYny&fAS>0&W4G4m!7{csgb`Per;{{<%Ge3&rTlw4e{ zFfjar{`VZ zs(HNw-p$cUVFc;iU;=xM`P3V8^RDOUT(5&X%yID&E)Nf{k3MoJ6aCpii`8?aXV~19 ziT?fw(H)ObKYsi$o5;)6#v~-9L%Yx4|3DXu^aS?cwB#eL&le*%*Q#_b5|CRS1QC&b z@zW;1Kta(h)rUX-{#`;vE}RHeE)4I!+39d6fnEIN%gS7}KjG?;Ao>oVHs{-&VGvde zb@{bvVx;2Fg3{8SV

TLvzOWlp2a9@-(@iQg_0`rCavWhK5-;m&)w#e_-fC26o@n z@bFFW0uJ(g87i(1ZR{!|?`LoOEW+TXk&@qr5oB{6Zoq5B{ zy8r-I>lgTx@SeU{dVnwe^RA(pSy^0MTxCogTwH%s_eG=Y`3^_~vHCK}JnAZ|J_smH zZkLt{3g3&1t+sWhB>?(m(r^Ffd4ChlQQ!RdpgEypHD7bg=|2rJB7O7SNuhG}&J%uJ zXJ=gF7}Jbo8ghrwfQXoy z2@lDZ{WXqZJoq`t#A-=IX_>G51IItJ$ALlko43Tizgc@BB2Ps)GTU*5>zQp0gv-&hWG)IKgaL{P@z9N;N zOW{N(BxGPpFOCkQt}Yf*CNQ6T{|558gaINZ_F3y;ggs<6uG!_ZubM@foPR&>(O1&; z(eu;v=VadIX^+h{kIB|}R`bb5P{l0NhY@gB0VodEBrYutk4iwmYcX3v$m{w7o8kS$ z$BVn`QygZav%ML+x-d1y}Tr1(1T2oMn^`L zTd%Z%Qps9=6I>nv8Fw5E1VFq^qx#lR3dj(=HmmIbAm88Jb%qfU;o&7DCocl@4@&+F z(J+AR@LK>t{)$5M=S3K}r+c%NLEK#O`8hda8b#^p>487dad0>RWLf#;|9JEZ#q0iD zwS!%=(rkjr>#nsh2_*EqF!#02khy9rfO#~lEeW{ne=oQCfYDQulV2`_vF$ed)oZL* ze4nFZAa-O)CwzT@!({(^*k-Mh*Yzx?{Z(XSv=JKVg=c?D;@k;pFhUB-7UM71-k@t|Axy`=VqjSF?q&(HGZ?C!s zgvFk9hISmUnM_Jab7hGBn#EPlU%gz4mTYSq&UuxXw6Ygms3~cwt5O(E*OKDZnaq2& zO(B(-!;`W1iN&(tgL9?()p&97C+P9<(Wy^4^WGkVCr{0BToi`=&J#^dXBT1~Ee~Q} z{|p&|A8~1d2yZFiS}vEMgZLY>8KUy}SSKf77&P>ioxrW3rTyK*ux#1m1*hc$qwDM6 ziv(C$CFQ>|B@g5E1KwGV|6ZVCerj%>$aSt0qtnphwA4C|AtN(gDp+eh!^FXzVW#Zt zynJ(h5?ER@>ITE%^wQFjfnD_1*X2$>L_~&9*!=?^p+3*iqXynvki}Sr_w@W8e;yi| zqk_!GN9mbDrEQrRlv9ElN#5G?+|lv(JWfCWne4~mH&V&Li;W{cpKEDZAE(=1*E!_K z!xa_f=n`!W#TJB?LQ4&v4<`Mpv2lLDFDj~WQFIxT(}cag#^yks$ZMU&U0f8Cp^I}- zmZbJ@h>GmdXV#or#u=&CfIntrS@9!id`G#g6hW!#u8HQyNqd4MZ#Zfr1i0?1n9e5~K8CMNbRC50&VPe4R~hsVUiV(J8M9nV=c zM|aPGa8M0WBzB}kree0tLZ$iZsqoHF0!{rsFf7=)lv^GU2Dituw>CF>4VWf$%$ODD zzr7*_fw~`CQc7xXEPDuK6KrU`<9oF<{qgJcQXaJWk z7r>iu-=5LsE_vQsfIARe3U=fr0T&BBy=ZBII}-Oj$LYnIn=7@2@A?Zh^p3@%h_JvogFeaY?e zov~9u;D=oI_edOQ|4f{VTlt-PC-z)@Y=96AOB5s6Iz5tCeSOfO6z0#En7O*QH>~K0 zGl0!ytn%a?8#kzTY>X{!6L4IH^!3xkef03a!q>80Nnn@KO-bTt#fBE^GDD$`7c|h| znb|V02baqa`$qLne*iiqMjFOTn zYTXwHhG+pyc(t`sZ}jH%P2|PUIqioeCFs-9Sr&zn zmEZSp7g>+Y2nUCSbG@izW?ooeYdPv`u~@)^Zb5%0JiLvhm93O$w+yeW&ga&!?`XV9&G5LC9avI zUMuWm4I?#;fv|9aHaDA*R8N1tM*M8PpapqQzPt~uF1WLdjQ#Dt@K2j!dshF1MiGl- z<=CG)<9yQ*EbBr(eE&K|mqI(8a^WeTNoscYm*~tvy#^ zYPUN{TSW2vJ-{RY1})Y*S(U2Yooq;^$*EPEDMJAFdvS50m13f$HNQJmj0cFOtrV}A z^SzhXEC6m$@l{^|GzcQppZaKb3PDd_f3(I1T8Yj$VX2ZWlO!5ONQDvD-7Ti7s%mb& z`VR@NW*0~ja*Zbyuu4oIE-w(b5bYn)W)8sIU{YI@+FK7ERVg9D)5PU|K+>V?BF9M@L6RMFkl*5~=ji(3k~N1;`P; zWq!T^V5s>M^Qj^iH#c)LGuYptlu}Ysva~z^c?Xc=fG)gpe<=C*t1}o!QH9N!M<X(97$m*MRladTpgHtW>PS>*3)6addRldYC{95CRc#4Y6FMP(vUs zd{=Pe*cq_Q=+B;XDAqU~>I7lYUb#1AWf>)~S@2ozCGTSKdf@KQwvM93#MIcpsjJsG zA}=lukGAEj_EKfjYP=T|oQZB*YaNp1Tpe0VGgCH{{hWY@h_tjTDqnxm247RxHii!Q zitH0A(-UlJ(y~P4>T0(2&b!O)a%rZV!;26L>*(Ss#N6EeFm$bJVlT(B+;JZj>uD|i zYx=f6q@tp4-`?9Y=|ce|c!~dhs>s?F_Vd94G3xRt*^x5?n~DtK@VIZlb2f{%NQ#ou z)&TV0KOx9j_{bT8iVA_~GvX5*?_eq@+FX~FkqSv73Hs;p>ta$m~l8S`5i4Ue#$lT81Iyd-B-_VI+IVEu;GRbFgpx zcMw99q9W&G*rFnn@n`h9=@OWR=pmsGN13hXanXyr{W#OpsSf6b6HARq-Vpzn#FWqC zrtE9eH8;r)!pY-_VVd24IO=)rY!`S_azmk+4# z0r1iM5542cnVA{T?&Nj5c+$d)lYwi&!pyujC`yABOQ=#+RrL}Pk;{6yB~LjY!okTY zox~MA=jWaqUeT^K3M!A^n70a36BD$IEdAoLvh}hg8Kq&~|2pG${-o(_@25v0Res6!@xc`R@C}BWxr=h8dLda8NG!WkrrsfXS z)?OIR*f$(;!E1W<1hxo1Zy=b;X&0uftgJ@R+6#1bwl+4RIm|6Bz*$XSElr+9( zO(6k2_4Y~#8Y8;ws${7HyPQuK@$w)6XDG51h~>JKJcrXZ7A~$??7-#&~D^GN(}A!vlD}c72J- ztCvI~0aUWNxrbyOtX~^=`V;&mW8a{@;eT8(RH(xaqNbE9S2f$IZ@+doEXC06&WuYg z%0io9>y98LM*Dbed$!}}xL@LE;i8&2OA^lnUv5ktEBRJTqHXT>=M8zUwq?g{1K+fS zWR&$bn)5Xpv+?S-;xoVAR@chjS}qA=1;2V;EUQ3ubuvX2?Q^ra;8~vh#+W`+4MT#` zM9IVbBqG>Ww-o;K){P+#dQ(vGnoSk$udLVrb_Z|;RTguTy}g0Ad>5yu<^vsjpFspQ zFnBv<+D>r(Z?j5ar^}UzT^(V0^CvDgHij;U?4Xg~=@)H<)WwmjFCDVmC@CgZ130nC zLQPOU4}p9rPkDWgjf;!*C>#+NXZq7J)Jr{KqEM5aiRlEOa)3Mm-3<^uBMZxVx(+&e zBzTd1(|i3ZVC?y=p9LWR$hzGh)o+p325dCNMoeuSExu zmXsVD9ermrIgbEbrpPW<^G8ZbN=%HAp<&0?sqzYF{}-toTb9TUOdx0jaxaYkL9Ny{ z6KEC$(vB`K>G`FGHZ~<28(Spn?8UDwRMQg&2IPwg2NOXHW4cLurnK6badfnW*V5sN z0gI+31h1shPwPR)iG0fY()8?Xap4%}cAe-<0t?I8ZAw8#wxZOY_J%Q=QbAv(AZzVKgy`$*8ThJ~gNRP2<16%qT2-#KH859kV$aa>fi6)0 z1qxwH$3~-{xOjMvo<(8PACpXd^8}ulmw;6Co$yOYsT#LkV`&f7Clzc%eA_NvDtMCJEUN0 zV)6o?Lk_TnvlRhI6uJ>Z8d0Br_7xfOjs(03>Ep+b zpr+-p{~fOMjunLFW9RRq$}*`p-Z$Pv@4l3|-Y%gaGBYu?{rXj_iwoNO%D3;v%GmNX zs}CmfRY4y)A|e8G$?Wazfgi9REmW9}fjZ1~=onPc=BJwjnNM{F3pA@`0HqJ44ikBd zor@@9XJ(THE_>6A5QW^c@m$3XUrT{Bxp&bqV`*xhM!_K=`AWIAe>zR2rKQ!i)e{iV zr+xYI<>n%*4fv9ilaqzTKDl(fub&^;+qaY$fdH!QO_%y0(Ltfm+QII6r$d#Jr~GO{ z8!37+GNC~K6cF$nx(E0;(EmzgXBf{@-fi)8m#HNc*W!!)h$vrZ z7i4+)13(=3tcx|TYHPcDK5PwgxT|@P8uhqDy;E1K&$kfx&&>~D5RHl}Ylobo_)#*Du4XF%2E4Wd`_=F&deB{6RrI=` zV0k(9Q)C!Xvs-WZ>YrL>LI-z)rEsXB!z1@-E$HVcu)(#ius@=h-e_v+c$PT8E5y)h z0%1sMVc`NOH~@PBtP%VMy)74@1JEy>1`-*}HP!@qM4B%-fWD=(v-KvXJfG498N zbrJ9F?d=xeb_lpt(&T_@CK!)BG-&YlY@69(N6AlM<@fLI%o%VMWIQ&lI{TjKX%KQc zG2J6~5rV|_pM!!aNpreDy&Ndx(ggi?c6M&AuPZ;z*lzSjgO#Wz2mrEKrAUiYuLVL% zngJ@3Bo3QZ()jpl_RYbL3e#SGGPLo0e?0c#GBU{7UcmkB%I{}TD4+gOB`#_=H`6uQ=bOVcD&LL&vf0BXmu{=EK}9UJ&%MbW?3)Fo zvXBtv7VS47YkML6bX%SZQ$-rBZ!$@8YR{ylr4m$ZXU+F#O(qbNll5NU;{M>pBP0JE z8+o-gU5S(-Le)jb?V!*kSq2p?&_=?;1H_xT-Q{sauVGsAwkw4&IODwf} z8V#82cYHSoB7S_+sAMq5f&}9S5b`c>z(b)G<_HIuItz6rWdhOfu6F5jJXcSyuO8eg zEblGnYsU*EJTOn4u^AviSS$PU3730w{vUkw^kL!PXmnq)v)^5j-dqTW;4(1(>Wv09 z)&0#OU4B{4!tNq(B8T_NFGhoBpFUZyKl2sn|KUBZq*RDlioH_L#ktM zy284SR(`Of2oNVGmY9yYxlrm@nt@;&{Gz6o>esRDqKUj#zKU82gn;WkxlbDL!;K`T zrH-eA^@|tdQ7zxeesEz1VWk0{UDKaVo57U@i&i1hr4sn9Gtb_%cbZ_SE!q4$DyrO~ z)nVDJ)HY8(UC*jrYM+%xie1nx8X_X1^F1tVXDFWPHhr{|tSl%vyZ~`$>^WHfQQQyE zoJ#pB())RU?(FXF2Kvd-;$F}K1zZ3i_Soq8goDE$v1;$Mr`Pv_SLEwk+(_58ZHyU!;C`C{*b|4UG` z9v@$^Jwzi2M4_RT7>LK&J%4uXHCrJ>^2+b0kaRhvvB(qRM~m6n={n4{PGWwdy1ME5 z*JmflC;Pyh64*Yj3b9zp_3AcXb7YFd{spz3bNy%HSYqBwQVb_eql5?qba^tSm!xb$@13 zz24k{j#Jjuq`Eo)Bi|Z|?o%!PT1ZPnGn|R^JrX8W0@K%*aw-(hUp@oU^8ZW13vI-h z*|D0SlFN!5E}D!23Z=&Rm5U1~rUL@39Xw(Y{&caG2;(IsBur<}e)<2JdL2tg6)Pn4 zh6#<45jc%j4FuxpSyIuSA?kbt`S@|VBG-Tf?rEx*7mwRlUC-7C(q2E{Ko1`CjY0k> zE1O>*?qQbuacDHZQmdlAMo?5VJj;y{^G#qszFc~S($(a_Vf&=D71Z|4cVB91nC!^V z08wyvf>fl{8czI!6aB9ZY;HQAJ-fJ2S^*mTq!FU9oZ0geXfMVBQdGyI=XLN-2Nu zVP|{0oLJ_2zLsIR>kpK^TA^q55R(ysS~+r`(qp%|W|xc?_?%f;-Mz5DMhs1!Q96lB z2$;RgQ&pwI2#SU=SGRYFCVKMak}o!e+T;GR>h0gF`UA^|C@6$kzSwvAkUfjaMhZtx z4hav31U!KN##B)l=I2k!*dGa`RN}P^6bQ%1){bA_rzTb)zF}6Zy*1tp{Hsu50CL~V zZ$jPuGtVS`*5>vR|zf+sHrfq-_6G~Vy+ z)*%$pu+S>4u)2weCLBp9Y;JlEPzaG}oHrnTI7 zx`_Y+=9b85vWOoO1L~9FX4sZ5@K+nJD@?o@p~H>!wwEaH_*FY53X!O(m2$u2tL9b# zWoWn+OtJ3!mT8+c9v+??nulxHVu4j;7|}aR&wE|HR8U|5rc!pLqHIYC>|~ zo)xpdV*MT&si>fUSTi;ISI-;;>bk!1@$vqC5Hx@Segrgqfie;3d;gK6L=~r|zTx8| zY}pdZ1X_3r332h#ii)4kfAuApX_=XZrlxV`lHSF@+#)Fp`;Zadk9A`GHcu;22=a}%sx+=CB2f30Xyj2G{dUjpF_li?PY0*^%Zl%CPsv}545K-A(c4g~Tccs0>#)6K^S?jlpt@OQKiq8O}f)< zN~P0AL_%)Na#XfHs!bNEhADpxW9(2>a-A+K?%khBoid6w{z3gon5Fy?gE5!-N^I7Rw z0eWkq-XWB*t{|5S`^__=Y^elRhnr89F26fY1)p9nG#-Yl72GeqTLE>IL?*n93>}d& zRYuptRrE=Q#Pwd>@`O3Naei_+Yrr1>g^J1H*1 z6ten>N%_hpn8L!mr6mmX#tA?xI6dubZXPt$9Fh~daiD|V(id9_xG#s@(N72hAX7a4 zYAe##sdG+_iBa+Ne7Fk)EI5wVf-_YT{rd=6mMpk4Kg1idY5c615+9&G=HX(}*?dK83`&L~9gPeXJ&=QD~DDxt1l84pQwE82B8_qAR_pFeyM z4|u-T6{;r%j!5vD9LY5kHiAM)4o4FJ(a*XFUv#%T@2y)bc!&dfh1mOS>5ImxmnP4hm?;7`2Oew=?A3i8%>1A`RNh?i+SX4?1zxg1^&<(O|3RkVoJ#ML*=36vc zow~e0zfAvnyJi^gp=1$$uZO*@4RiC!y!%y`{=JkeaMA#%-(`~c=JMqgC$3|3DxFvG znVC;pQeQ#hS&MGBTG2r<4_x}waLLGL?+;au7n#Me75#S!VXMvNzgzBIZf?qNief}= zR!@qV`~+TMp8u359RfP}y*+$wZ2}0Oe?3phLxx^s<80$$|AzS%B-^1i_>y?W*;k7k&yxY{#^kAOx~!`wGv3PX3AqfeWJ0mJGHg5!(%TZ z!b?CUN>Ni%THoGIPENkQI#whM>%!*YU8t<=2ngr_br$>^Ec1zC-L1|LZUxho{kd0; zj>;M7gs0c;xfLZw(yy7BBdb+yMkeyvuiYQUvgz}b80)?G5#P(pN95;6n&CmfWf&Rh zJM?Mk1}&#clC|iXo#^vYQ{R(E0_`C;r*ggLJ)0Aa(`9_NtiQ8sov1MH14A|+x@-XV0-QwC$+hdW*CHJ!NTHuNqS&;Wl)* z3n07ZT8-&ort6JGMO<&H3KPIdlPQa74LP~tD#Kr!v>LH|+~BN*xhnm=%kL+jw-qVy zxoVnamtf|v!PzgMU>t=pv2k;>T55JOwy5Tc%pO?15e2#}v+;s~{fSbKa)gLWbhK48 z^wm(pN6~lDAeE&;MRf_ofOK|yZLUy!Y_l(hPR?y!chX{V7&WkCRoR?PNR*$DkR{bw ztat4g98obIP>=e7y0l%7waBL}sY+eFk=ptzl#q|XYsD5plwydBuKt2h!Hq`Q6S6no zWOzEc&=)gUyws8priqe4!hKtzU2T&PSuQEnugJ@Lk4B+3G3mHj5wImtgolkQ6VI@7 zkaT3B$sTg`@zd>LLrNEq+ttwrkVS%X(Z4*_8km_?xou5m25lAU)Kl^D77F*Vtx*7t z#@eNan-h&%h5OEWsbbbZk>(IHBk^LfxqsisOQn#iv%FDfm&bMh_ zJ5e$^-JIDdn_34%kG0<3Xbbv}O{LgKD!npOPtQof!^7M8Ee7~aCZ;m*FB;l+Cg$>Z zcB^)5z}6^C7puGgQvwuKZw<*|SzJ?EytF*JNE~=?{cXbT9-TD?5 z79=F;8daZY&;q~{FnqoeT=?7|GvT-9PW=w5#u zDm69IL@6M2&dwbM`lZ_SZ9p_RKeLDG>#T3R{??&^Ld0idnE1X2{b?W+tgTU*8X1AtGg2XACT+Zu2lXD$t{aSXv7*(?5K=nfysWhNbNp$9&r;;n zkIK23VIXZz73o+`)a@Tb{p%ced(QjfjMenO-oMb zL6wnc=wqXcJi&nlTO$zAcp+Ei))F-pEbb)YvE&WAF{6fmpV27|qf}ZljvAowJ#rkY zQo}4Pvo}oX9cX@ou#wvwrrThfkRP=(VQyw(VtuY~^W^lzc5jd1#S3H@8qI5Ja6rn} z@6>pq#CX3WP{(t3VOshdde2Mp5&c$Orzbj) zwkW-jo&S_Pe-X^&vx!M^^&y~Bm1%xYM2G~As#YE{g1KZA) zg#y!qeXpuYK}tH-*~!Glwm3N%&z%?(lhxFuBOvg-wiajVX}f-@*jt6n@Q4U1)T59P zWEg8VK=1>Knv&oH`==>j-4C83!#&As@QCwU&1e?qHm(|?D?s&c9In&fkRy-1AY+ulM z#J9jhGBnc%4i}L*M}oz3!i5@g)MrXwOr3#N#d4H22AGKOVO{6}EEfBFwR9q(z*wpM zGsDi`FbPDbM6JIiC5@aa)@3!B{=t2)AxRAFe7NG-j7w^S`z(xP#LZn_q*kdz9?3al zr(4R?xyaj@mYeJH+r(O^eZlTAac8`#!<*DA_6KFpz542&P<(unJJ(QR<$H^-l8H%5 zHwUji)k^8;-;Np6A1+oFmOJgfBmg~TJOh1w*Q;eB6vFwX+O5?0ZgcL#E7xenlLh>_RD`gfl#Cau-E=kf}yg+HZ=F-l$^C=c$ku!S}{GNkM?<^bCXDj z21KXX)zm_<^6Ys`4h95-|9BP)o9)%>3F_E775*p79UoxH{ngcO zWeF9PDsOL3U}DM1WyYW%pMMoKP(ZVx)+}LZnH(CrZqa2>6%wMXppX|4(K@$Z4nh{_ zI-Z}OLwMY;eE*&*fINF%Yo?cax!Pflj=qML_OsDL8KR=13~JD|RWw1tVph}9_aq~p zb2}IyWX{flLrE+XX+XH5?4q*KphBx!RIel|s`-u<1JN%J3k1^ad}?_DYEsg^_I7Yw zMO9O?f5Hz;(#Yr{=yfp=$>_ z*jvRVdVRa<^5Qen)+49Ao-St`&7+!#NGCuQlatEOWMR1J22*Vr$Et|Zp3wb-`rAv` z@Tecld#i}c!`}Dqe9bvI!{wg8!jX(&cwA0Ql3!q|r*PdIs zFrSgalcza!+Pe`1K|DDnJy>+iSCo}5+Hp(bcguRiPt=lyY)(pY0PB3rL(a{ee>P(Z zPIDTR-QDp(R;r6)#d;e8JKDv^!jd>tCnhb|OF)|?87Rc9?d<^#8b-+HjP3AeLNl3M zuL*!AbFt1v+v01s``2MyiTR~_@v`>ef=$DEGrnL(b;ohHX7nyZ=b?yEPqwF zD>F!EV^f-&O9d&?d0Du-lFJ57KF53TSfz&?+mr@j^}q9M%2eIn*~$9(7VcY+TT(bG zg5F}{cC&@n9J}7~3N#xOu!`=UNA)SFQz^Ok1u7sO>FY~?!;2c#ma}yZV_3Af#zsaq z#7vjWdmTYjJcPQ6ia#~J$HhfQMYRb>;+LvX(-%YDgLbCLZ&p8nG!PsI2Vue^BNO7{ zEG#Vnyzkln9vfSnmPU+$SYBRU`<@L1tss@92JxZ({?V~9&>3HKWe5LSE!6eF$7;ok zgEQ&4xIp6a^rRJu8TQPU3>C0Fh;JmOT$w)1>?L)Qn?&8lZ>oC1yt@4lkId1}l+ORdN zY_j7EsvPrGXlBaI6XbHhN$QCT^}eUbc+zn!Rfm@g zC#R=g*vvo$N5@H(W}mvZRPH3}MIb7;8Du<0uGH$3 z!lcHcA{`ye&^k|1`RW7SdWS=*Xo)24JQSoCzsK_P%O%f=L}ax%ye6CY!w4RCtzV~9 zDd(vAX|R1E$+IFtBpt1bWsYF9?o+(YheTK7aBBQDqk)j4a|e&;{|j0kzv^ z!w9JlH~|t%r(3Rf(C_PeReKr>`8`@F8i3AYeYO6jgZe4TmChT~nz~7o(F$Rpt9yTF z3C=(H`3Xm6^^cE?Xjd3?47Yd!sU0N-oqCmsMJE=mI;Y3Zl_0_;CXfJM*=QV}(l+*1 z2Q7U|gVWb-W@2V{vbX&hEFH(DX@RZ5^^}(Hi>{3B_Wi9qt9f0{rjVIgps&D38JVJ> zAVFtmU!io`2ot+8k^TMr#Tpw5PR@z$?(m_ld{+{fAMvD#JS!+S*T%#I z8=NI(V#-k&s8V}v>UbQghEVq%n&`MtE|tDNVlqKrMrraYk~>87h?aXo2th=Po&-S{qDL8`8@+cXRT)9F zkkJxl#Au1$h9GK!FgimJbr@}Q!(NkT-+lJH`<#9E?Ah|iZcdI-e&zaIzpH%f=Zk#W zb+J@wX#G}tbUxL=(HhoRFYFc_ z)w)Xj#qX83E-ZFUyZ`y(UU*B~rG@IyA+_s&Qc-z}m|V2K{oKTS=(}820r1}e%*m5m z9r{#MPcujkAk7^_$iAbo8id+0SODon7y|GM?;oC``f@{>BL*Dqph!|sf2W%E>0$5s zvolmwKfLN^xd4}k=LY!FFs&{#^Ze9z3clw+Ox=(8(T)Xt`y*4miz!$Pq{)f`OwUsu za2k~wfc;Rt$pK%U%6KZXlu^Dp*3?CV&wpI&_W}PnR-FO}`hD!)gVG(MW3R&DO)n7S zw@&Lf4D;KzkKdW5G~p-VBi%56k-evFYIh(=}ncthab1;9FWEvuU=dQ!r?P zXVQW`Dq^W9)%m7vK&G$w3}cKt8o>ECPcKJ~^6jhdSWJ!`0PFiq=M*_c;0#r8Sv;`l z(;~+vhsMUnbRRwPzuv+DCndR>`;=zd%`-)F^=0omNL7`;tQhIX4&tseMRb68vmjQl z+@w=NO!U&I96t8EaM;N9GC(9OZ##sD^(e00uIuKCd0AFQJz~ufevvC8L-XN7U%u;+ za8fy5qT4q4n$QE3Y4m5Lotj7>DUn6aeLO_}26#*IUf&dqeZNafM!AfvPpjX^ADTQK z#{#}lF&`zuqK;e>+&0&qwz7X``VjyxylDCq8m2x*g!{>);n3QQahTe9*tn!`hFPO! zS<4X4W8!>d_^u(HfF>b8B;!X%@WNYs#zlnLbB!c1^H{n0Wh~d~_x8^wMd5;iDm;88 zKYla=i+TQM9p%z8>Ik)~m(~NY3MEn^iWazXu9$Z}byZ%s`MNwolkdW+S>?wjO+?~D z`rA{g<}EUVG?a;lts;g;vo}JOPEo1#Po{!+hqhj+T1Gsy8=Bl(U5~|vj1RfY%^jYN z%E`^$as3YBDO{#1p~?@Uxm>Eowfzt~Nvn);f43^dD2{sVTn_KHb8>W*Y1!AgHaXL$ zm(`w{ic z2yZ5fYh2|oUy7Sadz`$w$Y3YZ26uJcq5gvs%NtHtSy3_WT$%G#8FBTIxj9#)G6N(2 z^XHA#RTqHzajiN`l)?}k3(!j@%kPiG2_IfiJKo0{yUV}J#LFC->V;Juj;~dpXdeas zK^5#3%)3_YCk>;Qw<_a=5xwg0^zt*FHC^9!w*$Z5z51kVJe-L&(>3F)>E2p-0%&sgwP=dg7lSM;{ zuWp)dFIxi>8A*KJ{0!x)+#FXbUuR_v8y!8J6|zFNM`y@EbM}Q&IIVoqckm>CG(8=( z>+aTEYK?YW`r$ZUF~Jl>I=^ckC9IBaXFJ_*)$5S%!=#Y!&6}F@Q;MN+v_QiUksR~I`52>i)NhCmxN+7G@#G$wq$-|jg z*72K_5nSr(8X8*P7Uu=<=l(p6LIY13iMZTHUaD;Y6Y;@*!)Deql{oibU^aH%xM6jr zFLh{OfP*Hil-j1MqFhp3a=F&^^JCw&F?pbPacRXxh>H(6qF9pO3?#@)AKy0U{_x4p zb;3~IC%7RZ_-Lb@uYLxkiq>%lD8~#k-r6-RNAr!U8PrOiM`8LfiwZe=z~BjTCnXuBqn==iJwV!L$cM{6ws$h*#%mGWxLSlcG1E&loU#cR{v zyQ<1NhG(qOOy1S?e8cE6_XNO$T>+ESy|;OfumRqj2lC-5sz=ay&zouWnnAn?OSBT_^KpS>=I3# znMeEDpy)z*cnp`cow4^ADZfv^WlDF9=(aYkdFL77;$@mirko58MZ?rDAED7SoR&~Wi$+zq`vQm}hTo`G_Fg4n9l&`Ulj zGGlbxf0to);KuA`&ynO?&K+b&Pe=u;#T%dbY_?j-tMd65;V)r@#0WcVE`j#Md^E4QB94Iegwh3tVb zbRq0HyW-Rx=e_m$w{H)|#uf#ZVmM_38#Iz6giMsn#tNl#on$lyK++@J0G@eSmPd=H zxa5Ipsg3$@%u3+qWxSD{MYPxLB_f2LEk&mG1NMGSL#jrtS#ehLb8AD>Y*m?h1^Ud0 zMH3samkK8fa$L-WBw{5X);ZrwKN=ejO<&+%?R&<$W%~Q6qCu)-q?(t8hW+EmE<;T( zsB`UUFG)u)KxA33so2aeu+NDPU#+_$?P&ux7w>ju9w{k5a9#PDtYSi6mDE1@Sy)@! z;yVzF>{o{e)CdrepauR%M9BwNm(~Yc^iGYHf?Kq;J)rM{j8W6CqDDp>A|D_EZAMfqId#7x4{O?($@L z@icT?D_|cysNnMUgT|bk5hYP+V^^o)PDR^TF6-}mQQ0ND+h^~aW(Ei=DwbfnuR+cW zG@_`eratjNBm7AF@A*o?aX~I-C8tS$R^c2$Ug+XR?{tRDmA2Q?bGEn3O0{;+oNuQI zs;-nQ$$|vdSK2t3=*BjTmlfwXvBn7EO*umjj%^4Ld9Q19_C?19m0oPdXY=*C%Wu9c zNX4G(YPhoCf9A#u`Hb2$?Gt+x=szU+MQ`Ni6Q~OW=5|2U+4qVn! zCw4l#%U=RZMAYU??@?t=J6n+8GI(zJ7HR2SBXuuEFO2d4-_`-LZ!Qn{`b06sb5m?0xKx3T(OC&wmwrP2muYQ0Toyu!PahAVkx550oketM9NaFS{oz!){K)^U6T*rH{w@4zxA~^R(-=07mOHzOxQZgEYx?cMOahAa|qnf z(NQk#&6@xgzxQralO$%cygTs-)Wg$-4n^u0 zJ4ccFy@Ax9E~q|MRR?7Er*7BHH7E)~Jk!5j6YGp z#S6UB06U0u7QCD zPnOscxZ`41AWNm?<#|=^)xBWyDI8Psw`1~}MViH%t^x22SC<7XcqM4Ix}_vtMuQ!Q z6CR4>(YgII`6UepHE1@z`t|r&zvIogs*9Y?%YpM@y@FY)^^-q{Fp0d1?S9TdMCbud zZ1iMj=SyaW$-!5IkW6s(Tyku^?PWWs0>!|WAdQ&n%kWiosNQ6-7cN6yqH010KCoC% zBE6LMYCHSKGzv8|D^f^kdn=U0$VWR?z42t>9Vh2AX2Gtkb~+A+k&43(~d|{|bzNoCA2agCV26uUL4OshjH$AHfOXaGN1F_zlyMZsXQc5$9dRHRz^zdT{zepzbqYK3@QB;5VX~kJ}8Bk`z$u#jSmI{0i|%eJaii; zA}N|(K)Ci}$5J^h`&+EfH%t1@qc^?gK|WYi&2EFBNcB~}=9kSg@rAN$X=r$x(@EJe zQZW2voLmOrLWe|I)8K|T5l6Gzv^6z1=oGxWyQ?&VPp~fA+nf+xqv4FCrG}GZW2w-! ztkx)v*Z{=fn8aLn_hisoYQPEEXsNa)cz?23k@L`9X>`ZZ`YM3Cv72O}+wUELA2Iay~~=~i-Z3{9@a_b48PZhUwF4YO=G z9$R?!#D-Y!(Qc8O-#OmDEF#>=5EmuFRt?8BxwciA3?3pvw|_RhgXlg=!C)Rb6->>Z zH#Dd)^Y)0#QZq3*A}clu2nm@h&&;M@doUlN78;5vW;b{HM0k{t$28?TZWE;f-rCRi zr1|S^y>9cx>8fEDyS3CK8RINl%9suE3!P{F23x3mZ9_aCku~I#3t^~hE#xHrtMYL3 zf)NX={rr3`rN_X~97o*Btr^`V)|nEkt&#ZS)*&g^kLv+1V#y1KeF@W_d>0?-HFZv< zG=_{%bIM|9aQe#L_*+oi8eLQb4jya%WlkpW>ry#qk(&WM{p>flLPw`95!1?o+|dFI zvYq{*M)cZ#H_e~T)EC9|Ih@rzCum*Yn4C&$GfE5-5{c-v4>IO3p8Fh0RLd!f*@4l&#If={C# zU+4H%WGbkaP6Vpy%@(#lK2%jpW^-mD%spEC_;T{vMS??Z`@WQ~nMv)W zS4l}p1iGCx*~IegH8&fywi-_z_q>9YRCw9@czQb9$09o-=%s^vhyVP;GD;=-<@O?< zuyLUy|7H5PySG+6NAa%7@GgwOp)wE0kd?Ld=BD0I@u(XLwD52Xmswe{uU*sf>@LqW zv3mwdLxxj5>8j22MGI2CUnA1eWec)R;V#?QgXIJF$Fr0d3{2byOMF2?MR>)vgAHTj z$X><9+lq>|J!u}4XBup}T#bEKf5qq#?{c?TH}v#d&#M2R_zIO^pov z__d(xZvRtQ!~7;{pUlJr;DdlE$F z<`x>-HD^SFSZb9(n5}P2olK2cww(2b9Z>AzbT_Idg14}{cqx$7DaP@!vU0Uo8*xzN zW^u>;$(Y4S?QQ$J{j^iq#TUC(oC*_iCl=_lFX9@HeN^s+F4q&8%%r`(g1LXk{rxmJ*1P-h-VtVH@zOV+Al^aIU63L=5DvH zw@G^1^dL^Av{9(~trJ@eysP<@APzU%7&NOw;-@nHTpbB6|C3T9fQm}%WA9{)n3Zx5 zHMesessDpiu-|8IQh=F`jt7)(V$HzrStAG^K zl1`CSRV4^Pchva$cScK1?u}S`sH;yjfjci)#$O5Bn0`Tb#kA5)%1*QJo6p7T`HCEq zjc^=ati10kqxMIEZ(k@!!s3@}&5xJzaAC9>=fZ_T8?7#9@mrx5IzHT(`80YKo$GQ; z(rdXzX>`vSP%Hs3ahjgI$-i@Q=eNrW#9No4a>6VxqnG}A%e3wqyzip0ag`jzV_wWY0it(Wgf@p&%U4}{zJt;Wb5#Yv>iwm92Ew~ z#6{3Yra)@JH3NtoSI}@r6vJQd&}>3rX!S^x)Ngi`gl-oUFMyoP`O0xu!uC_Z`U0M` z#VvCEY>X_R82HY!yEr?4@99CS_8MIbzXqbD^7EH8&n|UCvMf=36}r+!scVbGQ^4c& z325#B<_EIU*C!?%Ze7k%?RC@2+oG{Z>PzL3fa*y>w>g5C;loP!TaO{Yi^RzmwlU$= z3nDIc3=ERL`Si-~0=k$3YNuaAq{yPt97hSv%sl$Vrw&svnD3UFGHVFl2LwS(K>-L_ zYy^q4Qd7ZtxN;Euw>SupK*XAbjJmakAOIWz|D-0|mH3&)KsIMc2zj+?O2M`(5%>_f zPxjgs_nPPcQ^Cl>LJ@?Cf>Xw=K6|@b;m}YKEGfQsL62#!joq#OX!DzPjSlf)@SM71 z3c8qpfj=yNsO{^3f_p8XyHoA8HN;e!RbvJk*6)uanX?FZ7~xmAquE5t+&7KJt#o%E zpWWmEXc?W6`irIx`%L0!Sspt3+E4E>FRugfjZ#=?ARiuBfs-vl13-GOw)}P?ZYg;Foqa~Y{5xvy;7?lu z05nDhhzI~M5e3P@LZ+2R+a(AXC>Y}Fy94-g06)0_m`9V26%QcvEw{KrNPQsxS7B$w zTJd-zmOE(WGsuCcC-rOSp*250zKKGExR`csgxsZbp!*e#0pS6pN@vZ6w@mY8_|H6} z=DIB9IsqyJaEIp|)iWA2t!z6#IDq@26=R$S?3uZyl z&9ts^aie|p)hldh`bP$KL5O2;ecy}WPdkB01Giom^GQ$^&8`ZkUEu$?4!r{Cus%QU zwpe7Enp;dYWm8lASYTje93LA~Ad_$a2m|gr6|j&FDFtlVg5uh)C2wR$RU>&7*aP7x z-{t~d_c$j4bjT; z0(gMj+}!kq@zotxbALZi!!Bl8=G;sIxdft zsX967=}W9^_;-D4DJnw2$HZg&7PtPWH{bZI`))a+hV>=(T zJ0xscTTnBa`sQbvB=%SHg)J4ECT@kw$BFqkWO8u5#&Gm`R%Te}{w?~A!xpgRS)UvS z!lce#?5dte>3seyTI(9TGYX)mg5-ur_wFqNvEVw-odB~xzU)JF5@!wXmM=2Sfj}it zuVFn)C5lDZ48-YqwR8H>a4Sp@wvSic5MUf6XS4d=;Q-zVP=KU8c4a#d@cSFA+hckV zo4}0>>XT#@-GKDPs;Hr%igc7-uP#>;M0iEc^3qOD?ho=nQiHLXJTpprn`R>KLov0`WERMn)w zi5a&<9X@ckAcwMe04g9UPmz4%`t^A?#NjyLoq{QGKDE0N%)xN3K>h=xCwVWZQJJ4v^Gx3=s z;acraPPdc+32Q3YdiI!1TV@|yI(Bod9xKiCdLnQ<$5z9y$Q-;a=9VaAzj=rcxo*w5 zW^PDbPWaT%qqiUjMNf~BEF~DI1#tNGRxtog1DJ&rlvuqMj+t5FZM0TUk=0}q%V}f>UJuI%}v2-5*P@!5D zbUt{7>rdq)LU98$Ew`Z1VQt@!st`_F+rv;YA)-CuB%3?hqL%cW)!bb>?cSN z@~Y&MCxgH7j-F_bEfI-preoF{&d? z+N<7t4M_TW^d5D1KfKSd=xKlz-+#qw4g#fv)|;r^u-ii?d$A`!#JlavU;x4_f8w11 z3W;QrSL{LL5MYU})foH-fOXPo1J`_ z-U{>~-|Y!I+VKx8G{*3L-GUEiMm|r6oz+%(#e4mMkBpL#kos&pUkqo^uc9jDoRvtv z``gjS4LyEAkK>{e4uV1hr&U#Px+4LP5QgjO>INP5 z&3#{t1I+}{o{Z-HKi-qTdaG!Gc+&CayF(aI_UlPAC=C(zD}Si~nE`-JJ!f*7K<5j= z`tceyzyJZ6+29}-c=QrcF)?5E&a1dq;bzYtud7-drN_Pb>EN=xRZabL%M?fiN_6tx zS-F>n$-7gC@9!j2T>wuO05}v!9gHkOwg-(Y@HL4(z%|UVMK=Wi&)o7EadCYCa(sLX zK#(HV14gHqEOn$wwYw#$BRf`MOahUu3fAx1QT`r9AVsB$TDO7fH_E?CzX=nLG{Y47 z3iyaY>qLK?m3pSA_1Cq~g^pf2amfS1vX!UT>{+^=L3%(G150G2CqMvjafB- z=uZ8hzvu+a0?$t4fQmo%>4Q~!3})D3>Qj(kG)5r%!Q89+CUAICJLBGB%PK`r-ttkQ z2>gkvTmd{+1VZYR1+Zqk%zZwv+7q+>loTYZ#ZCRhKEzSBkf@H%;9VD&Il&U~!pHPL zJ~$@jWsSS0u6GGqp(amLV z-?1SCR+aElAhN>*?CxX`Z41bS!LBtN);jqb)U57w3cg*#*OUdWqCCS}%*AiHw7s4- zHYPq!2C6H(8?||wnbvC|8bRoW5{8J}z;I=w1Vgm!(J71^cb4MO@VALJ-3@k$5t{F0 zco_PmT;-}gRgCT41`QR)85VS113_zPFS0J=hFOwU8S*3e|FhohcQhWTb^S8UWM(Ep z1wh2sh@G~rR-bF|J>NB*%+mOg5h=A?ON-}*2H{QbukrF;7lKxdDl60d`G=2B7+PBF z_E&MTgv0}$8Bm>tk9WVIK;>&vg0+WC^dmKWgNo7Mq@<>U17hR10r#4>Lxbdo()bdQ z(^T)L0E?$)A@`Zr1gLQb=$S^ln*h@TxHU`WML<<^y=+&NNh1*Up`u**k5f@CA08K3 zp~BEh&z^G8AmIlfX@x7+u_`J8yz$V+6f{?43Ob+qh1KQbgM%j;Q7kk_OXd52YiPcP zqtNIZ$gF+xgJe1#*-@@5_%%xKo|Z*sN$i8|9nM_{9&!649EF63$#Jz3v1BUXaC9#t{`8Tq*f5{RL*FGKgQo{Sb3@fP9 zww!Y?d0kx4XV95|P;hAEK*D`r-rqrl3SI$s?5W~0V6xp~Hd=vw&idgPEkR?TQ+w#$ zUlz)bW_vXFSBc+V#qcH^MB}7g;JB!I>+&xUkn~xs5uq)sZeW1jk3}5qB{vq1m*%!E z0Mtx5Vftl_SDxbf(^jkLzd;;IqlSh?L4H06f=55>9p);^&j-OfvIXjnpC8ZY={ArD z^lC$68Y0znmII4AnI-5MsFi?D=16^m6S}Zr*9!o?nGxFuD}K!J=RyFZlSa!~c$&ysKDB@#B%A zA}saKbiWtLin^R-(mDVYg)SZGE4Ans){bblEbDvW8LXo%`zbDwrw#htw-Lv&*EqTG zBBJzz=y2L7261mCDH_}*Q5yUsUj7F>&Ph9}jR}FPDlbyRDYtnqQbA1$dm7l8^2;ol z_nM^D`7v*gDEJjLFq;FN*=nd_-?!rH>YXQv1{_PMoM(4!mg3WG50~pR-gn#G;8#nR zcCrB$*8n+~D#p~wal9>7WMwN3JNc9GWZSayM`5aK?XML#PKrB&+$nD0_I0$cnD%?( z#;9cShcM>U8x{wWD|mzDdGgUa zdizu^sJJm16LS}#VtL}4P6!1x~l5WrtsqPXRk#m3J8gmNYTtb*Qo(VS3Yh?EdN)!#4mT-t(n$b zAD>m0C>aNLAWFyh)~o;%=TACr)09(91*qNta8o|J}l~1thRor)7Q85F?hL? z7Ya3}-=DkYCcpl3P%DpI*1O}1H(A;Rq3)@AN+1>}Do>LQ0=aPf>G5!Pl(2wF8QKg->P!eX3mpAnO-!EUTTdxUMSCl{ zEuNY5prg8bvR=^7m0dZ`<2-nirNz#v>;@W2lX{s&McLpcvh~Ag(TB$dWs&>2h|;YK zx~HFYc=ZZf)cGQSAIihSuJgyu0s}m@&JK7@UYxa^@Ms^XG(0INDP)biAl$(mS6XU9 z4|gVsO9X_|az80EHV+NJ7sCd(in({w32m-p{_gm(&EnK`|K}%L%L^FHWWa)V)%bSL zcq%))JY;jsi5)^u-WliXO_gexx!VH9PfQK$zg8+ff8JsKwmURb8G!xp>Vi>#+_U|y zyyz=QyG@7VG5S?3%;=?B9iw5Ei%!67NK_sMP6>#vPc^U#Zf)wyv>y?pS&eT#bab46 z`Dy#fSicp*R{$La$jZbN#fpXxvv|MCh=|rKWXF7WxLq#@Of^+JbndOKpf1MxmUr91 zD!r3?S&`-x>&MnBV!aaxwcO0hB<6o~SgGCOOZ#G7IZ3X61_t*}!dE-~p*LACp?Xzp zEK&R$Sx84wAr_^I%T^N50yxHGWZ*uU{&Ofi2~-aANVrZ*Ts#*{nvSv0G(O(5<}Ngb z2}6KRrFgLMnqpt>*68VkZu&nrcXRmF!J!gYimiZ@`e_$Myyi+D?w^s>#hW}%QLs^) zkDx#8=@}0O%u4O~f2lsGe7!{z%jchi7HV1zUjN`^*Tdm)1daOlDh0n_0d082g?1Jj zI<@+h(ho?8X{8|xOKzl^55V}^mSypSHY<34R96P-yqA|=;gE;`uNY1!Yh-n3Vgfj6 zMs-YFDlmF^EDQ73W7*Oh-7K)f>`3#?tSD-hWE-$gze9tX1dq(pq@5pETBZQER8OCs znSz{z1TkLYY-C46h!1S{=q2Nb4`Frnn7BZTZDHI6ODY{se0BPbpmW=zR%#YM68|Z` zHXj+$DxQwEM8d_O1zb86pRy23wW6X!pySef20Or-)B3C}_nWVfxf#mhjboK5i_n<4 zDGp7jwM>CnEk1ZYZmgde`t$A!G+W*7z*oLINMyfLOgU0bMWw|plw2I)fZ~GLt^m_j zDS3|e!y}%+{vWjT@BGMnbgZj;?tQ-W>h7{7b;Ra-FK)-wSZTf{n#$zF!{d9yoJk z2^9-HO!do-ya@r=&Ba*Yhk!6JS~JE~`>T4}D=QC2_Y72y3qfX(6;W#5+oY(t)6T5Bk3$M6)b;f&4X6!VCf%Py~JBSP} zOqq(VYEoNgfrb5PiBUY#b+PE-k-bk`BI=^(k;&Iw_AoTNr4lUx>H3&#X<=Qw@@~K#bFP&F#b8iWIfx-Oxb-lz`PZ$EchA!h^j21z3Lvnl^o_mda zTG^c%ul+Tf4!IrZoe=>_QZO;+0xyl3Db6wWGq6_Gy}vrQJen<2#qgISWM(&~!C zGxnkKGP?{a72A7cyZ`>)QUV`cWUSxFDoZ$SC}CX2;ZYb4K7}Qy>FAhPXWO?dFzcZ& zvdPPoeB^hrhgW3r8<|U+DgX7CUX_cibCoIeFCI>@=iPR|0<$`*XR4nl>8L-+m$@P= zR3yN!2E#g9@MKMS5^}hDYB2&)3L}z%n#Wy9hsvOWX#qhyTcf#M`^j*TAJ`)}-=a=Y zEsBI?g=@l$l$uQW+Kvyu=Sa^+Be2ceh!XAnEx!rGfp34WU3C!>pT))^bQ6|QT{T{G z;<->heeLWD-n4Eno0Bli-O=Sa<$DN}z!AY>j=02M2kiv*uAQMt?=4>8WMIaYRE3~g zEZJ}K;1({}+VI%e)n?CruL}+K@R$!;a|xQ|W>1KR>7kkY@HHC3Y`_XvZU^0u=apUP zVb6TGWM1WqFikyKE)e-x;Dp#2ofA0;fjK%JfpR`Uo_gt8<1STD&)OC6+f^iU5H+n9 zxAbiz<-acApn6Oyo!wCSxaQ~jFe$Lh>Ti$iezFMeybHxmg*qklvZ8MLbPVLTvP*FV z18?2&UH`VZmfD8(@*uFH6c&CRwm7WMZ4GKoY61IW-7(3AvO?i|*#lK;=H^q^fG+dd zy8Slr@}@!S2!BikZa(r1^|;Cq=#B3Gu^8Z)K*szXM`-7}aSzY_S-<=W!oRL)OikR; z?_`-_>a-u!roZQhp0@CY|MS?RO;gR*8f##rYTWNeY<`soV%S$mt*Zl?UXpByn~{Ku zIp~Gdw({9MVutcKoMjSvLLar)!jf>lWxs0<`8SBUTjchTl;FEDG1BM!*h;qf;Z+8m z=$$u~ zdoZ`k)vZ4#3o+-|(P%=$Q{qRx_*RBI&MTLs64_+Eb|?LK6WlNAGQIkJ{)o_WMYgU; zhp%^efDl?+zYlUTT=}Ne6{I8563KF@K)CX<7~+wkfLPep&dHfNiY)jZ!4KImBt#S{ zcRsX{T#r6R+|${+L~-(w^3-_lQvzt-D}H|XJDi4vkx}XQFEZmO*-VSt)9xwY5>$5) zGZnvoVPF3ixRt2LnmSAdOs{|s68vfUAAdp!IQ>3E6;!vu@IT~d>i0>f1lN2S%^?Kx zGi?T9F_8WrKQ5j7Glg=AG$G4-H<2d1?2wu;U%0(0+A Vj&4(aiU*xaT}4Z|`2LgU{|T9XBu4-M literal 0 HcmV?d00001 diff --git a/mail_optional_follower_notification/tests/__init__.py b/mail_optional_follower_notification/tests/__init__.py new file mode 100644 index 000000000..2a6791af4 --- /dev/null +++ b/mail_optional_follower_notification/tests/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_mail_optional_follower_notifications diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py new file mode 100644 index 000000000..4f128323a --- /dev/null +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp.tests import common + + +class TestMailOptionalFollowernotifications(common.TransactionCase): + + def setUp(self): + super(TestMailOptionalFollowernotifications, self).setUp() + self.partner_obj = self.env['res.partner'] + self.partner_01 = self.env.ref('base.res_partner_2') + self.partner_02 = self.env.ref('base.res_partner_13') + self.partner_03 = self.env.ref('base.res_partner_5') + + def test_send_email_optional_follower_notifications(self): + ctx = self.env.context.copy() + ctx.update({ + 'default_model': 'res.partner', + 'default_res_id': self.partner_01.id, + 'default_composition_mode': 'comment', + }) + mail_compose = self.env['mail.compose.message'] + values = mail_compose.with_context(ctx)\ + .onchange_template_id(False, 'comment', 'res.partner', + self.partner_01.id)['value'] + values['partner_ids'] = [(4, self.partner_02.id), + (4, self.partner_03.id)] + compose_id = mail_compose.with_context(ctx).create(values) + compose_id.with_context(ctx).send_mail() + res = self.env["mail.message"].search( + [('model', '=', 'res.partner'), + ('res_id', '=', self.partner_01.id)]) + self.assertEqual(len(res.ids), 1) + message = self.env['mail.message'] + for record in res: + if record.notified_partner_ids.ids == [self.partner_03.id] and\ + record.partner_ids.ids == [self.partner_03.id]: + message += record + self.assertEqual(len(message.ids), 0) + values['partner_ids'] = [(6, 0, [self.partner_03.id])] + compose_id = mail_compose.with_context(ctx).create(values) + compose_id.notify_followers = False + compose_id.with_context(ctx).send_mail() + res = self.env["mail.message"].search( + [('model', '=', 'res.partner'), + ('res_id', '=', self.partner_01.id)]) + message = self.env['mail.message'] + for record in res: + if record.notified_partner_ids.ids == [self.partner_03.id] and\ + record.partner_ids.ids == [self.partner_03.id]: + message += record + self.assertEqual(len(message.ids), 1) diff --git a/mail_optional_follower_notification/wizard/__init__.py b/mail_optional_follower_notification/wizard/__init__.py new file mode 100644 index 000000000..56c0250a0 --- /dev/null +++ b/mail_optional_follower_notification/wizard/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import mail_compose_message diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py new file mode 100644 index 000000000..b6bc90538 --- /dev/null +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, fields, api + + +class MailComposeMessage(models.TransientModel): + _inherit = 'mail.compose.message' + + notify_followers = fields.Boolean(default=True) + + @api.multi + def send_mail(self): + for wizard in self: + wizard = wizard.with_context( + notify_followers=wizard.notify_followers) + super(MailComposeMessage, wizard).send_mail() + return {'type': 'ir.actions.act_window_close'} diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml new file mode 100644 index 000000000..62078101f --- /dev/null +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -0,0 +1,18 @@ + + + + + mail.compose.message.form (mail_optional_autofollow) + mail.compose.message + + + + + + + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) + + + + + \ No newline at end of file From ffbdda137fa8d9a5bc5752a477ece65cd08b14d8 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 25 May 2016 14:12:00 +0200 Subject: [PATCH 02/55] Upgrade version from 8 -> 9 --- mail_optional_follower_notification/README.rst | 5 +++-- mail_optional_follower_notification/__openerp__.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 3132e6f05..2e08dc16e 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -25,7 +25,7 @@ This field it's initialized to true to keep the standard behavior. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/205/8.0 + :target: https://runbot.odoo-community.org/runbot/205/9.0 * https://www.odoo.com/forum/help-1 @@ -45,6 +45,7 @@ Contributors ------------ * Adrien Peiffer +* Laurent Mignon Maintainer ---------- @@ -57,4 +58,4 @@ 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. -To contribute to this module, please visit https://odoo-community.org. \ No newline at end of file +To contribute to this module, please visit https://odoo-community.org. diff --git a/mail_optional_follower_notification/__openerp__.py b/mail_optional_follower_notification/__openerp__.py index 5421f2880..752029eec 100644 --- a/mail_optional_follower_notification/__openerp__.py +++ b/mail_optional_follower_notification/__openerp__.py @@ -11,7 +11,7 @@ 'Odoo Community Association (OCA)', 'website': "http://acsone.eu", 'category': 'Social Network', - 'version': '8.0.1.0.0', + 'version': '9.0.1.0.0', 'license': 'AGPL-3', 'depends': [ 'mail', From dcb1d54ed49a9cca755b81473a7d2f1188fa4852 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 25 May 2016 15:34:16 +0200 Subject: [PATCH 03/55] mail.notification has been removed. The notify is done directly on the res.partner and channel --- .../models/__init__.py | 2 +- .../models/mail_notification.py | 19 ------------------- .../models/res_partner.py | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+), 20 deletions(-) delete mode 100644 mail_optional_follower_notification/models/mail_notification.py create mode 100644 mail_optional_follower_notification/models/res_partner.py diff --git a/mail_optional_follower_notification/models/__init__.py b/mail_optional_follower_notification/models/__init__.py index cc213b9fc..0c4de3219 100644 --- a/mail_optional_follower_notification/models/__init__.py +++ b/mail_optional_follower_notification/models/__init__.py @@ -3,4 +3,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import mail_message -from . import mail_notification +from . import res_partner diff --git a/mail_optional_follower_notification/models/mail_notification.py b/mail_optional_follower_notification/models/mail_notification.py deleted file mode 100644 index 47cf08b6a..000000000 --- a/mail_optional_follower_notification/models/mail_notification.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from openerp import models, api - - -class MailNotification(models.Model): - _inherit = 'mail.notification' - - @api.model - def _notify(self, message_id, partners_to_notify=None, - force_send=False, user_signature=True): - if self.env.context.get('force_partners_to_notify'): - partners_to_notify =\ - self.env.context.get('force_partners_to_notify') - super(MailNotification, self)._notify( - message_id, partners_to_notify=partners_to_notify, - force_send=force_send, user_signature=user_signature) diff --git a/mail_optional_follower_notification/models/res_partner.py b/mail_optional_follower_notification/models/res_partner.py new file mode 100644 index 000000000..4c7e53f49 --- /dev/null +++ b/mail_optional_follower_notification/models/res_partner.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 ACSONE SA/NV () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import models, api + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + @api.multi + def _notify(self, message, force_send=False, user_signature=True): + if self.env.context.get('force_partners_to_notify'): + partners_to_notify =\ + self.env.context.get('force_partners_to_notify') + self = self.filtered(lambda p: p.id in partners_to_notify) + super(ResPartner, self)._notify( + message, force_send=False, user_signature=True) From b4d8d947518fb688221aaf7f3040126e5ccb7688 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Mon, 13 Jun 2016 10:12:23 +0200 Subject: [PATCH 04/55] Tests: Replace XML_IDs no more available in 9.0 --- .../tests/test_mail_optional_follower_notifications.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 4f128323a..1ca61bfbe 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -11,8 +11,8 @@ def setUp(self): super(TestMailOptionalFollowernotifications, self).setUp() self.partner_obj = self.env['res.partner'] self.partner_01 = self.env.ref('base.res_partner_2') - self.partner_02 = self.env.ref('base.res_partner_13') - self.partner_03 = self.env.ref('base.res_partner_5') + self.partner_02 = self.env.ref('base.res_partner_3') + self.partner_03 = self.env.ref('base.res_partner_4') def test_send_email_optional_follower_notifications(self): ctx = self.env.context.copy() From ff0552c4ed035fd656447ff01b787c525346dc27 Mon Sep 17 00:00:00 2001 From: Thomas Binsfeld Date: Fri, 19 Aug 2016 09:40:09 +0200 Subject: [PATCH 05/55] Argument auto_commit in send_mail --- .../wizard/mail_compose_message.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index b6bc90538..0153bfe65 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -11,9 +11,10 @@ class MailComposeMessage(models.TransientModel): notify_followers = fields.Boolean(default=True) @api.multi - def send_mail(self): + def send_mail(self, auto_commit=False): for wizard in self: wizard = wizard.with_context( notify_followers=wizard.notify_followers) - super(MailComposeMessage, wizard).send_mail() + super(MailComposeMessage, wizard).send_mail( + auto_commit=auto_commit) return {'type': 'ir.actions.act_window_close'} From 289ea6978e79b42f63ca3de029d7ea8799b43722 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 11:46:07 +0200 Subject: [PATCH 06/55] Migration of mail_optional_follower_notification to 10.0 --- mail_optional_follower_notification/README.rst | 5 ++--- .../{__openerp__.py => __manifest__.py} | 0 .../models/mail_message.py | 14 +++++++++++++- .../models/res_partner.py | 8 +++++--- .../test_mail_optional_follower_notifications.py | 13 +++++++------ .../wizard/mail_compose_message.py | 2 +- .../wizard/mail_compose_message_view.xml | 4 ++-- 7 files changed, 30 insertions(+), 16 deletions(-) rename mail_optional_follower_notification/{__openerp__.py => __manifest__.py} (100%) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 2e08dc16e..0998cc9d2 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -25,7 +25,7 @@ This field it's initialized to true to keep the standard behavior. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/205/9.0 + :target: https://runbot.odoo-community.org/runbot/205/10.0 * https://www.odoo.com/forum/help-1 @@ -35,8 +35,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 -`here `_. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback. Credits ======= diff --git a/mail_optional_follower_notification/__openerp__.py b/mail_optional_follower_notification/__manifest__.py similarity index 100% rename from mail_optional_follower_notification/__openerp__.py rename to mail_optional_follower_notification/__manifest__.py diff --git a/mail_optional_follower_notification/models/mail_message.py b/mail_optional_follower_notification/models/mail_message.py index fe64abc01..4768bb819 100644 --- a/mail_optional_follower_notification/models/mail_message.py +++ b/mail_optional_follower_notification/models/mail_message.py @@ -2,7 +2,7 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api +from odoo import models, api class MailMessage(models.Model): @@ -17,3 +17,15 @@ def create(self, values): force_partners_to_notify = [d['id'] for d in partner_list] ctx['force_partners_to_notify'] = force_partners_to_notify return super(MailMessage, self.with_context(ctx)).create(values) + + @api.multi + def _notify(self, force_send=False, send_after_commit=True, + user_signature=True): + res = super(MailMessage, self)._notify( + force_send=force_send, send_after_commit=send_after_commit, + user_signature=user_signature) + if not self.env.context.get('notify_followers'): + # Needaction only for recipients + self.needaction_partner_ids = [(6, 0, self.partner_ids.ids)] + return res + diff --git a/mail_optional_follower_notification/models/res_partner.py b/mail_optional_follower_notification/models/res_partner.py index 4c7e53f49..f32d9bb0c 100644 --- a/mail_optional_follower_notification/models/res_partner.py +++ b/mail_optional_follower_notification/models/res_partner.py @@ -2,17 +2,19 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api +from odoo import models, api class ResPartner(models.Model): _inherit = 'res.partner' @api.multi - def _notify(self, message, force_send=False, user_signature=True): + def _notify(self, message, force_send=False, send_after_commit=True, + user_signature=True): if self.env.context.get('force_partners_to_notify'): partners_to_notify =\ self.env.context.get('force_partners_to_notify') self = self.filtered(lambda p: p.id in partners_to_notify) super(ResPartner, self)._notify( - message, force_send=False, user_signature=True) + message, force_send=force_send, + send_after_commit=send_after_commit, user_signature=user_signature) diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 1ca61bfbe..919367287 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -2,7 +2,7 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests import common +from odoo.tests import common class TestMailOptionalFollowernotifications(common.TransactionCase): @@ -11,8 +11,8 @@ def setUp(self): super(TestMailOptionalFollowernotifications, self).setUp() self.partner_obj = self.env['res.partner'] self.partner_01 = self.env.ref('base.res_partner_2') - self.partner_02 = self.env.ref('base.res_partner_3') - self.partner_03 = self.env.ref('base.res_partner_4') + self.demo_user = self.env.ref('base.user_demo') + self.partner_03 = self.demo_user.copy().partner_id def test_send_email_optional_follower_notifications(self): ctx = self.env.context.copy() @@ -22,10 +22,11 @@ def test_send_email_optional_follower_notifications(self): 'default_composition_mode': 'comment', }) mail_compose = self.env['mail.compose.message'] + self.partner_01.message_subscribe_users(user_ids=[self.demo_user.id]) values = mail_compose.with_context(ctx)\ .onchange_template_id(False, 'comment', 'res.partner', self.partner_01.id)['value'] - values['partner_ids'] = [(4, self.partner_02.id), + values['partner_ids'] = [(4, self.demo_user.partner_id.id), (4, self.partner_03.id)] compose_id = mail_compose.with_context(ctx).create(values) compose_id.with_context(ctx).send_mail() @@ -35,7 +36,7 @@ def test_send_email_optional_follower_notifications(self): self.assertEqual(len(res.ids), 1) message = self.env['mail.message'] for record in res: - if record.notified_partner_ids.ids == [self.partner_03.id] and\ + if record.notification_ids.mapped('res_partner_id').ids == [self.partner_03.id] and\ record.partner_ids.ids == [self.partner_03.id]: message += record self.assertEqual(len(message.ids), 0) @@ -48,7 +49,7 @@ def test_send_email_optional_follower_notifications(self): ('res_id', '=', self.partner_01.id)]) message = self.env['mail.message'] for record in res: - if record.notified_partner_ids.ids == [self.partner_03.id] and\ + if record.notification_ids.mapped('res_partner_id').ids == [self.partner_03.id] and\ record.partner_ids.ids == [self.partner_03.id]: message += record self.assertEqual(len(message.ids), 1) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index 0153bfe65..d90bb4b7a 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -2,7 +2,7 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api +from odoo import models, fields, api class MailComposeMessage(models.TransientModel): diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index 62078101f..b4ba51941 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -1,5 +1,5 @@ - + mail.compose.message.form (mail_optional_autofollow) @@ -15,4 +15,4 @@ - \ No newline at end of file + \ No newline at end of file From 47b41682cbd11969a0a94af4a9a5bd7a0161e502 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 12:10:45 +0200 Subject: [PATCH 07/55] [FIX] Bad version --- mail_optional_follower_notification/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 752029eec..848dc736c 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -11,7 +11,7 @@ 'Odoo Community Association (OCA)', 'website': "http://acsone.eu", 'category': 'Social Network', - 'version': '9.0.1.0.0', + 'version': '10.0.1.0.0', 'license': 'AGPL-3', 'depends': [ 'mail', From 3c37cb6281c0499efef74b436ee6cf9138c0aa7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul=20=28ACSONE=29?= Date: Mon, 26 Dec 2016 14:55:56 +0100 Subject: [PATCH 08/55] [FIX] pep8 --- .../i18n/am.po | 48 +++++++++++++++++ .../i18n/ar.po | 48 +++++++++++++++++ .../i18n/bs.po | 48 +++++++++++++++++ .../i18n/ca.po | 29 +++++----- .../i18n/cs.po | 48 +++++++++++++++++ .../i18n/da.po | 48 +++++++++++++++++ .../i18n/en_GB.po | 48 +++++++++++++++++ .../i18n/es.po | 31 ++++++----- .../i18n/es_CR.po | 48 +++++++++++++++++ .../i18n/es_EC.po | 48 +++++++++++++++++ .../i18n/es_MX.po | 48 +++++++++++++++++ .../i18n/es_VE.po | 48 +++++++++++++++++ .../i18n/et.po | 48 +++++++++++++++++ .../i18n/fi.po | 48 +++++++++++++++++ .../i18n/fr.po | 53 +++++++++++++++++++ .../i18n/fr_CA.po | 48 +++++++++++++++++ .../i18n/gl.po | 48 +++++++++++++++++ .../i18n/hr.po | 49 +++++++++++++++++ .../i18n/hr_HR.po | 48 +++++++++++++++++ .../i18n/hu.po | 48 +++++++++++++++++ .../i18n/it.po | 53 +++++++++++++++++++ .../i18n/ja.po | 48 +++++++++++++++++ .../i18n/lt.po | 48 +++++++++++++++++ .../i18n/lv.po | 48 +++++++++++++++++ .../i18n/mk.po | 48 +++++++++++++++++ .../i18n/mn.po | 48 +++++++++++++++++ .../i18n/nb.po | 48 +++++++++++++++++ .../i18n/nb_NO.po | 48 +++++++++++++++++ .../i18n/nl.po | 48 +++++++++++++++++ .../i18n/nl_BE.po | 48 +++++++++++++++++ .../i18n/nl_NL.po | 48 +++++++++++++++++ .../i18n/pl.po | 48 +++++++++++++++++ .../i18n/pt.po | 49 +++++++++++++++++ .../i18n/pt_BR.po | 29 +++++----- .../i18n/pt_PT.po | 48 +++++++++++++++++ .../i18n/ro.po | 48 +++++++++++++++++ .../i18n/ru.po | 48 +++++++++++++++++ .../i18n/sl.po | 34 ++++++------ .../i18n/sr@latin.po | 48 +++++++++++++++++ .../i18n/sv.po | 48 +++++++++++++++++ .../i18n/th.po | 48 +++++++++++++++++ .../i18n/tr.po | 48 +++++++++++++++++ .../i18n/tr_TR.po | 48 +++++++++++++++++ .../i18n/vi.po | 48 +++++++++++++++++ .../i18n/zh_CN.po | 48 +++++++++++++++++ .../i18n/zh_TW.po | 48 +++++++++++++++++ .../models/mail_message.py | 3 +- ...st_mail_optional_follower_notifications.py | 6 ++- 48 files changed, 2100 insertions(+), 60 deletions(-) create mode 100644 mail_optional_follower_notification/i18n/am.po create mode 100644 mail_optional_follower_notification/i18n/ar.po create mode 100644 mail_optional_follower_notification/i18n/bs.po create mode 100644 mail_optional_follower_notification/i18n/cs.po create mode 100644 mail_optional_follower_notification/i18n/da.po create mode 100644 mail_optional_follower_notification/i18n/en_GB.po create mode 100644 mail_optional_follower_notification/i18n/es_CR.po create mode 100644 mail_optional_follower_notification/i18n/es_EC.po create mode 100644 mail_optional_follower_notification/i18n/es_MX.po create mode 100644 mail_optional_follower_notification/i18n/es_VE.po create mode 100644 mail_optional_follower_notification/i18n/et.po create mode 100644 mail_optional_follower_notification/i18n/fi.po create mode 100644 mail_optional_follower_notification/i18n/fr.po create mode 100644 mail_optional_follower_notification/i18n/fr_CA.po create mode 100644 mail_optional_follower_notification/i18n/gl.po create mode 100644 mail_optional_follower_notification/i18n/hr.po create mode 100644 mail_optional_follower_notification/i18n/hr_HR.po create mode 100644 mail_optional_follower_notification/i18n/hu.po create mode 100644 mail_optional_follower_notification/i18n/it.po create mode 100644 mail_optional_follower_notification/i18n/ja.po create mode 100644 mail_optional_follower_notification/i18n/lt.po create mode 100644 mail_optional_follower_notification/i18n/lv.po create mode 100644 mail_optional_follower_notification/i18n/mk.po create mode 100644 mail_optional_follower_notification/i18n/mn.po create mode 100644 mail_optional_follower_notification/i18n/nb.po create mode 100644 mail_optional_follower_notification/i18n/nb_NO.po create mode 100644 mail_optional_follower_notification/i18n/nl.po create mode 100644 mail_optional_follower_notification/i18n/nl_BE.po create mode 100644 mail_optional_follower_notification/i18n/nl_NL.po create mode 100644 mail_optional_follower_notification/i18n/pl.po create mode 100644 mail_optional_follower_notification/i18n/pt.po create mode 100644 mail_optional_follower_notification/i18n/pt_PT.po create mode 100644 mail_optional_follower_notification/i18n/ro.po create mode 100644 mail_optional_follower_notification/i18n/ru.po create mode 100644 mail_optional_follower_notification/i18n/sr@latin.po create mode 100644 mail_optional_follower_notification/i18n/sv.po create mode 100644 mail_optional_follower_notification/i18n/th.po create mode 100644 mail_optional_follower_notification/i18n/tr.po create mode 100644 mail_optional_follower_notification/i18n/tr_TR.po create mode 100644 mail_optional_follower_notification/i18n/vi.po create mode 100644 mail_optional_follower_notification/i18n/zh_CN.po create mode 100644 mail_optional_follower_notification/i18n/zh_TW.po diff --git a/mail_optional_follower_notification/i18n/am.po b/mail_optional_follower_notification/i18n/am.po new file mode 100644 index 000000000..9dca0933d --- /dev/null +++ b/mail_optional_follower_notification/i18n/am.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_optional_follower_notification +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-17 01:02+0000\n" +"PO-Revision-Date: 2017-05-17 01:02+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: am\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: mail_optional_follower_notification +#: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +msgid "" +" Date: Mon, 4 Dec 2017 17:21:55 +0100 Subject: [PATCH 09/55] [IMP] Hide the checkbox for the mass mailing in mail_optional_follower_notification and mail_optional_autofollow --- .../wizard/mail_compose_message_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index b4ba51941..53b3a5568 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -7,7 +7,7 @@ - + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) From 35b295ba6ba03ee965b32e02fc95ba35cafe7243 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Fri, 20 Oct 2017 17:42:56 +0200 Subject: [PATCH 10/55] [FIX] mail_optional_follower_notification: Check force_partners_to_notify instead of notify_followers. Without this commit, followers are NEVER notified when a message is directly posted on the tracker (without click to open the mail compose message form) --- .../__manifest__.py | 2 +- .../i18n/am.po | 12 ++--- .../i18n/ar.po | 15 +++--- .../i18n/bg.po | 48 ++++++++++++++++++ .../i18n/bs.po | 15 +++--- .../i18n/ca.po | 12 ++--- .../i18n/cs.po | 12 ++--- .../i18n/da.po | 12 ++--- .../i18n/de.po | 33 +++++++------ .../i18n/el_GR.po | 49 +++++++++++++++++++ .../i18n/en.po | 31 +++++++----- .../i18n/en_GB.po | 15 +++--- .../i18n/es.po | 12 ++--- .../i18n/es_CO.po | 23 +++++---- .../i18n/es_CR.po | 15 +++--- .../i18n/es_EC.po | 15 +++--- .../i18n/es_MX.po | 15 +++--- .../i18n/es_VE.po | 15 +++--- .../i18n/et.po | 12 ++--- .../i18n/eu.po | 48 ++++++++++++++++++ .../i18n/fi.po | 12 ++--- .../i18n/fr.po | 20 ++++---- .../i18n/fr_CA.po | 15 +++--- .../i18n/fr_CH.po | 49 +++++++++++++++++++ .../i18n/gl.po | 12 ++--- .../i18n/hr.po | 15 +++--- .../i18n/hr_HR.po | 18 ++++--- .../i18n/hu.po | 12 ++--- .../i18n/it.po | 16 +++--- .../i18n/ja.po | 12 ++--- .../i18n/lt.po | 15 +++--- .../i18n/lv.po | 15 +++--- .../mail_optional_follower_notification.pot | 40 +++++++++++++++ .../i18n/mk.po | 12 ++--- .../i18n/mn.po | 12 ++--- .../i18n/nb.po | 15 +++--- .../i18n/nb_NO.po | 15 +++--- .../i18n/nl.po | 12 ++--- .../i18n/nl_BE.po | 15 +++--- .../i18n/nl_NL.po | 15 +++--- .../i18n/pl.po | 16 +++--- .../i18n/pt.po | 12 ++--- .../i18n/pt_BR.po | 15 +++--- .../i18n/pt_PT.po | 15 +++--- .../i18n/ro.po | 15 +++--- .../i18n/ru.po | 16 +++--- .../i18n/sk.po | 48 ++++++++++++++++++ .../i18n/sl.po | 15 +++--- .../i18n/sr@latin.po | 18 ++++--- .../i18n/sv.po | 12 ++--- .../i18n/th.po | 12 ++--- .../i18n/tr.po | 12 ++--- .../i18n/tr_TR.po | 21 ++++---- .../i18n/vi.po | 12 ++--- .../i18n/zh_CN.po | 15 +++--- .../i18n/zh_TW.po | 15 +++--- .../models/mail_message.py | 5 +- 57 files changed, 680 insertions(+), 352 deletions(-) create mode 100644 mail_optional_follower_notification/i18n/bg.po create mode 100644 mail_optional_follower_notification/i18n/el_GR.po create mode 100644 mail_optional_follower_notification/i18n/eu.po create mode 100644 mail_optional_follower_notification/i18n/fr_CH.po create mode 100644 mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot create mode 100644 mail_optional_follower_notification/i18n/sk.po diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 848dc736c..3453dec52 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -11,7 +11,7 @@ 'Odoo Community Association (OCA)', 'website': "http://acsone.eu", 'category': 'Social Network', - 'version': '10.0.1.0.0', + 'version': '10.0.1.0.1', 'license': 'AGPL-3', 'depends': [ 'mail', diff --git a/mail_optional_follower_notification/i18n/am.po b/mail_optional_follower_notification/i18n/am.po index 9dca0933d..e6e60ce9e 100644 --- a/mail_optional_follower_notification/i18n/am.po +++ b/mail_optional_follower_notification/i18n/am.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * mail_optional_follower_notification -# +# # Translators: # OCA Transbot , 2017 msgid "" @@ -12,19 +12,19 @@ msgstr "" "PO-Revision-Date: 2017-05-17 01:02+0000\n" "Last-Translator: OCA Transbot , 2017\n" "Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n" +"Language: am\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Language: am\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: mail_optional_follower_notification #: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form msgid "" -" Date: Sat, 30 Jun 2018 02:05:18 +0200 Subject: [PATCH 11/55] [FIX] README.rst syntax --- mail_optional_follower_notification/README.rst | 2 -- mail_optional_follower_notification/i18n/am.po | 1 + mail_optional_follower_notification/i18n/ar.po | 1 + mail_optional_follower_notification/i18n/bg.po | 1 + mail_optional_follower_notification/i18n/bs.po | 1 + mail_optional_follower_notification/i18n/ca.po | 1 + mail_optional_follower_notification/i18n/cs.po | 1 + mail_optional_follower_notification/i18n/da.po | 1 + mail_optional_follower_notification/i18n/de.po | 1 + mail_optional_follower_notification/i18n/el_GR.po | 1 + mail_optional_follower_notification/i18n/en.po | 1 + mail_optional_follower_notification/i18n/en_GB.po | 1 + mail_optional_follower_notification/i18n/es.po | 1 + mail_optional_follower_notification/i18n/es_CO.po | 1 + mail_optional_follower_notification/i18n/es_CR.po | 1 + mail_optional_follower_notification/i18n/es_EC.po | 1 + mail_optional_follower_notification/i18n/es_MX.po | 1 + mail_optional_follower_notification/i18n/es_VE.po | 1 + mail_optional_follower_notification/i18n/et.po | 1 + mail_optional_follower_notification/i18n/eu.po | 1 + mail_optional_follower_notification/i18n/fi.po | 1 + mail_optional_follower_notification/i18n/fr.po | 1 + mail_optional_follower_notification/i18n/fr_CA.po | 1 + mail_optional_follower_notification/i18n/fr_CH.po | 1 + mail_optional_follower_notification/i18n/gl.po | 1 + mail_optional_follower_notification/i18n/hr.po | 1 + mail_optional_follower_notification/i18n/hr_HR.po | 1 + mail_optional_follower_notification/i18n/hu.po | 1 + mail_optional_follower_notification/i18n/it.po | 1 + mail_optional_follower_notification/i18n/ja.po | 1 + mail_optional_follower_notification/i18n/lt.po | 1 + mail_optional_follower_notification/i18n/lv.po | 1 + .../i18n/mail_optional_follower_notification.pot | 1 + mail_optional_follower_notification/i18n/mk.po | 1 + mail_optional_follower_notification/i18n/mn.po | 1 + mail_optional_follower_notification/i18n/nb.po | 1 + mail_optional_follower_notification/i18n/nb_NO.po | 1 + mail_optional_follower_notification/i18n/nl.po | 1 + mail_optional_follower_notification/i18n/nl_BE.po | 1 + mail_optional_follower_notification/i18n/nl_NL.po | 1 + mail_optional_follower_notification/i18n/pl.po | 1 + mail_optional_follower_notification/i18n/pt.po | 1 + mail_optional_follower_notification/i18n/pt_BR.po | 1 + mail_optional_follower_notification/i18n/pt_PT.po | 1 + mail_optional_follower_notification/i18n/ro.po | 1 + mail_optional_follower_notification/i18n/ru.po | 1 + mail_optional_follower_notification/i18n/sk.po | 1 + mail_optional_follower_notification/i18n/sl.po | 1 + mail_optional_follower_notification/i18n/sr@latin.po | 1 + mail_optional_follower_notification/i18n/sv.po | 1 + mail_optional_follower_notification/i18n/th.po | 1 + mail_optional_follower_notification/i18n/tr.po | 1 + mail_optional_follower_notification/i18n/tr_TR.po | 1 + mail_optional_follower_notification/i18n/vi.po | 1 + mail_optional_follower_notification/i18n/zh_CN.po | 1 + mail_optional_follower_notification/i18n/zh_TW.po | 1 + 56 files changed, 55 insertions(+), 2 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 0998cc9d2..83f4f501a 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -27,8 +27,6 @@ This field it's initialized to true to keep the standard behavior. :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/205/10.0 - * https://www.odoo.com/forum/help-1 - Bug Tracker =========== diff --git a/mail_optional_follower_notification/i18n/am.po b/mail_optional_follower_notification/i18n/am.po index e6e60ce9e..65c4e856e 100644 --- a/mail_optional_follower_notification/i18n/am.po +++ b/mail_optional_follower_notification/i18n/am.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/ar.po b/mail_optional_follower_notification/i18n/ar.po index a08c3cf43..8c2eaf45b 100644 --- a/mail_optional_follower_notification/i18n/ar.po +++ b/mail_optional_follower_notification/i18n/ar.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/bg.po b/mail_optional_follower_notification/i18n/bg.po index 3c8b8e1fb..6c9b2157f 100644 --- a/mail_optional_follower_notification/i18n/bg.po +++ b/mail_optional_follower_notification/i18n/bg.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/bs.po b/mail_optional_follower_notification/i18n/bs.po index 4ecf33ae3..326a8d5e0 100644 --- a/mail_optional_follower_notification/i18n/bs.po +++ b/mail_optional_follower_notification/i18n/bs.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/ca.po b/mail_optional_follower_notification/i18n/ca.po index 94b0c60ef..5510920f7 100644 --- a/mail_optional_follower_notification/i18n/ca.po +++ b/mail_optional_follower_notification/i18n/ca.po @@ -39,6 +39,7 @@ msgstr "Missatge" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/cs.po b/mail_optional_follower_notification/i18n/cs.po index a88eeba3c..69b81513e 100644 --- a/mail_optional_follower_notification/i18n/cs.po +++ b/mail_optional_follower_notification/i18n/cs.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/da.po b/mail_optional_follower_notification/i18n/da.po index d6324839c..09f3120cc 100644 --- a/mail_optional_follower_notification/i18n/da.po +++ b/mail_optional_follower_notification/i18n/da.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/de.po b/mail_optional_follower_notification/i18n/de.po index d56f6c920..2c539228a 100644 --- a/mail_optional_follower_notification/i18n/de.po +++ b/mail_optional_follower_notification/i18n/de.po @@ -39,6 +39,7 @@ msgstr "Nachricht" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/el_GR.po b/mail_optional_follower_notification/i18n/el_GR.po index 7bcbca39c..e06ce956d 100644 --- a/mail_optional_follower_notification/i18n/el_GR.po +++ b/mail_optional_follower_notification/i18n/el_GR.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/en.po b/mail_optional_follower_notification/i18n/en.po index e2ff34b40..fd79215ea 100644 --- a/mail_optional_follower_notification/i18n/en.po +++ b/mail_optional_follower_notification/i18n/en.po @@ -42,6 +42,7 @@ msgstr "Message" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "Notify followers" diff --git a/mail_optional_follower_notification/i18n/en_GB.po b/mail_optional_follower_notification/i18n/en_GB.po index a678af073..51d90a134 100644 --- a/mail_optional_follower_notification/i18n/en_GB.po +++ b/mail_optional_follower_notification/i18n/en_GB.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es.po b/mail_optional_follower_notification/i18n/es.po index 3c5b86142..f66ef0f76 100644 --- a/mail_optional_follower_notification/i18n/es.po +++ b/mail_optional_follower_notification/i18n/es.po @@ -39,6 +39,7 @@ msgstr "Mensaje" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_CO.po b/mail_optional_follower_notification/i18n/es_CO.po index cac3c9e0d..7c7010319 100644 --- a/mail_optional_follower_notification/i18n/es_CO.po +++ b/mail_optional_follower_notification/i18n/es_CO.po @@ -39,6 +39,7 @@ msgstr "Mensaje" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_CR.po b/mail_optional_follower_notification/i18n/es_CR.po index 53462b220..42985d35f 100644 --- a/mail_optional_follower_notification/i18n/es_CR.po +++ b/mail_optional_follower_notification/i18n/es_CR.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_EC.po b/mail_optional_follower_notification/i18n/es_EC.po index 75cbd27d7..0ff5e1204 100644 --- a/mail_optional_follower_notification/i18n/es_EC.po +++ b/mail_optional_follower_notification/i18n/es_EC.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_MX.po b/mail_optional_follower_notification/i18n/es_MX.po index 6b14a50ce..b95218149 100644 --- a/mail_optional_follower_notification/i18n/es_MX.po +++ b/mail_optional_follower_notification/i18n/es_MX.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/es_VE.po b/mail_optional_follower_notification/i18n/es_VE.po index 212297d00..50dc7c6a7 100644 --- a/mail_optional_follower_notification/i18n/es_VE.po +++ b/mail_optional_follower_notification/i18n/es_VE.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/et.po b/mail_optional_follower_notification/i18n/et.po index 0405db491..765e4df93 100644 --- a/mail_optional_follower_notification/i18n/et.po +++ b/mail_optional_follower_notification/i18n/et.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/eu.po b/mail_optional_follower_notification/i18n/eu.po index ca08d61da..7c3327c4e 100644 --- a/mail_optional_follower_notification/i18n/eu.po +++ b/mail_optional_follower_notification/i18n/eu.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/fi.po b/mail_optional_follower_notification/i18n/fi.po index 6cb4044de..2946b1e1e 100644 --- a/mail_optional_follower_notification/i18n/fi.po +++ b/mail_optional_follower_notification/i18n/fi.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/fr.po b/mail_optional_follower_notification/i18n/fr.po index b642fad0f..9a9b87a43 100644 --- a/mail_optional_follower_notification/i18n/fr.po +++ b/mail_optional_follower_notification/i18n/fr.po @@ -44,6 +44,7 @@ msgstr "Message" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "Notifier les abonnés" diff --git a/mail_optional_follower_notification/i18n/fr_CA.po b/mail_optional_follower_notification/i18n/fr_CA.po index c8e6016d6..34c6c9ffb 100644 --- a/mail_optional_follower_notification/i18n/fr_CA.po +++ b/mail_optional_follower_notification/i18n/fr_CA.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/fr_CH.po b/mail_optional_follower_notification/i18n/fr_CH.po index 2d553d955..446c4fba1 100644 --- a/mail_optional_follower_notification/i18n/fr_CH.po +++ b/mail_optional_follower_notification/i18n/fr_CH.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/gl.po b/mail_optional_follower_notification/i18n/gl.po index e361ec3e0..500f8e698 100644 --- a/mail_optional_follower_notification/i18n/gl.po +++ b/mail_optional_follower_notification/i18n/gl.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/hr.po b/mail_optional_follower_notification/i18n/hr.po index c8fba1063..ccb4ceb4f 100644 --- a/mail_optional_follower_notification/i18n/hr.po +++ b/mail_optional_follower_notification/i18n/hr.po @@ -41,6 +41,7 @@ msgstr "Poruka" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/hr_HR.po b/mail_optional_follower_notification/i18n/hr_HR.po index c5379a393..dc5f86706 100644 --- a/mail_optional_follower_notification/i18n/hr_HR.po +++ b/mail_optional_follower_notification/i18n/hr_HR.po @@ -41,6 +41,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/hu.po b/mail_optional_follower_notification/i18n/hu.po index d381d51cb..2bdff7b56 100644 --- a/mail_optional_follower_notification/i18n/hu.po +++ b/mail_optional_follower_notification/i18n/hu.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/it.po b/mail_optional_follower_notification/i18n/it.po index 84f2c2851..1e900ee0b 100644 --- a/mail_optional_follower_notification/i18n/it.po +++ b/mail_optional_follower_notification/i18n/it.po @@ -44,6 +44,7 @@ msgstr "Messaggio" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "Notifica Follower" diff --git a/mail_optional_follower_notification/i18n/ja.po b/mail_optional_follower_notification/i18n/ja.po index 367e00b0a..d484ec211 100644 --- a/mail_optional_follower_notification/i18n/ja.po +++ b/mail_optional_follower_notification/i18n/ja.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/lt.po b/mail_optional_follower_notification/i18n/lt.po index 82576c512..982ce7ed2 100644 --- a/mail_optional_follower_notification/i18n/lt.po +++ b/mail_optional_follower_notification/i18n/lt.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/lv.po b/mail_optional_follower_notification/i18n/lv.po index ccd999dad..e6bb37d1c 100644 --- a/mail_optional_follower_notification/i18n/lv.po +++ b/mail_optional_follower_notification/i18n/lv.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot index 322da7ca5..dd99f5e50 100644 --- a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot +++ b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot @@ -30,6 +30,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/mk.po b/mail_optional_follower_notification/i18n/mk.po index 11593a7e4..1e38937ea 100644 --- a/mail_optional_follower_notification/i18n/mk.po +++ b/mail_optional_follower_notification/i18n/mk.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/mn.po b/mail_optional_follower_notification/i18n/mn.po index 4732acf6d..fbfa5d9c2 100644 --- a/mail_optional_follower_notification/i18n/mn.po +++ b/mail_optional_follower_notification/i18n/mn.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/nb.po b/mail_optional_follower_notification/i18n/nb.po index b5acdc91f..9ed4faa28 100644 --- a/mail_optional_follower_notification/i18n/nb.po +++ b/mail_optional_follower_notification/i18n/nb.po @@ -40,6 +40,7 @@ msgstr "Melding" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/nb_NO.po b/mail_optional_follower_notification/i18n/nb_NO.po index 436526a52..bba36669b 100644 --- a/mail_optional_follower_notification/i18n/nb_NO.po +++ b/mail_optional_follower_notification/i18n/nb_NO.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/nl.po b/mail_optional_follower_notification/i18n/nl.po index 95c7a6079..b9e417b9b 100644 --- a/mail_optional_follower_notification/i18n/nl.po +++ b/mail_optional_follower_notification/i18n/nl.po @@ -39,6 +39,7 @@ msgstr "Bericht" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/nl_BE.po b/mail_optional_follower_notification/i18n/nl_BE.po index 0f27a2772..cf0ecce51 100644 --- a/mail_optional_follower_notification/i18n/nl_BE.po +++ b/mail_optional_follower_notification/i18n/nl_BE.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/nl_NL.po b/mail_optional_follower_notification/i18n/nl_NL.po index 37f47ddb6..2ba2d0792 100644 --- a/mail_optional_follower_notification/i18n/nl_NL.po +++ b/mail_optional_follower_notification/i18n/nl_NL.po @@ -40,6 +40,7 @@ msgstr "Bericht" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/pl.po b/mail_optional_follower_notification/i18n/pl.po index a178d667a..9f2abc32c 100644 --- a/mail_optional_follower_notification/i18n/pl.po +++ b/mail_optional_follower_notification/i18n/pl.po @@ -41,6 +41,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/pt.po b/mail_optional_follower_notification/i18n/pt.po index 33bff2cc4..710246bb0 100644 --- a/mail_optional_follower_notification/i18n/pt.po +++ b/mail_optional_follower_notification/i18n/pt.po @@ -40,6 +40,7 @@ msgstr "Mensagem" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/pt_BR.po b/mail_optional_follower_notification/i18n/pt_BR.po index b4671e4fa..8b2a106e7 100644 --- a/mail_optional_follower_notification/i18n/pt_BR.po +++ b/mail_optional_follower_notification/i18n/pt_BR.po @@ -40,6 +40,7 @@ msgstr "Mensagem" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/pt_PT.po b/mail_optional_follower_notification/i18n/pt_PT.po index cbec58e7f..d5c2c43b2 100644 --- a/mail_optional_follower_notification/i18n/pt_PT.po +++ b/mail_optional_follower_notification/i18n/pt_PT.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/ro.po b/mail_optional_follower_notification/i18n/ro.po index 0ec39b3a0..1824ca171 100644 --- a/mail_optional_follower_notification/i18n/ro.po +++ b/mail_optional_follower_notification/i18n/ro.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/ru.po b/mail_optional_follower_notification/i18n/ru.po index 54bdea364..0acb4207d 100644 --- a/mail_optional_follower_notification/i18n/ru.po +++ b/mail_optional_follower_notification/i18n/ru.po @@ -41,6 +41,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/sk.po b/mail_optional_follower_notification/i18n/sk.po index 9a3a7344a..0134375ad 100644 --- a/mail_optional_follower_notification/i18n/sk.po +++ b/mail_optional_follower_notification/i18n/sk.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/sl.po b/mail_optional_follower_notification/i18n/sl.po index a5ebeac5f..f76bd1194 100644 --- a/mail_optional_follower_notification/i18n/sl.po +++ b/mail_optional_follower_notification/i18n/sl.po @@ -40,6 +40,7 @@ msgstr "Sporočilo" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "Obvesti sledilce" diff --git a/mail_optional_follower_notification/i18n/sr@latin.po b/mail_optional_follower_notification/i18n/sr@latin.po index 92148b4aa..57756a66d 100644 --- a/mail_optional_follower_notification/i18n/sr@latin.po +++ b/mail_optional_follower_notification/i18n/sr@latin.po @@ -41,6 +41,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/sv.po b/mail_optional_follower_notification/i18n/sv.po index 7397f8b32..2dfcb7542 100644 --- a/mail_optional_follower_notification/i18n/sv.po +++ b/mail_optional_follower_notification/i18n/sv.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/th.po b/mail_optional_follower_notification/i18n/th.po index 57abf5a52..e5b7d63c3 100644 --- a/mail_optional_follower_notification/i18n/th.po +++ b/mail_optional_follower_notification/i18n/th.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/tr.po b/mail_optional_follower_notification/i18n/tr.po index 6ea3d2d34..467160fcb 100644 --- a/mail_optional_follower_notification/i18n/tr.po +++ b/mail_optional_follower_notification/i18n/tr.po @@ -39,6 +39,7 @@ msgstr "İleti" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/tr_TR.po b/mail_optional_follower_notification/i18n/tr_TR.po index 3ff3be0f6..f5ff45695 100644 --- a/mail_optional_follower_notification/i18n/tr_TR.po +++ b/mail_optional_follower_notification/i18n/tr_TR.po @@ -40,6 +40,7 @@ msgstr "İleti" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/vi.po b/mail_optional_follower_notification/i18n/vi.po index d0a8c3100..f4036cb32 100644 --- a/mail_optional_follower_notification/i18n/vi.po +++ b/mail_optional_follower_notification/i18n/vi.po @@ -39,6 +39,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/zh_CN.po b/mail_optional_follower_notification/i18n/zh_CN.po index 051a82cd9..d6d986447 100644 --- a/mail_optional_follower_notification/i18n/zh_CN.po +++ b/mail_optional_follower_notification/i18n/zh_CN.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" diff --git a/mail_optional_follower_notification/i18n/zh_TW.po b/mail_optional_follower_notification/i18n/zh_TW.po index b826f0f7f..526b9474c 100644 --- a/mail_optional_follower_notification/i18n/zh_TW.po +++ b/mail_optional_follower_notification/i18n/zh_TW.po @@ -40,6 +40,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message_notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_forward_compose_message_notify_followers msgid "Notify followers" msgstr "" From 07ac53efb0b600695a3b4dba4505b973b8472946 Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 14 Dec 2018 14:33:22 +0000 Subject: [PATCH 12/55] Translated using Weblate (German) Currently translated at 100.0% (5 of 5 strings) Translation: social-10.0/social-10.0-mail_optional_follower_notification Translate-URL: https://translation.odoo-community.org/projects/social-10-0/social-10-0-mail_optional_follower_notification/de/ --- mail_optional_follower_notification/i18n/de.po | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mail_optional_follower_notification/i18n/de.po b/mail_optional_follower_notification/i18n/de.po index 2c539228a..68160471e 100644 --- a/mail_optional_follower_notification/i18n/de.po +++ b/mail_optional_follower_notification/i18n/de.po @@ -9,14 +9,15 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-01-16 03:47+0000\n" -"PO-Revision-Date: 2018-01-16 03:47+0000\n" -"Last-Translator: OCA Transbot , 2017\n" +"PO-Revision-Date: 2018-12-15 14:58+0000\n" +"Last-Translator: Maria Sparenberg \n" "Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" "Language: de\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.3\n" #. module: mail_optional_follower_notification #: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form @@ -26,6 +27,10 @@ msgid "" "access the notification directly from the document (if they are allowed to)" msgstr "" +"`_. 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. +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 +~~~~~~~ + +* ACSONE SA/NV + Contributors ------------- +~~~~~~~~~~~~ * Adrien Peiffer * Laurent Mignon +* Andrea Stirpe -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://odoo-community.org -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. -OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. +This module is part of the `OCA/social `_ project on GitHub. -To contribute to this module, please visit https://odoo-community.org. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_optional_follower_notification/__init__.py b/mail_optional_follower_notification/__init__.py index 98aa84d40..93aa2c1f8 100644 --- a/mail_optional_follower_notification/__init__.py +++ b/mail_optional_follower_notification/__init__.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import models from . import wizard diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 3453dec52..d0b549639 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -1,22 +1,18 @@ -# -*- coding: utf-8 -*- # Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': "Mail optional follower notification", - - 'summary': """ - Choose if you want to automatically notify followers - on mail.compose.message""", - 'author': 'ACSONE SA/NV,' - 'Odoo Community Association (OCA)', - 'website': "http://acsone.eu", - 'category': 'Social Network', - 'version': '10.0.1.0.1', - 'license': 'AGPL-3', - 'depends': [ - 'mail', + "name": "Mail optional follower notification", + "summary": "Choose to notify followers on mail.compose.message", + "author": "ACSONE SA/NV," + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/social", + "category": "Social Network", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "depends": [ + "mail", ], - 'data': [ - 'wizard/mail_compose_message_view.xml', + "data": [ + "wizard/mail_compose_message_view.xml", ], } diff --git a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot index dd99f5e50..15746f4d2 100644 --- a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot +++ b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,10 +14,15 @@ msgstr "" "Plural-Forms: \n" #. module: mail_optional_follower_notification -#: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +#: model_terms:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_form msgid ") -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import models, api @@ -8,13 +7,16 @@ class ResPartner(models.Model): _inherit = 'res.partner' - @api.multi - def _notify(self, message, force_send=False, send_after_commit=True, - user_signature=True): + @api.model + def _notify(self, message, rdata, record, force_send=False, + send_after_commit=True, model_description=False, + mail_auto_delete=True): if self.env.context.get('force_partners_to_notify'): partners_to_notify =\ self.env.context.get('force_partners_to_notify') - self = self.filtered(lambda p: p.id in partners_to_notify) - super(ResPartner, self)._notify( - message, force_send=force_send, - send_after_commit=send_after_commit, user_signature=user_signature) + record = self.filtered(lambda p: p.id in partners_to_notify) + return super()._notify( + message, rdata, record, + force_send=force_send, send_after_commit=send_after_commit, + model_description=model_description, + mail_auto_delete=mail_auto_delete) diff --git a/mail_optional_follower_notification/readme/CONTRIBUTORS.rst b/mail_optional_follower_notification/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..bea4300dc --- /dev/null +++ b/mail_optional_follower_notification/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Adrien Peiffer +* Laurent Mignon +* Andrea Stirpe diff --git a/mail_optional_follower_notification/readme/DESCRIPTION.rst b/mail_optional_follower_notification/readme/DESCRIPTION.rst new file mode 100644 index 000000000..04bb275cd --- /dev/null +++ b/mail_optional_follower_notification/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module adds the possibility to choose if you want to automatically +notify followers on mail.compose.message. By default, Odoo notify +automatically all followers. diff --git a/mail_optional_follower_notification/readme/USAGE.rst b/mail_optional_follower_notification/readme/USAGE.rst new file mode 100644 index 000000000..bf0bbb3db --- /dev/null +++ b/mail_optional_follower_notification/readme/USAGE.rst @@ -0,0 +1,10 @@ +To use this module, you need to use the checkbox near "Followers of the +document and" on mail.compose.message: + +This field it's initialized to true to keep the standard behavior. + +.. figure:: static/description/optional_follower_001.png + :alt: Default checkbox + +.. figure:: static/description/optional_follower_002.png + :alt: Checkbox to avoid to notify automatically followers diff --git a/mail_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html new file mode 100644 index 000000000..dd90ad280 --- /dev/null +++ b/mail_optional_follower_notification/static/description/index.html @@ -0,0 +1,436 @@ + + + + + + +Mail optional follower notification + + + +

+

Mail optional follower notification

+ + +

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

+

This module adds the possibility to choose if you want to automatically +notify followers on mail.compose.message. By default, Odoo notify +automatically all followers.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to use the checkbox near “Followers of the +document and” on mail.compose.message:

+

This field it’s initialized to true to keep the standard behavior.

+
+Default checkbox +
+
+Checkbox to avoid to notify automatically followers +
+
+
+

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

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

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

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

+

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

+
+
+
+ + diff --git a/mail_optional_follower_notification/tests/__init__.py b/mail_optional_follower_notification/tests/__init__.py index 2a6791af4..17a2936a2 100644 --- a/mail_optional_follower_notification/tests/__init__.py +++ b/mail_optional_follower_notification/tests/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import test_mail_optional_follower_notifications diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 67b26afff..724116a60 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- # Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo.tests import common @@ -8,7 +7,7 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): def setUp(self): - super(TestMailOptionalFollowernotifications, self).setUp() + super().setUp() self.partner_obj = self.env['res.partner'] self.partner_01 = self.env.ref('base.res_partner_2') self.demo_user = self.env.ref('base.user_demo') @@ -22,7 +21,8 @@ def test_send_email_optional_follower_notifications(self): 'default_composition_mode': 'comment', }) mail_compose = self.env['mail.compose.message'] - self.partner_01.message_subscribe_users(user_ids=[self.demo_user.id]) + self.partner_01.message_subscribe( + partner_ids=[self.demo_user.partner_id.id]) values = mail_compose.with_context(ctx)\ .onchange_template_id(False, 'comment', 'res.partner', self.partner_01.id)['value'] diff --git a/mail_optional_follower_notification/wizard/__init__.py b/mail_optional_follower_notification/wizard/__init__.py index 56c0250a0..2d9c29a8b 100644 --- a/mail_optional_follower_notification/wizard/__init__.py +++ b/mail_optional_follower_notification/wizard/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import mail_compose_message diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index d90bb4b7a..25efe0df2 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- # Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import models, fields, api @@ -12,9 +11,10 @@ class MailComposeMessage(models.TransientModel): @api.multi def send_mail(self, auto_commit=False): + ctx = self.env.context.copy() for wizard in self: - wizard = wizard.with_context( - notify_followers=wizard.notify_followers) + ctx['notify_followers'] = wizard.notify_followers + wizard = wizard.with_context(ctx) super(MailComposeMessage, wizard).send_mail( auto_commit=auto_commit) return {'type': 'ir.actions.act_window_close'} diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index 53b3a5568..b252a0ecb 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -1,18 +1,17 @@ - - - mail.compose.message.form (mail_optional_autofollow) - mail.compose.message - - - - - - - - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) - - - - - \ No newline at end of file + + + mail.compose.message + + + + + + + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) + + + + + From c71c0bb7ca9a8f138a252eb7522233a3afaf238c Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Fri, 6 Dec 2019 11:37:20 +0100 Subject: [PATCH 15/55] [IMP] mail_optional_follower_notification: black, isort --- .../__manifest__.py | 11 +--- .../models/mail_message.py | 35 +++++++---- .../models/res_partner.py | 32 ++++++---- ...st_mail_optional_follower_notifications.py | 62 ++++++++++--------- .../wizard/mail_compose_message.py | 11 ++-- 5 files changed, 84 insertions(+), 67 deletions(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index d0b549639..6c4769bda 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -3,16 +3,11 @@ { "name": "Mail optional follower notification", "summary": "Choose to notify followers on mail.compose.message", - "author": "ACSONE SA/NV," - "Odoo Community Association (OCA)", + "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", "version": "12.0.1.0.0", "license": "AGPL-3", - "depends": [ - "mail", - ], - "data": [ - "wizard/mail_compose_message_view.xml", - ], + "depends": ["mail"], + "data": ["wizard/mail_compose_message_view.xml"], } diff --git a/mail_optional_follower_notification/models/mail_message.py b/mail_optional_follower_notification/models/mail_message.py index 7afe71308..4eeda7bc9 100644 --- a/mail_optional_follower_notification/models/mail_message.py +++ b/mail_optional_follower_notification/models/mail_message.py @@ -1,32 +1,43 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models, api +from odoo import api, models class MailMessage(models.Model): - _inherit = 'mail.message' + _inherit = "mail.message" @api.model def create(self, values): ctx = self.env.context.copy() - if not ctx.get('notify_followers') and values.get('partner_ids'): + if not ctx.get("notify_followers") and values.get("partner_ids"): partner_list = self.resolve_2many_commands( - 'partner_ids', values.get('partner_ids'), fields=['id']) - ctx['force_partners_to_notify'] = [d['id'] for d in partner_list] + "partner_ids", values.get("partner_ids"), fields=["id"] + ) + ctx["force_partners_to_notify"] = [d["id"] for d in partner_list] return super(MailMessage, self.with_context(ctx)).create(values) @api.multi - def _notify(self, record, msg_vals, force_send=False, - send_after_commit=True, model_description=False, - mail_auto_delete=True): + def _notify( + self, + record, + msg_vals, + force_send=False, + send_after_commit=True, + model_description=False, + mail_auto_delete=True, + ): res = super()._notify( - record, msg_vals, force_send=force_send, + record, + msg_vals, + force_send=force_send, send_after_commit=send_after_commit, model_description=model_description, - mail_auto_delete=mail_auto_delete) - if self.env.context.get('force_partners_to_notify'): + mail_auto_delete=mail_auto_delete, + ) + if self.env.context.get("force_partners_to_notify"): # Needaction only for recipients self.needaction_partner_ids = [ - (6, 0, self.env.context.get('force_partners_to_notify'))] + (6, 0, self.env.context.get("force_partners_to_notify")) + ] return res diff --git a/mail_optional_follower_notification/models/res_partner.py b/mail_optional_follower_notification/models/res_partner.py index 6ca4f5e9c..f91c52b9f 100644 --- a/mail_optional_follower_notification/models/res_partner.py +++ b/mail_optional_follower_notification/models/res_partner.py @@ -1,22 +1,32 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models, api +from odoo import api, models class ResPartner(models.Model): - _inherit = 'res.partner' + _inherit = "res.partner" @api.model - def _notify(self, message, rdata, record, force_send=False, - send_after_commit=True, model_description=False, - mail_auto_delete=True): - if self.env.context.get('force_partners_to_notify'): - partners_to_notify =\ - self.env.context.get('force_partners_to_notify') + def _notify( + self, + message, + rdata, + record, + force_send=False, + send_after_commit=True, + model_description=False, + mail_auto_delete=True, + ): + if self.env.context.get("force_partners_to_notify"): + partners_to_notify = self.env.context.get("force_partners_to_notify") record = self.filtered(lambda p: p.id in partners_to_notify) return super()._notify( - message, rdata, record, - force_send=force_send, send_after_commit=send_after_commit, + message, + rdata, + record, + force_send=force_send, + send_after_commit=send_after_commit, model_description=model_description, - mail_auto_delete=mail_auto_delete) + mail_auto_delete=mail_auto_delete, + ) diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 724116a60..224503d23 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -5,53 +5,55 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): - def setUp(self): super().setUp() - self.partner_obj = self.env['res.partner'] - self.partner_01 = self.env.ref('base.res_partner_2') - self.demo_user = self.env.ref('base.user_demo') + self.partner_obj = self.env["res.partner"] + self.partner_01 = self.env.ref("base.res_partner_2") + self.demo_user = self.env.ref("base.user_demo") self.partner_03 = self.demo_user.copy().partner_id def test_send_email_optional_follower_notifications(self): ctx = self.env.context.copy() - ctx.update({ - 'default_model': 'res.partner', - 'default_res_id': self.partner_01.id, - 'default_composition_mode': 'comment', - }) - mail_compose = self.env['mail.compose.message'] - self.partner_01.message_subscribe( - partner_ids=[self.demo_user.partner_id.id]) - values = mail_compose.with_context(ctx)\ - .onchange_template_id(False, 'comment', 'res.partner', - self.partner_01.id)['value'] - values['partner_ids'] = [(4, self.demo_user.partner_id.id), - (4, self.partner_03.id)] + ctx.update( + { + "default_model": "res.partner", + "default_res_id": self.partner_01.id, + "default_composition_mode": "comment", + } + ) + mail_compose = self.env["mail.compose.message"] + self.partner_01.message_subscribe(partner_ids=[self.demo_user.partner_id.id]) + values = mail_compose.with_context(ctx).onchange_template_id( + False, "comment", "res.partner", self.partner_01.id + )["value"] + values["partner_ids"] = [ + (4, self.demo_user.partner_id.id), + (4, self.partner_03.id), + ] compose_id = mail_compose.with_context(ctx).create(values) compose_id.with_context(ctx).send_mail() res = self.env["mail.message"].search( - [('model', '=', 'res.partner'), - ('res_id', '=', self.partner_01.id)]) + [("model", "=", "res.partner"), ("res_id", "=", self.partner_01.id)] + ) self.assertEqual(len(res.ids), 1) - message = self.env['mail.message'] + message = self.env["mail.message"] for record in res: - if record.notification_ids.mapped('res_partner_id').ids == \ - [self.partner_03.id] and \ - record.partner_ids.ids == [self.partner_03.id]: + if record.notification_ids.mapped("res_partner_id").ids == [ + self.partner_03.id + ] and record.partner_ids.ids == [self.partner_03.id]: message += record self.assertEqual(len(message.ids), 0) - values['partner_ids'] = [(6, 0, [self.partner_03.id])] + values["partner_ids"] = [(6, 0, [self.partner_03.id])] compose_id = mail_compose.with_context(ctx).create(values) compose_id.notify_followers = False compose_id.with_context(ctx).send_mail() res = self.env["mail.message"].search( - [('model', '=', 'res.partner'), - ('res_id', '=', self.partner_01.id)]) - message = self.env['mail.message'] + [("model", "=", "res.partner"), ("res_id", "=", self.partner_01.id)] + ) + message = self.env["mail.message"] for record in res: - if record.notification_ids.mapped('res_partner_id').ids == \ - [self.partner_03.id] and\ - record.partner_ids.ids == [self.partner_03.id]: + if record.notification_ids.mapped("res_partner_id").ids == [ + self.partner_03.id + ] and record.partner_ids.ids == [self.partner_03.id]: message += record self.assertEqual(len(message.ids), 1) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index 25efe0df2..843c86f76 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -1,11 +1,11 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import models, fields, api +from odoo import api, fields, models class MailComposeMessage(models.TransientModel): - _inherit = 'mail.compose.message' + _inherit = "mail.compose.message" notify_followers = fields.Boolean(default=True) @@ -13,8 +13,7 @@ class MailComposeMessage(models.TransientModel): def send_mail(self, auto_commit=False): ctx = self.env.context.copy() for wizard in self: - ctx['notify_followers'] = wizard.notify_followers + ctx["notify_followers"] = wizard.notify_followers wizard = wizard.with_context(ctx) - super(MailComposeMessage, wizard).send_mail( - auto_commit=auto_commit) - return {'type': 'ir.actions.act_window_close'} + super(MailComposeMessage, wizard).send_mail(auto_commit=auto_commit) + return {"type": "ir.actions.act_window_close"} From 6908c0fe5df766a48dc49d891285bae7d4e5591e Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Fri, 6 Dec 2019 11:49:27 +0100 Subject: [PATCH 16/55] [MIG] mail_optional_follower_notification: Migration to 13.0 --- .../__init__.py | 2 - .../__manifest__.py | 2 +- .../models/__init__.py | 5 +- .../models/mail_message.py | 43 ------- .../models/mail_thread.py | 25 ++++ .../models/res_partner.py | 32 ----- .../tests/__init__.py | 2 - ...st_mail_optional_follower_notifications.py | 119 +++++++++++------- .../wizard/mail_compose_message.py | 9 +- .../wizard/mail_compose_message_view.xml | 10 +- 10 files changed, 109 insertions(+), 140 deletions(-) delete mode 100644 mail_optional_follower_notification/models/mail_message.py create mode 100644 mail_optional_follower_notification/models/mail_thread.py delete mode 100644 mail_optional_follower_notification/models/res_partner.py diff --git a/mail_optional_follower_notification/__init__.py b/mail_optional_follower_notification/__init__.py index 93aa2c1f8..9b4296142 100644 --- a/mail_optional_follower_notification/__init__.py +++ b/mail_optional_follower_notification/__init__.py @@ -1,4 +1,2 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from . import models from . import wizard diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 6c4769bda..f55cd4bf4 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "12.0.1.0.0", + "version": "13.0.1.0.0", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], diff --git a/mail_optional_follower_notification/models/__init__.py b/mail_optional_follower_notification/models/__init__.py index b3d15f460..b70a9f2d0 100644 --- a/mail_optional_follower_notification/models/__init__.py +++ b/mail_optional_follower_notification/models/__init__.py @@ -1,4 +1 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from . import mail_message -from . import res_partner +from . import mail_thread diff --git a/mail_optional_follower_notification/models/mail_message.py b/mail_optional_follower_notification/models/mail_message.py deleted file mode 100644 index 4eeda7bc9..000000000 --- a/mail_optional_follower_notification/models/mail_message.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo import api, models - - -class MailMessage(models.Model): - _inherit = "mail.message" - - @api.model - def create(self, values): - ctx = self.env.context.copy() - if not ctx.get("notify_followers") and values.get("partner_ids"): - partner_list = self.resolve_2many_commands( - "partner_ids", values.get("partner_ids"), fields=["id"] - ) - ctx["force_partners_to_notify"] = [d["id"] for d in partner_list] - return super(MailMessage, self.with_context(ctx)).create(values) - - @api.multi - def _notify( - self, - record, - msg_vals, - force_send=False, - send_after_commit=True, - model_description=False, - mail_auto_delete=True, - ): - res = super()._notify( - record, - msg_vals, - force_send=force_send, - send_after_commit=send_after_commit, - model_description=model_description, - mail_auto_delete=mail_auto_delete, - ) - if self.env.context.get("force_partners_to_notify"): - # Needaction only for recipients - self.needaction_partner_ids = [ - (6, 0, self.env.context.get("force_partners_to_notify")) - ] - return res diff --git a/mail_optional_follower_notification/models/mail_thread.py b/mail_optional_follower_notification/models/mail_thread.py new file mode 100644 index 000000000..db9dd9a86 --- /dev/null +++ b/mail_optional_follower_notification/models/mail_thread.py @@ -0,0 +1,25 @@ +# Copyright 2019 ACSONE SA/NV () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class MailThread(models.AbstractModel): + _inherit = "mail.thread" + + def _notify_compute_recipients(self, message, msg_vals): + """ Compute recipients to notify based on subtype and followers. This + method returns data structured as expected for ``_notify_recipients``. """ + recipient_data = super()._notify_compute_recipients(message, msg_vals) + if not self.env.context.get("notify_followers", False): + # filter out all the followers + pids = ( + msg_vals.get("partner_ids", []) + if msg_vals + else message.sudo().partner_ids.ids + ) + recipient_data = { + "partners": [d for d in recipient_data["partners"] if d["id"] in pids], + "channels": [], + } + return recipient_data diff --git a/mail_optional_follower_notification/models/res_partner.py b/mail_optional_follower_notification/models/res_partner.py deleted file mode 100644 index f91c52b9f..000000000 --- a/mail_optional_follower_notification/models/res_partner.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2016 ACSONE SA/NV () -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo import api, models - - -class ResPartner(models.Model): - _inherit = "res.partner" - - @api.model - def _notify( - self, - message, - rdata, - record, - force_send=False, - send_after_commit=True, - model_description=False, - mail_auto_delete=True, - ): - if self.env.context.get("force_partners_to_notify"): - partners_to_notify = self.env.context.get("force_partners_to_notify") - record = self.filtered(lambda p: p.id in partners_to_notify) - return super()._notify( - message, - rdata, - record, - force_send=force_send, - send_after_commit=send_after_commit, - model_description=model_description, - mail_auto_delete=mail_auto_delete, - ) diff --git a/mail_optional_follower_notification/tests/__init__.py b/mail_optional_follower_notification/tests/__init__.py index 17a2936a2..b58d6f27f 100644 --- a/mail_optional_follower_notification/tests/__init__.py +++ b/mail_optional_follower_notification/tests/__init__.py @@ -1,3 +1 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from . import test_mail_optional_follower_notifications diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 224503d23..439e002cd 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -1,59 +1,88 @@ -# Copyright 2016 ACSONE SA/NV () +# Copyright 2019 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo.tests import common -class TestMailOptionalFollowernotifications(common.TransactionCase): - def setUp(self): - super().setUp() - self.partner_obj = self.env["res.partner"] - self.partner_01 = self.env.ref("base.res_partner_2") - self.demo_user = self.env.ref("base.user_demo") - self.partner_03 = self.demo_user.copy().partner_id - - def test_send_email_optional_follower_notifications(self): - ctx = self.env.context.copy() +class TestMailOptionalFollowernotifications(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner_obj = cls.env["res.partner"] + cls.partner_01 = cls.env.ref("base.res_partner_2") + demo_user = cls.env.ref("base.user_demo") + cls.partner_follower = demo_user.partner_id + cls.partner_no_follower = demo_user.copy().partner_id + cls.partner_01.message_subscribe(partner_ids=[cls.partner_follower.id]) + ctx = cls.env.context.copy() ctx.update( { "default_model": "res.partner", - "default_res_id": self.partner_01.id, + "default_res_id": cls.partner_01.id, "default_composition_mode": "comment", } ) - mail_compose = self.env["mail.compose.message"] - self.partner_01.message_subscribe(partner_ids=[self.demo_user.partner_id.id]) - values = mail_compose.with_context(ctx).onchange_template_id( - False, "comment", "res.partner", self.partner_01.id - )["value"] - values["partner_ids"] = [ - (4, self.demo_user.partner_id.id), - (4, self.partner_03.id), + cls.mail_compose_context = ctx + cls.MailCompose = cls.env["mail.compose.message"] + + def _send_mail(self, recipients, notify_followers): + old_messages = self.env["mail.message"].search([]) + values = self.MailCompose.with_context( + self.mail_compose_context + ).onchange_template_id(False, "comment", "res.partner", self.partner_01.id)[ + "value" ] - compose_id = mail_compose.with_context(ctx).create(values) - compose_id.with_context(ctx).send_mail() - res = self.env["mail.message"].search( - [("model", "=", "res.partner"), ("res_id", "=", self.partner_01.id)] + values["partner_ids"] = [(6, 0, recipients.ids)] + values["notify_followers"] = notify_followers + composer = self.MailCompose.with_context(self.mail_compose_context).create( + values + ) + composer.send_mail() + return self.env["mail.message"].search([]) - old_messages + + def test_1(self): + """ + Data: + One partner follower of partner_01 + Test case: + Send message to the follower and a non follower partner + Expected result: + Both are notified + """ + message = self._send_mail( + self.partner_follower + self.partner_no_follower, notify_followers=True ) - self.assertEqual(len(res.ids), 1) - message = self.env["mail.message"] - for record in res: - if record.notification_ids.mapped("res_partner_id").ids == [ - self.partner_03.id - ] and record.partner_ids.ids == [self.partner_03.id]: - message += record - self.assertEqual(len(message.ids), 0) - values["partner_ids"] = [(6, 0, [self.partner_03.id])] - compose_id = mail_compose.with_context(ctx).create(values) - compose_id.notify_followers = False - compose_id.with_context(ctx).send_mail() - res = self.env["mail.message"].search( - [("model", "=", "res.partner"), ("res_id", "=", self.partner_01.id)] + self.assertEqual( + message.notification_ids.mapped("res_partner_id"), + self.partner_no_follower + self.partner_follower, + ) + + def test_2(self): + """ + Data: + One partner follower of partner_01 + Test case: + Send message to the non follower partner + Expected result: + Both are notified + """ + message = self._send_mail(self.partner_no_follower, notify_followers=True) + self.assertEqual( + message.notification_ids.mapped("res_partner_id"), + self.partner_no_follower + self.partner_follower, + ) + + def test_3(self): + """ + Data: + One partner follower of partner_01 + Test case: + Send message to the non follower partner and disable the + notification to followers + Expected result: + Only the non follower partner is notified + """ + message = self._send_mail(self.partner_no_follower, notify_followers=False) + self.assertEqual( + message.notification_ids.mapped("res_partner_id"), self.partner_no_follower ) - message = self.env["mail.message"] - for record in res: - if record.notification_ids.mapped("res_partner_id").ids == [ - self.partner_03.id - ] and record.partner_ids.ids == [self.partner_03.id]: - message += record - self.assertEqual(len(message.ids), 1) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index 843c86f76..7a32f104a 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -1,7 +1,7 @@ # Copyright 2016 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import fields, models class MailComposeMessage(models.TransientModel): @@ -9,11 +9,8 @@ class MailComposeMessage(models.TransientModel): notify_followers = fields.Boolean(default=True) - @api.multi def send_mail(self, auto_commit=False): - ctx = self.env.context.copy() for wizard in self: - ctx["notify_followers"] = wizard.notify_followers - wizard = wizard.with_context(ctx) + wizard = wizard.with_context(notify_followers=wizard.notify_followers) super(MailComposeMessage, wizard).send_mail(auto_commit=auto_commit) - return {"type": "ir.actions.act_window_close"} + return True diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index b252a0ecb..e5b3d39fa 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -5,12 +5,12 @@ mail.compose.message - + - - - - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) - + + + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) + From 56acef5664029dc809583812b7e11f8624febaf1 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Thu, 9 Jul 2020 11:07:51 +0200 Subject: [PATCH 17/55] Update mail_optional_follower_notification/models/mail_thread.py Co-authored-by: Isabelle RICHARD --- .../README.rst | 14 +++--- .../__manifest__.py | 2 +- .../i18n/am.po | 31 +++++++------ .../i18n/ar.po | 31 +++++++------ .../i18n/bg.po | 31 +++++++------ .../i18n/bs.po | 31 +++++++------ .../i18n/ca.po | 36 ++++++++------- .../i18n/cs.po | 31 +++++++------ .../i18n/da.po | 31 +++++++------ .../i18n/de.po | 44 ++++++++++--------- .../i18n/el_GR.po | 31 +++++++------ .../i18n/en_GB.po | 31 +++++++------ .../i18n/es.po | 36 ++++++++------- .../i18n/es_CO.po | 33 +++++++------- .../i18n/es_CR.po | 31 +++++++------ .../i18n/es_EC.po | 31 +++++++------ .../i18n/es_MX.po | 31 +++++++------ .../i18n/es_VE.po | 31 +++++++------ .../i18n/et.po | 31 +++++++------ .../i18n/eu.po | 31 +++++++------ .../i18n/fi.po | 31 +++++++------ .../i18n/fr.po | 38 +++++++++------- .../i18n/fr_CA.po | 31 +++++++------ .../i18n/fr_CH.po | 31 +++++++------ .../i18n/gl.po | 31 +++++++------ .../i18n/hr.po | 36 ++++++++------- .../i18n/hr_HR.po | 31 +++++++------ .../i18n/hu.po | 31 +++++++------ .../i18n/it.po | 38 +++++++++------- .../i18n/ja.po | 31 +++++++------ .../i18n/lt.po | 31 +++++++------ .../i18n/lv.po | 31 +++++++------ .../mail_optional_follower_notification.pot | 21 ++++----- .../i18n/mk.po | 31 +++++++------ .../i18n/mn.po | 31 +++++++------ .../i18n/nb.po | 36 ++++++++------- .../i18n/nb_NO.po | 31 +++++++------ .../i18n/nl.po | 36 ++++++++------- .../i18n/nl_BE.po | 31 +++++++------ .../i18n/nl_NL.po | 36 ++++++++------- .../i18n/pl.po | 31 +++++++------ .../i18n/pt.po | 42 ++++++++++-------- .../i18n/pt_BR.po | 36 ++++++++------- .../i18n/pt_PT.po | 31 +++++++------ .../i18n/ro.po | 31 +++++++------ .../i18n/ru.po | 31 +++++++------ .../i18n/sk.po | 31 +++++++------ .../i18n/sl.po | 37 +++++++++------- .../i18n/sr@latin.po | 31 +++++++------ .../i18n/sv.po | 31 +++++++------ .../i18n/th.po | 31 +++++++------ .../i18n/tr.po | 36 ++++++++------- .../i18n/tr_TR.po | 36 ++++++++------- .../i18n/vi.po | 31 +++++++------ .../i18n/zh_CN.po | 31 +++++++------ .../i18n/zh_TW.po | 31 +++++++------ .../models/mail_thread.py | 4 +- .../static/description/index.html | 10 ++--- 58 files changed, 891 insertions(+), 894 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 93bacf136..cb910c6a1 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -14,13 +14,13 @@ Mail optional follower notification :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_optional_follower_notification + :target: https://github.com/OCA/social/tree/13.0/mail_optional_follower_notification :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_optional_follower_notification + :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_optional_follower_notification :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,10 +42,10 @@ document and" on mail.compose.message: This field it's initialized to true to keep the standard behavior. -.. figure:: https://raw.githubusercontent.com/OCA/social/12.0/mail_optional_follower_notification/static/description/optional_follower_001.png +.. figure:: https://raw.githubusercontent.com/OCA/social/13.0/mail_optional_follower_notification/static/description/optional_follower_001.png :alt: Default checkbox -.. figure:: https://raw.githubusercontent.com/OCA/social/12.0/mail_optional_follower_notification/static/description/optional_follower_002.png +.. figure:: https://raw.githubusercontent.com/OCA/social/13.0/mail_optional_follower_notification/static/description/optional_follower_002.png :alt: Checkbox to avoid to notify automatically followers Bug Tracker @@ -54,7 +54,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. @@ -86,6 +86,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +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_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index f55cd4bf4..f7efcc7df 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "13.0.1.0.0", + "version": "13.0.1.0.1", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], diff --git a/mail_optional_follower_notification/i18n/am.po b/mail_optional_follower_notification/i18n/am.po index 65c4e856e..828feb3b2 100644 --- a/mail_optional_follower_notification/i18n/am.po +++ b/mail_optional_follower_notification/i18n/am.po @@ -19,31 +19,30 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: mail_optional_follower_notification -#: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form +#: model_terms:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_form msgid "" -" + - - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) From d49ed42fc0e4138641f898029b25e6cb003f500f Mon Sep 17 00:00:00 2001 From: hda Date: Fri, 19 Feb 2021 14:58:32 +0100 Subject: [PATCH 19/55] [13.0][FIX] mail_optional_follower_notification: change added span ref in view --- .../__manifest__.py | 2 +- .../i18n/am.po | 10 +++---- .../i18n/ar.po | 10 +++---- .../i18n/bg.po | 10 +++---- .../i18n/bs.po | 10 +++---- .../i18n/ca.po | 10 +++---- .../i18n/cs.po | 10 +++---- .../i18n/da.po | 10 +++---- .../i18n/de.po | 29 ++++++++++++------- .../i18n/el_GR.po | 10 +++---- .../i18n/en_GB.po | 10 +++---- .../i18n/es.po | 10 +++---- .../i18n/es_CO.po | 10 +++---- .../i18n/es_CR.po | 10 +++---- .../i18n/es_EC.po | 10 +++---- .../i18n/es_MX.po | 10 +++---- .../i18n/es_VE.po | 10 +++---- .../i18n/et.po | 10 +++---- .../i18n/eu.po | 10 +++---- .../i18n/fi.po | 10 +++---- .../i18n/fr.po | 29 ++++++++++++------- .../i18n/fr_CA.po | 10 +++---- .../i18n/fr_CH.po | 10 +++---- .../i18n/gl.po | 10 +++---- .../i18n/hr.po | 10 +++---- .../i18n/hr_HR.po | 10 +++---- .../i18n/hu.po | 10 +++---- .../i18n/it.po | 29 ++++++++++++------- .../i18n/ja.po | 10 +++---- .../i18n/lt.po | 10 +++---- .../i18n/lv.po | 10 +++---- .../mail_optional_follower_notification.pot | 7 +++-- .../i18n/mk.po | 10 +++---- .../i18n/mn.po | 10 +++---- .../i18n/nb.po | 10 +++---- .../i18n/nb_NO.po | 10 +++---- .../i18n/nl.po | 10 +++---- .../i18n/nl_BE.po | 10 +++---- .../i18n/nl_NL.po | 10 +++---- .../i18n/pl.po | 10 +++---- .../i18n/pt.po | 29 ++++++++++++------- .../i18n/pt_BR.po | 10 +++---- .../i18n/pt_PT.po | 10 +++---- .../i18n/ro.po | 10 +++---- .../i18n/ru.po | 10 +++---- .../i18n/sk.po | 10 +++---- .../i18n/sl.po | 10 +++---- .../i18n/sr@latin.po | 10 +++---- .../i18n/sv.po | 10 +++---- .../i18n/th.po | 10 +++---- .../i18n/tr.po | 10 +++---- .../i18n/tr_TR.po | 10 +++---- .../i18n/vi.po | 10 +++---- .../i18n/zh_CN.po | 10 +++---- .../i18n/zh_TW.po | 10 +++---- .../wizard/mail_compose_message_view.xml | 8 ++--- 56 files changed, 277 insertions(+), 346 deletions(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index f7efcc7df..9ac1bf921 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "13.0.1.0.1", + "version": "13.0.1.1.0", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], diff --git a/mail_optional_follower_notification/i18n/am.po b/mail_optional_follower_notification/i18n/am.po index 828feb3b2..c15b67c98 100644 --- a/mail_optional_follower_notification/i18n/am.po +++ b/mail_optional_follower_notification/i18n/am.po @@ -21,12 +21,10 @@ msgstr "" #. module: mail_optional_follower_notification #: model_terms:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_form msgid "" -"\n" -" - - + + - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) - + From 0f182e65e9c247048ff90c04929de8cb12b74a10 Mon Sep 17 00:00:00 2001 From: Ioan Galan Date: Fri, 7 May 2021 16:42:26 +0200 Subject: [PATCH 20/55] [IMP] mail_optional_follower_notification: black, isort, prettier --- mail_optional_follower_notification/models/mail_thread.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mail_optional_follower_notification/models/mail_thread.py b/mail_optional_follower_notification/models/mail_thread.py index 1a675f7b2..d2b70f1d4 100644 --- a/mail_optional_follower_notification/models/mail_thread.py +++ b/mail_optional_follower_notification/models/mail_thread.py @@ -8,8 +8,8 @@ class MailThread(models.AbstractModel): _inherit = "mail.thread" def _notify_compute_recipients(self, message, msg_vals): - """ Compute recipients to notify based on subtype and followers. This - method returns data structured as expected for ``_notify_recipients``. """ + """Compute recipients to notify based on subtype and followers. This + method returns data structured as expected for ``_notify_recipients``.""" recipient_data = super()._notify_compute_recipients(message, msg_vals) if "notify_followers" in self.env.context and not self.env.context.get( "notify_followers", False From 6506b4d0455b056dfd3199f805afdcfd680122ad Mon Sep 17 00:00:00 2001 From: Ioan Galan Date: Fri, 7 May 2021 16:46:45 +0200 Subject: [PATCH 21/55] [MIG] mail_optional_follower_notification: Migration to 14.0 --- mail_optional_follower_notification/__manifest__.py | 2 +- mail_optional_follower_notification/models/mail_thread.py | 6 ++++++ .../tests/test_mail_optional_follower_notifications.py | 5 +++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 9ac1bf921..dfa5c76a3 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "13.0.1.1.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], diff --git a/mail_optional_follower_notification/models/mail_thread.py b/mail_optional_follower_notification/models/mail_thread.py index d2b70f1d4..a9da2b549 100644 --- a/mail_optional_follower_notification/models/mail_thread.py +++ b/mail_optional_follower_notification/models/mail_thread.py @@ -2,6 +2,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import models +from odoo.tools import config class MailThread(models.AbstractModel): @@ -10,7 +11,12 @@ class MailThread(models.AbstractModel): def _notify_compute_recipients(self, message, msg_vals): """Compute recipients to notify based on subtype and followers. This method returns data structured as expected for ``_notify_recipients``.""" + test_condition = config["test_enable"] and not self.env.context.get( + "test_optional_follow_notification" + ) recipient_data = super()._notify_compute_recipients(message, msg_vals) + if test_condition: + return recipient_data if "notify_followers" in self.env.context and not self.env.context.get( "notify_followers", False ): diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 439e002cd..af05940a9 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -1,10 +1,10 @@ # Copyright 2019 ACSONE SA/NV () # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo.tests import common +from odoo.tests.common import SavepointCase -class TestMailOptionalFollowernotifications(common.SavepointCase): +class TestMailOptionalFollowernotifications(SavepointCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -20,6 +20,7 @@ def setUpClass(cls): "default_model": "res.partner", "default_res_id": cls.partner_01.id, "default_composition_mode": "comment", + "test_optional_follow_notification": True, } ) cls.mail_compose_context = ctx From c96a3d888b4af86a20cecedf8b8138fae24424e7 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 24 Jan 2022 10:19:19 +0000 Subject: [PATCH 22/55] [UPD] Update mail_optional_follower_notification.pot --- .../mail_optional_follower_notification.pot | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot index 805e07feb..d0b7ef33a 100644 --- a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot +++ b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.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" @@ -22,6 +22,12 @@ msgid "" " they are allowed to)" msgstr "" +#. module: mail_optional_follower_notification +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message__display_name +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_thread__display_name +msgid "Display Name" +msgstr "" + #. module: mail_optional_follower_notification #: model:ir.model,name:mail_optional_follower_notification.model_mail_thread msgid "Email Thread" @@ -33,6 +39,20 @@ msgid "Email composition wizard" msgstr "" #. module: mail_optional_follower_notification +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message__id +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_thread__id +msgid "ID" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message____last_update +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_thread____last_update +msgid "Last Modified on" +msgstr "" + +#. module: mail_optional_follower_notification +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_account_invoice_send__notify_followers +#: model:ir.model.fields,field_description:mail_optional_follower_notification.field_account_tour_upload_bill__notify_followers #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message__notify_followers msgid "Notify Followers" msgstr "" From e091f3b74b2ba945b6a791ab81b2a2888b4ff239 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 24 Jan 2022 10:26:39 +0000 Subject: [PATCH 23/55] [UPD] README.rst --- mail_optional_follower_notification/README.rst | 14 +++++++------- .../static/description/index.html | 10 +++++----- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index cb910c6a1..94cb2317f 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -14,13 +14,13 @@ Mail optional follower notification :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_optional_follower_notification + :target: https://github.com/OCA/social/tree/14.0/mail_optional_follower_notification :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_optional_follower_notification + :target: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_optional_follower_notification :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| @@ -42,10 +42,10 @@ document and" on mail.compose.message: This field it's initialized to true to keep the standard behavior. -.. figure:: https://raw.githubusercontent.com/OCA/social/13.0/mail_optional_follower_notification/static/description/optional_follower_001.png +.. figure:: https://raw.githubusercontent.com/OCA/social/14.0/mail_optional_follower_notification/static/description/optional_follower_001.png :alt: Default checkbox -.. figure:: https://raw.githubusercontent.com/OCA/social/13.0/mail_optional_follower_notification/static/description/optional_follower_002.png +.. figure:: https://raw.githubusercontent.com/OCA/social/14.0/mail_optional_follower_notification/static/description/optional_follower_002.png :alt: Checkbox to avoid to notify automatically followers Bug Tracker @@ -54,7 +54,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. @@ -86,6 +86,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +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_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html index 326b75896..c98145e71 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -367,7 +367,7 @@

Mail optional follower notification

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

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

+

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

This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify automatically all followers.

@@ -390,10 +390,10 @@

Usage

document and” on mail.compose.message:

This field it’s initialized to true to keep the standard behavior.

-Default checkbox +Default checkbox
-Checkbox to avoid to notify automatically followers +Checkbox to avoid to notify automatically followers
@@ -401,7 +401,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.

@@ -427,7 +427,7 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

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

+

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 343ea41db178d2421cdabe95926751a12cef5859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olga=20Marco=20Pu=C3=A9rtolas?= Date: Wed, 2 Feb 2022 10:40:13 +0000 Subject: [PATCH 24/55] Translated using Weblate (Spanish) Currently translated at 50.0% (2 of 4 strings) Translation: social-14.0/social-14.0-mail_optional_follower_notification Translate-URL: https://translation.odoo-community.org/projects/social-14-0/social-14-0-mail_optional_follower_notification/es/ --- mail_optional_follower_notification/i18n/es.po | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mail_optional_follower_notification/i18n/es.po b/mail_optional_follower_notification/i18n/es.po index 4c21891d4..f7a40f196 100644 --- a/mail_optional_follower_notification/i18n/es.po +++ b/mail_optional_follower_notification/i18n/es.po @@ -9,14 +9,15 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-01 02:19+0000\n" -"PO-Revision-Date: 2017-12-01 02:19+0000\n" -"Last-Translator: OCA Transbot , 2017\n" +"PO-Revision-Date: 2022-02-02 13:33+0000\n" +"Last-Translator: Olga Marco Puértolas \n" "Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: mail_optional_follower_notification #: model_terms:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_form @@ -26,6 +27,10 @@ msgid "" "notified but they can access the notification directly from the document (if " "they are allowed to)" msgstr "" +"`_. 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. @@ -72,6 +72,7 @@ Contributors * Adrien Peiffer * Laurent Mignon * Andrea Stirpe +* Robin Goots Maintainers ~~~~~~~~~~~ @@ -86,6 +87,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +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_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html index c98145e71..112c81f58 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -367,7 +367,7 @@

Mail optional follower notification

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

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

+

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

This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify automatically all followers.

@@ -390,10 +390,10 @@

Usage

document and” on mail.compose.message:

This field it’s initialized to true to keep the standard behavior.

-Default checkbox +Default checkbox
-Checkbox to avoid to notify automatically followers +Checkbox to avoid to notify automatically followers
@@ -401,7 +401,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.

@@ -418,6 +418,7 @@

Contributors

  • Adrien Peiffer <adrien.peiffer@acsone.eu>
  • Laurent Mignon <laurent.mignon@acsone.eu>
  • Andrea Stirpe <a.stirpe@onestein.nl>
  • +
  • Robin Goots <robin.goots@dynapps.be>
  • @@ -427,7 +428,7 @@

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

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

    +

    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 445ce70c984fb16baf2274730161a868a5812b35 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 18 Mar 2022 11:46:49 +0000 Subject: [PATCH 28/55] mail_optional_follower_notification 15.0.1.0.1 --- mail_optional_follower_notification/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 42ab21021..6d5a749ea 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "15.0.1.0.0", + "version": "15.0.1.0.1", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], From f5bf5f9a23e544c607f06767cc072ac7036ef46e Mon Sep 17 00:00:00 2001 From: oca-git-bot Date: Mon, 12 Dec 2022 00:16:03 +0100 Subject: [PATCH 29/55] [IMP] update dotfiles [ci skip] --- .../i18n/en.po | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 mail_optional_follower_notification/i18n/en.po diff --git a/mail_optional_follower_notification/i18n/en.po b/mail_optional_follower_notification/i18n/en.po deleted file mode 100644 index fd79215ea..000000000 --- a/mail_optional_follower_notification/i18n/en.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * mail_optional_follower_notification -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: social (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-26 02:42+0000\n" -"PO-Revision-Date: 2016-05-25 14:10+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: English (http://www.transifex.com/oca/OCA-social-8-0/language/" -"en/)\n" -"Language: en\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" - -#. module: mail_optional_follower_notification -#: model:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_inherit_form -#, fuzzy -msgid "" -"`_. 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. @@ -87,6 +87,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +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_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 6d5a749ea..319ce95f8 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "15.0.1.0.1", + "version": "16.0.1.0.0", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], diff --git a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot index 89c8f31bf..521b6362f 100644 --- a/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot +++ b/mail_optional_follower_notification/i18n/mail_optional_follower_notification.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/mail_optional_follower_notification/models/mail_thread.py b/mail_optional_follower_notification/models/mail_thread.py index 582980566..6138e23b8 100644 --- a/mail_optional_follower_notification/models/mail_thread.py +++ b/mail_optional_follower_notification/models/mail_thread.py @@ -2,21 +2,15 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import models -from odoo.tools import config class MailThread(models.AbstractModel): _inherit = "mail.thread" - def _notify_compute_recipients(self, message, msg_vals): + def _notify_get_recipients(self, message, msg_vals, **kwargs): """Compute recipients to notify based on subtype and followers. This method returns data structured as expected for ``_notify_recipients``.""" - test_condition = config["test_enable"] and not self.env.context.get( - "test_optional_follow_notification" - ) - recipient_data = super()._notify_compute_recipients(message, msg_vals) - if test_condition: - return recipient_data + recipient_data = super()._notify_get_recipients(message, msg_vals, **kwargs) if "notify_followers" in self.env.context and not self.env.context.get( "notify_followers", False ): diff --git a/mail_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html index 112c81f58..48abdd9da 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -367,7 +367,7 @@

    Mail optional follower notification

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

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

    +

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

    This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify automatically all followers.

    @@ -390,10 +390,10 @@

    Usage

    document and” on mail.compose.message:

    This field it’s initialized to true to keep the standard behavior.

    -Default checkbox +Default checkbox
    -Checkbox to avoid to notify automatically followers +Checkbox to avoid to notify automatically followers
    @@ -401,7 +401,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.

    @@ -428,7 +428,7 @@

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

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

    +

    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_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py index 8932d4fa7..024ebdb37 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py @@ -20,7 +20,6 @@ def setUpClass(cls): "default_model": "res.partner", "default_res_id": cls.partner_01.id, "default_composition_mode": "comment", - "test_optional_follow_notification": True, } ) cls.mail_compose_context = ctx From 5644e4122debb2f5f9622053a8acb7f37e6dc8df Mon Sep 17 00:00:00 2001 From: Anna Janiszewska Date: Thu, 9 Mar 2023 16:34:50 +0100 Subject: [PATCH 31/55] [FIX] fix value returned by _action_send_mail --- .../wizard/mail_compose_message.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index 151e19e1a..0cd83ec37 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -10,7 +10,15 @@ class MailComposeMessage(models.TransientModel): notify_followers = fields.Boolean(default=True) def _action_send_mail(self, auto_commit=False): + result_mails_su, result_messages = ( + self.env["mail.mail"].sudo(), + self.env["mail.message"], + ) for wizard in self: wizard = wizard.with_context(notify_followers=wizard.notify_followers) - super(MailComposeMessage, wizard)._action_send_mail(auto_commit=auto_commit) - return True + res_mail, res_message = super(MailComposeMessage, wizard)._action_send_mail( + auto_commit=auto_commit + ) + result_mails_su += res_mail + result_messages += res_message + return result_mails_su, result_messages From 87df1475836565b212146087967e9729d8648ae0 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 20 Mar 2023 09:36:45 +0000 Subject: [PATCH 32/55] mail_optional_follower_notification 16.0.1.0.1 --- mail_optional_follower_notification/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 319ce95f8..c7a0e7eab 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "category": "Social Network", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "license": "AGPL-3", "depends": ["mail"], "data": ["wizard/mail_compose_message_view.xml"], From 1a7cab02b3c7c3f4fa2d9e1c2c148801e7432625 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 24 Jul 2023 07:57:32 +0000 Subject: [PATCH 33/55] Translated using Weblate (Italian) Currently translated at 25.0% (1 of 4 strings) Translation: social-16.0/social-16.0-mail_optional_follower_notification Translate-URL: https://translation.odoo-community.org/projects/social-16-0/social-16-0-mail_optional_follower_notification/it/ --- mail_optional_follower_notification/i18n/it.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mail_optional_follower_notification/i18n/it.po b/mail_optional_follower_notification/i18n/it.po index 2b1bab0ee..9985fab4e 100644 --- a/mail_optional_follower_notification/i18n/it.po +++ b/mail_optional_follower_notification/i18n/it.po @@ -10,14 +10,15 @@ msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-05-17 01:02+0000\n" -"PO-Revision-Date: 2017-05-17 01:02+0000\n" -"Last-Translator: Marius Marolla , 2017\n" +"PO-Revision-Date: 2023-07-24 10:10+0000\n" +"Last-Translator: mymage \n" "Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" #. module: mail_optional_follower_notification #: model_terms:ir.ui.view,arch_db:mail_optional_follower_notification.email_compose_message_wizard_form @@ -36,7 +37,7 @@ msgstr "" #. module: mail_optional_follower_notification #: model:ir.model,name:mail_optional_follower_notification.model_mail_compose_message msgid "Email composition wizard" -msgstr "Wizard Creazione Email" +msgstr "Procedura guidata creazione e-mail" #. module: mail_optional_follower_notification #: model:ir.model.fields,field_description:mail_optional_follower_notification.field_mail_compose_message__notify_followers From 430d01ecc34271e891ba039fc3c88a381b4f2ab3 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 17:03:29 +0000 Subject: [PATCH 34/55] [UPD] README.rst --- .../README.rst | 15 +++++--- .../static/description/index.html | 38 ++++++++++--------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 6573fa04e..0b0178f29 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -2,10 +2,13 @@ Mail optional follower notification =================================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ed4cd773a22f59def3ec4e730dbe1cd7924a802153259aac25219749d70d5278 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Mail optional follower notification .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/social-16-0/social-16-0-mail_optional_follower_notification :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/16.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=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify @@ -53,7 +56,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_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html index 48abdd9da..b83ef301b 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -1,20 +1,20 @@ - + - + Mail optional follower notification -
    -

    Mail optional follower notification

    +
    + + +Odoo Community Association + +
    +

    Mail optional follower notification

    -

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

    +

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

    This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify automatically all followers.

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

    Mail optional follower notification

    -

    Usage

    +

    Usage

    To use this module, you need to use the checkbox near “Followers of the document and” on mail.compose.message:

    This field it’s initialized to true to keep the standard behavior.

    @@ -396,7 +401,7 @@

    Usage

    image3

    -

    Bug Tracker

    +

    Bug Tracker

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

    Bug Tracker

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

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • ACSONE SA/NV
    -

    Contributors

    +

    Contributors

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -435,5 +440,6 @@

    Maintainers

    +
    diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index 7902464c7..654bb9c8f 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -4,19 +4,24 @@ mail.compose.message - + - - - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to) + + + From 9a2ad9499462808d66d8c4dc4caa9b462ee778f3 Mon Sep 17 00:00:00 2001 From: Henrik Norlin Date: Sun, 9 Nov 2025 14:19:28 +0100 Subject: [PATCH 54/55] [IMP] mail_optional_follower_notification: pre-commit auto fixes --- mail_optional_follower_notification/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 88b52404d..0288c18ab 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Mail optional follower notification", "summary": "Choose to notify followers on mail.compose.message", - "author": "ACSONE SA/NV," "Odoo Community Association (OCA)", + "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/mail", "category": "Social Network", "version": "18.0.1.0.0", From 30fbebc6d7226a3b351c20d7cf8d6a4d067e64a6 Mon Sep 17 00:00:00 2001 From: Henrik Norlin Date: Sun, 9 Nov 2025 15:56:59 +0100 Subject: [PATCH 55/55] [MIG] mail_optional_follower_notification: Migration to 19.0 --- .../README.rst | 16 +++++++-------- .../__manifest__.py | 2 +- .../static/description/index.html | 12 +++++------ .../tests/__init__.py | 2 +- ...st_mail_optional_follower_notification.py} | 20 ++++++++++++++----- .../wizard/mail_compose_message_view.xml | 6 ------ 6 files changed, 31 insertions(+), 27 deletions(-) rename mail_optional_follower_notification/tests/{test_mail_optional_follower_notifications.py => test_mail_optional_follower_notification.py} (85%) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 8169c0337..f14afc9cc 100644 --- a/mail_optional_follower_notification/README.rst +++ b/mail_optional_follower_notification/README.rst @@ -21,13 +21,13 @@ Mail optional follower notification :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_optional_follower_notification + :target: https://github.com/OCA/mail/tree/19.0/mail_optional_follower_notification :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_optional_follower_notification + :target: https://translation.odoo-community.org/projects/mail-19-0/mail-19-0-mail_optional_follower_notification :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| @@ -55,9 +55,9 @@ This field it's initialized to true to keep the standard behavior. |image3| -.. |image1| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_optional_follower_notification/static/description/optional_follower_001.png -.. |image2| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_optional_follower_notification/static/description/optional_follower_002.png -.. |image3| image:: https://raw.githubusercontent.com/OCA/mail/18.0/mail_optional_follower_notification/static/description/optional_follower_003.png +.. |image1| image:: https://raw.githubusercontent.com/OCA/mail/19.0/mail_optional_follower_notification/static/description/optional_follower_001.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/mail/19.0/mail_optional_follower_notification/static/description/optional_follower_002.png +.. |image3| image:: https://raw.githubusercontent.com/OCA/mail/19.0/mail_optional_follower_notification/static/description/optional_follower_003.png Bug Tracker =========== @@ -65,7 +65,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. @@ -99,6 +99,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/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_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index 0288c18ab..001c92e9b 100644 --- a/mail_optional_follower_notification/__manifest__.py +++ b/mail_optional_follower_notification/__manifest__.py @@ -6,7 +6,7 @@ "author": "ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/mail", "category": "Social Network", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "license": "AGPL-3", "depends": ["mail"], "data": [ diff --git a/mail_optional_follower_notification/static/description/index.html b/mail_optional_follower_notification/static/description/index.html index 3bed0285d..4150ced53 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -374,7 +374,7 @@

    Mail optional follower notification

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:4fd3a6a8cc63971c71c70313d6220166563430cb086eb802282d33d7293819e3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

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

    This module adds the possibility to choose if you want to automatically notify followers on mail.compose.message. By default, Odoo notify automatically all followers.

    @@ -396,16 +396,16 @@

    Usage

    To use this module, you need to use the checkbox near “Followers of the document and” on mail.compose.message:

    This field it’s initialized to true to keep the standard behavior.

    -

    image1

    -

    image2

    -

    image3

    +

    image1

    +

    image2

    +

    image3

    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.

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

    Maintainers

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    -

    This module is part of the OCA/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_optional_follower_notification/tests/__init__.py b/mail_optional_follower_notification/tests/__init__.py index b58d6f27f..60b8d7f5e 100644 --- a/mail_optional_follower_notification/tests/__init__.py +++ b/mail_optional_follower_notification/tests/__init__.py @@ -1 +1 @@ -from . import test_mail_optional_follower_notifications +from . import test_mail_optional_follower_notification diff --git a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py b/mail_optional_follower_notification/tests/test_mail_optional_follower_notification.py similarity index 85% rename from mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py rename to mail_optional_follower_notification/tests/test_mail_optional_follower_notification.py index 4cc1ec602..871f19b46 100644 --- a/mail_optional_follower_notification/tests/test_mail_optional_follower_notifications.py +++ b/mail_optional_follower_notification/tests/test_mail_optional_follower_notification.py @@ -8,11 +8,21 @@ class TestMailOptionalFollowernotifications(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() - cls.partner_obj = cls.env["res.partner"] - cls.partner_01 = cls.env.ref("base.res_partner_2") - demo_user = cls.env.ref("base.user_demo") - cls.partner_follower = demo_user.partner_id - cls.partner_no_follower = demo_user.copy().partner_id + cls.user = cls.env["res.users"].create( + { + "name": "Test User", + "login": "test", + "notification_type": "inbox", + } + ) + cls.partner_01 = cls.env["res.partner"].create( + { + "name": "Test Contact", + } + ) + cls.partner_01 = cls.user.partner_id + cls.partner_follower = cls.user.partner_id + cls.partner_no_follower = cls.user.copy().partner_id cls.partner_no_follower.email = "test@example.com" cls.partner_01.message_subscribe(partner_ids=[cls.partner_follower.id]) ctx = cls.env.context.copy() diff --git a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml index 654bb9c8f..5082ab612 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message_view.xml +++ b/mail_optional_follower_notification/wizard/mail_compose_message_view.xml @@ -16,12 +16,6 @@ style="color: red;" > - Warning : Followers will not be notified but they can access the notification directly from the document (if they are allowed to)
    - - -