diff options
| author | Gert Pellin <gpe@odoo.com> | 2018-08-29 08:30:31 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2018-09-17 13:56:39 +0200 |
| commit | 76a557c9ace456bdc538d90992b6aeaacc3c3395 (patch) | |
| tree | efb263ff6eec36c10c34cd6886a9703aa1359d6a | |
| parent | 261c72e8898b7c8e87f10906b0bfa15812fda98b (diff) | |
[IMP] hr,mail: auto-subscribe departments to channels
Purpose of this commit is to allow to make private channels linked to
an HR department with an auto subscription.
It will ease the use of discussion channels among employees of a given
department. Moreover auto subscription is useful to avoid having to
manually synchronize channel members and department members.
This commit is linked to task ID 1848526 and closes PR #26650 .
Co-authored-by: Gert Pellin <gpe@odoo.com>
Co-authored-by: Richard Mathot <rim@odoo.com>
| -rw-r--r-- | addons/hr/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/hr/models/__init__.py | 1 | ||||
| -rw-r--r-- | addons/hr/models/hr.py | 16 | ||||
| -rw-r--r-- | addons/hr/models/mail_channel.py | 27 | ||||
| -rw-r--r-- | addons/hr/tests/__init__.py | 1 | ||||
| -rw-r--r-- | addons/hr/tests/test_channel.py | 29 | ||||
| -rw-r--r-- | addons/hr/views/mail_channel_views.xml | 14 | ||||
| -rw-r--r-- | addons/mail/security/mail_security.xml | 6 | ||||
| -rw-r--r-- | addons/mail/views/mail_channel_views.xml | 4 |
9 files changed, 93 insertions, 6 deletions
diff --git a/addons/hr/__manifest__.py b/addons/hr/__manifest__.py index 721b4eacde8..d77cb860431 100644 --- a/addons/hr/__manifest__.py +++ b/addons/hr/__manifest__.py @@ -27,6 +27,7 @@ 'views/hr_views.xml', 'views/hr_templates.xml', 'views/res_config_settings_views.xml', + 'views/mail_channel_views.xml', 'data/hr_data.xml', ], 'demo': [ diff --git a/addons/hr/models/__init__.py b/addons/hr/models/__init__.py index 5d9895c99d2..6a7da3df60c 100644 --- a/addons/hr/models/__init__.py +++ b/addons/hr/models/__init__.py @@ -4,5 +4,6 @@ from . import hr from . import res_config_settings from . import mail_alias +from . import mail_channel from . import res_partner from . import res_users diff --git a/addons/hr/models/hr.py b/addons/hr/models/hr.py index 5dec2fcd1bf..cb53273cf6d 100644 --- a/addons/hr/models/hr.py +++ b/addons/hr/models/hr.py @@ -249,7 +249,12 @@ class Employee(models.Model): if vals.get('user_id'): vals.update(self._sync_user(self.env['res.users'].browse(vals['user_id']))) tools.image_resize_images(vals) - return super(Employee, self).create(vals) + employee = super(Employee, self).create(vals) + if employee.department_id: + self.env['mail.channel'].sudo().search([ + ('subscription_department_ids', 'in', employee.department_id.id) + ])._subscribe_users() + return employee @api.multi def write(self, vals): @@ -260,7 +265,14 @@ class Employee(models.Model): if vals.get('user_id'): vals.update(self._sync_user(self.env['res.users'].browse(vals['user_id']))) tools.image_resize_images(vals) - return super(Employee, self).write(vals) + res = super(Employee, self).write(vals) + if vals.get('department_id') or vals.get('user_id'): + department_id = vals['department_id'] if vals.get('department_id') else self[:1].department_id.id + # When added to a department or changing user, subscribe to the channels auto-subscribed by department + self.env['mail.channel'].sudo().search([ + ('subscription_department_ids', 'in', department_id) + ])._subscribe_users() + return res @api.multi def unlink(self): diff --git a/addons/hr/models/mail_channel.py b/addons/hr/models/mail_channel.py new file mode 100644 index 00000000000..5ea45fe3aa1 --- /dev/null +++ b/addons/hr/models/mail_channel.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class Channel(models.Model): + _inherit = 'mail.channel' + + subscription_department_ids = fields.Many2many( + 'hr.department', string='HR Departments', + help='Automatically subscribe members of those departments to the channel.') + + def _subscribe_users(self): + """ Auto-subscribe members of a department to a channel """ + super(Channel, self)._subscribe_users() + for mail_channel in self: + if mail_channel.subscription_department_ids: + mail_channel.write( + {'channel_partner_ids': + [(4, partner_id) for partner_id in mail_channel.mapped('subscription_department_ids.member_ids.user_id.partner_id').ids]}) + + def write(self, vals): + res = super(Channel, self).write(vals) + if vals.get('subscription_department_ids'): + self._subscribe_users() + return res diff --git a/addons/hr/tests/__init__.py b/addons/hr/tests/__init__.py index 6afcbdd58c7..9e189d217c7 100644 --- a/addons/hr/tests/__init__.py +++ b/addons/hr/tests/__init__.py @@ -2,4 +2,5 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import test_hr_employee +from . import test_channel from . import test_hr_flow diff --git a/addons/hr/tests/test_channel.py b/addons/hr/tests/test_channel.py new file mode 100644 index 00000000000..1b671ccd509 --- /dev/null +++ b/addons/hr/tests/test_channel.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.hr.tests.common import TestHrCommon + + +class TestChannel(TestHrCommon): + + def setUp(self): + super(TestChannel, self).setUp() + + self.channel = self.env['mail.channel'].create({'name': 'Test'}) + + emp0 = self.env['hr.employee'].create({ + 'user_id': self.res_users_hr_officer.id, + }) + self.department = self.env['hr.department'].create({ + 'name': 'Test Department', + 'member_ids': [(4, emp0.id)], + }) + + def test_auto_subscribe_department(self): + self.assertEqual(self.channel.channel_partner_ids, self.env['res.partner']) + + self.channel.write({ + 'subscription_department_ids': [(4, self.department.id)] + }) + + self.assertEqual(self.channel.channel_partner_ids, self.department.mapped('member_ids.user_id.partner_id')) diff --git a/addons/hr/views/mail_channel_views.xml b/addons/hr/views/mail_channel_views.xml new file mode 100644 index 00000000000..25ad1350bc3 --- /dev/null +++ b/addons/hr/views/mail_channel_views.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> +<odoo><data> + <record id="mail_channel_view_form_" model="ir.ui.view"> + <field name="name">mail.channel.view.form.inherit.hr</field> + <field name="model">mail.channel</field> + <field name="inherit_id" ref="mail.mail_channel_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='group_ids']" position="after"> + <field name="subscription_department_ids" widget="many2many_tags" + string="Auto Subscribe Departments"/> + </xpath> + </field> + </record> +</data></odoo>
\ No newline at end of file diff --git a/addons/mail/security/mail_security.xml b/addons/mail/security/mail_security.xml index d6d33578664..7a97925b42b 100644 --- a/addons/mail/security/mail_security.xml +++ b/addons/mail/security/mail_security.xml @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <odoo> - <data noupdate="1"> - + <data noupdate="0"> <!-- RULES --> <record id="mail_channel_rule" model="ir.rule"> <field name="name">Mail.channel: access only public and joined groups</field> @@ -12,7 +11,8 @@ '&', ('public', '=', 'groups'), ('group_public_id', 'in', [g.id for g in user.groups_id])]</field> <field name="perm_create" eval="False"/> </record> - + </data> + <data noupdate="1"> <record id="mail_followers_read_write_own" model="ir.rule"> <field name="name">mail.followers: write its own entries</field> <field name="model_id" ref="model_mail_followers"/> diff --git a/addons/mail/views/mail_channel_views.xml b/addons/mail/views/mail_channel_views.xml index 38407642c02..34c72a243e5 100644 --- a/addons/mail/views/mail_channel_views.xml +++ b/addons/mail/views/mail_channel_views.xml @@ -53,6 +53,7 @@ <field name="description"/> <field name="is_subscribed"/> <field name="group_ids"/> + <field name="public"/> <templates> <t t-name="kanban-description"> <div class="oe_group_description" t-if="record.description.raw_value"> @@ -126,7 +127,8 @@ <field name="group_public_id" attrs="{'invisible': [('public','!=','groups')], 'required': [('public','=','groups')]}" /> - <field name="group_ids" widget="many2many_tags"/> + <field name="group_ids" widget="many2many_tags" + string="Auto Subscribe Groups"/> </group> </page> <page string="Members"> |
