From c35c169e3dccfcb4a56691facd014d6939c61897 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 24 Jul 2019 18:22:47 +0200 Subject: [PATCH 1/5] [IMP] mail_activity_team: include meetings --- mail_activity_team/__manifest__.py | 1 + .../migrations/11.0.2.2.0/post-migration.py | 17 +++++ mail_activity_team/models/__init__.py | 1 + mail_activity_team/models/calendar_event.py | 68 +++++++++++++++++++ mail_activity_team/models/mail_activity.py | 6 ++ mail_activity_team/readme/CONTRIBUTORS.rst | 2 + .../security/mail_activity_team_security.xml | 5 ++ .../tests/test_mail_activity_team.py | 52 ++++++++++++++ mail_activity_team/views/calendar_event.xml | 35 ++++++++++ 9 files changed, 187 insertions(+) create mode 100644 mail_activity_team/migrations/11.0.2.2.0/post-migration.py create mode 100644 mail_activity_team/models/calendar_event.py create mode 100644 mail_activity_team/views/calendar_event.xml diff --git a/mail_activity_team/__manifest__.py b/mail_activity_team/__manifest__.py index 4ae7ce20b..a05c09b22 100644 --- a/mail_activity_team/__manifest__.py +++ b/mail_activity_team/__manifest__.py @@ -14,6 +14,7 @@ 'mail_activity_board', ], 'data': [ + 'views/calendar_event.xml', 'views/assets_backend.xml', 'security/ir.model.access.csv', 'security/mail_activity_team_security.xml', diff --git a/mail_activity_team/migrations/11.0.2.2.0/post-migration.py b/mail_activity_team/migrations/11.0.2.2.0/post-migration.py new file mode 100644 index 000000000..f2411a492 --- /dev/null +++ b/mail_activity_team/migrations/11.0.2.2.0/post-migration.py @@ -0,0 +1,17 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl +from openupgradelib import openupgrade + + +@openupgrade.migrate(use_env=True) +def migrate(env, version): + rule = env.ref('calendar.calendar_event_rule_private') + rule.write({ + 'name': 'Private or group events', + 'domain_force': "['|', '|', " + "('privacy', 'not in', ['private', 'team'])," + "'&', ('privacy', '=', 'private')," + "('partner_ids', 'in', user.partner_id.id)," + "'&', ('privacy', '=', 'team')," + "('team_id', 'in', user.activity_team_ids.ids)]" + }) diff --git a/mail_activity_team/models/__init__.py b/mail_activity_team/models/__init__.py index 635ee6958..3a4420b37 100644 --- a/mail_activity_team/models/__init__.py +++ b/mail_activity_team/models/__init__.py @@ -2,3 +2,4 @@ from . import mail_activity_team from . import mail_activity from . import res_users from . import mail_activity_mixin +from . import calendar_event diff --git a/mail_activity_team/models/calendar_event.py b/mail_activity_team/models/calendar_event.py new file mode 100644 index 000000000..e6dab2737 --- /dev/null +++ b/mail_activity_team/models/calendar_event.py @@ -0,0 +1,68 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models, _ + + +class CalendarEvent(models.Model): + _inherit = 'calendar.event' + + 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) + + privacy = fields.Selection(selection_add=[ + ('team', 'Only team'), + ]) + team_id = fields.Many2one( + comodel_name='mail.activity.team', + default=lambda s: s._get_default_team_id(), + ) + + @api.multi + def read(self, fields=None, load='_classic_read'): + expected_fields = ['privacy', 'team_id'] + extra_fields = [] + fixed_fields = [ + 'id', 'allday', 'start', 'stop', 'display_start', 'display_stop', + 'duration', 'user_id', 'state', 'interval', 'count', + 'recurrent_id_date', 'rrule' + ] + if not fields: + fields = list(self._fields) + for field in expected_fields: + if field not in fields: + fields.append(field) + extra_fields.append(field) + result = super().read(fields, load) + for r in result: + if r['team_id'] and r['privacy'] == 'team': + team_id = r['team_id'] + if isinstance(team_id, tuple): + team_id = team_id[0] + team = self.env['mail.activity.team'].browse(team_id) + users = team.member_ids + if self.env.user not in users: + for f in r: + recurrent_fields = self._get_recurrent_fields() + public_fields = list(set( + recurrent_fields + fixed_fields)) + if f not in public_fields: + if isinstance(r[f], list): + r[f] = [] + else: + r[f] = False + if f == 'name': + r[f] = _('Busy') + for f in extra_fields: + if f in r: + del r[f] + return result diff --git a/mail_activity_team/models/mail_activity.py b/mail_activity_team/models/mail_activity.py index 90490e57d..2c9f38e3d 100644 --- a/mail_activity_team/models/mail_activity.py +++ b/mail_activity_team/models/mail_activity.py @@ -65,3 +65,9 @@ class MailActivity(models.Model): activity.user_id not in self.team_id.member_ids: raise ValidationError( _('The assigned user is not member of the team.')) + + @api.multi + def action_create_calendar_event(self): + res = super().action_create_calendar_event() + res['context']['default_team_id'] = self.team_id.id or False + return res diff --git a/mail_activity_team/readme/CONTRIBUTORS.rst b/mail_activity_team/readme/CONTRIBUTORS.rst index 3507ebd1f..93a9777c2 100644 --- a/mail_activity_team/readme/CONTRIBUTORS.rst +++ b/mail_activity_team/readme/CONTRIBUTORS.rst @@ -1,3 +1,5 @@ * `Eficent `_: * Jordi Ballester Alomar (jordi.ballester@eficent.com) + +* Enric Tobella diff --git a/mail_activity_team/security/mail_activity_team_security.xml b/mail_activity_team/security/mail_activity_team_security.xml index e19398ab2..e7a492339 100644 --- a/mail_activity_team/security/mail_activity_team_security.xml +++ b/mail_activity_team/security/mail_activity_team_security.xml @@ -12,4 +12,9 @@ + + Private or group events + ['|', '|', ('privacy', 'not in', ['private', 'team']), '&', ('privacy', '=', 'private'), ('partner_ids', 'in', user.partner_id.id), '&', ('privacy', '=', 'team'), ('team_id', 'in', user.activity_team_ids.ids)] + + diff --git a/mail_activity_team/tests/test_mail_activity_team.py b/mail_activity_team/tests/test_mail_activity_team.py index 908a657d4..22cab5bc9 100644 --- a/mail_activity_team/tests/test_mail_activity_team.py +++ b/mail_activity_team/tests/test_mail_activity_team.py @@ -2,6 +2,8 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo.tests.common import TransactionCase from odoo.exceptions import ValidationError +from odoo.fields import Datetime +from datetime import timedelta class TestMailActivityTeam(TransactionCase): @@ -75,6 +77,56 @@ class TestMailActivityTeam(TransactionCase): 'user_id': self.employee.id, }) + self.act3 = self.env['mail.activity'].sudo(self.employee).create({ + 'activity_type_id': self.browse_ref( + 'mail.mail_activity_data_meeting').id, + 'note': 'Meeting activity 3.', + 'res_id': self.partner_client.id, + 'res_model_id': self.partner_ir_model.id, + 'user_id': self.employee.id, + 'team_id': self.team1.id, + 'summary': 'Metting activity' + }) + self.start = Datetime.now() + self.stop = Datetime.to_string( + Datetime.from_string(self.start) + timedelta(hours=1) + ) + + def test_meeting_blank(self): + meeting = self.env['calendar.event'].sudo(self.employee).create({ + 'start': self.start, + 'stop': self.stop, + 'name': 'Test meeting' + }) + self.assertTrue(meeting.team_id) + + def test_meeting_from_activity(self): + action = self.act3.with_context( + default_res_id=self.act3.res_id, + default_res_model=self.act3.res_model, + ).action_create_calendar_event() + + meeting = self.env['calendar.event'].sudo(self.employee).with_context( + **action['context'] + ).create({ + 'start': self.start, + 'stop': self.stop + }) + self.assertTrue(meeting.team_id) + self.assertTrue(meeting.read(['description'])[0]['description']) + self.assertTrue( + meeting.sudo(self.employee2).read( + ['description'])[0]['description'], + 'He should be able to read the record as it is public by default', + ) + meeting.write({'privacy': 'team'}) + self.assertFalse( + meeting.sudo(self.employee2).read( + ['description'])[0]['description'], + 'He shouldn\'t be able to read the record as it is ' + 'public by default', + ) + def test_missing_activities(self): self.assertFalse( self.act1.team_id, 'Error: Activity 1 should not have a team.') diff --git a/mail_activity_team/views/calendar_event.xml b/mail_activity_team/views/calendar_event.xml new file mode 100644 index 000000000..8ed959144 --- /dev/null +++ b/mail_activity_team/views/calendar_event.xml @@ -0,0 +1,35 @@ + + + + + + + calendar.event.form (in mail_activity_team) + calendar.event + + + + + + + + + + calendar.event.search + calendar.event + + + + + + + + + + + + + From 3b70611de8d17edfc65c8d4f890b12ada38add7f Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 27 Aug 2019 11:04:11 +0000 Subject: [PATCH 2/5] [UPD] Update mail_activity_team.pot --- mail_activity_team/i18n/mail_activity_team.pot | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mail_activity_team/i18n/mail_activity_team.pot b/mail_activity_team/i18n/mail_activity_team.pot index cbb49b952..97945f0ed 100644 --- a/mail_activity_team/i18n/mail_activity_team.pot +++ b/mail_activity_team/i18n/mail_activity_team.pot @@ -45,6 +45,12 @@ msgstr "" msgid "Assign to missing activities" msgstr "" +#. module: mail_activity_team +#: code:addons/mail_activity_team/models/calendar_event.py:64 +#, python-format +msgid "Busy" +msgstr "" + #. module: mail_activity_team #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team_create_uid msgid "Created by" @@ -60,6 +66,11 @@ msgstr "" msgid "Display Name" msgstr "" +#. module: mail_activity_team +#: model:ir.model,name:mail_activity_team.model_calendar_event +msgid "Event" +msgstr "" + #. module: mail_activity_team #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team_id msgid "ID" @@ -107,12 +118,18 @@ msgstr "" msgid "My Team Activities" msgstr "" +#. module: mail_activity_team +#: model:ir.ui.view,arch_db:mail_activity_team.view_calendar_event_search +msgid "My Team Meetings" +msgstr "" + #. module: mail_activity_team #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team_name msgid "Name" msgstr "" #. module: mail_activity_team +#: model:ir.model.fields,field_description:mail_activity_team.field_calendar_event_team_id #: model:ir.model.fields,field_description:mail_activity_team.field_mail_activity_team_id_2777 #: model:ir.ui.view,arch_db:mail_activity_team.mail_activity_view_search msgid "Team" From 1264d54a48d25c69fc5d4ba118ed9292878deaa4 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Tue, 27 Aug 2019 11:04:15 +0000 Subject: [PATCH 3/5] [UPD] Update mass_mailing_custom_unsubscribe.pot --- .../i18n/mass_mailing_custom_unsubscribe.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mass_mailing_custom_unsubscribe/i18n/mass_mailing_custom_unsubscribe.pot b/mass_mailing_custom_unsubscribe/i18n/mass_mailing_custom_unsubscribe.pot index 993f089f5..45d9aac3d 100644 --- a/mass_mailing_custom_unsubscribe/i18n/mass_mailing_custom_unsubscribe.pot +++ b/mass_mailing_custom_unsubscribe/i18n/mass_mailing_custom_unsubscribe.pot @@ -125,7 +125,7 @@ msgstr "" #. module: mass_mailing_custom_unsubscribe #: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_id -#: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_reason_id_2826 +#: model:ir.model.fields,field_description:mass_mailing_custom_unsubscribe.field_mail_unsubscription_reason_id_2827 msgid "ID" msgstr "" From 652ce1f05a2faaa84526feee6b2adc6cc89de730 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 27 Aug 2019 11:13:26 +0000 Subject: [PATCH 4/5] [UPD] README.rst --- mail_activity_team/README.rst | 2 ++ mail_activity_team/static/description/index.html | 1 + 2 files changed, 3 insertions(+) diff --git a/mail_activity_team/README.rst b/mail_activity_team/README.rst index 0c79d92e1..fa6f65d82 100644 --- a/mail_activity_team/README.rst +++ b/mail_activity_team/README.rst @@ -80,6 +80,8 @@ Contributors * Jordi Ballester Alomar (jordi.ballester@eficent.com) +* Enric Tobella + Maintainers ~~~~~~~~~~~ diff --git a/mail_activity_team/static/description/index.html b/mail_activity_team/static/description/index.html index d5ca7bb6f..5f799436a 100644 --- a/mail_activity_team/static/description/index.html +++ b/mail_activity_team/static/description/index.html @@ -423,6 +423,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
  • Jordi Ballester Alomar (jordi.ballester@eficent.com)
  • +
  • Enric Tobella <etobella@creublanca.es>
  • From 4fe4eb0c986b4327561363569034b48bfda75b12 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 27 Aug 2019 11:13:26 +0000 Subject: [PATCH 5/5] mail_activity_team 11.0.2.2.0 --- mail_activity_team/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mail_activity_team/__manifest__.py b/mail_activity_team/__manifest__.py index a05c09b22..30db37183 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.2.1.1', + 'version': '11.0.2.2.0', 'development_status': 'Beta', 'category': 'Social Network', 'website': 'https://github.com/OCA/social',