From 918fe1ce77f0adc3168102e3e07283ca648dd66f Mon Sep 17 00:00:00 2001 From: Valentin Vinagre Urteaga Date: Mon, 17 May 2021 11:59:44 +0200 Subject: [PATCH 01/61] ADD mail_show_follower copied from https://github.com/sygel-technology/sy-server-backend/tree/12.0/mail_show_follower --- mail_show_follower/README.rst | 82 ++++++++++++++++++ mail_show_follower/__init__.py | 4 + mail_show_follower/__manifest__.py | 22 +++++ mail_show_follower/models/__init__.py | 7 ++ mail_show_follower/models/mail_mail.py | 60 +++++++++++++ mail_show_follower/models/res_company.py | 13 +++ .../models/res_config_settings.py | 14 +++ mail_show_follower/models/res_users.py | 13 +++ .../static/description/icon.png | Bin 0 -> 35820 bytes .../views/res_config_settings.xml | 23 +++++ mail_show_follower/views/res_users.xml | 13 +++ 11 files changed, 251 insertions(+) create mode 100755 mail_show_follower/README.rst create mode 100755 mail_show_follower/__init__.py create mode 100755 mail_show_follower/__manifest__.py create mode 100755 mail_show_follower/models/__init__.py create mode 100755 mail_show_follower/models/mail_mail.py create mode 100644 mail_show_follower/models/res_company.py create mode 100644 mail_show_follower/models/res_config_settings.py create mode 100644 mail_show_follower/models/res_users.py create mode 100644 mail_show_follower/static/description/icon.png create mode 100644 mail_show_follower/views/res_config_settings.xml create mode 100644 mail_show_follower/views/res_users.xml diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst new file mode 100755 index 000000000..30105bff0 --- /dev/null +++ b/mail_show_follower/README.rst @@ -0,0 +1,82 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +================== +Mail Show Follower +================== + +This module extends the functionality of mailing to show the document followers in head of the mails. +In the cc, only appear when: + +#. The followers only count if are contacts or external users (Inner Followers will be discriminated) +#. The number of followers are more than 1. + + +Installation +============ + +To install this module, you need to: + +#. Only install. + + +Configuration +============= + +To configure this module, you need to: + +#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. +#. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. + + +Usage +===== + +To use this module, you need to: + +#. Send an email from any document of odoo. + + +ROADMAP +======= + + +* ... + + +Bug Tracker +=========== + +Bugs and errors are managed in `issues of GitHub `_. +In case of problems, please check if your problem has already been +reported. If you are the first to discover it, help us solving it by indicating +a detailed description `here `_. + +Do not contact contributors directly about support or help with technical issues. + + +Credits +======= + +Authors +~~~~~~~ + +* Sygel, Odoo Community Association (OCA) + + +Contributors +~~~~~~~~~~~~ + +* Valentin Vinagre + + +Maintainer +~~~~~~~~~~ + +This module is maintained by Sygel. + + +This module is part of the `Sygel/sy-server-backend `_. + +To contribute to this module, please visit https://github.com/sygel-technology. diff --git a/mail_show_follower/__init__.py b/mail_show_follower/__init__.py new file mode 100755 index 000000000..d075e8eb8 --- /dev/null +++ b/mail_show_follower/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py new file mode 100755 index 000000000..b1e3dc559 --- /dev/null +++ b/mail_show_follower/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Mail Show Follower", + "summary": "Show CC document followers in mails.", + "version": "12.0.1.0.0", + "category": "Mail", + "website": "https://www.sygel.es", + "author": "Sygel, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "base", + "mail" + ], + "data": [ + "views/res_config_settings.xml", + "views/res_users.xml" + ], +} diff --git a/mail_show_follower/models/__init__.py b/mail_show_follower/models/__init__.py new file mode 100755 index 000000000..b1d9b290c --- /dev/null +++ b/mail_show_follower/models/__init__.py @@ -0,0 +1,7 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import mail_mail +from . import res_company +from . import res_config_settings +from . import res_users diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py new file mode 100755 index 000000000..c26ff4035 --- /dev/null +++ b/mail_show_follower/models/mail_mail.py @@ -0,0 +1,60 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models, api + + +class MailMail(models.Model): + _inherit = "mail.mail" + + @api.multi + def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): + plain_text = '
CC: %s
' + group_portal = self.env.ref('base.group_portal') + for mail_id in self.ids: + mail = self.browse(mail_id) + # if the email has a model, id and it belongs to the portal group + if mail.model and mail.res_id and group_portal: + obj = self.env[mail.model].browse(mail.res_id) + # those partners are obtained, who do not have a user and + # if they do it must be a portal, we exclude internal + # users of the system. + if hasattr(obj, "message_follower_ids"): + partners_obj = obj.message_follower_ids.mapped('partner_id') + # internal partners + user_partner_ids = self.env['res.users'].search([ + ('active', 'in', (True, False)), + ('show_in_cc', '=', False), + ]).filtered(lambda x: not group_portal in x.groups_id).mapped('partner_id').ids + partners_len = len(partners_obj.filtered( + lambda x: x.id not in user_partner_ids and (not x.user_ids or group_portal in x.user_ids.groups_id) + )) + if partners_len > 1: + # get partners + partners = None + cc_internal = True + # else get company in object + if hasattr(obj, "company_id") and obj.company_id: + cc_internal = obj.company_id.show_internal_users_cc + # get company in user + elif mail.env and mail.env.user and mail.env.user.company_id: + cc_internal = self.env.user.company_id.show_internal_users_cc + if cc_internal: + partners = partners_obj.filtered( + lambda x: x.id not in user_partner_ids and (not x.user_ids or x.user_ids.show_in_cc) + ) + else: + partners = partners_obj.filtered( + lambda x: x.id not in user_partner_ids and (not x.user_ids or group_portal in x.user_ids.groups_id) + ) + # get names and emails + final_cc = None + mails = "" + for p in partners: + mails += "%s <%s>, " % (p.name, p.email) + # join texts + final_cc = plain_text % (mails[:-2]) + # it is saved in the body_html field so that it does + # not appear in the odoo log + mail.body_html = final_cc + mail.body_html + return super(MailMail, self)._send(auto_commit=auto_commit, raise_exception=raise_exception, smtp_session=smtp_session) diff --git a/mail_show_follower/models/res_company.py b/mail_show_follower/models/res_company.py new file mode 100644 index 000000000..9192b9265 --- /dev/null +++ b/mail_show_follower/models/res_company.py @@ -0,0 +1,13 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ResCompany(models.Model): + _inherit = "res.company" + + show_internal_users_cc = fields.Boolean( + string='Show Internal Users CC', + default=True + ) diff --git a/mail_show_follower/models/res_config_settings.py b/mail_show_follower/models/res_config_settings.py new file mode 100644 index 000000000..b084b35ce --- /dev/null +++ b/mail_show_follower/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + show_internal_users_cc = fields.Boolean( + string='Show Internal Users CC', + related='company_id.show_internal_users_cc', + readonly=False + ) diff --git a/mail_show_follower/models/res_users.py b/mail_show_follower/models/res_users.py new file mode 100644 index 000000000..afbcce00a --- /dev/null +++ b/mail_show_follower/models/res_users.py @@ -0,0 +1,13 @@ +# Copyright 2020 Valentin Vinagre +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ResUser(models.Model): + _inherit = "res.users" + + show_in_cc = fields.Boolean( + string='Show in CC', + default=True + ) diff --git a/mail_show_follower/static/description/icon.png b/mail_show_follower/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..207fb7ad5535215836f426bcebfdccdbc51c0d27 GIT binary patch literal 35820 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 + + + res.config.settings.view.form.inherit.mail.show.follower + res.config.settings + + +
+
+
+ +
+
+
+
+
+
+
+
diff --git a/mail_show_follower/views/res_users.xml b/mail_show_follower/views/res_users.xml new file mode 100644 index 000000000..1a6040344 --- /dev/null +++ b/mail_show_follower/views/res_users.xml @@ -0,0 +1,13 @@ + + + + view.users.form.mail.show.follower + res.users + + + + + + + + From 21488ccb8a4ec418d5e8ea24dac9875d35aba162 Mon Sep 17 00:00:00 2001 From: eLBati Date: Mon, 17 May 2021 12:15:44 +0200 Subject: [PATCH 02/61] IMP mail_show_follower metadata and style Display CC according to notification_type --- mail_show_follower/README.rst | 82 ------------------ mail_show_follower/__init__.py | 3 - mail_show_follower/__manifest__.py | 2 +- mail_show_follower/models/__init__.py | 3 - mail_show_follower/models/mail_mail.py | 45 +++++++--- mail_show_follower/models/res_company.py | 3 - .../models/res_config_settings.py | 3 - mail_show_follower/models/res_users.py | 3 - mail_show_follower/readme/CONFIGURE.rst | 4 + mail_show_follower/readme/CONTRIBUTORS.rst | 2 + mail_show_follower/readme/DESCRIPTION.rst | 5 ++ mail_show_follower/readme/USAGE.rst | 3 + .../static/description/icon.png | Bin 35820 -> 0 bytes 13 files changed, 48 insertions(+), 110 deletions(-) delete mode 100755 mail_show_follower/README.rst create mode 100644 mail_show_follower/readme/CONFIGURE.rst create mode 100644 mail_show_follower/readme/CONTRIBUTORS.rst create mode 100644 mail_show_follower/readme/DESCRIPTION.rst create mode 100644 mail_show_follower/readme/USAGE.rst delete mode 100644 mail_show_follower/static/description/icon.png diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst deleted file mode 100755 index 30105bff0..000000000 --- a/mail_show_follower/README.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl - :alt: License: AGPL-3 - -================== -Mail Show Follower -================== - -This module extends the functionality of mailing to show the document followers in head of the mails. -In the cc, only appear when: - -#. The followers only count if are contacts or external users (Inner Followers will be discriminated) -#. The number of followers are more than 1. - - -Installation -============ - -To install this module, you need to: - -#. Only install. - - -Configuration -============= - -To configure this module, you need to: - -#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. -#. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. - - -Usage -===== - -To use this module, you need to: - -#. Send an email from any document of odoo. - - -ROADMAP -======= - - -* ... - - -Bug Tracker -=========== - -Bugs and errors are managed in `issues of GitHub `_. -In case of problems, please check if your problem has already been -reported. If you are the first to discover it, help us solving it by indicating -a detailed description `here `_. - -Do not contact contributors directly about support or help with technical issues. - - -Credits -======= - -Authors -~~~~~~~ - -* Sygel, Odoo Community Association (OCA) - - -Contributors -~~~~~~~~~~~~ - -* Valentin Vinagre - - -Maintainer -~~~~~~~~~~ - -This module is maintained by Sygel. - - -This module is part of the `Sygel/sy-server-backend `_. - -To contribute to this module, please visit https://github.com/sygel-technology. diff --git a/mail_show_follower/__init__.py b/mail_show_follower/__init__.py index d075e8eb8..0650744f6 100755 --- a/mail_show_follower/__init__.py +++ b/mail_show_follower/__init__.py @@ -1,4 +1 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from . import models diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index b1e3dc559..47f5008e2 100755 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -6,7 +6,7 @@ "summary": "Show CC document followers in mails.", "version": "12.0.1.0.0", "category": "Mail", - "website": "https://www.sygel.es", + "website": "https://github.com/OCA/social", "author": "Sygel, Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, diff --git a/mail_show_follower/models/__init__.py b/mail_show_follower/models/__init__.py index b1d9b290c..9b936c42d 100755 --- a/mail_show_follower/models/__init__.py +++ b/mail_show_follower/models/__init__.py @@ -1,6 +1,3 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from . import mail_mail from . import res_company from . import res_config_settings diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index c26ff4035..b06a6fc9e 100755 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -1,6 +1,3 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from odoo import models, api @@ -9,7 +6,12 @@ class MailMail(models.Model): @api.multi def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): - plain_text = '
CC: %s
' + plain_text = ( + '
CC: %s
' + ) group_portal = self.env.ref('base.group_portal') for mail_id in self.ids: mail = self.browse(mail_id) @@ -25,28 +27,44 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): user_partner_ids = self.env['res.users'].search([ ('active', 'in', (True, False)), ('show_in_cc', '=', False), - ]).filtered(lambda x: not group_portal in x.groups_id).mapped('partner_id').ids + ]).filtered( + lambda x: group_portal not in x.groups_id + ).mapped('partner_id').ids partners_len = len(partners_obj.filtered( - lambda x: x.id not in user_partner_ids and (not x.user_ids or group_portal in x.user_ids.groups_id) - )) + lambda x: x.id not in user_partner_ids and ( + not x.user_ids or group_portal in x.user_ids.groups_id + ))) if partners_len > 1: # get partners - partners = None cc_internal = True # else get company in object if hasattr(obj, "company_id") and obj.company_id: cc_internal = obj.company_id.show_internal_users_cc # get company in user elif mail.env and mail.env.user and mail.env.user.company_id: - cc_internal = self.env.user.company_id.show_internal_users_cc + cc_internal = self.env.user.company_id.\ + show_internal_users_cc if cc_internal: partners = partners_obj.filtered( - lambda x: x.id not in user_partner_ids and (not x.user_ids or x.user_ids.show_in_cc) + lambda x: x.id not in user_partner_ids and ( + not x.user_ids or x.user_ids.show_in_cc + ) ) else: partners = partners_obj.filtered( - lambda x: x.id not in user_partner_ids and (not x.user_ids or group_portal in x.user_ids.groups_id) + lambda x: x.id not in user_partner_ids and ( + not x.user_ids or group_portal in + x.user_ids.groups_id + ) ) + partners = partners.filtered( + lambda x: + not x.user_ids + or + # otherwise, email is not sent + x.user_ids and "email" in x.user_ids.mapped( + "notification_type") + ) # get names and emails final_cc = None mails = "" @@ -57,4 +75,7 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): # it is saved in the body_html field so that it does # not appear in the odoo log mail.body_html = final_cc + mail.body_html - return super(MailMail, self)._send(auto_commit=auto_commit, raise_exception=raise_exception, smtp_session=smtp_session) + return super(MailMail, self)._send( + auto_commit=auto_commit, raise_exception=raise_exception, + smtp_session=smtp_session + ) diff --git a/mail_show_follower/models/res_company.py b/mail_show_follower/models/res_company.py index 9192b9265..d273a8c98 100644 --- a/mail_show_follower/models/res_company.py +++ b/mail_show_follower/models/res_company.py @@ -1,6 +1,3 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from odoo import models, fields diff --git a/mail_show_follower/models/res_config_settings.py b/mail_show_follower/models/res_config_settings.py index b084b35ce..e15b818be 100644 --- a/mail_show_follower/models/res_config_settings.py +++ b/mail_show_follower/models/res_config_settings.py @@ -1,6 +1,3 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from odoo import fields, models diff --git a/mail_show_follower/models/res_users.py b/mail_show_follower/models/res_users.py index afbcce00a..7e30a4476 100644 --- a/mail_show_follower/models/res_users.py +++ b/mail_show_follower/models/res_users.py @@ -1,6 +1,3 @@ -# Copyright 2020 Valentin Vinagre -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - from odoo import models, fields diff --git a/mail_show_follower/readme/CONFIGURE.rst b/mail_show_follower/readme/CONFIGURE.rst new file mode 100644 index 000000000..02a169a51 --- /dev/null +++ b/mail_show_follower/readme/CONFIGURE.rst @@ -0,0 +1,4 @@ +To configure this module, you need to: + +#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. +#. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. diff --git a/mail_show_follower/readme/CONTRIBUTORS.rst b/mail_show_follower/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..40630f391 --- /dev/null +++ b/mail_show_follower/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Valentin Vinagre +* Lorenzo Battistini diff --git a/mail_show_follower/readme/DESCRIPTION.rst b/mail_show_follower/readme/DESCRIPTION.rst new file mode 100644 index 000000000..19d47011d --- /dev/null +++ b/mail_show_follower/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module extends the functionality of mailing to show the document followers in head of the mails. +In the cc, only appear when: + +#. The followers only count if are contacts or external users (Inner Followers will be discriminated) +#. The number of followers are more than 1. diff --git a/mail_show_follower/readme/USAGE.rst b/mail_show_follower/readme/USAGE.rst new file mode 100644 index 000000000..9c3f9bf45 --- /dev/null +++ b/mail_show_follower/readme/USAGE.rst @@ -0,0 +1,3 @@ +To use this module, you need to: + +#. Send an email from any document of odoo. diff --git a/mail_show_follower/static/description/icon.png b/mail_show_follower/static/description/icon.png deleted file mode 100644 index 207fb7ad5535215836f426bcebfdccdbc51c0d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35820 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 Date: Mon, 5 Jul 2021 08:30:43 +0000 Subject: [PATCH 03/61] [UPD] Update mail_show_follower.pot --- .../i18n/mail_show_follower.pot | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 mail_show_follower/i18n/mail_show_follower.pot diff --git a/mail_show_follower/i18n/mail_show_follower.pot b/mail_show_follower/i18n/mail_show_follower.pot new file mode 100644 index 000000000..4797a2044 --- /dev/null +++ b/mail_show_follower/i18n/mail_show_follower.pot @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_show_follower +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Add internal users in cc mails details" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_company +msgid "Companies" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc +msgid "Show Internal Users CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc +msgid "Show in CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_users +msgid "Users" +msgstr "" + From 6736a3d4430f44c9f730210dc27dba61a4a7b1a1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 5 Jul 2021 08:58:21 +0000 Subject: [PATCH 04/61] [UPD] README.rst --- mail_show_follower/README.rst | 93 ++++ mail_show_follower/i18n/fr.po | 51 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 442 ++++++++++++++++++ 4 files changed, 586 insertions(+) create mode 100644 mail_show_follower/README.rst create mode 100644 mail_show_follower/i18n/fr.po create mode 100644 mail_show_follower/static/description/icon.png create mode 100644 mail_show_follower/static/description/index.html diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst new file mode 100644 index 000000000..adcddc058 --- /dev/null +++ b/mail_show_follower/README.rst @@ -0,0 +1,93 @@ +================== +Mail Show Follower +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/12.0/mail_show_follower + :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_show_follower + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/205/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of mailing to show the document followers in head of the mails. +In the cc, only appear when: + +#. The followers only count if are contacts or external users (Inner Followers will be discriminated) +#. The number of followers are more than 1. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. +#. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. + +Usage +===== + +To use this module, you need to: + +#. Send an email from any document of odoo. + +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 +~~~~~~~ + +* Sygel + +Contributors +~~~~~~~~~~~~ + +* Valentin Vinagre +* Lorenzo Battistini + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +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_show_follower/i18n/fr.po b/mail_show_follower/i18n/fr.po new file mode 100644 index 000000000..bb6076e8c --- /dev/null +++ b/mail_show_follower/i18n/fr.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_show_follower +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Add internal users in cc mails details" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_company +msgid "Companies" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc +msgid "Show Internal Users CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc +msgid "Show in CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_users +msgid "Users" +msgstr "" diff --git a/mail_show_follower/static/description/icon.png b/mail_show_follower/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_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html new file mode 100644 index 000000000..8acaa00a4 --- /dev/null +++ b/mail_show_follower/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Mail Show Follower + + + +
+

Mail Show Follower

+ + +

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

+

This module extends the functionality of mailing to show the document followers in head of the mails. +In the cc, only appear when:

+
    +
  1. The followers only count if are contacts or external users (Inner Followers will be discriminated)
  2. +
  3. The number of followers are more than 1.
  4. +
+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details.
  2. +
  3. Go Settings/Users & Company salect any user in ‘Preferences’ check or not the ‘Show in CC’ field if this user need to appear in the cc note.
  4. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Send an email from any document of odoo.
  2. +
+
+
+

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

+
    +
  • Sygel
  • +
+
+
+

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.

+
+
+
+ + From 50e9723e251bfeb25bdb57b1a46cd6f08153217c Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 19 Jan 2022 15:06:13 +0000 Subject: [PATCH 05/61] Translated using Weblate (French) Currently translated at 100.0% (7 of 7 strings) Translation: social-12.0/social-12.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_show_follower/fr/ --- mail_show_follower/i18n/fr.po | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/mail_show_follower/i18n/fr.po b/mail_show_follower/i18n/fr.po index bb6076e8c..db94ac068 100644 --- a/mail_show_follower/i18n/fr.po +++ b/mail_show_follower/i18n/fr.po @@ -6,46 +6,49 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-01-19 15:32+0000\n" +"Last-Translator: Yann Papouin \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Add internal users in cc mails details" msgstr "" +"Ajouter les utilisateurs internes dans l'entête « Copie à (CC) » des e-mails" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company msgid "Companies" -msgstr "" +msgstr "Sociétés" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Paramétrage" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail msgid "Outgoing Mails" -msgstr "" +msgstr "Courriels à envoyer" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc msgid "Show Internal Users CC" -msgstr "" +msgstr "Afficher les utilisateurs internes en « Copie à (CC) »" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc msgid "Show in CC" -msgstr "" +msgstr "Afficher dans « Copie à (CC) »" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users msgid "Users" -msgstr "" +msgstr "Utilisateurs" From 267ef1dc60c886ec98f1085bfaa4a3760980365f Mon Sep 17 00:00:00 2001 From: eLBati Date: Fri, 15 Oct 2021 16:35:52 +0200 Subject: [PATCH 06/61] FIX mail_show_follower: ValueError: Expected singleton: res.users --- mail_show_follower/models/mail_mail.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index b06a6fc9e..4e2e420cb 100755 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -32,7 +32,8 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): ).mapped('partner_id').ids partners_len = len(partners_obj.filtered( lambda x: x.id not in user_partner_ids and ( - not x.user_ids or group_portal in x.user_ids.groups_id + not x.user_ids or + group_portal in x.user_ids.mapped("groups_id") ))) if partners_len > 1: # get partners @@ -54,7 +55,7 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): partners = partners_obj.filtered( lambda x: x.id not in user_partner_ids and ( not x.user_ids or group_portal in - x.user_ids.groups_id + x.user_ids.mapped("groups_id") ) ) partners = partners.filtered( From 0286af78411a06040b600a57ddbd70f56a49fb9a Mon Sep 17 00:00:00 2001 From: Rafael Blasco Date: Mon, 28 Feb 2022 14:00:51 +0100 Subject: [PATCH 07/61] [12.0][mail_show_follower] Update version As commented in https://github.com/OCA/social/pull/788 the PR should be merged manually but we should update the version of the module as a minor update --- mail_show_follower/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index 47f5008e2..a29d0c623 100755 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "12.0.1.0.0", + "version": "12.0.1.0.1", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Odoo Community Association (OCA)", From 3499b315efcc64d4184d56351ec01a5d6fed9bbd Mon Sep 17 00:00:00 2001 From: Eduardo De Miguel Date: Fri, 11 Mar 2022 12:11:21 +0100 Subject: [PATCH 08/61] [IMP] mail_show_follower: black, isort, prettier --- mail_show_follower/__manifest__.py | 10 +-- mail_show_follower/models/mail_mail.py | 69 +++++++++++-------- mail_show_follower/models/res_company.py | 5 +- .../models/res_config_settings.py | 8 +-- mail_show_follower/models/res_users.py | 7 +- .../views/res_config_settings.xml | 12 ++-- mail_show_follower/views/res_users.xml | 6 +- 7 files changed, 60 insertions(+), 57 deletions(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index a29d0c623..a35d9edf7 100755 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -11,12 +11,6 @@ "license": "AGPL-3", "application": False, "installable": True, - "depends": [ - "base", - "mail" - ], - "data": [ - "views/res_config_settings.xml", - "views/res_users.xml" - ], + "depends": ["base", "mail"], + "data": ["views/res_config_settings.xml", "views/res_users.xml"], } diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index 4e2e420cb..27d3bf180 100755 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -1,4 +1,4 @@ -from odoo import models, api +from odoo import api, models class MailMail(models.Model): @@ -9,10 +9,10 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): plain_text = ( '
CC: %s
' ) - group_portal = self.env.ref('base.group_portal') + group_portal = self.env.ref("base.group_portal") for mail_id in self.ids: mail = self.browse(mail_id) # if the email has a model, id and it belongs to the portal group @@ -22,19 +22,29 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): # if they do it must be a portal, we exclude internal # users of the system. if hasattr(obj, "message_follower_ids"): - partners_obj = obj.message_follower_ids.mapped('partner_id') + partners_obj = obj.message_follower_ids.mapped("partner_id") # internal partners - user_partner_ids = self.env['res.users'].search([ - ('active', 'in', (True, False)), - ('show_in_cc', '=', False), - ]).filtered( - lambda x: group_portal not in x.groups_id - ).mapped('partner_id').ids - partners_len = len(partners_obj.filtered( - lambda x: x.id not in user_partner_ids and ( - not x.user_ids or - group_portal in x.user_ids.mapped("groups_id") - ))) + user_partner_ids = ( + self.env["res.users"] + .search( + [ + ("active", "in", (True, False)), + ("show_in_cc", "=", False), + ] + ) + .filtered(lambda x: group_portal not in x.groups_id) + .mapped("partner_id") + .ids + ) + partners_len = len( + partners_obj.filtered( + lambda x: x.id not in user_partner_ids + and ( + not x.user_ids + or group_portal in x.user_ids.mapped("groups_id") + ) + ) + ) if partners_len > 1: # get partners cc_internal = True @@ -43,28 +53,28 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): cc_internal = obj.company_id.show_internal_users_cc # get company in user elif mail.env and mail.env.user and mail.env.user.company_id: - cc_internal = self.env.user.company_id.\ - show_internal_users_cc + cc_internal = ( + self.env.user.company_id.show_internal_users_cc + ) if cc_internal: partners = partners_obj.filtered( - lambda x: x.id not in user_partner_ids and ( - not x.user_ids or x.user_ids.show_in_cc - ) + lambda x: x.id not in user_partner_ids + and (not x.user_ids or x.user_ids.show_in_cc) ) else: partners = partners_obj.filtered( - lambda x: x.id not in user_partner_ids and ( - not x.user_ids or group_portal in - x.user_ids.mapped("groups_id") + lambda x: x.id not in user_partner_ids + and ( + not x.user_ids + or group_portal in x.user_ids.mapped("groups_id") ) ) partners = partners.filtered( - lambda x: - not x.user_ids + lambda x: not x.user_ids or # otherwise, email is not sent - x.user_ids and "email" in x.user_ids.mapped( - "notification_type") + x.user_ids + and "email" in x.user_ids.mapped("notification_type") ) # get names and emails final_cc = None @@ -77,6 +87,7 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): # not appear in the odoo log mail.body_html = final_cc + mail.body_html return super(MailMail, self)._send( - auto_commit=auto_commit, raise_exception=raise_exception, - smtp_session=smtp_session + auto_commit=auto_commit, + raise_exception=raise_exception, + smtp_session=smtp_session, ) diff --git a/mail_show_follower/models/res_company.py b/mail_show_follower/models/res_company.py index d273a8c98..fdbc33efe 100644 --- a/mail_show_follower/models/res_company.py +++ b/mail_show_follower/models/res_company.py @@ -1,10 +1,9 @@ -from odoo import models, fields +from odoo import fields, models class ResCompany(models.Model): _inherit = "res.company" show_internal_users_cc = fields.Boolean( - string='Show Internal Users CC', - default=True + string="Show Internal Users CC", default=True ) diff --git a/mail_show_follower/models/res_config_settings.py b/mail_show_follower/models/res_config_settings.py index e15b818be..5b46dde55 100644 --- a/mail_show_follower/models/res_config_settings.py +++ b/mail_show_follower/models/res_config_settings.py @@ -2,10 +2,10 @@ class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' + _inherit = "res.config.settings" show_internal_users_cc = fields.Boolean( - string='Show Internal Users CC', - related='company_id.show_internal_users_cc', - readonly=False + string="Show Internal Users CC", + related="company_id.show_internal_users_cc", + readonly=False, ) diff --git a/mail_show_follower/models/res_users.py b/mail_show_follower/models/res_users.py index 7e30a4476..4f9d71f3c 100644 --- a/mail_show_follower/models/res_users.py +++ b/mail_show_follower/models/res_users.py @@ -1,10 +1,7 @@ -from odoo import models, fields +from odoo import fields, models class ResUser(models.Model): _inherit = "res.users" - show_in_cc = fields.Boolean( - string='Show in CC', - default=True - ) + show_in_cc = fields.Boolean(string="Show in CC", default=True) diff --git a/mail_show_follower/views/res_config_settings.xml b/mail_show_follower/views/res_config_settings.xml index 84dc70f92..724890370 100644 --- a/mail_show_follower/views/res_config_settings.xml +++ b/mail_show_follower/views/res_config_settings.xml @@ -1,17 +1,19 @@ - + - res.config.settings.view.form.inherit.mail.show.follower + res.config.settings.view.form.inherit.mail.show.follower res.config.settings - +
- +
-
From 10d2f5767080fd395aec3cecfdf5ed61d54ae094 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 16 Mar 2022 09:01:47 +0000 Subject: [PATCH 10/61] [UPD] Update mail_show_follower.pot --- mail_show_follower/README.rst | 2 +- mail_show_follower/i18n/mail_show_follower.pot | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index 29a6ff380..94ae7e158 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -23,7 +23,7 @@ Mail Show Follower :target: https://runbot.odoo-community.org/runbot/205/15.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module extends the functionality of mailing to show the document followers in head of the mails. In the cc, only appear when: diff --git a/mail_show_follower/i18n/mail_show_follower.pot b/mail_show_follower/i18n/mail_show_follower.pot index 5da0e0e07..c1ed19c90 100644 --- a/mail_show_follower/i18n/mail_show_follower.pot +++ b/mail_show_follower/i18n/mail_show_follower.pot @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * mail_show_follower +# * mail_show_follower # msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" From 8b2ff6019e6a110c9897c4e718d5835ca495669b Mon Sep 17 00:00:00 2001 From: Eduardo De Miguel Date: Fri, 18 Mar 2022 14:21:16 +0100 Subject: [PATCH 11/61] [ADD] Customize notification appearance Added settings to customize notification and translations to important parts of the message. [FIX] Security fixes and simplified customization Field `show_followers_partner_format` formatted with %(param)s Removed CSS customizations [FIX] README options [FIX] Index.html configure [FIX] Several changes - Removed unnecesary properties on res_config_settings - Markup safe on partner_format - Use email_domain_extract instead own one --- mail_show_follower/README.rst | 7 +- mail_show_follower/__manifest__.py | 5 +- .../i18n/mail_show_follower.pot | 55 +++++++++++- mail_show_follower/models/mail_mail.py | 84 +++++++++++++++---- mail_show_follower/models/res_company.py | 21 ++++- .../models/res_config_settings.py | 44 +++++++++- mail_show_follower/readme/CONFIGURE.rst | 5 +- mail_show_follower/readme/CONTRIBUTORS.rst | 1 + .../static/description/index.html | 7 +- .../views/res_config_settings.xml | 64 +++++++++++++- 10 files changed, 266 insertions(+), 27 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index 94ae7e158..42feffb7c 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -41,8 +41,11 @@ Configuration To configure this module, you need to: -#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. +#. Go General settings/Discuss/Show Followers on mails/Show Internal Users CC and set if want to show or not internal users in cc details. #. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. +#. Go General settings/Discuss/Show Followers on mails/Text 'Sent to' and set the initial part of the message. +#. Go General settings/Discuss/Show Followers on mails/Partner format and choose desired fields to show on CC recipients. +#. Go General settings/Discuss/Show Followers on mails/Text 'Replies' and choose desired warn message Usage ===== @@ -68,12 +71,14 @@ Authors ~~~~~~~ * Sygel +* Moduon Contributors ~~~~~~~~~~~~ * Valentin Vinagre * Lorenzo Battistini +* Eduardo de Miguel Maintainers ~~~~~~~~~~~ diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index b816bd06a..cfac1962c 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -1,13 +1,14 @@ # Copyright 2020 Valentin Vinagre +# Copyright 2022 Eduardo de Miguel # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "15.0.1.0.0", + "version": "15.0.1.1.0", "category": "Mail", "website": "https://github.com/OCA/social", - "author": "Sygel, Odoo Community Association (OCA)", + "author": "Sygel, Moduon, Odoo Community Association (OCA)", "license": "AGPL-3", "application": False, "installable": True, diff --git a/mail_show_follower/i18n/mail_show_follower.pot b/mail_show_follower/i18n/mail_show_follower.pot index c1ed19c90..f861e8191 100644 --- a/mail_show_follower/i18n/mail_show_follower.pot +++ b/mail_show_follower/i18n/mail_show_follower.pot @@ -15,7 +15,7 @@ msgstr "" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form -msgid "Add internal users in cc mails details" +msgid "%(partner_name)s <%(partner_email)s>" msgstr "" #. module: mail_show_follower @@ -28,22 +28,75 @@ msgstr "" msgid "Config Settings" msgstr "" +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview +msgid "Message preview" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Notice: Replies to this email will be sent to all recipients." +msgstr "" + #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail msgid "Outgoing Mails" msgstr "" +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "Partner format" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Followers on mails" +msgstr "" + #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc msgid "Show Internal Users CC" msgstr "" +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Internal Users on CC" +msgstr "" + #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc msgid "Show in CC" msgstr "" +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "" +"Supported parameters:\n" +"%(partner_name)s = Partner Name\n" +"%(partner_email)s = Partner Email\n" +"%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning +msgid "Text 'Replies'" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to +msgid "Text 'Sent to'" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "This message has been sent to" +msgstr "" + #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users msgid "Users" diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index 5c9f6ad3f..66e682973 100644 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -1,16 +1,64 @@ -from odoo import models +from markupsafe import Markup + +from odoo import api, models, tools class MailMail(models.Model): _inherit = "mail.mail" - def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): - plain_text = ( - '
CC: %s
' + @api.model + def _build_cc_text(self, partners): + if not partners: + return "" + + def get_ctx_param(ctx_key, default_parm): + if ctx_key in self.env.context: + return self.env.context[ctx_key] + return default_parm + + def remove_p(markup_txt): + if markup_txt.startswith("

") and markup_txt.endswith("

"): + return markup_txt[3:-4] + return markup_txt + + company = self.env.company + partner_format = get_ctx_param( + "partner_format", company.show_followers_partner_format + ) + msg_sent_to = get_ctx_param( + "msg_sent_to", company.show_followers_message_sent_to + ) + msg_warn = get_ctx_param( + "msg_warn", company.show_followers_message_response_warning ) + partner_message = ", ".join( + [ + partner_format + % { + # Supported parameters + "partner_name": p.name, + "partner_email": p.email, + "partner_email_domain": tools.email_domain_extract(p.email), + } + for p in partners + ] + ) + full_text = """ +
+ {msg_sent_to} {partner_message} + {rc}{msg_warn} +
+ """.format( + msg_sent_to=remove_p(msg_sent_to), + partner_message=Markup.escape(partner_message), + rc=msg_warn.striptags() and "
" or "", + msg_warn=msg_warn.striptags() and remove_p(msg_warn) or "", + ) + return full_text + + def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): group_portal = self.env.ref("base.group_portal") for mail_id in self.ids: mail = self.browse(mail_id) @@ -73,13 +121,21 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): or x.user_ids # otherwise, email is not sent and "email" in x.user_ids.mapped("notification_type") ) - # get names and emails - final_cc = None - mails = "" - for p in partners: - mails += "%s <%s>, " % (p.name, p.email) - # join texts - final_cc = plain_text % (mails[:-2]) + # set proper lang for recipients + langs = list( + filter( + bool, + mail.mapped("recipient_ids.lang") + + [ + mail.author_id.lang, + self.env.company.partner_id.lang, + ], + ) + ) + # get show follower text + final_cc = mail.with_context( + lang=langs and langs[0] + )._build_cc_text(partners) # it is saved in the body_html field so that it does # not appear in the odoo log mail.body_html = final_cc + mail.body_html diff --git a/mail_show_follower/models/res_company.py b/mail_show_follower/models/res_company.py index fdbc33efe..3e802cc00 100644 --- a/mail_show_follower/models/res_company.py +++ b/mail_show_follower/models/res_company.py @@ -5,5 +5,24 @@ class ResCompany(models.Model): _inherit = "res.company" show_internal_users_cc = fields.Boolean( - string="Show Internal Users CC", default=True + string="Show Internal Users CC", + default=True, + ) + show_followers_message_sent_to = fields.Html( + string="Text 'Sent to'", + translate=True, + default="This message has been sent to", + ) + show_followers_partner_format = fields.Char( + string="Partner format", + default="%(partner_name)s", + help="Supported parameters:\n" + "%(partner_name)s = Partner Name\n" + "%(partner_email)s = Partner Email\n" + "%(partner_email_domain)s = Partner Email Domain", + ) + show_followers_message_response_warning = fields.Html( + string="Text 'Replies'", + translate=True, + default="Notice: Replies to this email will be sent to all recipients", ) diff --git a/mail_show_follower/models/res_config_settings.py b/mail_show_follower/models/res_config_settings.py index 5b46dde55..43c92ed5a 100644 --- a/mail_show_follower/models/res_config_settings.py +++ b/mail_show_follower/models/res_config_settings.py @@ -1,11 +1,51 @@ -from odoo import fields, models +from odoo import api, fields, models class ResConfigSettings(models.TransientModel): _inherit = "res.config.settings" show_internal_users_cc = fields.Boolean( - string="Show Internal Users CC", related="company_id.show_internal_users_cc", readonly=False, ) + show_followers_message_sent_to = fields.Html( + related="company_id.show_followers_message_sent_to", + readonly=False, + ) + show_followers_partner_format = fields.Char( + related="company_id.show_followers_partner_format", + readonly=False, + help="Supported parameters:\n" + "%(partner_name)s = Partner Name\n" + "%(partner_email)s = Partner Email\n" + "%(partner_email_domain)s = Partner Email Domain", + ) + show_followers_message_response_warning = fields.Html( + related="company_id.show_followers_message_response_warning", + readonly=False, + ) + show_followers_message_preview = fields.Html( + string="Message preview", + readonly=True, + store=False, + ) + + @api.onchange( + "show_followers_message_sent_to", + "show_followers_partner_format", + "show_followers_message_response_warning", + ) + def onchange_show_followers_message_preview(self): + self.show_followers_message_preview = ( + self.env["mail.mail"] + .with_context( + # Use current data before + partner_format=self.show_followers_partner_format or "", + msg_sent_to=self.show_followers_message_sent_to or "", + msg_warn=self.show_followers_message_response_warning or "", + ) + ._build_cc_text( + # Sample partners + self.env["res.partner"].search([("email", "!=", False)], limit=3), + ) + ) diff --git a/mail_show_follower/readme/CONFIGURE.rst b/mail_show_follower/readme/CONFIGURE.rst index 02a169a51..dade09de7 100644 --- a/mail_show_follower/readme/CONFIGURE.rst +++ b/mail_show_follower/readme/CONFIGURE.rst @@ -1,4 +1,7 @@ To configure this module, you need to: -#. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details. +#. Go General settings/Discuss/Show Followers on mails/Show Internal Users CC and set if want to show or not internal users in cc details. #. Go Settings/Users & Company salect any user in 'Preferences' check or not the 'Show in CC' field if this user need to appear in the cc note. +#. Go General settings/Discuss/Show Followers on mails/Text 'Sent to' and set the initial part of the message. +#. Go General settings/Discuss/Show Followers on mails/Partner format and choose desired fields to show on CC recipients. +#. Go General settings/Discuss/Show Followers on mails/Text 'Replies' and choose desired warn message diff --git a/mail_show_follower/readme/CONTRIBUTORS.rst b/mail_show_follower/readme/CONTRIBUTORS.rst index 40630f391..5aa167943 100644 --- a/mail_show_follower/readme/CONTRIBUTORS.rst +++ b/mail_show_follower/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Valentin Vinagre * Lorenzo Battistini +* Eduardo de Miguel diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index be3024158..a6322bead 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -392,8 +392,11 @@

Mail Show Follower

Configuration

To configure this module, you need to:

    -
  1. Go General settings/Discuss/Show Internal Users CC and set if want to show or not internal users in cc details.
  2. +
  3. Go General settings/Discuss/Show Followers on mails/Show Internal Users CC and set if want to show or not internal users in cc details.
  4. Go Settings/Users & Company salect any user in ‘Preferences’ check or not the ‘Show in CC’ field if this user need to appear in the cc note.
  5. +
  6. Go General settings/Discuss/Show Followers on mails/Text ‘Sent to’ and set the initial part of the message.
  7. +
  8. Go General settings/Discuss/Show Followers on mails/Partner format and choose desired fields to show on CC recipients.
  9. +
  10. Go General settings/Discuss/Show Followers on mails/Text ‘Replies’ and choose desired warn message
@@ -417,6 +420,7 @@

Credits

Authors

  • Sygel
  • +
  • Moduon
@@ -424,6 +428,7 @@

Contributors

diff --git a/mail_show_follower/views/res_config_settings.xml b/mail_show_follower/views/res_config_settings.xml index 724890370..922bd77f8 100644 --- a/mail_show_follower/views/res_config_settings.xml +++ b/mail_show_follower/views/res_config_settings.xml @@ -10,12 +10,68 @@
-
-
From 738273da4b788cc56c9635d0b136012d370a25c1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 28 Mar 2022 10:49:03 +0000 Subject: [PATCH 12/61] mail_show_follower 15.0.1.2.0 --- mail_show_follower/__manifest__.py | 2 +- mail_show_follower/i18n/fr.po | 63 ++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index cfac1962c..a9b834c02 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "15.0.1.1.0", + "version": "15.0.1.2.0", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Moduon, Odoo Community Association (OCA)", diff --git a/mail_show_follower/i18n/fr.po b/mail_show_follower/i18n/fr.po index b70c373d1..d25770af5 100644 --- a/mail_show_follower/i18n/fr.po +++ b/mail_show_follower/i18n/fr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * mail_show_follower +# * mail_show_follower # msgid "" msgstr "" @@ -18,9 +18,8 @@ msgstr "" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form -msgid "Add internal users in cc mails details" +msgid "%(partner_name)s <%(partner_email)s>" msgstr "" -"Ajouter les utilisateurs internes dans l'entête « Copie à (CC) » des e-mails" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company @@ -32,23 +31,81 @@ msgstr "Sociétés" msgid "Config Settings" msgstr "Paramétrage" +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview +msgid "Message preview" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Notice: Replies to this email will be sent to all recipients." +msgstr "" + #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail msgid "Outgoing Mails" msgstr "Courriels à envoyer" +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "Partner format" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Followers on mails" +msgstr "" + #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc msgid "Show Internal Users CC" msgstr "Afficher les utilisateurs internes en « Copie à (CC) »" +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Internal Users on CC" +msgstr "" + #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc msgid "Show in CC" msgstr "Afficher dans « Copie à (CC) »" +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "" +"Supported parameters:\n" +"%(partner_name)s = Partner Name\n" +"%(partner_email)s = Partner Email\n" +"%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning +msgid "Text 'Replies'" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to +msgid "Text 'Sent to'" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "This message has been sent to" +msgstr "" + #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users msgid "Users" msgstr "Utilisateurs" + +#~ msgid "Add internal users in cc mails details" +#~ msgstr "" +#~ "Ajouter les utilisateurs internes dans l'entête « Copie à (CC) » des e-" +#~ "mails" From 14fad3c6d74728eaaad091858c425f1a097a7d9e Mon Sep 17 00:00:00 2001 From: Eduardo De Miguel Date: Thu, 7 Apr 2022 11:35:37 +0200 Subject: [PATCH 13/61] [FIX] Add recipients of the all related messages on the notification When using composer, doesn't include all recipients of the message on the notification. --- mail_show_follower/models/mail_mail.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index 66e682973..b7d49ce0f 100644 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -62,6 +62,11 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): group_portal = self.env.ref("base.group_portal") for mail_id in self.ids: mail = self.browse(mail_id) + message_recipients = self.search( + [ + ("message_id", "=", mail.message_id), + ] + ).mapped("recipient_ids") # if the email has a model, id and it belongs to the portal group if mail.model and mail.res_id and group_portal: obj = self.env[mail.model].browse(mail.res_id) @@ -69,7 +74,10 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): # if they do it must be a portal, we exclude internal # users of the system. if hasattr(obj, "message_follower_ids"): - partners_obj = obj.message_follower_ids.mapped("partner_id") + partners_obj = ( + obj.message_follower_ids.mapped("partner_id") + | message_recipients + ) # internal partners user_partner_ids = ( self.env["res.users"] From 6b616d99b7ebeecb84d6473470b4b6aea725ec62 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 8 Apr 2022 06:16:41 +0000 Subject: [PATCH 14/61] mail_show_follower 15.0.1.2.1 --- mail_show_follower/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index a9b834c02..369ea1101 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "15.0.1.2.0", + "version": "15.0.1.2.1", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Moduon, Odoo Community Association (OCA)", From 972b65eaa87017dae8a18302ee3e5491702c50c8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 2 Dec 2022 10:32:53 +0000 Subject: [PATCH 15/61] [FIX] mail_show_follower: failure when partner has more than 1 user In the highly improbable but actually possible and real world case that a partner has more than one user associated, this change makes the emails able to send. @moduon MT-1634 --- mail_show_follower/models/mail_mail.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index b7d49ce0f..7ef8a641d 100644 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -114,7 +114,10 @@ def _send(self, auto_commit=False, raise_exception=False, smtp_session=None): if cc_internal: partners = partners_obj.filtered( lambda x: x.id not in user_partner_ids - and (not x.user_ids or x.user_ids.show_in_cc) + and ( + not x.user_ids + or any(x.mapped("user_ids.show_in_cc")) + ) ) else: partners = partners_obj.filtered( From 2d707b01247b78a5844f52fe024c012195ce7305 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 2 Dec 2022 10:35:53 +0000 Subject: [PATCH 16/61] [BUILD] mail_show_follower: adopt module --- mail_show_follower/README.rst | 8 ++++++++ mail_show_follower/__manifest__.py | 1 + mail_show_follower/static/description/index.html | 2 ++ 3 files changed, 11 insertions(+) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index 42feffb7c..f85205e62 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -93,6 +93,14 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. +.. |maintainer-yajo| image:: https://github.com/yajo.png?size=40px + :target: https://github.com/yajo + :alt: yajo + +Current `maintainer `__: + +|maintainer-yajo| + This module is part of the `OCA/social `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index 369ea1101..b0ade5824 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -13,6 +13,7 @@ "application": False, "installable": True, "depends": ["base", "mail"], + "maintainers": ["yajo"], "data": [ "views/res_config_settings.xml", "views/res_users.xml", diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index a6322bead..78effbbb8 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -438,6 +438,8 @@

Maintainers

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

+

Current maintainer:

+

yajo

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

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

From 4314de88adb8fa32333724f9ea8e3a35fd9c42a8 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 2 Dec 2022 10:43:58 +0000 Subject: [PATCH 17/61] mail_show_follower 15.0.1.2.2 --- mail_show_follower/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index b0ade5824..54b27ebe3 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "15.0.1.2.1", + "version": "15.0.1.2.2", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Moduon, Odoo Community Association (OCA)", From 71e69ba85336f1a0cfd8f4d1171fc6bb5191661e Mon Sep 17 00:00:00 2001 From: bosd Date: Thu, 20 Apr 2023 12:42:12 +0200 Subject: [PATCH 18/61] [MIG] mail_show_follower: Migration to 16.0 --- mail_show_follower/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index 54b27ebe3..3a4610cd0 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "15.0.1.2.2", + "version": "16.0.1.0.0", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Moduon, Odoo Community Association (OCA)", From 3d040aed25f316c0a3084f242063531f038ba09c Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 22 Sep 2023 08:52:29 +0000 Subject: [PATCH 19/61] [UPD] Update mail_show_follower.pot --- mail_show_follower/i18n/mail_show_follower.pot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mail_show_follower/i18n/mail_show_follower.pot b/mail_show_follower/i18n/mail_show_follower.pot index f861e8191..898988de9 100644 --- a/mail_show_follower/i18n/mail_show_follower.pot +++ b/mail_show_follower/i18n/mail_show_follower.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -99,5 +99,5 @@ msgstr "" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users -msgid "Users" +msgid "User" msgstr "" From 78ae3908c341c1a97609c1932a33c1b9427b9dd6 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 22 Sep 2023 08:55:50 +0000 Subject: [PATCH 20/61] [BOT] post-merge updates --- mail_show_follower/README.rst | 23 +++++---- mail_show_follower/__manifest__.py | 2 +- .../static/description/index.html | 48 ++++++++++--------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index f85205e62..120a884e2 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -2,10 +2,13 @@ Mail Show Follower ================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:cf424ab11d0eb832f425871afdd82ea29db9f8be584f87af4ec5ea926a1296c7 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -14,16 +17,16 @@ Mail Show Follower :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/15.0/mail_show_follower + :target: https://github.com/OCA/social/tree/16.0/mail_show_follower :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-15-0/social-15-0-mail_show_follower + :target: https://translation.odoo-community.org/projects/social-16-0/social-16-0-mail_show_follower :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/205/15.0 - :alt: Try me on Runbot +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/social&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module extends the functionality of mailing to show the document followers in head of the mails. In the cc, only appear when: @@ -59,8 +62,8 @@ 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 `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -101,6 +104,6 @@ Current `maintainer `__: |maintainer-yajo| -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_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index 3a4610cd0..a2de1bfa1 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "16.0.1.0.0", + "version": "16.0.1.0.1", "category": "Mail", "website": "https://github.com/OCA/social", "author": "Sygel, Moduon, Odoo Community Association (OCA)", diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index 78effbbb8..f87bf00d8 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -1,20 +1,20 @@ - + - + Mail Show Follower -
-

Mail Show Follower

+
+ + +Odoo Community Association + +
+

Mail Show Follower

-

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

+

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

This module extends the functionality of mailing to show the document followers in head of the mails. In the cc, only appear when:

    @@ -392,7 +397,7 @@

    Mail Show Follower

-

Configuration

+

Configuration

To configure this module, you need to:

  1. Go General settings/Mail/Show Followers on mails/Show Internal Users @@ -411,14 +416,14 @@

    Configuration

-

Usage

+

Usage

To use this module, you need to:

  1. Send an email from any document of odoo.
-

Bug Tracker

+

Bug Tracker

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

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Sygel
  • Moduon
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -459,5 +464,6 @@

Maintainers

+
From f213249d2e6a467c16544f7d1154994c40d6ba6a Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 22 Jul 2025 06:58:13 +0000 Subject: [PATCH 50/61] Translated using Weblate (Italian) Currently translated at 100.0% (25 of 25 strings) Translation: mail-18.0/mail-18.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower/it/ --- mail_show_follower/i18n/it.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mail_show_follower/i18n/it.po b/mail_show_follower/i18n/it.po index 7a1227aa3..9e1a9ecd0 100644 --- a/mail_show_follower/i18n/it.po +++ b/mail_show_follower/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-11-21 11:06+0000\n" +"PO-Revision-Date: 2025-07-22 09:26+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,17 +14,17 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" +"X-Generator: Weblate 5.10.4\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email)s = Partner Email" -msgstr "" +msgstr "%(partner_email)s = e-mail partner" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email_domain)s = Partner Email Domain" -msgstr "" +msgstr "%(partner_email_domain)s = dominio e-mail partner" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -34,12 +34,12 @@ msgstr "%(partner_name)s <%(partner_email)s>" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_name)s = Partner Name" -msgstr "" +msgstr "%(partner_name)s = nome partner" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Supported parameters:" -msgstr "" +msgstr "Parametri supportati:" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company From 630921d632a9249643357d5a35c69b3f4d8ec8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Ba=C3=B1=C3=B3n?= Date: Fri, 26 Sep 2025 10:57:07 +0200 Subject: [PATCH 51/61] [IMP]mail_show_follower: Allow using records in mail.mail._build_cc_text TT58129 --- mail_show_follower/models/mail_mail.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index bc071f20a..e8eb0131b 100644 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -1,12 +1,11 @@ from markupsafe import Markup -from odoo import api, models, tools +from odoo import models, tools class MailMail(models.Model): _inherit = "mail.mail" - @api.model def _build_cc_text(self, partners): if not partners: return "" From a4bf4ac34871ccade9e5d644cffe7f75eb0929de Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 26 Sep 2025 10:14:02 +0000 Subject: [PATCH 52/61] [BOT] post-merge updates --- mail_show_follower/README.rst | 2 +- mail_show_follower/__manifest__.py | 2 +- mail_show_follower/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index 327b86f6e..5fc6c511c 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -11,7 +11,7 @@ Mail Show Follower !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8bb31ffde7f5665191b38fb6e4626954979a2603fa7afbf1103cc380cb825225 + !! source digest: sha256:f1a26eb503348584b5a3a33d31345038fbeb63747951e6974d6ff6081bc45675 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index c3f226637..d74e44db7 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Mail", "website": "https://github.com/OCA/mail", "author": "Sygel, Moduon, Odoo Community Association (OCA)", diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index a55d0a200..e916a73b9 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -372,7 +372,7 @@

Mail Show Follower

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:8bb31ffde7f5665191b38fb6e4626954979a2603fa7afbf1103cc380cb825225 +!! source digest: sha256:f1a26eb503348584b5a3a33d31345038fbeb63747951e6974d6ff6081bc45675 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends the functionality of mailing to show the document From 2bc7c7b171c2fc05fad0d6bfe703adf7a80bff66 Mon Sep 17 00:00:00 2001 From: Julien Guenat Date: Tue, 21 Oct 2025 11:15:40 +0000 Subject: [PATCH 53/61] Translated using Weblate (French) Currently translated at 28.0% (7 of 25 strings) Translation: mail-18.0/mail-18.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower/fr/ --- mail_show_follower/i18n/fr.po | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mail_show_follower/i18n/fr.po b/mail_show_follower/i18n/fr.po index cc9542df8..828c61f65 100644 --- a/mail_show_follower/i18n/fr.po +++ b/mail_show_follower/i18n/fr.po @@ -6,15 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-01-19 15:32+0000\n" -"Last-Translator: Yann Papouin \n" +"PO-Revision-Date: 2025-10-21 13:11+0000\n" +"Last-Translator: Julien Guenat \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 5.10.4\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -70,6 +70,8 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Notice: Replies to this email will be sent to all recipients." msgstr "" +"Remarque : les réponses à cet e-mail seront envoyées à tous les " +"destinataires." #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail @@ -138,7 +140,7 @@ msgstr "" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "This message has been sent to" -msgstr "" +msgstr "Ce message a été envoyé à" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users From 47c13ba62eb3b0c76b1ed479012a791a29ccac0b Mon Sep 17 00:00:00 2001 From: Ricard Date: Thu, 11 Dec 2025 09:12:35 +0000 Subject: [PATCH 54/61] Added translation using Weblate (Catalan) --- mail_show_follower/i18n/ca.po | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 mail_show_follower/i18n/ca.po diff --git a/mail_show_follower/i18n/ca.po b/mail_show_follower/i18n/ca.po new file mode 100644 index 000000000..7dd4e18f6 --- /dev/null +++ b/mail_show_follower/i18n/ca.po @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_show_follower +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_email)s = Partner Email" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_name)s <%(partner_email)s>" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_name)s = Partner Name" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Supported parameters:" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_company +msgid "Companies" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_partner +msgid "Contact" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview +msgid "Message preview" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Models to exclude" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Notice: Replies to this email will be sent to all recipients." +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "Partner format" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude +msgid "Show Followers Models To Exclude" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Followers on mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc +msgid "Show Internal Users CC" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Internal Users on CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc +msgid "Show in CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "" +"Supported parameters:\n" +"%(partner_name)s = Partner Name\n" +"%(partner_email)s = Partner Email\n" +"%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude +msgid "Tecnichal model names separated by coma" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning +msgid "Text 'Replies'" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to +msgid "Text 'Sent to'" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "This message has been sent to" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_users +msgid "User" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "blog.blog,blog.post" +msgstr "" From 1e77a10af5a330948d571b2e64c1ff1bad24dab9 Mon Sep 17 00:00:00 2001 From: Ricard Date: Thu, 11 Dec 2025 09:14:38 +0000 Subject: [PATCH 55/61] Translated using Weblate (Catalan) Currently translated at 100.0% (25 of 25 strings) Translation: mail-18.0/mail-18.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower/ca/ --- mail_show_follower/i18n/ca.po | 56 ++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/mail_show_follower/i18n/ca.po b/mail_show_follower/i18n/ca.po index 7dd4e18f6..30bb38226 100644 --- a/mail_show_follower/i18n/ca.po +++ b/mail_show_follower/i18n/ca.po @@ -6,105 +6,109 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-12-11 09:15+0000\n" +"Last-Translator: Ricard \n" "Language-Team: none\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email)s = Partner Email" -msgstr "" +msgstr "%(partner_email)s = Correu electrònic de l'empresa" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email_domain)s = Partner Email Domain" -msgstr "" +msgstr "%(partner_email_domain)s = Domini de correu electrònic de l'empresa" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_name)s <%(partner_email)s>" -msgstr "" +msgstr "%(partner_name)s <%(partner_email)s>" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_name)s = Partner Name" -msgstr "" +msgstr "%(partner_name)s = Nom de l'empresa" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Supported parameters:" -msgstr "" +msgstr "Paràmetres admesos:" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company msgid "Companies" -msgstr "" +msgstr "Companyies" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Ajustos de configuració" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_partner msgid "Contact" -msgstr "" +msgstr "Contacte" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview msgid "Message preview" -msgstr "" +msgstr "Vista prèvia del missatge" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Models to exclude" -msgstr "" +msgstr "Models a excloure" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Notice: Replies to this email will be sent to all recipients." msgstr "" +"Avís: Les respostes a aquest correu electrònic s'enviaran a tots els " +"destinataris." #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail msgid "Outgoing Mails" -msgstr "" +msgstr "Correus sortints" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format msgid "Partner format" -msgstr "" +msgstr "Format de l'empresa" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Show Followers Models To Exclude" -msgstr "" +msgstr "Mostrar Models de Seguidors a Excloure" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Show Followers on mails" -msgstr "" +msgstr "Mostrar seguidors als correus" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc msgid "Show Internal Users CC" -msgstr "" +msgstr "Mostrar Usuaris Interns CC" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Show Internal Users on CC" -msgstr "" +msgstr "Mostrar Usuaris Interns a CC" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc msgid "Show in CC" -msgstr "" +msgstr "Mostrar a CC" #. module: mail_show_follower #: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format @@ -115,35 +119,39 @@ msgid "" "%(partner_email)s = Partner Email\n" "%(partner_email_domain)s = Partner Email Domain" msgstr "" +"Paràmetres admesos:\n" +"%(partner_name)s = Nom de l'empresa\n" +"%(partner_email)s = Correu electrònic de l'empresa\n" +"%(partner_email_domain)s = Domini de correu electrònic de l'empresa" #. module: mail_show_follower #: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Tecnichal model names separated by coma" -msgstr "" +msgstr "Noms tècnics de model separats per comes" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning msgid "Text 'Replies'" -msgstr "" +msgstr "Text 'Respostes'" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to msgid "Text 'Sent to'" -msgstr "" +msgstr "Text 'Enviat a'" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "This message has been sent to" -msgstr "" +msgstr "Aquest missatge ha estat enviat a" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users msgid "User" -msgstr "" +msgstr "Usuari" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "blog.blog,blog.post" -msgstr "" +msgstr "blog.blog,blog.post" From 1f54ffe839bec1d2231ce574925f19944a54714d Mon Sep 17 00:00:00 2001 From: Kevin Khao Date: Thu, 8 Jan 2026 22:29:27 +0700 Subject: [PATCH 56/61] [18.0][FIX] mail_show_follower: handle case where record no longer exists --- mail_show_follower/models/mail_mail.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mail_show_follower/models/mail_mail.py b/mail_show_follower/models/mail_mail.py index e8eb0131b..7d7aab054 100644 --- a/mail_show_follower/models/mail_mail.py +++ b/mail_show_follower/models/mail_mail.py @@ -80,6 +80,8 @@ def _send( # recipients from any Notification Type (i.e. email, inbox, etc.) recipients = mail.notification_ids.res_partner_id record = self.env[mail.model].browse(mail.res_id) + if not record.exists(): + continue company = getattr(record, "company_id", False) if not company: company = self.env.company From 7e00dc04205f20c398dc0fc7e6cee2f155adc846 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 9 Jan 2026 12:18:00 +0000 Subject: [PATCH 57/61] [BOT] post-merge updates --- mail_show_follower/README.rst | 2 +- mail_show_follower/__manifest__.py | 2 +- mail_show_follower/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index 5fc6c511c..dd5a2f1c8 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -11,7 +11,7 @@ Mail Show Follower !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:f1a26eb503348584b5a3a33d31345038fbeb63747951e6974d6ff6081bc45675 + !! source digest: sha256:b0a35ebc852bd0d0d6400999f878c904a998f8230d0fcfb1cdf105ce1e7abba3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index d74e44db7..4c687ff3e 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "category": "Mail", "website": "https://github.com/OCA/mail", "author": "Sygel, Moduon, Odoo Community Association (OCA)", diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index e916a73b9..441fe66d4 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -372,7 +372,7 @@

Mail Show Follower

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:f1a26eb503348584b5a3a33d31345038fbeb63747951e6974d6ff6081bc45675 +!! source digest: sha256:b0a35ebc852bd0d0d6400999f878c904a998f8230d0fcfb1cdf105ce1e7abba3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends the functionality of mailing to show the document From 6978b5b500681e006bd1e79c0b9508787a8bb2f9 Mon Sep 17 00:00:00 2001 From: MJD Date: Thu, 9 Apr 2026 18:45:42 +0000 Subject: [PATCH 58/61] Added translation using Weblate (German) --- mail_show_follower/i18n/de.po | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 mail_show_follower/i18n/de.po diff --git a/mail_show_follower/i18n/de.po b/mail_show_follower/i18n/de.po new file mode 100644 index 000000000..e335e8ac2 --- /dev/null +++ b/mail_show_follower/i18n/de.po @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_show_follower +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\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" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_email)s = Partner Email" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_name)s <%(partner_email)s>" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "%(partner_name)s = Partner Name" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Supported parameters:" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_company +msgid "Companies" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_partner +msgid "Contact" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview +msgid "Message preview" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Models to exclude" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Notice: Replies to this email will be sent to all recipients." +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "Partner format" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude +msgid "Show Followers Models To Exclude" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Followers on mails" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc +msgid "Show Internal Users CC" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "Show Internal Users on CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc +msgid "Show in CC" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_partner_format +msgid "" +"Supported parameters:\n" +"%(partner_name)s = Partner Name\n" +"%(partner_email)s = Partner Email\n" +"%(partner_email_domain)s = Partner Email Domain" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude +msgid "Tecnichal model names separated by coma" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning +msgid "Text 'Replies'" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to +#: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to +msgid "Text 'Sent to'" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "This message has been sent to" +msgstr "" + +#. module: mail_show_follower +#: model:ir.model,name:mail_show_follower.model_res_users +msgid "User" +msgstr "" + +#. module: mail_show_follower +#: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form +msgid "blog.blog,blog.post" +msgstr "" From 25a11d6771e7fcbeb57a46a77633e4ef4fd58c86 Mon Sep 17 00:00:00 2001 From: MJD Date: Thu, 9 Apr 2026 18:56:58 +0000 Subject: [PATCH 59/61] Translated using Weblate (German) Currently translated at 92.0% (23 of 25 strings) Translation: mail-18.0/mail-18.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower/de/ --- mail_show_follower/i18n/de.po | 52 +++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/mail_show_follower/i18n/de.po b/mail_show_follower/i18n/de.po index e335e8ac2..aa0fa1a35 100644 --- a/mail_show_follower/i18n/de.po +++ b/mail_show_follower/i18n/de.po @@ -6,23 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-04-09 21:45+0000\n" +"Last-Translator: MJD \n" "Language-Team: none\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" +"X-Generator: Weblate 5.15.2\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email)s = Partner Email" -msgstr "" +msgstr "(partner_email)s = Partner-E-Mail" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email_domain)s = Partner Email Domain" -msgstr "" +msgstr "%(partner_email_domain)s = Domain der Partner-E-Mail" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -32,79 +34,79 @@ msgstr "" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_name)s = Partner Name" -msgstr "" +msgstr "%(partner_name)s = Partnername" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Supported parameters:" -msgstr "" +msgstr "Unterstützte Parameter:" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company msgid "Companies" -msgstr "" +msgstr "Unternehmen" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_config_settings msgid "Config Settings" -msgstr "" +msgstr "Konfigurationseinstellungen" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_partner msgid "Contact" -msgstr "" +msgstr "Kontakt" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview msgid "Message preview" -msgstr "" +msgstr "Nachrichtenvorschau" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Models to exclude" -msgstr "" +msgstr "Auszuschließende Modelle" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Notice: Replies to this email will be sent to all recipients." -msgstr "" +msgstr "Hinweis: Antworten auf diese E-Mail werden an alle Empfänger gesendet." #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_mail_mail msgid "Outgoing Mails" -msgstr "" +msgstr "Ausgehende E-Mails" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_partner_format #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_partner_format msgid "Partner format" -msgstr "" +msgstr "Partnerformat" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Show Followers Models To Exclude" -msgstr "" +msgstr "Zeige auszuschließende Follower-Modelle" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Show Followers on mails" -msgstr "" +msgstr "Zeige Follower in E-Mails" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_internal_users_cc #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_internal_users_cc msgid "Show Internal Users CC" -msgstr "" +msgstr "Zeige interne Benutzer in CC" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Show Internal Users on CC" -msgstr "" +msgstr "Zeige interne Benutzer in CC" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_users__show_in_cc msgid "Show in CC" -msgstr "" +msgstr "Zeige in CC" #. module: mail_show_follower #: model:ir.model.fields,help:mail_show_follower.field_res_company__show_followers_partner_format @@ -115,33 +117,37 @@ msgid "" "%(partner_email)s = Partner Email\n" "%(partner_email_domain)s = Partner Email Domain" msgstr "" +"Unterstützte Parameter:\n" +"%(partner_name)s = Partnername\n" +"%(partner_email)s = E-Mail-Adresse des Partners\n" +"%(partner_email_domain)s = E-Mail-Domain des Partners" #. module: mail_show_follower #: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Tecnichal model names separated by coma" -msgstr "" +msgstr "Technische Modellbezeichnungen, durch Kommas getrennt" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_response_warning msgid "Text 'Replies'" -msgstr "" +msgstr "Text 'Antworten'" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_sent_to #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_sent_to msgid "Text 'Sent to'" -msgstr "" +msgstr "Text 'Gesendet an'" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "This message has been sent to" -msgstr "" +msgstr "Diese Nachricht wurde geschickt an" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_users msgid "User" -msgstr "" +msgstr "Nutzer" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form From bd979fbca56e1d373a20280bf8d234c9ebdf3663 Mon Sep 17 00:00:00 2001 From: Ed-Spain Date: Thu, 7 May 2026 18:16:49 +0000 Subject: [PATCH 60/61] Translated using Weblate (Spanish) Currently translated at 100.0% (25 of 25 strings) Translation: mail-18.0/mail-18.0-mail_show_follower Translate-URL: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower/es/ --- mail_show_follower/i18n/es.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mail_show_follower/i18n/es.po b/mail_show_follower/i18n/es.po index 5ea0456ec..b26f6de2a 100644 --- a/mail_show_follower/i18n/es.po +++ b/mail_show_follower/i18n/es.po @@ -6,25 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-11-08 13:36+0000\n" -"Last-Translator: Ivorra78 \n" +"PO-Revision-Date: 2026-05-07 18:19+0000\n" +"Last-Translator: Ed-Spain \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.15.2\n" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email)s = Partner Email" -msgstr "" +msgstr "%(partner_email)s = Correo electrónico del contacto" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_email_domain)s = Partner Email Domain" -msgstr "" +msgstr "%(partner_email_domain)s = Dominio del correo electrónico del contacto" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -34,12 +34,12 @@ msgstr "%(partner_name)s <%(partner_email)s>" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "%(partner_name)s = Partner Name" -msgstr "" +msgstr "%(partner_name)s = Nombre del contacto" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Supported parameters:" -msgstr "" +msgstr "Parámetros soportados:" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_company @@ -54,7 +54,7 @@ msgstr "Ajustes Configuración" #. module: mail_show_follower #: model:ir.model,name:mail_show_follower.model_res_partner msgid "Contact" -msgstr "" +msgstr "Contacto" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_message_preview @@ -64,7 +64,7 @@ msgstr "Vista previa del mensaje" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "Models to exclude" -msgstr "" +msgstr "Modelos a excluir" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -87,7 +87,7 @@ msgstr "Formato socio" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Show Followers Models To Exclude" -msgstr "" +msgstr "Mostrar modelos de seguidores a excluir" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form @@ -127,7 +127,7 @@ msgstr "" #. module: mail_show_follower #: model:ir.model.fields,help:mail_show_follower.field_res_config_settings__show_followers_models_to_exclude msgid "Tecnichal model names separated by coma" -msgstr "" +msgstr "Nombres técnicos de modelos separados por coma" #. module: mail_show_follower #: model:ir.model.fields,field_description:mail_show_follower.field_res_company__show_followers_message_response_warning @@ -154,4 +154,4 @@ msgstr "Usuario" #. module: mail_show_follower #: model_terms:ir.ui.view,arch_db:mail_show_follower.res_config_settings_view_form msgid "blog.blog,blog.post" -msgstr "" +msgstr "blog.blog,blog.post" From e487bbe83007c1d3e54771c542175b1933a4db96 Mon Sep 17 00:00:00 2001 From: Michel GUIHENEUF Date: Thu, 21 May 2026 10:42:27 +0200 Subject: [PATCH 61/61] [MIG] mail_show_follower: Migration to 19.0 --- mail_show_follower/README.rst | 11 ++++++----- mail_show_follower/__manifest__.py | 2 +- mail_show_follower/models/res_partner.py | 2 +- mail_show_follower/readme/CONTRIBUTORS.md | 1 + mail_show_follower/static/description/index.html | 7 ++++--- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst index dd5a2f1c8..01354645f 100644 --- a/mail_show_follower/README.rst +++ b/mail_show_follower/README.rst @@ -21,13 +21,13 @@ Mail Show Follower :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmail-lightgray.png?logo=github - :target: https://github.com/OCA/mail/tree/18.0/mail_show_follower + :target: https://github.com/OCA/mail/tree/19.0/mail_show_follower :alt: OCA/mail .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/mail-18-0/mail-18-0-mail_show_follower + :target: https://translation.odoo-community.org/projects/mail-19-0/mail-19-0-mail_show_follower :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/mail&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -76,7 +76,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -96,6 +96,7 @@ Contributors - Lorenzo Battistini - Eduardo de Miguel - Vincent Van Rossem +- Michel Guiheneuf Maintainers ----------- @@ -118,6 +119,6 @@ Current `maintainer `__: |maintainer-yajo| -This module is part of the `OCA/mail `_ project on GitHub. +This module is part of the `OCA/mail `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_show_follower/__manifest__.py b/mail_show_follower/__manifest__.py index 4c687ff3e..731f05e61 100644 --- a/mail_show_follower/__manifest__.py +++ b/mail_show_follower/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Mail Show Follower", "summary": "Show CC document followers in mails.", - "version": "18.0.1.0.2", + "version": "19.0.1.0.0", "category": "Mail", "website": "https://github.com/OCA/mail", "author": "Sygel, Moduon, Odoo Community Association (OCA)", diff --git a/mail_show_follower/models/res_partner.py b/mail_show_follower/models/res_partner.py index 0a7b5fbea..e9f80d43e 100644 --- a/mail_show_follower/models/res_partner.py +++ b/mail_show_follower/models/res_partner.py @@ -19,7 +19,7 @@ def _filter_shown_in_cc(self, show_internal_users): internal_users = result.filtered_domain( [ ("user_ids.active", "=", True), - ("user_ids.groups_id", "in", self.env.ref("base.group_user").ids), + ("user_ids.group_ids", "in", self.env.ref("base.group_user").ids), ] ) result -= internal_users diff --git a/mail_show_follower/readme/CONTRIBUTORS.md b/mail_show_follower/readme/CONTRIBUTORS.md index d4ca1f5db..07e530b88 100644 --- a/mail_show_follower/readme/CONTRIBUTORS.md +++ b/mail_show_follower/readme/CONTRIBUTORS.md @@ -2,3 +2,4 @@ - Lorenzo Battistini - Eduardo de Miguel \<\> - Vincent Van Rossem \<\> +- Michel Guiheneuf \<\> diff --git a/mail_show_follower/static/description/index.html b/mail_show_follower/static/description/index.html index 441fe66d4..1819213a0 100644 --- a/mail_show_follower/static/description/index.html +++ b/mail_show_follower/static/description/index.html @@ -374,7 +374,7 @@

Mail Show Follower

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:b0a35ebc852bd0d0d6400999f878c904a998f8230d0fcfb1cdf105ce1e7abba3 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module extends the functionality of mailing to show the document followers in head of the mails. In the cc, only appear when:

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

    Bug Tracker

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

    +feedback.

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

@@ -446,6 +446,7 @@

Contributors

  • Lorenzo Battistini
  • Eduardo de Miguel <edu@moduon.team>
  • Vincent Van Rossem <vincent.vanrossem@camptocamp.com>
  • +
  • Michel Guiheneuf <mgu@apik.cloud>
  • @@ -459,7 +460,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    yajo

    -

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

    +

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

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