From df16371a2e82229b7d2d6defc2fafe8b5608a908 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Wed, 25 May 2016 16:03:38 +0200 Subject: [PATCH 01/26] 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 0000000..3132e6f --- /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 0000000..98aa84d --- /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 0000000..5421f28 --- /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 0000000..2889abd --- /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 0000000..460d58d --- /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 0000000..31d8f26 --- /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 0000000..122a99f --- /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 0000000..5d3380a --- /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 0000000..2321d5e --- /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 0000000..6942575 --- /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 0000000..cc213b9 --- /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 0000000..fe64abc --- /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 0000000..47cf08b --- /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 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 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 0000000..2a6791a --- /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 0000000..4f12832 --- /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 0000000..56c0250 --- /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 0000000..b6bc905 --- /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 0000000..6207810 --- /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 e0cb5025849006a0f5b7cc573a2beb4a8fc9c1df Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 25 May 2016 14:12:00 +0200 Subject: [PATCH 02/26] 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 3132e6f..2e08dc1 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 5421f28..752029e 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 b70d711fb2c9656b6083b4aa923deb11028337d3 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Wed, 25 May 2016 15:34:16 +0200 Subject: [PATCH 03/26] 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 cc213b9..0c4de32 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 47cf08b..0000000 --- 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 0000000..4c7e53f --- /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 cd0c77bdae1a46a1d57275d3b6c7b36c236b42f3 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Mon, 13 Jun 2016 10:12:23 +0200 Subject: [PATCH 04/26] 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 4f12832..1ca61bf 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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): 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 d0b462f9000eec1ad363a8275af01011a19c8697 Mon Sep 17 00:00:00 2001 From: Thomas Binsfeld Date: Fri, 19 Aug 2016 09:40:09 +0200 Subject: [PATCH 05/26] 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 b6bc905..0153bfe 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 159a77df6601e9a9edc4060b1512d36f5999e416 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 11:46:07 +0200 Subject: [PATCH 06/26] 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 2e08dc1..0998cc9 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 fe64abc..4768bb8 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 @@ class MailMessage(models.Model): 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 4c7e53f..f32d9bb 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 1ca61bf..9193672 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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): 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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): '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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): 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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): ('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 0153bfe..d90bb4b 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 6207810..b4ba519 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 829cab2a0e9a8c7319ee68260efd75238fdc7237 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Mon, 24 Oct 2016 12:10:45 +0200 Subject: [PATCH 07/26] [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 752029e..848dc73 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 6f933c008852cedfc83c8f66747ee3ffde6fa50c 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/26] [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 0000000..9dca093 --- /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/26] [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 b4ba519..53b3a55 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 eaa357348511a40c053510922ffbbbffecebec79 Mon Sep 17 00:00:00 2001 From: "Adrien Peiffer (ACSONE)" Date: Fri, 20 Oct 2017 17:42:56 +0200 Subject: [PATCH 10/26] [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 848dc73..3453dec 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 9dca093..e6e60ce 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/26] [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 0998cc9..83f4f50 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 e6e60ce..65c4e85 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 a08c3cf..8c2eaf4 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 3c8b8e1..6c9b215 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 4ecf33a..326a8d5 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 94b0c60..5510920 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 a88eeba..69b8151 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 d632483..09f3120 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 d56f6c9..2c53922 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 7bcbca3..e06ce95 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 e2ff34b..fd79215 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 a678af0..51d90a1 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 3c5b861..f66ef0f 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 cac3c9e..7c70103 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 53462b2..42985d3 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 75cbd27..0ff5e12 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 6b14a50..b952181 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 212297d..50dc7c6 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 0405db4..765e4df 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 ca08d61..7c3327c 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 6cb4044..2946b1e 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 b642fad..9a9b87a 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 c8e6016..34c6c9f 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 2d553d9..446c4fb 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 e361ec3..500f8e6 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 c8fba10..ccb4ceb 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 c5379a3..dc5f867 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 d381d51..2bdff7b 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 84f2c28..1e900ee 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 367e00b..d484ec2 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 82576c5..982ce7e 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 ccd999d..e6bb37d 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 322da7c..dd99f5e 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 11593a7..1e38937 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 4732acf..fbfa5d9 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 b5acdc9..9ed4faa 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 436526a..bba3666 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 95c7a60..b9e417b 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 0f27a27..cf0ecce 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 37f47dd..2ba2d07 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 a178d66..9f2abc3 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 33bff2c..710246b 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 b4671e4..8b2a106 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 cbec58e..d5c2c43 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 0ec39b3..1824ca1 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 54bdea3..0acb420 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 9a3a734..0134375 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 a5ebeac..f76bd11 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 92148b4..57756a6 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 7397f8b..2dfcb75 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 57abf5a..e5b7d63 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 6ea3d2d..467160f 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 3ff3be0..f5ff456 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 d0a8c31..f4036cb 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 051a82c..d6d9864 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 b826f0f..526b947 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 2876d76aac0b2dcc2e7061e3f09e1e84d4b6ae0a Mon Sep 17 00:00:00 2001 From: Maria Sparenberg Date: Fri, 14 Dec 2018 14:33:22 +0000 Subject: [PATCH 12/26] 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 2c53922..6816047 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 98aa84d..93aa2c1 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 3453dec..d0b5496 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 dd99f5e..15746f4 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 @@ from odoo import models, api 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 0000000..bea4300 --- /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 0000000..04bb275 --- /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 0000000..bf0bbb3 --- /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 0000000..dd90ad2 --- /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 2a6791a..17a2936 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 67b26af..724116a 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 @@ from odoo.tests import common 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 @@ class TestMailOptionalFollowernotifications(common.TransactionCase): '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 56c0250..2d9c29a 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 d90bb4b..25efe0d 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 53b3a55..b252a0e 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 cedbe63549322587ca23748cfc386796626f5973 Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Fri, 6 Dec 2019 11:37:20 +0100 Subject: [PATCH 15/26] [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 d0b5496..6c4769b 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 7afe713..4eeda7b 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 6ca4f5e..f91c52b 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 724116a..224503d 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 @@ 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_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 25efe0d..843c86f 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 9a71d7c4f22fcdc1e770b5965d886f8a3b80d45f Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Fri, 6 Dec 2019 11:49:27 +0100 Subject: [PATCH 16/26] [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 93aa2c1..9b42961 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 6c4769b..f55cd4b 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 b3d15f4..b70a9f2 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 4eeda7b..0000000 --- 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 0000000..db9dd9a --- /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 f91c52b..0000000 --- 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 17a2936..b58d6f2 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 224503d..439e002 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 ) - 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)] + 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( + 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 843c86f..7a32f10 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 b252a0e..e5b3d39 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 c176c7e9f7d09240bd0b167a4a0b74f16c0dc64d Mon Sep 17 00:00:00 2001 From: "Laurent Mignon (ACSONE)" Date: Thu, 9 Jul 2020 11:07:51 +0200 Subject: [PATCH 17/26] Update mail_optional_follower_notification/models/mail_thread.py Co-authored-by: Isabelle RICHARD --- .../README.rst | 14 +++--- .../__manifest__.py | 2 +- .../i18n/am.po | 33 +++++++------- .../i18n/ar.po | 33 +++++++------- .../i18n/bg.po | 33 +++++++------- .../i18n/bs.po | 33 +++++++------- .../i18n/ca.po | 36 ++++++++------- .../i18n/cs.po | 33 +++++++------- .../i18n/da.po | 33 +++++++------- .../i18n/de.po | 44 ++++++++++--------- .../i18n/el_GR.po | 33 +++++++------- .../i18n/en_GB.po | 33 +++++++------- .../i18n/es.po | 36 ++++++++------- .../i18n/es_CO.po | 33 +++++++------- .../i18n/es_CR.po | 33 +++++++------- .../i18n/es_EC.po | 33 +++++++------- .../i18n/es_MX.po | 33 +++++++------- .../i18n/es_VE.po | 33 +++++++------- .../i18n/et.po | 33 +++++++------- .../i18n/eu.po | 33 +++++++------- .../i18n/fi.po | 33 +++++++------- .../i18n/fr.po | 38 +++++++++------- .../i18n/fr_CA.po | 33 +++++++------- .../i18n/fr_CH.po | 33 +++++++------- .../i18n/gl.po | 33 +++++++------- .../i18n/hr.po | 36 ++++++++------- .../i18n/hr_HR.po | 33 +++++++------- .../i18n/hu.po | 33 +++++++------- .../i18n/it.po | 38 +++++++++------- .../i18n/ja.po | 33 +++++++------- .../i18n/lt.po | 33 +++++++------- .../i18n/lv.po | 33 +++++++------- .../mail_optional_follower_notification.pot | 21 ++++----- .../i18n/mk.po | 33 +++++++------- .../i18n/mn.po | 33 +++++++------- .../i18n/nb.po | 36 ++++++++------- .../i18n/nb_NO.po | 33 +++++++------- .../i18n/nl.po | 36 ++++++++------- .../i18n/nl_BE.po | 33 +++++++------- .../i18n/nl_NL.po | 36 ++++++++------- .../i18n/pl.po | 33 +++++++------- .../i18n/pt.po | 42 ++++++++++-------- .../i18n/pt_BR.po | 36 ++++++++------- .../i18n/pt_PT.po | 33 +++++++------- .../i18n/ro.po | 33 +++++++------- .../i18n/ru.po | 33 +++++++------- .../i18n/sk.po | 33 +++++++------- .../i18n/sl.po | 37 +++++++++------- .../i18n/sr@latin.po | 33 +++++++------- .../i18n/sv.po | 33 +++++++------- .../i18n/th.po | 33 +++++++------- .../i18n/tr.po | 36 ++++++++------- .../i18n/tr_TR.po | 36 ++++++++------- .../i18n/vi.po | 33 +++++++------- .../i18n/zh_CN.po | 33 +++++++------- .../i18n/zh_TW.po | 33 +++++++------- .../models/mail_thread.py | 4 +- .../static/description/index.html | 10 ++--- 58 files changed, 929 insertions(+), 932 deletions(-) diff --git a/mail_optional_follower_notification/README.rst b/mail_optional_follower_notification/README.rst index 93bacf1..cb910c6 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 f55cd4b..f7efcc7 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 65c4e85..828feb3 100644 --- a/mail_optional_follower_notification/i18n/am.po +++ b/mail_optional_follower_notification/i18n/am.po @@ -19,12 +19,19 @@ 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 564d893e82b31546a39dbd50c521592427fc82a1 Mon Sep 17 00:00:00 2001 From: hda Date: Fri, 19 Feb 2021 14:58:32 +0100 Subject: [PATCH 19/26] [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 f7efcc7..9ac1bf9 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 828feb3..c15b67c 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 bc85608926df5845a8165a1adf26cc0d3da685f1 Mon Sep 17 00:00:00 2001 From: Ioan Galan Date: Fri, 7 May 2021 16:42:26 +0200 Subject: [PATCH 20/26] [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 1a675f7..d2b70f1 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 c92749d93cb15a613ff50d220d766012ef0dbea6 Mon Sep 17 00:00:00 2001 From: Ioan Galan Date: Fri, 7 May 2021 16:46:45 +0200 Subject: [PATCH 21/26] [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 9ac1bf9..dfa5c76 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 d2b70f1..a9da2b5 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 439e002..af05940 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 @@ class TestMailOptionalFollowernotifications(common.SavepointCase): "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 c82552bc58753f58a05dd39161cd3c9d6d0023c3 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Mon, 24 Jan 2022 10:19:19 +0000 Subject: [PATCH 22/26] [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 805e07f..d0b7ef3 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 5514f7bb9f07e1ddfc72adbc1697b15f0c48ecfb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 24 Jan 2022 10:26:39 +0000 Subject: [PATCH 23/26] [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 cb910c6..94cb231 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 326b758..c98145e 100644 --- a/mail_optional_follower_notification/static/description/index.html +++ b/mail_optional_follower_notification/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! 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 @@ automatically all followers.

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 @@ document and” on mail.compose.message:

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 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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 0486ce6cbbb7d7e28d75debcb3680e6d3d3d598d 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/26] 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 4c21891..f7a40f1 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 "" +" Date: Wed, 9 Mar 2022 16:02:48 +0100 Subject: [PATCH 26/26] [MIG] mail_optional_follower_notificatio: Migration to 15.0 --- mail_optional_follower_notification/__manifest__.py | 2 +- .../models/mail_thread.py | 5 +---- .../readme/CONTRIBUTORS.rst | 1 + .../test_mail_optional_follower_notifications.py | 12 ++++++------ .../wizard/mail_compose_message.py | 4 ++-- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/mail_optional_follower_notification/__manifest__.py b/mail_optional_follower_notification/__manifest__.py index dfa5c76..42ab210 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": "14.0.1.0.0", + "version": "15.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 a9da2b5..5829805 100644 --- a/mail_optional_follower_notification/models/mail_thread.py +++ b/mail_optional_follower_notification/models/mail_thread.py @@ -26,8 +26,5 @@ class MailThread(models.AbstractModel): 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": [], - } + recipient_data = [d for d in recipient_data if d["id"] in pids] return recipient_data diff --git a/mail_optional_follower_notification/readme/CONTRIBUTORS.rst b/mail_optional_follower_notification/readme/CONTRIBUTORS.rst index bea4300..7b5c64d 100644 --- a/mail_optional_follower_notification/readme/CONTRIBUTORS.rst +++ b/mail_optional_follower_notification/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * Adrien Peiffer * Laurent Mignon * Andrea Stirpe +* Robin Goots 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 af05940..8932d4f 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.common import SavepointCase +from odoo.tests.common import TransactionCase -class TestMailOptionalFollowernotifications(SavepointCase): +class TestMailOptionalFollowernotifications(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -29,16 +29,16 @@ class TestMailOptionalFollowernotifications(SavepointCase): 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)[ + **self.mail_compose_context + )._onchange_template_id(False, "comment", "res.partner", self.partner_01.id)[ "value" ] values["partner_ids"] = [(6, 0, recipients.ids)] values["notify_followers"] = notify_followers - composer = self.MailCompose.with_context(self.mail_compose_context).create( + composer = self.MailCompose.with_context(**self.mail_compose_context).create( values ) - composer.send_mail() + composer.action_send_mail() return self.env["mail.message"].search([]) - old_messages def test_1(self): diff --git a/mail_optional_follower_notification/wizard/mail_compose_message.py b/mail_optional_follower_notification/wizard/mail_compose_message.py index 7a32f10..151e19e 100644 --- a/mail_optional_follower_notification/wizard/mail_compose_message.py +++ b/mail_optional_follower_notification/wizard/mail_compose_message.py @@ -9,8 +9,8 @@ class MailComposeMessage(models.TransientModel): notify_followers = fields.Boolean(default=True) - def send_mail(self, auto_commit=False): + def _action_send_mail(self, auto_commit=False): for wizard in self: wizard = wizard.with_context(notify_followers=wizard.notify_followers) - super(MailComposeMessage, wizard).send_mail(auto_commit=auto_commit) + super(MailComposeMessage, wizard)._action_send_mail(auto_commit=auto_commit) return True