From 16d524d4a3931a19096050a9deac39c1057bfcde Mon Sep 17 00:00:00 2001 From: Raf Ven Date: Mon, 17 Apr 2023 14:00:33 +0200 Subject: [PATCH] [MIG] mail_activity_team: Migration to 16.0 --- mail_activity_team/README.rst | 18 ++- mail_activity_team/__manifest__.py | 8 +- .../i18n/mail_activity_team.pot | 19 ++- mail_activity_team/models/mail_activity.py | 2 +- .../models/mail_activity_mixin.py | 24 +++- mail_activity_team/models/res_users.py | 7 +- mail_activity_team/readme/CONTRIBUTORS.rst | 3 + mail_activity_team/readme/ROADMAP.rst | 1 - .../static/description/index.html | 37 +++--- .../activity_menu_view/activity_menu_view.xml | 37 ++++++ .../static/src/js/systray.esm.js | 110 ------------------ .../src/models/activity_group_view.esm.js | 55 +++++++++ .../src/models/activity_menu_view.esm.js | 68 +++++++++++ mail_activity_team/static/src/xml/systray.xml | 25 ---- .../tests/test_mail_activity_team.py | 14 ++- 15 files changed, 229 insertions(+), 199 deletions(-) delete mode 100644 mail_activity_team/readme/ROADMAP.rst create mode 100644 mail_activity_team/static/src/components/activity_menu_view/activity_menu_view.xml delete mode 100644 mail_activity_team/static/src/js/systray.esm.js create mode 100644 mail_activity_team/static/src/models/activity_group_view.esm.js create mode 100644 mail_activity_team/static/src/models/activity_menu_view.esm.js delete mode 100644 mail_activity_team/static/src/xml/systray.xml diff --git a/mail_activity_team/README.rst b/mail_activity_team/README.rst index f473dbbc6..d4332c143 100644 --- a/mail_activity_team/README.rst +++ b/mail_activity_team/README.rst @@ -14,13 +14,13 @@ Mail Activity Team :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_activity_team + :target: https://github.com/OCA/social/tree/16.0/mail_activity_team :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_activity_team + :target: https://translation.odoo-community.org/projects/social-16-0/social-16-0-mail_activity_team :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 + :target: https://runbot.odoo-community.org/runbot/205/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -58,18 +58,13 @@ You can report on the activities assigned to a team going to *Dashboards / Activities*, and then filter by a specific team or group by teams. -Known issues / Roadmap -====================== - -* In next version systray.esm.js file should be changed as added in comments. - 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. @@ -94,6 +89,9 @@ Contributors * `Tecnativa `_: * David Vidal +* `Dynapps `_: + + * Raf Ven Maintainers ~~~~~~~~~~~ @@ -108,6 +106,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_team/__manifest__.py b/mail_activity_team/__manifest__.py index e3e43fe5f..9a683b997 100644 --- a/mail_activity_team/__manifest__.py +++ b/mail_activity_team/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Mail Activity Team", "summary": "Add Teams to Activities", - "version": "15.0.2.1.0", + "version": "16.0.1.0.0", "development_status": "Alpha", "category": "Social Network", "website": "https://github.com/OCA/social", @@ -23,10 +23,8 @@ ], "assets": { "web.assets_backend": [ - "mail_activity_team/static/src/js/systray.esm.js", - ], - "web.assets_qweb": [ - "mail_activity_team/static/src/xml/systray.xml", + "mail_activity_team/static/src/components/*/*", + "mail_activity_team/static/src/models/*", ], }, } diff --git a/mail_activity_team/i18n/mail_activity_team.pot b/mail_activity_team/i18n/mail_activity_team.pot index 2e2a50b45..f7a908425 100644 --- a/mail_activity_team/i18n/mail_activity_team.pot +++ b/mail_activity_team/i18n/mail_activity_team.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" @@ -113,8 +113,8 @@ msgid "Missing Activities" msgstr "" #. module: mail_activity_team -#. openerp-web -#: code:addons/mail_activity_team/static/src/xml/systray.xml:0 +#. odoo-javascript +#: code:addons/mail_activity_team/static/src/components/activity_menu_view/activity_menu_view.xml:0 #, python-format msgid "My Activities" msgstr "" @@ -141,8 +141,8 @@ msgid "Team" msgstr "" #. module: mail_activity_team -#. openerp-web -#: code:addons/mail_activity_team/static/src/xml/systray.xml:0 +#. odoo-javascript +#: code:addons/mail_activity_team/static/src/components/activity_menu_view/activity_menu_view.xml:0 #, python-format msgid "Team Activities" msgstr "" @@ -168,6 +168,7 @@ msgid "Team:" msgstr "" #. module: mail_activity_team +#. odoo-python #: code:addons/mail_activity_team/models/mail_activity.py:0 #, python-format msgid "" @@ -180,18 +181,12 @@ msgid "Used models" msgstr "" #. module: mail_activity_team +#: model:ir.model,name:mail_activity_team.model_res_users #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity__user_id msgid "User" msgstr "" #. module: mail_activity_team -#: model:ir.model,name:mail_activity_team.model_res_users -msgid "Users" -msgstr "" - -#. module: mail_activity_team -#: model:ir.model.fields,field_description:mail_activity_team.field_event_event__activity_team_user_ids -#: model:ir.model.fields,field_description:mail_activity_team.field_event_registration__activity_team_user_ids #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_mixin__activity_team_user_ids #: model:ir.model.fields,field_description:mail_activity_team.field_mailing_mailing__activity_team_user_ids #: model:ir.model.fields,field_description:mail_activity_team.field_res_partner__activity_team_user_ids diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py index b59d67c10..418dc0432 100644 --- a/mail_activity_team/models/mail_activity.py +++ b/mail_activity_team/models/mail_activity.py @@ -78,7 +78,7 @@ class MailActivity(models.Model): @api.onchange("activity_type_id") def _onchange_activity_type_id(self): - res = super(MailActivity, self)._onchange_activity_type_id() + res = super()._onchange_activity_type_id() if self.activity_type_id.default_team_id: self.team_id = self.activity_type_id.default_team_id members = self.activity_type_id.default_team_id.member_ids diff --git a/mail_activity_team/models/mail_activity_mixin.py b/mail_activity_team/models/mail_activity_mixin.py index 2ad3e02b8..be54f424a 100644 --- a/mail_activity_team/models/mail_activity_mixin.py +++ b/mail_activity_team/models/mail_activity_mixin.py @@ -20,16 +20,28 @@ class MailActivityMixin(models.AbstractModel): def _search_my_activity_date_deadline(self, operator, operand): if not self._context.get("team_activities", False): - return super(MailActivityMixin, self)._search_my_activity_date_deadline( - operator, operand - ) + return super()._search_my_activity_date_deadline(operator, operand) + query = """ + SELECT res_users_id + FROM mail_activity_team_users_rel + WHERE mail_activity_team_id IN ( + SELECT mail_activity_team_id + FROM mail_activity_team_users_rel + WHERE res_users_id = %(user_id)s) + """ + user = self.env.uid + self.env.cr.execute( + query, + { + "user_id": user, + }, + ) + users = [row[0] for row in self.env.cr.fetchall()] activity_ids = self.env["mail.activity"]._search( [ - "|", - ("user_id", "=", self.env.user.id), - "&", ("date_deadline", operator, operand), ("res_model", "=", self._name), + ("user_id", "in", users), ] ) return [("activity_ids", "in", activity_ids)] diff --git a/mail_activity_team/models/res_users.py b/mail_activity_team/models/res_users.py index c43e006a8..8da1c066b 100644 --- a/mail_activity_team/models/res_users.py +++ b/mail_activity_team/models/res_users.py @@ -49,13 +49,14 @@ class ResUsers(models.Model): user_activities = {} for activity in activity_data: if not user_activities.get(activity["model"]): + module = self.env[activity["model"]]._original_module + icon = module and modules.module.get_module_icon(module) user_activities[activity["model"]] = { + "id": activity["id"], "name": model_names[activity["id"]], "model": activity["model"], "type": "activity", - "icon": modules.module.get_module_icon( - self.env[activity["model"]]._original_module - ), + "icon": icon, "total_count": 0, "today_count": 0, "overdue_count": 0, diff --git a/mail_activity_team/readme/CONTRIBUTORS.rst b/mail_activity_team/readme/CONTRIBUTORS.rst index fdf6eec14..7216fd643 100644 --- a/mail_activity_team/readme/CONTRIBUTORS.rst +++ b/mail_activity_team/readme/CONTRIBUTORS.rst @@ -7,3 +7,6 @@ * `Tecnativa `_: * David Vidal +* `Dynapps `_: + + * Raf Ven diff --git a/mail_activity_team/readme/ROADMAP.rst b/mail_activity_team/readme/ROADMAP.rst deleted file mode 100644 index 82a350a5c..000000000 --- a/mail_activity_team/readme/ROADMAP.rst +++ /dev/null @@ -1 +0,0 @@ -* In next version systray.esm.js file should be changed as added in comments. diff --git a/mail_activity_team/static/description/index.html b/mail_activity_team/static/description/index.html index 23d2a8c82..5730076bf 100644 --- a/mail_activity_team/static/description/index.html +++ b/mail_activity_team/static/description/index.html @@ -367,7 +367,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module adds the possibility to assign teams to activities.

Important

@@ -379,12 +379,11 @@ Only for development or testing purpose, do not use in production.
-
-

Known issues / Roadmap

-
    -
  • In next version systray.esm.js file should be changed as added in comments.
  • -
-
-

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 smashing it by providing a detailed and welcomed -feedback.

+feedback.

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

-

Credits

+

Credits

-

Authors

+

Authors

  • ForgeFlow
  • Sodexis
-

Contributors

+

Contributors

-

Maintainers

+

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.

+

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_team/static/src/components/activity_menu_view/activity_menu_view.xml b/mail_activity_team/static/src/components/activity_menu_view/activity_menu_view.xml new file mode 100644 index 000000000..a1a575390 --- /dev/null +++ b/mail_activity_team/static/src/components/activity_menu_view/activity_menu_view.xml @@ -0,0 +1,37 @@ + + + + + + + + diff --git a/mail_activity_team/static/src/js/systray.esm.js b/mail_activity_team/static/src/js/systray.esm.js deleted file mode 100644 index a356e850b..000000000 --- a/mail_activity_team/static/src/js/systray.esm.js +++ /dev/null @@ -1,110 +0,0 @@ -/** @odoo-module **/ -import ActivityMenu from "@mail/js/systray/systray_activity_menu"; -import {session} from "@web/session"; - -ActivityMenu.include({ - events: _.extend({}, ActivityMenu.prototype.events, { - "click .o_filter_button": "_onClickFilterButton", - }), - start: function () { - this._super.apply(this, arguments); - this.$filter_buttons = this.$(".o_filter_button"); - this.$my_activities = this.$filter_buttons.first(); - this.filter = "my"; - this._update_team_activities_context(); - }, - - _update_team_activities_context: function () { - session.user_context.team_activities = this.filter === "team"; - }, - - _updateCounter: function () { - this._super.apply(this, arguments); - this.$(".o_notification_counter").text(this.activityCounter); - }, - - _onClickFilterButton: function (event) { - event.stopPropagation(); - this.$filter_buttons.removeClass("active"); - var $target = $(event.currentTarget); - $target.addClass("active"); - this.filter = $target.data("filter"); - this._update_team_activities_context(); - this._updateActivityPreview(); - }, - _onActivityFilterClick: function (event) { - if (this.filter === "my") { - this._super.apply(this, arguments); - } - if (this.filter === "team") { - var data = _.extend( - {}, - $(event.currentTarget).data(), - $(event.target).data() - ); - var context = {}; - context.team_activities = 1; - if (data.filter === "my") { - context.search_default_activities_overdue = 1; - context.search_default_activities_today = 1; - } else { - context["search_default_activities_" + data.filter] = 1; - } - this.do_action({ - type: "ir.actions.act_window", - name: data.model_name, - res_model: data.res_model, - views: [ - [false, "kanban"], - [false, "form"], - ], - search_view_id: [false], - domain: [["activity_team_user_ids", "in", [session.uid]]], - context: context, - }); - } - }, - _open_boards_activities_domain: function () { - if (this.filter === "team") { - return {additional_context: {search_default_my_team_activities: 1}}; - } - return this._super.apply(this, arguments); - }, - _getActivityData: function () { - if (this.filter !== "team") { - return this._super.apply(this, arguments); - } - var self = this; - - return self - ._rpc({ - model: "res.users", - method: "systray_get_activities", - args: [], - kwargs: {context: session.user_context}, - }) - .then(function (data) { - self._activities = data; - self.activityCounter = _.reduce( - data, - function (total_count, p_data) { - return total_count + p_data.total_count || 0; - }, - 0 - ); - self.$(".o_notification_counter").text(self.activityCounter); - self.$el.toggleClass("o_no_notification", !self.activityCounter); - // Unset context after we gather the info to avoid side effects - session.user_context.team_activities = false; - }); - }, - _onActivityMenuHide: function () { - this.filter = "my"; - this._update_team_activities_context(); - this._getActivityData(); - this.$filter_buttons.removeClass("active"); - var $target = $(".my_activities"); - $target.addClass("active"); - return this._super.apply(this, arguments); - }, -}); diff --git a/mail_activity_team/static/src/models/activity_group_view.esm.js b/mail_activity_team/static/src/models/activity_group_view.esm.js new file mode 100644 index 000000000..6073e8eda --- /dev/null +++ b/mail_activity_team/static/src/models/activity_group_view.esm.js @@ -0,0 +1,55 @@ +/** @odoo-module **/ + +import {registerPatch} from "@mail/model/model_core"; +import session from "web.session"; + +registerPatch({ + name: "ActivityGroupView", + recordMethods: { + onClickFilterButton(ev) { + const _super = this._super.bind(this); + if (this.activityMenuViewOwner.currentFilter === "my") { + return _super(ev); + } + if (this.activityMenuViewOwner.currentFilter === "team") { + this.activityMenuViewOwner.close(); + const data = _.extend( + {}, + $(ev.currentTarget).data(), + $(ev.target).data() + ); + const context = {}; + if (data.filter === "my") { + context.search_default_activities_overdue = 1; + context.search_default_activities_today = 1; + } else { + context["search_default_activities_" + data.filter] = 1; + } + context.team_activities = true; + // Necessary because activity_ids of mail.activity.mixin has auto_join + // So, duplicates are faking the count and "Load more" doesn't show up + context.force_search_count = 1; + let domain = [["activity_team_user_ids", "in", [session.uid]]]; + if (data.domain) { + domain = domain.concat(data.domain); + } + this.env.services.action.doAction( + { + context, + domain, + name: data.model_name, + res_model: data.res_model, + search_view_id: [false], + type: "ir.actions.act_window", + views: this.activityGroup.irModel.availableWebViews.map( + (viewName) => [false, viewName] + ), + }, + { + clearBreadcrumbs: true, + } + ); + } + }, + }, +}); diff --git a/mail_activity_team/static/src/models/activity_menu_view.esm.js b/mail_activity_team/static/src/models/activity_menu_view.esm.js new file mode 100644 index 000000000..dc9d0a927 --- /dev/null +++ b/mail_activity_team/static/src/models/activity_menu_view.esm.js @@ -0,0 +1,68 @@ +/** @odoo-module **/ + +import {attr} from "@mail/model/model_field"; +import {registerPatch} from "@mail/model/model_core"; +import session from "web.session"; + +registerPatch({ + name: "ActivityMenuView", + fields: { + currentFilter: attr({ + default: "my", + }), + isTeamActive: attr({ + default: false, + }), + }, + recordMethods: { + close() { + const _super = this._super.bind(this); + this.activateFilter($(".my_activities")); + return _super(); + }, + onClickDropdownToggle(ev) { + const _super = this._super.bind(this); + this.activateFilter($(".my_activities")); + return _super(ev); + }, + deactivateButtons() { + $(".o_filter_nav_item").removeClass("active"); + }, + updateTeamActivitiesContext() { + this.update({isTeamActive: this.currentFilter === "team"}); + }, + activateFilter(filter) { + this.deactivateButtons(); + filter.addClass("active"); + this.update({currentFilter: filter.data("filter")}); + this.updateTeamActivitiesContext(); + this.fetchData(); + }, + onClickActivityFilter(event) { + event.stopPropagation(); + this.activateFilter($(event.currentTarget)); + }, + /** + * @override + */ + async fetchData() { + const _super = this._super.bind(this); + if (!this.isTeamActive) { + return _super(); + } + const context = _.extend({}, session.user_context, {team_activities: true}); + const data = await this.messaging.rpc({ + model: "res.users", + method: "systray_get_activities", + args: [], + kwargs: {context: context}, + }); + this.update({ + activityGroups: data.map((vals) => + this.messaging.models.ActivityGroup.convertData(vals) + ), + extraCount: 0, + }); + }, + }, +}); diff --git a/mail_activity_team/static/src/xml/systray.xml b/mail_activity_team/static/src/xml/systray.xml deleted file mode 100644 index 9af724f73..000000000 --- a/mail_activity_team/static/src/xml/systray.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - -
-
- - -
-
-
-
- -
diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py index 861811581..66d47f906 100644 --- a/mail_activity_team/tests/test_mail_activity_team.py +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -114,7 +114,7 @@ class TestMailActivityTeam(TransactionCase): def test_activity_members(self): self.team1.member_ids |= self.employee2 - self.partner_client.refresh() + self.partner_client.invalidate_recordset() self.assertIn(self.employee2, self.partner_client.activity_team_user_ids) self.assertIn(self.employee, self.partner_client.activity_team_user_ids) self.assertEqual( @@ -155,9 +155,11 @@ class TestMailActivityTeam(TransactionCase): self.assertEqual( self.act2.team_id, self.team1, "Error: Activity 2 should have Team 1." ) - with Form(self.act2) as form: - form.user_id = self.employee2 - self.assertEqual(form.team_id, self.team2) + with self.assertRaises( + AssertionError, msg="can't write on invisible field user_id" + ): + with Form(self.act2) as form: + form.user_id = self.employee2 def test_activity_onchanges_user_no_team(self): self.assertEqual( @@ -269,7 +271,7 @@ class TestMailActivityTeam(TransactionCase): activity = partner_record.activity_schedule( activity_type_id=self.activity2.id, user_id=self.employee2.id ) - activity.flush() + activity.flush_recordset() res = ( self.env["res.users"] .with_user(self.employee.id) @@ -292,7 +294,7 @@ class TestMailActivityTeam(TransactionCase): self.team2.member_ids = self.employee2 partner_record = self.employee.partner_id.with_user(self.employee.id) activity = partner_record.activity_schedule(activity_type_id=self.activity1.id) - activity.flush() + activity.flush_recordset() _messages, next_activities = activity._action_done() self.assertTrue(next_activities) self.assertEqual(next_activities.team_id, self.team2)