diff --git a/mail_show_follower/README.rst b/mail_show_follower/README.rst new file mode 100755 index 0000000..30105bf --- /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 0000000..d075e8e --- /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 0000000..b1e3dc5 --- /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 0000000..b1d9b29 --- /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 0000000..c26ff40 --- /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 0000000..9192b92 --- /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 0000000..b084b35 --- /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 0000000..afbcce0 --- /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 0000000..207fb7a Binary files /dev/null and b/mail_show_follower/static/description/icon.png differ diff --git a/mail_show_follower/views/res_config_settings.xml b/mail_show_follower/views/res_config_settings.xml new file mode 100644 index 0000000..84dc70f --- /dev/null +++ b/mail_show_follower/views/res_config_settings.xml @@ -0,0 +1,23 @@ + + + + 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 0000000..1a60403 --- /dev/null +++ b/mail_show_follower/views/res_users.xml @@ -0,0 +1,13 @@ + + + + view.users.form.mail.show.follower + res.users + + + + + + + +