From 2c7f0badbb28f09494a4336208d9d16653b5c439 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Tue, 27 Nov 2018 09:35:55 +0100 Subject: [PATCH 1/6] [ADD] mail_activity_team --- mail_activity_team/README.rst | 98 ++++ mail_activity_team/__init__.py | 1 + mail_activity_team/__manifest__.py | 23 + mail_activity_team/models/__init__.py | 3 + mail_activity_team/models/mail_activity.py | 34 ++ .../models/mail_activity_team.py | 14 + mail_activity_team/models/res_users.py | 11 + mail_activity_team/readme/CONTRIBUTORS.rst | 3 + mail_activity_team/readme/DESCRIPTION.rst | 3 + mail_activity_team/readme/USAGE.rst | 17 + .../security/ir.model.access.csv | 4 + .../security/mail_activity_team_security.xml | 15 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 419 ++++++++++++++++++ .../views/mail_activity_team_views.xml | 90 ++++ .../views/mail_activity_views.xml | 70 +++ mail_activity_team/views/res_users_views.xml | 16 + 17 files changed, 821 insertions(+) create mode 100644 mail_activity_team/README.rst create mode 100644 mail_activity_team/__init__.py create mode 100644 mail_activity_team/__manifest__.py create mode 100644 mail_activity_team/models/__init__.py create mode 100644 mail_activity_team/models/mail_activity.py create mode 100644 mail_activity_team/models/mail_activity_team.py create mode 100644 mail_activity_team/models/res_users.py create mode 100644 mail_activity_team/readme/CONTRIBUTORS.rst create mode 100644 mail_activity_team/readme/DESCRIPTION.rst create mode 100644 mail_activity_team/readme/USAGE.rst create mode 100644 mail_activity_team/security/ir.model.access.csv create mode 100644 mail_activity_team/security/mail_activity_team_security.xml create mode 100644 mail_activity_team/static/description/icon.png create mode 100644 mail_activity_team/static/description/index.html create mode 100644 mail_activity_team/views/mail_activity_team_views.xml create mode 100644 mail_activity_team/views/mail_activity_views.xml create mode 100644 mail_activity_team/views/res_users_views.xml diff --git a/mail_activity_team/README.rst b/mail_activity_team/README.rst new file mode 100644 index 00000000..0c79d92e --- /dev/null +++ b/mail_activity_team/README.rst @@ -0,0 +1,98 @@ +================== +Mail Activity Team +================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fsocial-lightgray.png?logo=github + :target: https://github.com/OCA/social/tree/11.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-11-0/social-11-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/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds the possibility to assign teams to activities. + + + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To set up new teams: + +#. Go to *Settings / Activate developer mode* +#. Go to *Settings / Technical / Email / Activity Teams* +#. Create a new Team and assign (optionally) the models in which it will + be used, and the members of the team. + +You can also assign a user to Activity teams going to +*Settings / Users & Companies / Users*, and in the *Preferences* tab, field +Activity Teams. + +When you create a new activity the application will propose the user's +assigned team. + +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. + +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 +~~~~~~~ + +* Eficent + +Contributors +~~~~~~~~~~~~ + +* `Eficent `_: + + * Jordi Ballester Alomar (jordi.ballester@eficent.com) + +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_activity_team/__init__.py b/mail_activity_team/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/mail_activity_team/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/mail_activity_team/__manifest__.py b/mail_activity_team/__manifest__.py new file mode 100644 index 00000000..4963644f --- /dev/null +++ b/mail_activity_team/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2018 Eficent Business and IT Consulting Services, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Mail Activity Team', + 'summary': 'Add Teams to Activities', + 'version': '11.0.1.0.0', + 'development_status': 'Beta', + 'category': 'Social Network', + 'website': 'https://github.com/OCA/social', + 'author': 'Eficent, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'installable': True, + 'depends': [ + 'mail_activity_board', + ], + 'data': [ + 'security/ir.model.access.csv', + 'security/mail_activity_team_security.xml', + 'views/mail_activity_team_views.xml', + 'views/mail_activity_views.xml', + 'views/res_users_views.xml', + ], +} diff --git a/mail_activity_team/models/__init__.py b/mail_activity_team/models/__init__.py new file mode 100644 index 00000000..2f37e6cc --- /dev/null +++ b/mail_activity_team/models/__init__.py @@ -0,0 +1,3 @@ +from . import mail_activity_team +from . import mail_activity +from . import res_users diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py new file mode 100644 index 00000000..51cf198f --- /dev/null +++ b/mail_activity_team/models/mail_activity.py @@ -0,0 +1,34 @@ +# 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 + + +class MailActivity(models.Model): + _inherit = "mail.activity" + + def _get_default_team_id(self): + res_model = self.env.context.get('default_res_model', False) + model = self.env['ir.model'].search([('model', '=', res_model)], + limit=1) + domain = [('member_ids', 'in', [self.env.uid])] + if res_model: + domain.extend(['|', ('res_model_ids', '=', False), + ('res_model_ids', 'in', model.ids)]) + return self.env['mail.activity.team'].search(domain, limit=1) + + team_id = fields.Many2one('mail.activity.team', + default=lambda s: s._get_default_team_id(),) + + @api.onchange('res_model_id', 'user_id') + def _onchange_model_user(self): + res = {'domain': {'team_id': []}} + if self.team_id: + if self.user_id not in self.team_id.member_ids: + self.team_id = False + if self.res_model_id: + res['domain']['team_id'] = [ + ('res_model_ids', 'in', self.res_model_id.ids)] + if self.user_id: + res['domain']['team_id'] = [ + ('member_ids', 'in', self.user_id.ids)] + return res diff --git a/mail_activity_team/models/mail_activity_team.py b/mail_activity_team/models/mail_activity_team.py new file mode 100644 index 00000000..81d0676f --- /dev/null +++ b/mail_activity_team/models/mail_activity_team.py @@ -0,0 +1,14 @@ +# 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 fields, models + + +class MailActivityTeam(models.Model): + _name = "mail.activity.team" + _description = 'Mail Activity Team' + + name = fields.Char(string='Name', required=True, translate=True) + active = fields.Boolean(string='Active', default=True) + res_model_ids = fields.Many2many('ir.model', string='Used models') + member_ids = fields.Many2many('res.users', 'mail_activity_team_users_rel', + string="Team Members") diff --git a/mail_activity_team/models/res_users.py b/mail_activity_team/models/res_users.py new file mode 100644 index 00000000..b55ae842 --- /dev/null +++ b/mail_activity_team/models/res_users.py @@ -0,0 +1,11 @@ +# 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 models, fields + + +class ResUsers(models.Model): + _inherit = "res.users" + + activity_team_ids = fields.Many2many('mail.activity.team', + 'mail_activity_team_users_rel', + string="Activity Teams") diff --git a/mail_activity_team/readme/CONTRIBUTORS.rst b/mail_activity_team/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..3507ebd1 --- /dev/null +++ b/mail_activity_team/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Eficent `_: + + * Jordi Ballester Alomar (jordi.ballester@eficent.com) diff --git a/mail_activity_team/readme/DESCRIPTION.rst b/mail_activity_team/readme/DESCRIPTION.rst new file mode 100644 index 00000000..c0a2e3ae --- /dev/null +++ b/mail_activity_team/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module adds the possibility to assign teams to activities. + + diff --git a/mail_activity_team/readme/USAGE.rst b/mail_activity_team/readme/USAGE.rst new file mode 100644 index 00000000..a9b4344f --- /dev/null +++ b/mail_activity_team/readme/USAGE.rst @@ -0,0 +1,17 @@ +To set up new teams: + +#. Go to *Settings / Activate developer mode* +#. Go to *Settings / Technical / Email / Activity Teams* +#. Create a new Team and assign (optionally) the models in which it will + be used, and the members of the team. + +You can also assign a user to Activity teams going to +*Settings / Users & Companies / Users*, and in the *Preferences* tab, field +Activity Teams. + +When you create a new activity the application will propose the user's +assigned team. + +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. diff --git a/mail_activity_team/security/ir.model.access.csv b/mail_activity_team/security/ir.model.access.csv new file mode 100644 index 00000000..c5efccfc --- /dev/null +++ b/mail_activity_team/security/ir.model.access.csv @@ -0,0 +1,4 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +access_mail_activity_team_all,mail.activity.team.all,model_mail_activity_team,,1,0,0,0 +access_mail_activity_team_user,mail.activity.team.user,model_mail_activity_team,base.group_user,1,1,0,0 +access_mail_activity_team_system_user,mail.activity.team.system.user,model_mail_activity_team,base.group_system_user,1,1,1,1 diff --git a/mail_activity_team/security/mail_activity_team_security.xml b/mail_activity_team/security/mail_activity_team_security.xml new file mode 100644 index 00000000..9ac63631 --- /dev/null +++ b/mail_activity_team/security/mail_activity_team_security.xml @@ -0,0 +1,15 @@ + + + + + mail.activity: user: my team + + ['|', '&'('team_id', '=', False),('user_id', '=', user.id),('team_id', '=', user.team_ids.ids)] + + + + + + + + diff --git a/mail_activity_team/static/description/icon.png b/mail_activity_team/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_team/static/description/index.html b/mail_activity_team/static/description/index.html new file mode 100644 index 00000000..8862473c --- /dev/null +++ b/mail_activity_team/static/description/index.html @@ -0,0 +1,419 @@ + + + + + + +Mail Activity Team + + + +
+

Mail Activity Team

+ + +

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

+

This module adds the possibility to assign teams to activities.

+

Table of contents

+ +
+

Usage

+

To set up new teams:

+
    +
  1. Go to Settings / Activate developer mode
  2. +
  3. Go to Settings / Technical / Email / Activity Teams
  4. +
  5. Create a new Team and assign (optionally) the models in which it will +be used, and the members of the team.
  6. +
+

You can also assign a user to Activity teams going to +Settings / Users & Companies / Users, and in the Preferences tab, field +Activity Teams.

+

When you create a new activity the application will propose the user’s +assigned team.

+

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.

+
+
+

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

+
    +
  • Eficent
  • +
+
+
+

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_activity_team/views/mail_activity_team_views.xml b/mail_activity_team/views/mail_activity_team_views.xml new file mode 100644 index 00000000..52203d2d --- /dev/null +++ b/mail_activity_team/views/mail_activity_team_views.xml @@ -0,0 +1,90 @@ + + + + + + + + mail.activity.team.view.form + mail.activity.team + +
+ +
+ +
+ + + + + + + + + + + + + +
+
+
+
+ + + + + mail.activity.team.view.tree + mail.activity.team + + + + + + + + + + + + mail.activity.team.view.search + mail.activity.team + + + + + + + + + + + + + Activity Teams + mail.activity.team + form + tree,form + [] + {} + + + + + + + +
diff --git a/mail_activity_team/views/mail_activity_views.xml b/mail_activity_team/views/mail_activity_views.xml new file mode 100644 index 00000000..93ad71b9 --- /dev/null +++ b/mail_activity_team/views/mail_activity_views.xml @@ -0,0 +1,70 @@ + + + + + mail.activity.view.form.popup + mail.activity + + + + + + + + + + mail.activity.view.tree + mail.activity + + + + + + + + + + mail.activity.view.form + mail.activity + + + + + + + + + + mail.activity.boards.view.kanban + mail.activity + + + + + + +
+
+ Team: +
+
+
+
+ + + + mail.activity.boards.view.search + mail.activity + + + + + + + + + + + + +
diff --git a/mail_activity_team/views/res_users_views.xml b/mail_activity_team/views/res_users_views.xml new file mode 100644 index 00000000..bf79365e --- /dev/null +++ b/mail_activity_team/views/res_users_views.xml @@ -0,0 +1,16 @@ + + + + + res.users.form.activity.team + res.users + + + + + + + + + + From a53d1551fbdf60d7ed5cdef047ecb9c330d051bb Mon Sep 17 00:00:00 2001 From: mreficent Date: Tue, 27 Nov 2018 12:22:49 +0100 Subject: [PATCH 2/6] [IMP] Some improvements and fixes --- mail_activity_team/models/mail_activity.py | 70 ++++++++++++++----- .../models/mail_activity_team.py | 69 ++++++++++++++++-- mail_activity_team/models/res_users.py | 8 ++- .../security/ir.model.access.csv | 2 +- .../security/mail_activity_team_security.xml | 4 +- .../views/mail_activity_team_views.xml | 16 +++-- 6 files changed, 134 insertions(+), 35 deletions(-) diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py index 51cf198f..46dd6de2 100644 --- a/mail_activity_team/models/mail_activity.py +++ b/mail_activity_team/models/mail_activity.py @@ -1,34 +1,66 @@ # 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 +from odoo import api, models, fields, _ +from odoo.exceptions import ValidationError class MailActivity(models.Model): _inherit = "mail.activity" - def _get_default_team_id(self): - res_model = self.env.context.get('default_res_model', False) - model = self.env['ir.model'].search([('model', '=', res_model)], - limit=1) - domain = [('member_ids', 'in', [self.env.uid])] + def _get_default_team_id(self, user_id=None): + if not user_id: + user_id = self.env.uid + res_model = self.env.context.get('default_res_model') + model = self.env['ir.model'].search( + [('model', '=', res_model)], limit=1) + domain = [('member_ids', 'in', [user_id])] if res_model: domain.extend(['|', ('res_model_ids', '=', False), ('res_model_ids', 'in', model.ids)]) return self.env['mail.activity.team'].search(domain, limit=1) - team_id = fields.Many2one('mail.activity.team', - default=lambda s: s._get_default_team_id(),) + team_id = fields.Many2one( + comodel_name='mail.activity.team', + default=lambda s: s._get_default_team_id(), + ) - @api.onchange('res_model_id', 'user_id') - def _onchange_model_user(self): + @api.onchange('user_id') + def _onchange_user_id(self): res = {'domain': {'team_id': []}} - if self.team_id: - if self.user_id not in self.team_id.member_ids: - self.team_id = False - if self.res_model_id: - res['domain']['team_id'] = [ - ('res_model_ids', 'in', self.res_model_id.ids)] - if self.user_id: - res['domain']['team_id'] = [ - ('member_ids', 'in', self.user_id.ids)] + if not self.user_id: + return res + res['domain']['team_id'] = [ + '|', + ('res_model_ids', '=', False), + ('res_model_ids', 'in', self.res_model_id.ids)] + if self.team_id and self.user_id in self.team_id.member_ids: + return res + self.team_id = self.with_context( + default_res_model=self.res_model_id.id).\ + _get_default_team_id(user_id=self.user_id.id) return res + + @api.onchange('team_id') + def _onchange_team_id(self): + res = {'domain': {'user_id': []}} + if not self.team_id: + return res + res['domain']['user_id'] = [('id', 'in', self.team_id.member_ids.ids)] + if self.user_id and self.user_id in self.team_id.member_ids: + return res + if self.team_id.user_id: + self.user_id = self.team_id.user_id + elif self.env.user in self.team_id.member_ids.ids: + self.user_id = self.env.user + else: + self.user_id = self.env['res.users'] + return res + + @api.multi + @api.constrains('team_id', 'user_id') + def _check_team_and_user(self): + for activity in self: + if activity.team_id and activity.user_id and \ + activity.user_id not in self.team_id.member_ids: + raise ValidationError( + _('The assigned user is not member of the team.')) diff --git a/mail_activity_team/models/mail_activity_team.py b/mail_activity_team/models/mail_activity_team.py index 81d0676f..f97c185b 100644 --- a/mail_activity_team/models/mail_activity_team.py +++ b/mail_activity_team/models/mail_activity_team.py @@ -1,14 +1,71 @@ # 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 fields, models +from odoo import api, fields, models class MailActivityTeam(models.Model): _name = "mail.activity.team" _description = 'Mail Activity Team' - name = fields.Char(string='Name', required=True, translate=True) - active = fields.Boolean(string='Active', default=True) - res_model_ids = fields.Many2many('ir.model', string='Used models') - member_ids = fields.Many2many('res.users', 'mail_activity_team_users_rel', - string="Team Members") + @api.depends('res_model_ids', 'member_ids') + def _compute_missing_activities(self): + activity_model = self.env['mail.activity'] + for team in self: + domain = [('team_id', '=', False)] + if team.member_ids: + domain.append(('user_id', 'in', team.member_ids.ids)) + if team.res_model_ids: + domain.append(('res_model_id', 'in', team.res_model_ids.ids)) + team.count_missing_activities = activity_model.search( + domain, count=True) + + name = fields.Char( + string='Name', + required=True, + translate=True, + ) + active = fields.Boolean( + string='Active', + default=True, + ) + res_model_ids = fields.Many2many( + comodel_name='ir.model', + string='Used models', + domain=lambda self: [ + ('model', 'in', + [k for k in self.env.registry if issubclass( + type(self.env[k]), type(self.env['mail.activity.mixin'])) + and self.env[k]._auto]) + ], + ) + member_ids = fields.Many2many( + comodel_name='res.users', + relation='mail_activity_team_users_rel', + string="Team Members", + ) + user_id = fields.Many2one( + comodel_name='res.users', + string='Team Leader', + domain="[('id', 'in', member_ids)]", + ) + count_missing_activities = fields.Integer( + string="Missing Activities", + compute='_compute_missing_activities', + default=0, + ) + + @api.onchange('member_ids') + def _onchange_member_ids(self): + if self.user_id and self.user_id not in self.member_ids: + self.user_id = False + + def assign_team_to_unassigned_activities(self): + activity_model = self.env['mail.activity'] + for team in self: + domain = [('team_id', '=', False)] + if team.member_ids: + domain.append(('user_id', 'in', team.member_ids.ids)) + if team.res_model_ids: + domain.append(('res_model_id', 'in', team.res_model_ids.ids)) + missing_activities = activity_model.search(domain) + missing_activities.write({'team_id': team.id}) diff --git a/mail_activity_team/models/res_users.py b/mail_activity_team/models/res_users.py index b55ae842..e1f9cc33 100644 --- a/mail_activity_team/models/res_users.py +++ b/mail_activity_team/models/res_users.py @@ -6,6 +6,8 @@ from odoo import models, fields class ResUsers(models.Model): _inherit = "res.users" - activity_team_ids = fields.Many2many('mail.activity.team', - 'mail_activity_team_users_rel', - string="Activity Teams") + activity_team_ids = fields.Many2many( + comodel_name='mail.activity.team', + relation='mail_activity_team_users_rel', + string="Activity Teams", + ) diff --git a/mail_activity_team/security/ir.model.access.csv b/mail_activity_team/security/ir.model.access.csv index c5efccfc..0a9918d6 100644 --- a/mail_activity_team/security/ir.model.access.csv +++ b/mail_activity_team/security/ir.model.access.csv @@ -1,4 +1,4 @@ "id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" access_mail_activity_team_all,mail.activity.team.all,model_mail_activity_team,,1,0,0,0 access_mail_activity_team_user,mail.activity.team.user,model_mail_activity_team,base.group_user,1,1,0,0 -access_mail_activity_team_system_user,mail.activity.team.system.user,model_mail_activity_team,base.group_system_user,1,1,1,1 +access_mail_activity_team_system_user,mail.activity.team.system.user,model_mail_activity_team,base.group_system,1,1,1,1 diff --git a/mail_activity_team/security/mail_activity_team_security.xml b/mail_activity_team/security/mail_activity_team_security.xml index 9ac63631..e19398ab 100644 --- a/mail_activity_team/security/mail_activity_team_security.xml +++ b/mail_activity_team/security/mail_activity_team_security.xml @@ -4,10 +4,10 @@ mail.activity: user: my team - ['|', '&'('team_id', '=', False),('user_id', '=', user.id),('team_id', '=', user.team_ids.ids)] + ["|", ('team_id', 'in', user.activity_team_ids.ids), "&", ('team_id', '=', False), ('user_id', '=', user.id)] - + diff --git a/mail_activity_team/views/mail_activity_team_views.xml b/mail_activity_team/views/mail_activity_team_views.xml index 52203d2d..72b49a1d 100644 --- a/mail_activity_team/views/mail_activity_team_views.xml +++ b/mail_activity_team/views/mail_activity_team_views.xml @@ -4,26 +4,34 @@ VIEWS --> - mail.activity.team.view.form mail.activity.team
+
+ +
+ options='{"terminology": "archive"}'/>
+ - + From ec51dfda83b674098399b3c1f246cada02feb2ab Mon Sep 17 00:00:00 2001 From: mreficent Date: Wed, 28 Nov 2018 14:24:37 +0100 Subject: [PATCH 3/6] [ADD] tests --- mail_activity_team/tests/__init__.py | 1 + .../tests/test_mail_activity_team.py | 118 ++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 mail_activity_team/tests/__init__.py create mode 100644 mail_activity_team/tests/test_mail_activity_team.py diff --git a/mail_activity_team/tests/__init__.py b/mail_activity_team/tests/__init__.py new file mode 100644 index 00000000..f4a7f595 --- /dev/null +++ b/mail_activity_team/tests/__init__.py @@ -0,0 +1 @@ +from . import test_mail_activity_team diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py new file mode 100644 index 00000000..3f7928cb --- /dev/null +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -0,0 +1,118 @@ +# 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.tests.common import TransactionCase +from odoo.exceptions import ValidationError + + +class TestMailActivityTeam(TransactionCase): + + def setUp(self): + super(TestMailActivityTeam, self).setUp() + + self.env["mail.activity.team"].search([]).unlink() + + 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.env.ref('base.group_partner_manager').id])] + }) + + self.employee2 = self.env['res.users'].create({ + 'company_id': self.env.ref("base.main_company").id, + 'name': "Employee 2", + 'login': "csu2", + 'email': "crmuser2@yourcompany.com", + 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])] + }) + + self.partner_ir_model = self.env['ir.model']._get('res.partner') + + activity_type_model = self.env['mail.activity.type'] + self.activity1 = activity_type_model.create({ + 'name': 'Initial Contact', + 'days': 5, + 'summary': 'ACT 1 : Presentation, barbecue, ... ', + 'res_model_id': self.partner_ir_model.id, + }) + self.activity2 = activity_type_model.create({ + 'name': 'Call for Demo', + 'days': 6, + 'summary': 'ACT 2 : I want to show you my ERP !', + 'res_model_id': self.partner_ir_model.id, + }) + + self.partner_client = self.env.ref("base.res_partner_1") + + self.act1 = self.env['mail.activity'].sudo(self.employee).create({ + 'activity_type_id': self.activity1.id, + 'note': 'Partner activity 1.', + 'res_id': self.partner_client.id, + 'res_model_id': self.partner_ir_model.id, + 'user_id': self.employee.id, + }) + + self.team1 = self.env['mail.activity.team'].sudo().create({ + 'name': 'Team 1', + 'res_model_ids': [(6, 0, [self.partner_ir_model.id])], + 'member_ids': [(6, 0, [self.employee.id])], + }) + + self.team2 = self.env['mail.activity.team'].sudo().create({ + 'name': 'Team 2', + 'res_model_ids': [(6, 0, [self.partner_ir_model.id])], + 'member_ids': [(6, 0, [self.employee.id, self.employee2.id])], + }) + + self.act2 = self.env['mail.activity'].sudo(self.employee).create({ + 'activity_type_id': self.activity2.id, + 'note': 'Partner activity 2.', + 'res_id': self.partner_client.id, + 'res_model_id': self.partner_ir_model.id, + 'user_id': self.employee.id, + }) + + def test_missing_activities(self): + self.assertFalse( + self.act1.team_id, 'Error: Activity 1 should not have a team.') + self.assertEqual(self.team1.count_missing_activities, 1) + self.team1.assign_team_to_unassigned_activities() + self.team1._compute_missing_activities() + self.assertEqual(self.team1.count_missing_activities, 0) + self.assertEqual(self.act1.team_id, self.team1) + + def test_activity_onchanges(self): + self.assertEqual( + self.act2.team_id, self.team1, + 'Error: Activity 2 should have Team 1.') + with self.env.do_in_onchange(): + self.act2.team_id = False + self.act2._onchange_team_id() + self.assertEqual(self.act2.user_id, self.employee) + self.act2.team_id = self.team2 + self.act2._onchange_team_id() + self.assertEqual(self.act2.user_id, self.employee) + self.act2.user_id = self.employee2 + self.act2._onchange_user_id() + self.assertEqual(self.act2.team_id, self.team2) + self.act2.team_id = self.team1 + self.act2._onchange_team_id() + self.assertFalse(self.act2.user_id) + with self.assertRaises(ValidationError): + self.act2.write({ + 'user_id': self.employee2.id, + 'team_id': self.team1.id, + }) + + def test_team_onchanges(self): + self.assertFalse( + self.team2.user_id, + 'Error: Team 2 should not have a Team Leader yet.') + with self.env.do_in_onchange(): + self.team2.user_id = self.employee + self.team2.member_ids = [(3, self.employee.id)] + self.team2._onchange_member_ids() + self.assertFalse(self.team2.user_id) From 488bf3c0941eb580188934f80059ac18009382da Mon Sep 17 00:00:00 2001 From: mreficent Date: Mon, 3 Dec 2018 13:44:36 +0100 Subject: [PATCH 4/6] [MIG] mail_activity_team: Migration to 12.0 --- mail_activity_team/README.rst | 11 ++++++----- mail_activity_team/__manifest__.py | 2 +- mail_activity_team/readme/CONTRIBUTORS.rst | 1 + mail_activity_team/static/description/index.html | 6 +++--- oca_dependencies.txt | 2 -- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mail_activity_team/README.rst b/mail_activity_team/README.rst index 0c79d92e..ae233e3b 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/11.0/mail_activity_team + :target: https://github.com/OCA/social/tree/12.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-11-0/social-11-0-mail_activity_team + :target: https://translation.odoo-community.org/projects/social-12-0/social-12-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/11.0 + :target: https://runbot.odoo-community.org/runbot/205/12.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| @@ -61,7 +61,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. @@ -79,6 +79,7 @@ Contributors * `Eficent `_: * Jordi Ballester Alomar (jordi.ballester@eficent.com) + * Miquel Raïch (miquel.raich@eficent.com) Maintainers ~~~~~~~~~~~ @@ -93,6 +94,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 4963644f..b4f77335 100644 --- a/mail_activity_team/__manifest__.py +++ b/mail_activity_team/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'Mail Activity Team', 'summary': 'Add Teams to Activities', - 'version': '11.0.1.0.0', + 'version': '12.0.1.0.0', 'development_status': 'Beta', 'category': 'Social Network', 'website': 'https://github.com/OCA/social', diff --git a/mail_activity_team/readme/CONTRIBUTORS.rst b/mail_activity_team/readme/CONTRIBUTORS.rst index 3507ebd1..6bb24056 100644 --- a/mail_activity_team/readme/CONTRIBUTORS.rst +++ b/mail_activity_team/readme/CONTRIBUTORS.rst @@ -1,3 +1,4 @@ * `Eficent `_: * Jordi Ballester Alomar (jordi.ballester@eficent.com) + * Miquel Raïch (miquel.raich@eficent.com) diff --git a/mail_activity_team/static/description/index.html b/mail_activity_team/static/description/index.html index 8862473c..1ee2f86d 100644 --- a/mail_activity_team/static/description/index.html +++ b/mail_activity_team/static/description/index.html @@ -345,7 +345,7 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module adds the possibility to assign teams to activities.

Table of contents

@@ -383,7 +383,7 @@ teams.

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.

@@ -410,7 +410,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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

-

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

+

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

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

diff --git a/oca_dependencies.txt b/oca_dependencies.txt index eb994658..9c8c9172 100644 --- a/oca_dependencies.txt +++ b/oca_dependencies.txt @@ -1,3 +1 @@ server-tools -# Until merged -social-eficent https://github.com/Eficent/social 12.0-mig-mail_activity_board From 8cc7d3c874c050696540938a5429843602a663e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Gil=20Sorribes?= Date: Fri, 21 Dec 2018 16:05:49 +0100 Subject: [PATCH 5/6] [IMP] Set team responsible as default user when activity is created --- mail_activity_team/models/mail_activity.py | 15 +++++++-------- mail_activity_team/models/mail_activity_team.py | 11 +++++++++-- .../tests/test_mail_activity_team.py | 2 +- .../views/mail_activity_team_views.xml | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py index 46dd6de2..1fccf746 100644 --- a/mail_activity_team/models/mail_activity.py +++ b/mail_activity_team/models/mail_activity.py @@ -46,14 +46,13 @@ class MailActivity(models.Model): if not self.team_id: return res res['domain']['user_id'] = [('id', 'in', self.team_id.member_ids.ids)] - if self.user_id and self.user_id in self.team_id.member_ids: - return res - if self.team_id.user_id: - self.user_id = self.team_id.user_id - elif self.env.user in self.team_id.member_ids.ids: - self.user_id = self.env.user - else: - self.user_id = self.env['res.users'] + if self.user_id not in self.team_id.member_ids: + if self.team_id.user_id: + self.user_id = self.team_id.user_id + elif len(self.team_id.member_ids) == 1: + self.user_id = self.team_id.member_ids + else: + self.user_id = self.env['res.users'] return res @api.multi diff --git a/mail_activity_team/models/mail_activity_team.py b/mail_activity_team/models/mail_activity_team.py index f97c185b..1e44e0d7 100644 --- a/mail_activity_team/models/mail_activity_team.py +++ b/mail_activity_team/models/mail_activity_team.py @@ -46,7 +46,6 @@ class MailActivityTeam(models.Model): user_id = fields.Many2one( comodel_name='res.users', string='Team Leader', - domain="[('id', 'in', member_ids)]", ) count_missing_activities = fields.Integer( string="Missing Activities", @@ -59,6 +58,13 @@ class MailActivityTeam(models.Model): if self.user_id and self.user_id not in self.member_ids: self.user_id = False + @api.onchange('user_id') + def _onchange_user_id(self): + if self.user_id and self.user_id not in self.member_ids: + members_ids = self.member_ids.ids + members_ids.append(self.user_id.id) + self.member_ids = [(4, member) for member in members_ids] + def assign_team_to_unassigned_activities(self): activity_model = self.env['mail.activity'] for team in self: @@ -68,4 +74,5 @@ class MailActivityTeam(models.Model): if team.res_model_ids: domain.append(('res_model_id', 'in', team.res_model_ids.ids)) missing_activities = activity_model.search(domain) - missing_activities.write({'team_id': team.id}) + for missing_activity in missing_activities: + missing_activity.write({'team_id': team.id}) diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py index 3f7928cb..413e4122 100644 --- a/mail_activity_team/tests/test_mail_activity_team.py +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -100,7 +100,7 @@ class TestMailActivityTeam(TransactionCase): self.assertEqual(self.act2.team_id, self.team2) self.act2.team_id = self.team1 self.act2._onchange_team_id() - self.assertFalse(self.act2.user_id) + self.assertEqual(self.act2.user_id, self.team1.member_ids) with self.assertRaises(ValidationError): self.act2.write({ 'user_id': self.employee2.id, diff --git a/mail_activity_team/views/mail_activity_team_views.xml b/mail_activity_team/views/mail_activity_team_views.xml index 72b49a1d..6ecba09a 100644 --- a/mail_activity_team/views/mail_activity_team_views.xml +++ b/mail_activity_team/views/mail_activity_team_views.xml @@ -27,7 +27,7 @@ - + Date: Mon, 24 Dec 2018 13:19:52 +0100 Subject: [PATCH 6/6] [IMP] Add search filter for My Team Activities --- mail_activity_team/views/mail_activity_views.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mail_activity_team/views/mail_activity_views.xml b/mail_activity_team/views/mail_activity_views.xml index 93ad71b9..ec0ecd47 100644 --- a/mail_activity_team/views/mail_activity_views.xml +++ b/mail_activity_team/views/mail_activity_views.xml @@ -61,6 +61,9 @@ + + +