From eb9c4dec983ebca6e5a5cbe115c8a2abb40513fb Mon Sep 17 00:00:00 2001 From: Pablo Paez Date: Mon, 10 Jan 2022 14:52:32 -0300 Subject: [PATCH 001/228] [ADD] mail_partner_forwarding: New module --- mail_partner_forwarding/README.rst | 75 +++++++++++++++++++ mail_partner_forwarding/__init__.py | 1 + mail_partner_forwarding/__manifest__.py | 17 +++++ mail_partner_forwarding/models/__init__.py | 3 + mail_partner_forwarding/models/mail_thread.py | 43 +++++++++++ mail_partner_forwarding/models/res_partner.py | 12 +++ mail_partner_forwarding/models/res_user.py | 16 ++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + mail_partner_forwarding/readme/HISTORY.rst | 4 + mail_partner_forwarding/readme/USAGE.rst | 5 ++ mail_partner_forwarding/tests/__init__.py | 1 + .../tests/models/__init__.py | 1 + .../tests/models/fake_order.py | 13 ++++ .../tests/test_mail_forwarding.py | 46 ++++++++++++ .../views/res_partner_views.xml | 16 ++++ .../views/res_user_views.xml | 28 +++++++ 17 files changed, 283 insertions(+) create mode 100644 mail_partner_forwarding/README.rst create mode 100644 mail_partner_forwarding/__init__.py create mode 100644 mail_partner_forwarding/__manifest__.py create mode 100644 mail_partner_forwarding/models/__init__.py create mode 100644 mail_partner_forwarding/models/mail_thread.py create mode 100644 mail_partner_forwarding/models/res_partner.py create mode 100644 mail_partner_forwarding/models/res_user.py create mode 100644 mail_partner_forwarding/readme/CONTRIBUTORS.rst create mode 100644 mail_partner_forwarding/readme/DESCRIPTION.rst create mode 100644 mail_partner_forwarding/readme/HISTORY.rst create mode 100644 mail_partner_forwarding/readme/USAGE.rst create mode 100644 mail_partner_forwarding/tests/__init__.py create mode 100644 mail_partner_forwarding/tests/models/__init__.py create mode 100644 mail_partner_forwarding/tests/models/fake_order.py create mode 100644 mail_partner_forwarding/tests/test_mail_forwarding.py create mode 100644 mail_partner_forwarding/views/res_partner_views.xml create mode 100644 mail_partner_forwarding/views/res_user_views.xml diff --git a/mail_partner_forwarding/README.rst b/mail_partner_forwarding/README.rst new file mode 100644 index 000000000..6e8ebd11c --- /dev/null +++ b/mail_partner_forwarding/README.rst @@ -0,0 +1,75 @@ +======================= +Partner Mail Forwarding +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/13.0/mail_debrand + :alt: OCA/social +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_debrand + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/205/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to select a related partner (called "Forwarding Partner") in each partner in order to send all the notifications + to the Forwarding Partner. + + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* AdHoc SA + +Contributors +~~~~~~~~~~~~ + +* Nicolás Mac Rouillon + +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_partner_forwarding/__init__.py b/mail_partner_forwarding/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/mail_partner_forwarding/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_partner_forwarding/__manifest__.py b/mail_partner_forwarding/__manifest__.py new file mode 100644 index 000000000..4f1a52c03 --- /dev/null +++ b/mail_partner_forwarding/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2022 AdHoc SA - Pablo Paez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Partner Mail Forwarding", + "summary": "Forwarding notifications for partners", + "version": "13.0.1.0.0", + "category": "Social Network", + "website": "https://github.com/OCA/social", + "author": "ADHOC SA, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["mail"], + "data": ["views/res_user_views.xml", "views/res_partner_views.xml"], + "development_status": "Production/Stable", + "maintainers": [], +} diff --git a/mail_partner_forwarding/models/__init__.py b/mail_partner_forwarding/models/__init__.py new file mode 100644 index 000000000..8df12c7a1 --- /dev/null +++ b/mail_partner_forwarding/models/__init__.py @@ -0,0 +1,3 @@ +from . import res_partner +from . import res_user +from . import mail_thread diff --git a/mail_partner_forwarding/models/mail_thread.py b/mail_partner_forwarding/models/mail_thread.py new file mode 100644 index 000000000..e3bd699a0 --- /dev/null +++ b/mail_partner_forwarding/models/mail_thread.py @@ -0,0 +1,43 @@ +from odoo import models + + +class MailThread(models.AbstractModel): + _inherit = "mail.thread" + + def _notify_compute_recipients(self, message, msg_vals): + """ Inherit this method to add in the list of partners to be notify + the forwarding_partner_id of any partners in the list """ + recipient_data = super()._notify_compute_recipients(message, msg_vals) + if not recipient_data.get("partners", False): + return recipient_data + partner_dict = {x.get("id"): x for x in recipient_data.get("partners")} + forwarded_partner_ids = [] + # for each partner being notified we check if it has a + # forwarding_partner_id configured that is not being notified yet + for partner in ( + self.env["res.partner"] + .sudo() + .with_context(prefetch_fields=False) + .browse(partner_dict.keys()) + ): + if ( + partner.forwarding_partner_id + and partner.forwarding_partner_id.id not in partner_dict.keys() + and partner.forwarding_partner_id.id not in forwarded_partner_ids + ): + forwarded_partner_ids.append(partner.forwarding_partner_id.id) + data = partner_dict[partner.id].copy() + notif = ( + partner.forwarding_partner_id.user_ids + and partner.forwarding_partner_id.user_ids[0].notification_type + or "email" + ) + data.update( + { + "id": partner.forwarding_partner_id.id, + "share": partner.partner_share, + "notif": notif, + } + ) + recipient_data["partners"].append(data) + return recipient_data diff --git a/mail_partner_forwarding/models/res_partner.py b/mail_partner_forwarding/models/res_partner.py new file mode 100644 index 000000000..dd8881fd1 --- /dev/null +++ b/mail_partner_forwarding/models/res_partner.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + forwarding_partner_id = fields.Many2one( + "res.partner", + string="Forwarding Partner", + help="Messages will be forwarded only for partners that are followers but no " + "partners being notify because they belong to channel that is following the thread", + ) diff --git a/mail_partner_forwarding/models/res_user.py b/mail_partner_forwarding/models/res_user.py new file mode 100644 index 000000000..8ba5bb7ee --- /dev/null +++ b/mail_partner_forwarding/models/res_user.py @@ -0,0 +1,16 @@ +from odoo import fields, models + + +class ResUsers(models.Model): + _inherit = "res.users" + + forwarding_partner_id = fields.Many2one( + related="partner_id.forwarding_partner_id", readonly=False + ) + + def __init__(self, pool, cr): + super().__init__(pool, cr) + self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) + self.SELF_WRITEABLE_FIELDS.append("forwarding_partner_id") + self.SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) + self.SELF_READABLE_FIELDS.append("forwarding_partner_id") diff --git a/mail_partner_forwarding/readme/CONTRIBUTORS.rst b/mail_partner_forwarding/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..e3895da9d --- /dev/null +++ b/mail_partner_forwarding/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Nicolás Mac Rouillon diff --git a/mail_partner_forwarding/readme/DESCRIPTION.rst b/mail_partner_forwarding/readme/DESCRIPTION.rst new file mode 100644 index 000000000..9938e47b8 --- /dev/null +++ b/mail_partner_forwarding/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to select a related user (called "Forwarding partner") in each partner in order to send all the notifications to the Forwarding partner. diff --git a/mail_partner_forwarding/readme/HISTORY.rst b/mail_partner_forwarding/readme/HISTORY.rst new file mode 100644 index 000000000..edcc2dae4 --- /dev/null +++ b/mail_partner_forwarding/readme/HISTORY.rst @@ -0,0 +1,4 @@ +13.0.1.0.0 (2022-01-03) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [NEW] Module in v13. diff --git a/mail_partner_forwarding/readme/USAGE.rst b/mail_partner_forwarding/readme/USAGE.rst new file mode 100644 index 000000000..031e5a1e4 --- /dev/null +++ b/mail_partner_forwarding/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +* Install it. +* Set a Forwarding partner in your partner. +* Your Forwarding partner also will be notify of your notifications diff --git a/mail_partner_forwarding/tests/__init__.py b/mail_partner_forwarding/tests/__init__.py new file mode 100644 index 000000000..99035941c --- /dev/null +++ b/mail_partner_forwarding/tests/__init__.py @@ -0,0 +1 @@ +from . import test_mail_forwarding diff --git a/mail_partner_forwarding/tests/models/__init__.py b/mail_partner_forwarding/tests/models/__init__.py new file mode 100644 index 000000000..4327a4b6e --- /dev/null +++ b/mail_partner_forwarding/tests/models/__init__.py @@ -0,0 +1 @@ +from . import fake_order diff --git a/mail_partner_forwarding/tests/models/fake_order.py b/mail_partner_forwarding/tests/models/fake_order.py new file mode 100644 index 000000000..b14a40f17 --- /dev/null +++ b/mail_partner_forwarding/tests/models/fake_order.py @@ -0,0 +1,13 @@ +# Copyright 2021 Camptocamp (http://www.camptocamp.com). +# @author Iván Todorovich +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class FakeOrder(models.Model): + _name = "fake.order" + _inherit = "mail.thread" + _description = "Fake sale.order like model" + + partner_id = fields.Many2one("res.partner", required=True) diff --git a/mail_partner_forwarding/tests/test_mail_forwarding.py b/mail_partner_forwarding/tests/test_mail_forwarding.py new file mode 100644 index 000000000..7556acd4f --- /dev/null +++ b/mail_partner_forwarding/tests/test_mail_forwarding.py @@ -0,0 +1,46 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo_test_helper import FakeModelLoader + +from odoo import _ +from odoo.tests.common import SavepointCase, tagged + + +@tagged("post_install", "-at_install") +class TestMailForwarding(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Setup env + cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True)) + # Load fake order model + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + from .models.fake_order import FakeOrder + + cls.loader.update_registry((FakeOrder,)) + cls.fake_order_model = cls.env["ir.model"].search( + [("model", "=", "fake.order")] + ) + # Partner To forward + cls.partner_1 = cls.env.ref("base.user_demo").partner_id + cls.partner_2 = cls.env.ref("base.user_admin").partner_id + + # Configurate in the user setting the user to be forwarding + cls.partner_2.forwarding_partner_id = cls.partner_1 + # Empty fake.order + cls.order = cls.env["fake.order"].create({"partner_id": cls.partner_2.id}) + + @classmethod + def tearDownClass(cls): + cls.loader.restore_registry() + return super().tearDownClass() + + def test_message_post_forwarding(self): + """Test forwarding when send a message for the user""" + self.order.message_post( + body=_("Test"), + message_type="comment", + subtype="mail.mt_comment", + partner_ids=[self.partner_2.id], + ) diff --git a/mail_partner_forwarding/views/res_partner_views.xml b/mail_partner_forwarding/views/res_partner_views.xml new file mode 100644 index 000000000..3fd5bdae4 --- /dev/null +++ b/mail_partner_forwarding/views/res_partner_views.xml @@ -0,0 +1,16 @@ + + + + + res.partner.form.forwarding + res.partner + + + + + + + + + diff --git a/mail_partner_forwarding/views/res_user_views.xml b/mail_partner_forwarding/views/res_user_views.xml new file mode 100644 index 000000000..a131bda85 --- /dev/null +++ b/mail_partner_forwarding/views/res_user_views.xml @@ -0,0 +1,28 @@ + + + + + res.users.form.user.forwarding + res.users + + + + + + + + + res.users.form.user.forwarding.preferences + res.users + + + + + + + + + From c35cc7bbb92e3be0abee5d2696de2512d04685ff Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 30 Dec 2022 15:15:56 +0000 Subject: [PATCH 002/228] [UPD] Update mail_partner_forwarding.pot --- .../i18n/mail_partner_forwarding.pot | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 mail_partner_forwarding/i18n/mail_partner_forwarding.pot diff --git a/mail_partner_forwarding/i18n/mail_partner_forwarding.pot b/mail_partner_forwarding/i18n/mail_partner_forwarding.pot new file mode 100644 index 000000000..fb07c2d2f --- /dev/null +++ b/mail_partner_forwarding/i18n/mail_partner_forwarding.pot @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_partner_forwarding +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_partner_forwarding +#: model:ir.model,name:mail_partner_forwarding.model_res_partner +msgid "Contact" +msgstr "" + +#. module: mail_partner_forwarding +#: model:ir.model,name:mail_partner_forwarding.model_mail_thread +msgid "Email Thread" +msgstr "" + +#. module: mail_partner_forwarding +#: model:ir.model.fields,field_description:mail_partner_forwarding.field_res_partner__forwarding_partner_id +#: model:ir.model.fields,field_description:mail_partner_forwarding.field_res_users__forwarding_partner_id +msgid "Forwarding Partner" +msgstr "" + +#. module: mail_partner_forwarding +#: model:ir.model.fields,help:mail_partner_forwarding.field_res_partner__forwarding_partner_id +#: model:ir.model.fields,help:mail_partner_forwarding.field_res_users__forwarding_partner_id +msgid "" +"Messages will be forwarded only for partners that are followers but no " +"partners being notify because they belong to channel that is following the " +"thread" +msgstr "" + +#. module: mail_partner_forwarding +#: code:addons/mail_partner_forwarding/tests/test_mail_forwarding.py:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: mail_partner_forwarding +#: model:ir.model,name:mail_partner_forwarding.model_res_users +msgid "Users" +msgstr "" From b00e1b27e4d68f9801d602f3ce4f84dee5dd2914 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 30 Dec 2022 15:42:03 +0000 Subject: [PATCH 003/228] [UPD] README.rst --- mail_partner_forwarding/README.rst | 31 +- .../static/description/index.html | 442 ++++++++++++++++++ 2 files changed, 465 insertions(+), 8 deletions(-) create mode 100644 mail_partner_forwarding/static/description/index.html diff --git a/mail_partner_forwarding/README.rst b/mail_partner_forwarding/README.rst index 6e8ebd11c..fdcd6b4ec 100644 --- a/mail_partner_forwarding/README.rst +++ b/mail_partner_forwarding/README.rst @@ -14,10 +14,10 @@ Partner Mail Forwarding :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github - :target: https://github.com/OCA/social/tree/13.0/mail_debrand + :target: https://github.com/OCA/social/tree/13.0/mail_partner_forwarding :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_debrand + :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_partner_forwarding :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/205/13.0 @@ -25,22 +25,37 @@ Partner Mail Forwarding |badge1| |badge2| |badge3| |badge4| |badge5| -This module allows to select a related partner (called "Forwarding Partner") in each partner in order to send all the notifications - to the Forwarding Partner. - +This module allows to select a related user (called "Forwarding partner") in each partner in order to send all the notifications to the Forwarding partner. **Table of contents** .. contents:: :local: +Usage +===== + +To use this module, you need to: + +* Install it. +* Set a Forwarding partner in your partner. +* Your Forwarding partner also will be notify of your notifications + +Changelog +========= + +13.0.1.0.0 (2022-01-03) +~~~~~~~~~~~~~~~~~~~~~~~ + +* [NEW] Module in v13. + Bug Tracker =========== Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -50,7 +65,7 @@ Credits Authors ~~~~~~~ -* AdHoc SA +* ADHOC SA Contributors ~~~~~~~~~~~~ @@ -70,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +This module is part of the `OCA/social `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_partner_forwarding/static/description/index.html b/mail_partner_forwarding/static/description/index.html new file mode 100644 index 000000000..6cd6d4aa0 --- /dev/null +++ b/mail_partner_forwarding/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Partner Mail Forwarding + + + +
+

Partner Mail Forwarding

+ + +

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

+

This module allows to select a related user (called “Forwarding partner”) in each partner in order to send all the notifications to the Forwarding partner.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  • Install it.
  • +
  • Set a Forwarding partner in your partner.
  • +
  • Your Forwarding partner also will be notify of your notifications
  • +
+
+
+

Changelog

+
+

13.0.1.0.0 (2022-01-03)

+
    +
  • [NEW] Module in v13.
  • +
+
+
+
+

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

+
    +
  • ADHOC SA
  • +
+
+
+

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 0974d365748e8b8de646ba02c3287fc5b7e04733 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 30 Dec 2022 15:42:03 +0000 Subject: [PATCH 004/228] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mail_partner_forwarding/static/description/icon.png diff --git a/mail_partner_forwarding/static/description/icon.png b/mail_partner_forwarding/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 From 2d8e67bf6d5e1ff75519c28adf14aea5019c7e52 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 16:58:35 +0000 Subject: [PATCH 005/228] [UPD] README.rst --- mail_partner_forwarding/README.rst | 15 +++--- .../static/description/index.html | 48 ++++++++++--------- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/mail_partner_forwarding/README.rst b/mail_partner_forwarding/README.rst index fdcd6b4ec..ad992ff73 100644 --- a/mail_partner_forwarding/README.rst +++ b/mail_partner_forwarding/README.rst @@ -2,10 +2,13 @@ Partner Mail Forwarding ======================= -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:ceb1f69084e860b2458a7ae6b68dd0d1aa4e111b91273b4210e1b6e33e270f44 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status @@ -19,11 +22,11 @@ Partner Mail Forwarding .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png :target: https://translation.odoo-community.org/projects/social-13-0/social-13-0-mail_partner_forwarding :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/205/13.0 - :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=13.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| This module allows to select a related user (called "Forwarding partner") in each partner in order to send all the notifications to the Forwarding partner. @@ -54,7 +57,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed +If you spotted it first, help us to smash it by providing a detailed and welcomed `feedback `_. Do not contact contributors directly about support or help with technical issues. diff --git a/mail_partner_forwarding/static/description/index.html b/mail_partner_forwarding/static/description/index.html index 6cd6d4aa0..1eee9c1a4 100644 --- a/mail_partner_forwarding/static/description/index.html +++ b/mail_partner_forwarding/static/description/index.html @@ -1,20 +1,20 @@ - + - + Partner Mail Forwarding + + +
+

Mail Message Reply

+ + +

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

+

This addon allow to reply on messages from odoo directly. +It is useful when replying to a message from a customer.

+

Table of contents

+ +
+

Usage

+

On the messages from threads, a reply button is shown. +Once it has been pressed, a composer with the reply is shown.

+
+
+

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

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/mail_quoted_reply/tests/test_reply.py b/mail_quoted_reply/tests/test_reply.py index d8e8024b4..60c18a7de 100644 --- a/mail_quoted_reply/tests/test_reply.py +++ b/mail_quoted_reply/tests/test_reply.py @@ -1,5 +1,6 @@ # Copyright 2021 Creu Blanca # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from odoo.tests import TransactionCase @@ -9,6 +10,7 @@ def test_reply(self): self.assertFalse( partner.message_ids.filtered(lambda r: r.message_type != "notification") ) + # pylint: disable=C8107 message = partner.message_post(body="demo message", message_type="email") partner.refresh() self.assertIn( From 1025a7db392d7c6a4ebae979b8e0f53d41e684a8 Mon Sep 17 00:00:00 2001 From: "J.Buchholz@cibex.net" Date: Mon, 4 Apr 2022 12:54:11 +0200 Subject: [PATCH 021/228] [MIG] mail_quoted_reply: Migration to 14.0 --- mail_quoted_reply/__manifest__.py | 7 ++- .../src/components/mail_message_reply.js | 20 +++++++ .../static/src/js/mail_message_reply.js | 60 ------------------- .../static/src/models/mail_message_reply.js | 34 +++++++++++ .../src/scss/thread_mail_message_reply.scss | 21 +++++++ .../static/src/xml/mail_message_reply.xml | 24 ++++---- mail_quoted_reply/templates/assets.xml | 11 +++- 7 files changed, 103 insertions(+), 74 deletions(-) create mode 100644 mail_quoted_reply/static/src/components/mail_message_reply.js delete mode 100644 mail_quoted_reply/static/src/js/mail_message_reply.js create mode 100644 mail_quoted_reply/static/src/models/mail_message_reply.js create mode 100644 mail_quoted_reply/static/src/scss/thread_mail_message_reply.scss diff --git a/mail_quoted_reply/__manifest__.py b/mail_quoted_reply/__manifest__.py index 106b44431..b001a9ab1 100644 --- a/mail_quoted_reply/__manifest__.py +++ b/mail_quoted_reply/__manifest__.py @@ -5,11 +5,14 @@ "name": "Mail Message Reply", "summary": """ Make a reply using a message""", - "version": "13.0.1.0.0", + "version": "14.0.1.0.0", "license": "AGPL-3", "author": "Creu Blanca,Odoo Community Association (OCA)", "website": "https://github.com/OCA/social", "depends": ["mail"], "qweb": ["static/src/xml/mail_message_reply.xml"], - "data": ["templates/assets.xml", "data/reply_template.xml"], + "data": [ + "templates/assets.xml", + "data/reply_template.xml", + ], } diff --git a/mail_quoted_reply/static/src/components/mail_message_reply.js b/mail_quoted_reply/static/src/components/mail_message_reply.js new file mode 100644 index 000000000..da29addf5 --- /dev/null +++ b/mail_quoted_reply/static/src/components/mail_message_reply.js @@ -0,0 +1,20 @@ +odoo.define("mail_quoted_reply/static/src/components/mail_message_reply.js", function ( + require +) { + "use strict"; + + const components = { + Message: require("mail/static/src/components/message/message.js"), + }; + const {patch} = require("web.utils"); + + patch( + components.Message, + "mail_quoted_reply/static/src/models/mail_message_reply.js", + { + _onClickMailMessageReply() { + this.message._onClickMailMessageReply(); + }, + } + ); +}); diff --git a/mail_quoted_reply/static/src/js/mail_message_reply.js b/mail_quoted_reply/static/src/js/mail_message_reply.js deleted file mode 100644 index 8f9fc137b..000000000 --- a/mail_quoted_reply/static/src/js/mail_message_reply.js +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2021 Creu Blanca - * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - */ -odoo.define("mail_quote_reply.reply", function(require) { - "use strict"; - - var ThreadWidget = require("mail.widget.Thread"); - var ThreadField = require("mail.ThreadField"); - var DocumentThread = require("mail.model.DocumentThread"); - - DocumentThread.include({ - _fetchMessages: function(options) { - if (options && options.forceReloadMessages) { - this._mustFetchMessageIDs = true; - } - return this._super.apply(this, arguments); - }, - }); - - ThreadField.include({ - start: function() { - var self = this; - return this._super.apply(this, arguments).then(function() { - self._threadWidget.on( - "reload_thread_messages", - self, - self._onReloadThreadMessages - ); - }); - }, - _onReloadThreadMessages: function() { - this._fetchAndRenderThread({forceReloadMessages: true}); - }, - }); - - ThreadWidget.include({ - events: _.defaults( - { - "click .o_thread_mail_message_reply": "_onClickMailMessageReply", - }, - ThreadWidget.prototype.events - ), - - _onClickMailMessageReply: function(event) { - var self = this, - msg_id = $(event.currentTarget).data("message-id"); - this._rpc({ - model: "mail.message", - method: "reply_message", - args: [msg_id], - }).then(function(result) { - self.do_action(result, { - on_close: function() { - self.trigger("reload_thread_messages"); - }, - }); - }); - }, - }); -}); diff --git a/mail_quoted_reply/static/src/models/mail_message_reply.js b/mail_quoted_reply/static/src/models/mail_message_reply.js new file mode 100644 index 000000000..005c8184f --- /dev/null +++ b/mail_quoted_reply/static/src/models/mail_message_reply.js @@ -0,0 +1,34 @@ +odoo.define("mail_quoted_reply/static/src/models/mail_message_reply.js", function ( + require +) { + "use strict"; + + const {registerInstancePatchModel} = require("mail/static/src/model/model_core.js"); + + registerInstancePatchModel( + "mail.message", + "mail_quoted_reply/static/src/models/mail_message_reply.js", + { + _onClickMailMessageReply: function () { + var self = this, + msg_id = this.id; + this.env.services + .rpc({ + model: "mail.message", + method: "reply_message", + args: [msg_id], + }) + .then(function (result) { + self.env.bus.trigger("do-action", { + action: result, + options: { + on_close: () => { + self.originThread.refresh(); + }, + }, + }); + }); + }, + } + ); +}); diff --git a/mail_quoted_reply/static/src/scss/thread_mail_message_reply.scss b/mail_quoted_reply/static/src/scss/thread_mail_message_reply.scss new file mode 100644 index 000000000..0d3acbe96 --- /dev/null +++ b/mail_quoted_reply/static/src/scss/thread_mail_message_reply.scss @@ -0,0 +1,21 @@ +.o_thread_mail_message_reply { + cursor: pointer; + color: gray("400"); + &:not(.o-mobile) { + &:hover { + filter: brightness(0.8); + } + } + + &.o-mobile { + filter: brightness(0.8); + + &:hover { + filter: brightness(0.75); + } + } + + &.o-message-selected { + color: gray("500"); + } +} diff --git a/mail_quoted_reply/static/src/xml/mail_message_reply.xml b/mail_quoted_reply/static/src/xml/mail_message_reply.xml index fc4b135bf..ccf41abde 100644 --- a/mail_quoted_reply/static/src/xml/mail_message_reply.xml +++ b/mail_quoted_reply/static/src/xml/mail_message_reply.xml @@ -2,16 +2,18 @@ diff --git a/mail_quoted_reply/templates/assets.xml b/mail_quoted_reply/templates/assets.xml index b53fdf66e..98b0ffd2c 100644 --- a/mail_quoted_reply/templates/assets.xml +++ b/mail_quoted_reply/templates/assets.xml @@ -12,7 +12,16 @@ + + + From ed3010e7ef91d3bc3b668f60f9c8ff00534e5e91 Mon Sep 17 00:00:00 2001 From: mreficent Date: Fri, 30 Nov 2018 13:21:01 +0100 Subject: [PATCH 195/228] [IMP] mail_activity_board: filter activities by user read permissions --- mail_activity_board/__manifest__.py | 2 +- mail_activity_board/models/mail_activity.py | 63 ++++++++++++++++++- .../tests/test_mail_activity_board.py | 40 +++++++++++- 3 files changed, 101 insertions(+), 4 deletions(-) diff --git a/mail_activity_board/__manifest__.py b/mail_activity_board/__manifest__.py index 8d0f015a7..d747c81aa 100644 --- a/mail_activity_board/__manifest__.py +++ b/mail_activity_board/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Activities board', 'summary': 'Add Activity Boards', - 'version': '11.0.1.0.0', + 'version': '11.0.1.0.1', 'development_status': 'Beta', 'category': 'Social Network', 'website': 'https://github.com/OCA/social', diff --git a/mail_activity_board/models/mail_activity.py b/mail_activity_board/models/mail_activity.py index 9e55c0349..dfc96df8b 100644 --- a/mail_activity_board/models/mail_activity.py +++ b/mail_activity_board/models/mail_activity.py @@ -1,6 +1,6 @@ # Copyright 2018 David Juaneda - # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, models, fields +from odoo import api, models, fields, SUPERUSER_ID class MailActivity(models.Model): @@ -43,3 +43,64 @@ def action_activities_board(self): action = self.env.ref( 'mail_activity_board.open_boards_activities').read()[0] return action + + @api.model + def _find_allowed_model_wise(self, doc_model, doc_dict): + doc_ids = list(doc_dict) + allowed_doc_ids = self.env[doc_model].with_context( + active_test=False).search([('id', 'in', doc_ids)]).ids + return set([message_id for allowed_doc_id in allowed_doc_ids + for message_id in doc_dict[allowed_doc_id]]) + + @api.model + def _find_allowed_doc_ids(self, model_ids): + IrModelAccess = self.env['ir.model.access'] + allowed_ids = set() + for doc_model, doc_dict in model_ids.items(): + if not IrModelAccess.check(doc_model, 'read', False): + continue + allowed_ids |= self._find_allowed_model_wise(doc_model, doc_dict) + return allowed_ids + + @api.model + def _search(self, args, offset=0, limit=None, order=None, count=False, + access_rights_uid=None): + # Rules do not apply to administrator + if self._uid == SUPERUSER_ID: + return super(MailActivity, self)._search( + args, offset=offset, limit=limit, order=order, + count=count, access_rights_uid=access_rights_uid) + + ids = super(MailActivity, self)._search( + args, offset=offset, limit=limit, order=order, + count=False, access_rights_uid=access_rights_uid) + if not ids and count: + return 0 + elif not ids: + return ids + + # check read access rights before checking the actual rules + super(MailActivity, self.sudo(access_rights_uid or self._uid)).\ + check_access_rights('read') + + model_ids = {} + + self._cr.execute(""" + SELECT DISTINCT a.id, im.id, im.model, a.res_id + FROM "%s" a + LEFT JOIN ir_model im ON im.id = a.res_model_id + WHERE a.id = ANY (%%(ids)s)""" % self._table, dict(ids=ids)) + for a_id, ir_model_id, model, model_id in self._cr.fetchall(): + model_ids.setdefault(model, {}).setdefault( + model_id, set()).add(a_id) + + allowed_ids = self._find_allowed_doc_ids(model_ids) + + final_ids = allowed_ids + + if count: + return len(final_ids) + else: + # re-construct a list based on ids, because set didn't keep order + id_list = [a_id for a_id in ids if a_id in final_ids] + return id_list diff --git a/mail_activity_board/tests/test_mail_activity_board.py b/mail_activity_board/tests/test_mail_activity_board.py index ac91c51ac..aa23da90f 100644 --- a/mail_activity_board/tests/test_mail_activity_board.py +++ b/mail_activity_board/tests/test_mail_activity_board.py @@ -18,6 +18,16 @@ def setUp(self): 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])] }) + # Create a user who doesn't have access to anything except activities + mail_activity_group = self.create_mail_activity_group() + self.employee2 = self.env['res.users'].create({ + 'company_id': self.env.ref("base.main_company").id, + 'name': "Employee2", + 'login': "alien", + 'email': "alien@yourcompany.com", + 'groups_id': [(6, 0, [mail_activity_group.id])], + }) + # lead_model_id = self.env['ir.model']._get('crm.lead').id partner_model_id = self.env['ir.model']._get('res.partner').id @@ -45,6 +55,9 @@ def setUp(self): # I create an opportunity, as employee self.partner_client = self.env.ref("base.res_partner_1") + # assure there isn't any mail activity yet + self.env['mail.activity'].sudo().search([]).unlink() + self.act1 = self.env['mail.activity'].sudo().create({ 'activity_type_id': self.activity3.id, 'note': 'Partner activity 1.', @@ -67,6 +80,23 @@ def setUp(self): 'user_id': self.employee.id }) + def create_mail_activity_group(self): + manager_mail_activity_test_group = self.env['res.groups'].create({ + 'name': 'group_manager_mail_activity_test', + }) + mail_activity_model_id = self.env['ir.model'].sudo().search( + [('model', '=', 'mail.activity')], limit=1) + access = self.env['ir.model.access'].create({ + 'name': 'full_access_mail_activity', + 'model_id': mail_activity_model_id.id, + 'perm_read': True, + 'perm_write': True, + 'perm_create': True, + 'perm_unlink': True, + }) + access.group_id = manager_mail_activity_test_group + return manager_mail_activity_test_group + def get_view(self, activity): action = activity.open_origin() result = self.env[action.get('res_model')]\ @@ -114,7 +144,7 @@ def test_redirect_to_activities(self): kwargs = { 'groupby': [ "activity_type_id" - ] + ], } kwargs['domain'] = action.get('domain') @@ -130,7 +160,13 @@ def test_redirect_to_activities(self): records = self.env['mail.activity'].search_read( domain=group.get('__domain'), fields=kwargs['fields'] ) - acts += [id.get('id') for id in records] + acts += [record_id.get('id') for record_id in records] for act in acts: self.assertIn(act, self.partner_client.activity_ids.ids) + + def test_read_permissions(self): + search1 = self.env['mail.activity'].sudo(self.employee).search([]) + self.assertEqual(len(search1), 3) + search2 = self.env['mail.activity'].sudo(self.employee2).search([]) + self.assertEqual(len(search2), 0) From 808fe72715d909fd51bde22584d0c3c28394a567 Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 3 Dec 2018 11:58:09 +0100 Subject: [PATCH 196/228] [MIG] mail_activity_board: Migration to 12.0 --- mail_activity_board/README.rst | 14 +++++--- mail_activity_board/__manifest__.py | 2 +- .../i18n/mail_activity_board.pot | 34 +++++++++--------- mail_activity_board/models/mail_activity.py | 5 +-- .../models/mail_activity_mixin.py | 4 +-- mail_activity_board/readme/CONTRIBUTORS.rst | 4 +++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 12 ++++--- .../views/mail_activity_view.xml | 10 +++--- mail_activity_board/views/templates.xml | 4 +-- 10 files changed, 51 insertions(+), 38 deletions(-) create mode 100644 mail_activity_board/static/description/icon.png diff --git a/mail_activity_board/README.rst b/mail_activity_board/README.rst index f7e731194..b1c9f8043 100644 --- a/mail_activity_board/README.rst +++ b/mail_activity_board/README.rst @@ -14,13 +14,13 @@ Activities board :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/11.0/mail_activity_board + :target: https://github.com/OCA/social/tree/12.0/mail_activity_board :alt: OCA/social .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/social-11-0/social-11-0-mail_activity_board + :target: https://translation.odoo-community.org/projects/social-12-0/social-12-0-mail_activity_board :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/11.0 + :target: https://runbot.odoo-community.org/runbot/205/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -52,7 +52,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -72,6 +72,10 @@ Contributors * David Juaneda +* `Eficent `_: + + * Miquel Raïch (miquel.raich@eficent.com) + Maintainers ~~~~~~~~~~~ @@ -85,6 +89,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/social `_ project on GitHub. +This module is part of the `OCA/social `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/mail_activity_board/__manifest__.py b/mail_activity_board/__manifest__.py index d747c81aa..a13100d50 100644 --- a/mail_activity_board/__manifest__.py +++ b/mail_activity_board/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Activities board', 'summary': 'Add Activity Boards', - 'version': '11.0.1.0.1', + 'version': '12.0.1.0.0', 'development_status': 'Beta', 'category': 'Social Network', 'website': 'https://github.com/OCA/social', diff --git a/mail_activity_board/i18n/mail_activity_board.pot b/mail_activity_board/i18n/mail_activity_board.pot index fe1051925..f363e26ca 100644 --- a/mail_activity_board/i18n/mail_activity_board.pot +++ b/mail_activity_board/i18n/mail_activity_board.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" +"Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: <>\n" "Language-Team: \n" @@ -14,12 +14,12 @@ msgstr "" "Plural-Forms: \n" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "Act. next 6 months" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "Act. next month" msgstr "" @@ -34,12 +34,12 @@ msgstr "" #. module: mail_activity_board #: model:ir.model,name:mail_activity_board.model_mail_activity -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board msgid "Activity" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board msgid "Activity Form" msgstr "" @@ -49,23 +49,23 @@ msgid "Activity Mixin" msgstr "" #. module: mail_activity_board -#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity_calendar_event_id_partner_ids +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_partner_ids msgid "Attendees" msgstr "" #. module: mail_activity_board -#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity_duration +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__duration msgid "Duration" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board msgid "Log a note..." msgstr "" #. module: mail_activity_board -#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity_res_model_id_name -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__res_model_id_name +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "Origin" msgstr "" @@ -77,37 +77,37 @@ msgid "See activities list" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "Show activities scheduled for next 6 months." msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "Show activities scheduled for next month." msgstr "" #. module: mail_activity_board -#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity_calendar_event_id_start +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_start msgid "Start" msgstr "" #. module: mail_activity_board -#: model:ir.model.fields,help:mail_activity_board.field_mail_activity_calendar_event_id_start +#: model:ir.model.fields,help:mail_activity_board.field_mail_activity__calendar_event_id_start msgid "Start date of an event, without time for full days events" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board msgid "Start meeting" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search msgid "User" msgstr "" #. module: mail_activity_board -#: model:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board msgid "e.g. Discuss proposal" msgstr "" diff --git a/mail_activity_board/models/mail_activity.py b/mail_activity_board/models/mail_activity.py index dfc96df8b..817acde58 100644 --- a/mail_activity_board/models/mail_activity.py +++ b/mail_activity_board/models/mail_activity.py @@ -1,4 +1,5 @@ # Copyright 2018 David Juaneda - +# Copyright 2018 Eficent Business and IT Consulting Services, S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import api, models, fields, SUPERUSER_ID @@ -54,10 +55,10 @@ def _find_allowed_model_wise(self, doc_model, doc_dict): @api.model def _find_allowed_doc_ids(self, model_ids): - IrModelAccess = self.env['ir.model.access'] + ir_model_access_model = self.env['ir.model.access'] allowed_ids = set() for doc_model, doc_dict in model_ids.items(): - if not IrModelAccess.check(doc_model, 'read', False): + if not ir_model_access_model.check(doc_model, 'read', False): continue allowed_ids |= self._find_allowed_model_wise(doc_model, doc_dict) return allowed_ids diff --git a/mail_activity_board/models/mail_activity_mixin.py b/mail_activity_board/models/mail_activity_mixin.py index 4cb41cd73..788c33283 100644 --- a/mail_activity_board/models/mail_activity_mixin.py +++ b/mail_activity_board/models/mail_activity_mixin.py @@ -20,7 +20,7 @@ def redirect_to_activities(self, **kwargs): :return: action. """ - id = kwargs.get("id") + _id = kwargs.get("id") action = self.env['mail.activity'].action_activities_board() views = [] for v in action['views']: @@ -28,5 +28,5 @@ def redirect_to_activities(self, **kwargs): v = (v[0], 'list') views.append(v) action['views'] = views - action['domain'] = [('res_id', '=', id)] + action['domain'] = [('res_id', '=', _id)] return action diff --git a/mail_activity_board/readme/CONTRIBUTORS.rst b/mail_activity_board/readme/CONTRIBUTORS.rst index e18a28eab..f2a8d5ed1 100644 --- a/mail_activity_board/readme/CONTRIBUTORS.rst +++ b/mail_activity_board/readme/CONTRIBUTORS.rst @@ -1,3 +1,7 @@ * `SDI `_: * David Juaneda + +* `Eficent `_: + + * Miquel Raïch (miquel.raich@eficent.com) diff --git a/mail_activity_board/static/description/icon.png b/mail_activity_board/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_activity_board/static/description/index.html b/mail_activity_board/static/description/index.html index c1d37a24c..7a33cf304 100644 --- a/mail_activity_board/static/description/index.html +++ b/mail_activity_board/static/description/index.html @@ -3,7 +3,7 @@ - + Activities board -
-

Activities board

+
+

Mail Activity Board

-

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

+

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

This module adds an activity board with form, tree, kanban, calendar, pivot, graph and search views.

Table of contents

@@ -398,7 +398,7 @@

Bug Tracker

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

+feedback.

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

@@ -421,6 +421,10 @@

Contributors

  • Miquel Raïch (miquel.raich@eficent.com)
  • +
  • Pesol: +
  • @@ -430,7 +434,7 @@

    Maintainers

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

    -

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

    +

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

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

    diff --git a/mail_activity_board/static/src/xml/inherit_chatter.xml b/mail_activity_board/static/src/xml/inherit_chatter.xml index 5fee3e7dc..1cc45f08b 100644 --- a/mail_activity_board/static/src/xml/inherit_chatter.xml +++ b/mail_activity_board/static/src/xml/inherit_chatter.xml @@ -1,10 +1,10 @@ - + - + - diff --git a/mail_activity_board/tests/test_mail_activity_board.py b/mail_activity_board/tests/test_mail_activity_board.py index aa23da90f..1b02568ef 100644 --- a/mail_activity_board/tests/test_mail_activity_board.py +++ b/mail_activity_board/tests/test_mail_activity_board.py @@ -4,104 +4,138 @@ class TestMailActivityBoardMethods(TransactionCase): - def setUp(self): super(TestMailActivityBoardMethods, self).setUp() # Set up activities # Create a user as 'Crm Salesman' and added few groups - self.employee = self.env['res.users'].create({ - 'company_id': self.env.ref("base.main_company").id, - 'name': "Employee", - 'login': "csu", - 'email': "crmuser@yourcompany.com", - 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])] - }) + self.employee = self.env["res.users"].create( + { + "company_id": self.env.ref("base.main_company").id, + "name": "Employee", + "login": "csu", + "email": "crmuser@yourcompany.com", + "groups_id": [(6, 0, [self.env.ref("base.group_user").id])], + } + ) # Create a user who doesn't have access to anything except activities mail_activity_group = self.create_mail_activity_group() - self.employee2 = self.env['res.users'].create({ - 'company_id': self.env.ref("base.main_company").id, - 'name': "Employee2", - 'login': "alien", - 'email': "alien@yourcompany.com", - 'groups_id': [(6, 0, [mail_activity_group.id])], - }) + self.employee2 = self.env["res.users"].create( + { + "company_id": self.env.ref("base.main_company").id, + "name": "Employee2", + "login": "alien", + "email": "alien@yourcompany.com", + "groups_id": [(6, 0, [mail_activity_group.id])], + } + ) # lead_model_id = self.env['ir.model']._get('crm.lead').id - partner_model_id = self.env['ir.model']._get('res.partner').id - - ActivityType = self.env['mail.activity.type'] - self.activity1 = ActivityType.create({ - 'name': 'Initial Contact', - 'days': 5, - 'summary': 'ACT 1 : Presentation, barbecue, ... ', - 'res_model_id': partner_model_id, - }) - self.activity2 = ActivityType.create({ - 'name': 'Call for Demo', - 'days': 6, - 'summary': 'ACT 2 : I want to show you my ERP !', - 'res_model_id': partner_model_id, - }) - self.activity3 = ActivityType.create({ - 'name': 'Celebrate the sale', - 'days': 3, - 'summary': 'ACT 3 : ' - 'Beers for everyone because I am a good salesman !', - 'res_model_id': partner_model_id, - }) + partner_model_id = self.env["ir.model"]._get("res.partner").id + + ActivityType = self.env["mail.activity.type"] + self.activity1 = ActivityType.create( + { + "name": "Initial Contact", + "delay_count": 5, + "delay_unit": "days", + "summary": "ACT 1 : Presentation, barbecue, ... ", + "res_model_id": partner_model_id, + } + ) + self.activity2 = ActivityType.create( + { + "name": "Call for Demo", + "delay_count": 6, + "delay_unit": "days", + "summary": "ACT 2 : I want to show you my ERP !", + "res_model_id": partner_model_id, + } + ) + self.activity3 = ActivityType.create( + { + "name": "Celebrate the sale", + "delay_count": 3, + "delay_unit": "days", + "summary": "ACT 3 : " + "Beers for everyone because I am a good salesman !", + "res_model_id": partner_model_id, + } + ) # I create an opportunity, as employee self.partner_client = self.env.ref("base.res_partner_1") # assure there isn't any mail activity yet - self.env['mail.activity'].sudo().search([]).unlink() - - self.act1 = self.env['mail.activity'].sudo().create({ - 'activity_type_id': self.activity3.id, - 'note': 'Partner activity 1.', - 'res_id': self.partner_client.id, - 'res_model_id': partner_model_id, - 'user_id': self.employee.id - }) - self.act2 = self.env['mail.activity'].sudo().create({ - 'activity_type_id': self.activity2.id, - 'note': 'Partner activity 2.', - 'res_id': self.partner_client.id, - 'res_model_id': partner_model_id, - 'user_id': self.employee.id - }) - self.act3 = self.env['mail.activity'].sudo().create({ - 'activity_type_id': self.activity3.id, - 'note': 'Partner activity 3.', - 'res_id': self.partner_client.id, - 'res_model_id': partner_model_id, - 'user_id': self.employee.id - }) + self.env["mail.activity"].sudo().search([]).unlink() + + self.act1 = ( + self.env["mail.activity"] + .sudo() + .create( + { + "activity_type_id": self.activity3.id, + "note": "Partner activity 1.", + "res_id": self.partner_client.id, + "res_model_id": partner_model_id, + "user_id": self.employee.id, + } + ) + ) + self.act2 = ( + self.env["mail.activity"] + .sudo() + .create( + { + "activity_type_id": self.activity2.id, + "note": "Partner activity 2.", + "res_id": self.partner_client.id, + "res_model_id": partner_model_id, + "user_id": self.employee.id, + } + ) + ) + self.act3 = ( + self.env["mail.activity"] + .sudo() + .create( + { + "activity_type_id": self.activity3.id, + "note": "Partner activity 3.", + "res_id": self.partner_client.id, + "res_model_id": partner_model_id, + "user_id": self.employee.id, + } + ) + ) def create_mail_activity_group(self): - manager_mail_activity_test_group = self.env['res.groups'].create({ - 'name': 'group_manager_mail_activity_test', - }) - mail_activity_model_id = self.env['ir.model'].sudo().search( - [('model', '=', 'mail.activity')], limit=1) - access = self.env['ir.model.access'].create({ - 'name': 'full_access_mail_activity', - 'model_id': mail_activity_model_id.id, - 'perm_read': True, - 'perm_write': True, - 'perm_create': True, - 'perm_unlink': True, - }) + manager_mail_activity_test_group = self.env["res.groups"].create( + {"name": "group_manager_mail_activity_test"} + ) + mail_activity_model_id = ( + self.env["ir.model"] + .sudo() + .search([("model", "=", "mail.activity")], limit=1) + ) + access = self.env["ir.model.access"].create( + { + "name": "full_access_mail_activity", + "model_id": mail_activity_model_id.id, + "perm_read": True, + "perm_write": True, + "perm_create": True, + "perm_unlink": True, + } + ) access.group_id = manager_mail_activity_test_group return manager_mail_activity_test_group def get_view(self, activity): action = activity.open_origin() - result = self.env[action.get('res_model')]\ - .load_views(action.get('views')) - return result.get('fields_views').get(action.get('view_mode')) + result = self.env[action.get("res_model")].load_views(action.get("views")) + return result.get("fields_views").get(action.get("view_mode")) def test_open_origin_res_partner(self): """ This test case checks @@ -110,63 +144,58 @@ def test_open_origin_res_partner(self): belongs. """ # Id of the form view for the class 'crm.lead', type 'lead' - form_view_partner_id = self.env.ref('base.view_partner_form').id + form_view_partner_id = self.env.ref("base.view_partner_form").id # Id of the form view return open_origin() view = self.get_view(self.act1) # Check the next view is correct - self.assertEqual(form_view_partner_id, view.get('view_id')) + self.assertEqual(form_view_partner_id, view.get("view_id")) # Id of the form view return open_origin() view = self.get_view(self.act2) # Check the next view is correct - self.assertEqual(form_view_partner_id, view.get('view_id')) + self.assertEqual(form_view_partner_id, view.get("view_id")) # Id of the form view return open_origin() view = self.get_view(self.act3) # Check the next view is correct - self.assertEqual(form_view_partner_id, view.get('view_id')) + self.assertEqual(form_view_partner_id, view.get("view_id")) def test_redirect_to_activities(self): """ This test case checks - if the method returns the correct action, - if the correct activities are shown. """ - action_id = self.env.ref( - 'mail_activity_board.open_boards_activities').id - action = self.partner_client\ - .redirect_to_activities(**{'id': self.partner_client.id}) - self.assertEqual(action.get('id'), action_id) - - kwargs = { - 'groupby': [ - "activity_type_id" - ], - } - kwargs['domain'] = action.get('domain') - - result = self.env[action.get('res_model')]\ - .load_views(action.get('views')) - fields = result.get('fields_views').get('kanban').get('fields') - kwargs['fields'] = list(fields.keys()) - - result = self.env['mail.activity'].read_group(**kwargs) + action_id = self.env.ref("mail_activity_board.open_boards_activities").id + action = self.partner_client.redirect_to_activities( + **{"id": self.partner_client.id} + ) + self.assertEqual(action.get("id"), action_id) + + kwargs = {"groupby": ["activity_type_id"]} + kwargs["domain"] = action.get("domain") + + result = self.env[action.get("res_model")].load_views(action.get("views")) + fields = result.get("fields_views").get("kanban").get("fields") + kwargs["fields"] = list(fields.keys()) + + result = self.env["mail.activity"].read_group(**kwargs) acts = [] for group in result: - records = self.env['mail.activity'].search_read( - domain=group.get('__domain'), fields=kwargs['fields'] + records = self.env["mail.activity"].search_read( + domain=group.get("__domain"), fields=kwargs["fields"] ) - acts += [record_id.get('id') for record_id in records] + acts += [record_id.get("id") for record_id in records] for act in acts: self.assertIn(act, self.partner_client.activity_ids.ids) def test_read_permissions(self): - search1 = self.env['mail.activity'].sudo(self.employee).search([]) + search1 = self.env["mail.activity"].with_user(self.employee).search([]) self.assertEqual(len(search1), 3) - search2 = self.env['mail.activity'].sudo(self.employee2).search([]) + search2 = self.env["mail.activity"].with_user(self.employee2).search([]) self.assertEqual(len(search2), 0) diff --git a/mail_activity_board/views/mail_activity_view.xml b/mail_activity_board/views/mail_activity_view.xml index 29c691094..14cbf8c67 100644 --- a/mail_activity_board/views/mail_activity_view.xml +++ b/mail_activity_board/views/mail_activity_view.xml @@ -156,7 +156,7 @@ - + @@ -181,7 +181,6 @@ Activities mail.activity - form kanban,form [] {} From f24022d04503623a3a5bd74936b3382f7a4462c6 Mon Sep 17 00:00:00 2001 From: Laurent Corron Date: Tue, 28 Jan 2020 11:50:44 +0000 Subject: [PATCH 198/228] Added translation using Weblate (French) --- mail_activity_board/i18n/fr_BE.po | 117 ++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 mail_activity_board/i18n/fr_BE.po diff --git a/mail_activity_board/i18n/fr_BE.po b/mail_activity_board/i18n/fr_BE.po new file mode 100644 index 000000000..294350e99 --- /dev/null +++ b/mail_activity_board/i18n/fr_BE.po @@ -0,0 +1,117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_board +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-01-28 11:55+0000\n" +"Last-Translator: Laurent Corron \n" +"Language-Team: none\n" +"Language: fr_BE\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 3.10\n" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Act. next 6 months" +msgstr "Act. les 6 prochains mois" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Act. next month" +msgstr "Act. le mois prochain" + +#. module: mail_activity_board +#. openerp-web +#: code:addons/mail_activity_board/static/src/xml/inherit_chatter.xml:0 +#: model:ir.actions.act_window,name:mail_activity_board.open_boards_activities +#: model:ir.ui.menu,name:mail_activity_board.board_menu_activities +#, python-format +msgid "Activities" +msgstr "Activités" + +#. module: mail_activity_board +#: model:ir.model,name:mail_activity_board.model_mail_activity +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Activity" +msgstr "Activité" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Activity Form" +msgstr "Formulaire d'activité" + +#. module: mail_activity_board +#: model:ir.model,name:mail_activity_board.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "Combinaison d'activités" + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_partner_ids +msgid "Attendees" +msgstr "Participants" + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__duration +msgid "Duration" +msgstr "Durée" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Log a note..." +msgstr "Enregistrer une note ..." + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__res_model_id_name +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Origin" +msgstr "Origine" + +#. module: mail_activity_board +#. openerp-web +#: code:addons/mail_activity_board/static/src/xml/inherit_chatter.xml:0 +#, python-format +msgid "See activities list" +msgstr "Voir la liste des activités" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Show activities scheduled for next 6 months." +msgstr "Afficher les activités prévues pour les 6 prochains mois." + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Show activities scheduled for next month." +msgstr "Afficher les activités prévues pour le mois prochain." + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_start +msgid "Start" +msgstr "Début" + +#. module: mail_activity_board +#: model:ir.model.fields,help:mail_activity_board.field_mail_activity__calendar_event_id_start +msgid "Start date of an event, without time for full days events" +msgstr "" +"Date de début d'un événement, sans heure pour les événements d'une journée " +"complète" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Start meeting" +msgstr "Commencer la réunion" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "User" +msgstr "Utilisateur" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "e.g. Discuss proposal" +msgstr "Par exemple. Discuter de la proposition" From 5d417816d18f75409de557148a20649f1b260cc4 Mon Sep 17 00:00:00 2001 From: eduardgm Date: Sun, 2 Feb 2020 19:00:06 +0000 Subject: [PATCH 199/228] Added translation using Weblate (Spanish) --- mail_activity_board/i18n/es.po | 115 +++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 mail_activity_board/i18n/es.po diff --git a/mail_activity_board/i18n/es.po b/mail_activity_board/i18n/es.po new file mode 100644 index 000000000..c23c0ef69 --- /dev/null +++ b/mail_activity_board/i18n/es.po @@ -0,0 +1,115 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * mail_activity_board +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-02-02 21:13+0000\n" +"Last-Translator: eduardgm \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 3.10\n" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Act. next 6 months" +msgstr "Act. próximos 6 meses" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Act. next month" +msgstr "Act. próximo mes" + +#. module: mail_activity_board +#. openerp-web +#: code:addons/mail_activity_board/static/src/xml/inherit_chatter.xml:0 +#: model:ir.actions.act_window,name:mail_activity_board.open_boards_activities +#: model:ir.ui.menu,name:mail_activity_board.board_menu_activities +#, python-format +msgid "Activities" +msgstr "Actividades" + +#. module: mail_activity_board +#: model:ir.model,name:mail_activity_board.model_mail_activity +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Activity" +msgstr "Actividad" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Activity Form" +msgstr "" + +#. module: mail_activity_board +#: model:ir.model,name:mail_activity_board.model_mail_activity_mixin +msgid "Activity Mixin" +msgstr "" + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_partner_ids +msgid "Attendees" +msgstr "Asistentes" + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__duration +msgid "Duration" +msgstr "Duración" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Log a note..." +msgstr "Registrar una nota..." + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__res_model_id_name +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Origin" +msgstr "Origen" + +#. module: mail_activity_board +#. openerp-web +#: code:addons/mail_activity_board/static/src/xml/inherit_chatter.xml:0 +#, python-format +msgid "See activities list" +msgstr "Ver lista de actividades" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Show activities scheduled for next 6 months." +msgstr "Mostrar las actividades programadas para los próximos 6 meses." + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "Show activities scheduled for next month." +msgstr "Mostrar las actividades programadas para el próximo mes." + +#. module: mail_activity_board +#: model:ir.model.fields,field_description:mail_activity_board.field_mail_activity__calendar_event_id_start +msgid "Start" +msgstr "Inicio" + +#. module: mail_activity_board +#: model:ir.model.fields,help:mail_activity_board.field_mail_activity__calendar_event_id_start +msgid "Start date of an event, without time for full days events" +msgstr "Fecha de inicio de un evento, sin tiempo para eventos de días completos" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "Start meeting" +msgstr "Empezar reunión" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_search +msgid "User" +msgstr "Usuario" + +#. module: mail_activity_board +#: model_terms:ir.ui.view,arch_db:mail_activity_board.mail_activity_view_form_board +msgid "e.g. Discuss proposal" +msgstr "Ej. Discutir propuesta" From 77a16cbdb588b7d4c17e199a00a442d51ec2c19d Mon Sep 17 00:00:00 2001 From: mreficent Date: Wed, 8 Jul 2020 20:37:18 +0200 Subject: [PATCH 200/228] [FIX] solved: unlink issue due to bad migration --- mail_activity_board/__manifest__.py | 2 +- mail_activity_board/models/mail_activity.py | 28 +++++++++++---------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/mail_activity_board/__manifest__.py b/mail_activity_board/__manifest__.py index 62f7d8dfb..4feddae19 100644 --- a/mail_activity_board/__manifest__.py +++ b/mail_activity_board/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Mail Activity Board", "summary": "Add Activity Boards", - "version": "13.0.1.0.0", + "version": "13.0.1.0.1", "development_status": "Beta", "category": "Social Network", "website": "https://github.com/OCA/social", diff --git a/mail_activity_board/models/mail_activity.py b/mail_activity_board/models/mail_activity.py index 7f8b76e78..f1378ca74 100644 --- a/mail_activity_board/models/mail_activity.py +++ b/mail_activity_board/models/mail_activity.py @@ -1,7 +1,7 @@ # Copyright 2018 David Juaneda - # Copyright 2018 Eficent Business and IT Consulting Services, S.L. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import SUPERUSER_ID, api, fields, models +from odoo import api, fields, models class MailActivity(models.Model): @@ -73,7 +73,7 @@ def _search( access_rights_uid=None, ): # Rules do not apply to administrator - if self._uid == SUPERUSER_ID: + if self.env.is_superuser(): return super(MailActivity, self)._search( args, offset=offset, @@ -103,17 +103,19 @@ def _search( model_ids = {} - self._cr.execute( - """ - SELECT DISTINCT a.id, im.id, im.model, a.res_id - FROM "%s" a - LEFT JOIN ir_model im ON im.id = a.res_model_id - WHERE a.id = ANY (%%(ids)s)""" - % self._table, - dict(ids=ids), - ) - for a_id, _ir_model_id, model, model_id in self._cr.fetchall(): - model_ids.setdefault(model, {}).setdefault(model_id, set()).add(a_id) + self.flush(["res_id", "res_model_id", "res_model"]) + for sub_ids in self._cr.split_for_in_conditions(ids): + self._cr.execute( + """ + SELECT DISTINCT a.id, im.id, im.model, a.res_id + FROM "%s" a + LEFT JOIN ir_model im ON im.id = a.res_model_id + WHERE a.id = ANY (%%(ids)s)""" + % self._table, + dict(ids=list(sub_ids)), + ) + for a_id, _ir_model_id, model, model_id in self._cr.fetchall(): + model_ids.setdefault(model, {}).setdefault(model_id, set()).add(a_id) allowed_ids = self._find_allowed_doc_ids(model_ids) From e34da894300df88db48421df3e2b86115154d5b9 Mon Sep 17 00:00:00 2001 From: "Atchuthan, Sodexis" Date: Fri, 22 Jan 2021 13:19:08 +0530 Subject: [PATCH 201/228] [IMP] : black, isort, prettier --- .../static/src/js/override_chatter.js | 14 +- .../static/src/xml/inherit_chatter.xml | 13 +- .../tests/test_mail_activity_board.py | 14 +- .../views/mail_activity_view.xml | 231 ++++++++++++------ mail_activity_board/views/templates.xml | 13 +- 5 files changed, 187 insertions(+), 98 deletions(-) diff --git a/mail_activity_board/static/src/js/override_chatter.js b/mail_activity_board/static/src/js/override_chatter.js index d3be65a64..19d497cc1 100644 --- a/mail_activity_board/static/src/js/override_chatter.js +++ b/mail_activity_board/static/src/js/override_chatter.js @@ -1,14 +1,13 @@ /* Copyright 2018 David Juaneda * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ -odoo.define('mail.Chatter.activity', function (require) { +odoo.define("mail.Chatter.activity", function (require) { "use strict"; - var chatter = require('mail.Chatter'); + var chatter = require("mail.Chatter"); chatter.include({ - events: _.extend({}, chatter.prototype.events, { - 'click .o_chatter_button_list_activity': '_onListActivity', + "click .o_chatter_button_list_activity": "_onListActivity", }), /** @@ -19,15 +18,14 @@ odoo.define('mail.Chatter.activity', function (require) { _onListActivity: function () { this._rpc({ model: this.record.model, - method: 'redirect_to_activities', + method: "redirect_to_activities", args: [[]], kwargs: { - 'id':this.record.res_id, - 'model':this.record.model, + id: this.record.res_id, + model: this.record.model, }, context: this.record.getContext(), }).then($.proxy(this, "do_action")); }, - }); }); diff --git a/mail_activity_board/static/src/xml/inherit_chatter.xml b/mail_activity_board/static/src/xml/inherit_chatter.xml index 1cc45f08b..2a0ab8e50 100644 --- a/mail_activity_board/static/src/xml/inherit_chatter.xml +++ b/mail_activity_board/static/src/xml/inherit_chatter.xml @@ -1,11 +1,16 @@ - + - diff --git a/mail_activity_board/tests/test_mail_activity_board.py b/mail_activity_board/tests/test_mail_activity_board.py index 1b02568ef..7929503e2 100644 --- a/mail_activity_board/tests/test_mail_activity_board.py +++ b/mail_activity_board/tests/test_mail_activity_board.py @@ -138,10 +138,10 @@ def get_view(self, activity): return result.get("fields_views").get(action.get("view_mode")) def test_open_origin_res_partner(self): - """ This test case checks - - If the method redirects to the form view of the correct one - of an object of the 'res.partner' class to which the activity - belongs. + """This test case checks + - If the method redirects to the form view of the correct one + of an object of the 'res.partner' class to which the activity + belongs. """ # Id of the form view for the class 'crm.lead', type 'lead' form_view_partner_id = self.env.ref("base.view_partner_form").id @@ -165,9 +165,9 @@ def test_open_origin_res_partner(self): self.assertEqual(form_view_partner_id, view.get("view_id")) def test_redirect_to_activities(self): - """ This test case checks - - if the method returns the correct action, - - if the correct activities are shown. + """This test case checks + - if the method returns the correct action, + - if the correct activities are shown. """ action_id = self.env.ref("mail_activity_board.open_boards_activities").id action = self.partner_client.redirect_to_activities( diff --git a/mail_activity_board/views/mail_activity_view.xml b/mail_activity_board/views/mail_activity_view.xml index 14cbf8c67..9576a0e9e 100644 --- a/mail_activity_board/views/mail_activity_view.xml +++ b/mail_activity_board/views/mail_activity_view.xml @@ -12,38 +12,57 @@
    - - - - + + + - - - - + + + + - - - - + + + + - - + + - - + +
    @@ -55,13 +74,19 @@ mail.activity.boards.view.tree mail.activity - + - - (date_deadline < current_date) - (date_deadline == current_date) - (date_deadline > current_date) + + (date_deadline < current_date) + (date_deadline == current_date) + (date_deadline > current_date) @@ -72,66 +97,103 @@ mail.activity.boards.view.kanban mail.activity - + - - - - - - - - - - - + + + + + + + + + + +
    - - + +
    - +
    - + - - + + - + - + - - + + - + - +
    - +
    @@ -147,28 +209,42 @@ mail.activity.boards.view.search mail.activity - - + + primary - - + + - - - + + + - - + + @@ -184,15 +260,17 @@ kanban,form [] {} - - + (0, 0, {'view_mode': 'graph'})]" + /> + @@ -200,10 +278,11 @@ Menus --> + id="board_menu_activities" + name="Activities" + parent="base.menu_board_root" + action="open_boards_activities" + sequence="1" + /> diff --git a/mail_activity_board/views/templates.xml b/mail_activity_board/views/templates.xml index 54182edb7..c042c21e8 100644 --- a/mail_activity_board/views/templates.xml +++ b/mail_activity_board/views/templates.xml @@ -1,8 +1,15 @@ - + -