diff --git a/partner_multi_relation_tabs/demo/res_partner_category_demo.xml b/partner_multi_relation_tabs/demo/res_partner_category_demo.xml
index ad02d7fb7..abbcb2d47 100644
--- a/partner_multi_relation_tabs/demo/res_partner_category_demo.xml
+++ b/partner_multi_relation_tabs/demo/res_partner_category_demo.xml
@@ -10,4 +10,8 @@
Functionary
+
+ Department
+
+
diff --git a/partner_multi_relation_tabs/demo/res_partner_demo.xml b/partner_multi_relation_tabs/demo/res_partner_demo.xml
index e59740e7e..08838cc96 100644
--- a/partner_multi_relation_tabs/demo/res_partner_demo.xml
+++ b/partner_multi_relation_tabs/demo/res_partner_demo.xml
@@ -25,4 +25,24 @@
HS
+
+
+ Programming
+ 1
+ HACKDEP
+
+
+
+
+ Helpdesk
+ 1
+ HELPDEP
+
+
diff --git a/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml b/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml
index 92d8531ab..afd54e7d0 100644
--- a/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml
+++ b/partner_multi_relation_tabs/demo/res_partner_relation_demo.xml
@@ -1,11 +1,30 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml b/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml
index 80e96a6a1..540df4f25 100644
--- a/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml
+++ b/partner_multi_relation_tabs/demo/res_partner_relation_type_demo.xml
@@ -27,4 +27,15 @@
+
+
+ has department
+ is department of
+
+ c
+
+
+
diff --git a/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml b/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml
index 9c6b1da7b..708b9dc50 100644
--- a/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml
+++ b/partner_multi_relation_tabs/demo/res_partner_tab_demo.xml
@@ -21,4 +21,14 @@
+
+
+ departments
+ Our departments
+
+
+
diff --git a/partner_multi_relation_tabs/models/res_partner.py b/partner_multi_relation_tabs/models/res_partner.py
index ef1db30b7..d8c969d7f 100644
--- a/partner_multi_relation_tabs/models/res_partner.py
+++ b/partner_multi_relation_tabs/models/res_partner.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Copyright 2014-2018 Therp BV
+# Copyright 2014-2018 Therp BV .
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# pylint: disable=no-member
import logging
diff --git a/partner_multi_relation_tabs/models/res_partner_relation_all.py b/partner_multi_relation_tabs/models/res_partner_relation_all.py
index 6cd2bf4c9..40f9de298 100644
--- a/partner_multi_relation_tabs/models/res_partner_relation_all.py
+++ b/partner_multi_relation_tabs/models/res_partner_relation_all.py
@@ -48,11 +48,10 @@ class ResPartnerRelationAll(models.AbstractModel):
# pylint: disable=no-member
result = super(ResPartnerRelationAll, self).onchange_partner_id()
if 'default_tab_id' in self.env.context:
- if 'domain' not in result:
- result['domain'] = {}
- if 'type_selection_id' not in result['domain']:
- result['domain']['type_selection_id'] = []
- selection_domain = result['domain']['type_selection_id']
- selection_domain.append(
+ result['domain'] = result['domain'] if 'domain' in result else {}
+ result['domain']['type_selection_id'] = \
+ result['domain']['type_selection_id'] \
+ if 'type_selection_id' in result['domain'] else {}
+ result['domain']['type_selection_id'].append(
('tab_id', '=', self.env.context['default_tab_id']))
return result
diff --git a/partner_multi_relation_tabs/tests/common.py b/partner_multi_relation_tabs/tests/common.py
index d9f876c39..5e43db29b 100644
--- a/partner_multi_relation_tabs/tests/common.py
+++ b/partner_multi_relation_tabs/tests/common.py
@@ -21,6 +21,8 @@ class TestCommon(common.SingleTransactionCase):
'partner_multi_relation_tabs.category_government')
self.category_functionary = self.env.ref(
'partner_multi_relation_tabs.category_functionary')
+ self.category_department = self.env.ref(
+ 'partner_multi_relation_tabs.category_department')
# Tabs.
self.tab_committee = self.env.ref(
'partner_multi_relation_tabs.tab_committee')
@@ -28,6 +30,8 @@ class TestCommon(common.SingleTransactionCase):
'partner_multi_relation_tabs.tab_board')
self.tab_positions = self.env.ref(
'partner_multi_relation_tabs.tab_positions')
+ self.tab_departments = self.env.ref(
+ 'partner_multi_relation_tabs.tab_departments')
# Types.
self.type_chairperson = self.env.ref(
'partner_multi_relation_tabs'
diff --git a/partner_multi_relation_tabs/tests/test_partner_tabs.py b/partner_multi_relation_tabs/tests/test_partner_tabs.py
index 49391bb93..0bdbb8cc6 100644
--- a/partner_multi_relation_tabs/tests/test_partner_tabs.py
+++ b/partner_multi_relation_tabs/tests/test_partner_tabs.py
@@ -42,6 +42,13 @@ class TestPartnerTabs(common.TestCommon):
'Tab field %s should not exist in %s.' %
(fieldname, etree.tostring(tree)))
+ def test_view_without_pages(self):
+ """Check that _add_tab_pages does not effect view without pages."""
+ # pylint: disable=protected-access
+ view = etree.Element('view')
+ extra_fields = self.partner_model._add_tab_pages(view)
+ self.assertFalse(extra_fields)
+
def test_tab_modifications(self):
tab_executive = self.tab_model.create({
'code': 'executive',
@@ -73,6 +80,13 @@ class TestPartnerTabs(common.TestCommon):
self.assertEqual(
type_chairperson.tab_left_id.id,
False)
+ # It should not be possible to add category or contact type to as
+ # selection criteria to a tab meant for specific partners.
+ with self.assertRaises(ValidationError):
+ self.tab_departments.write({'contact_type': 'c'})
+ with self.assertRaises(ValidationError):
+ self.tab_departments.write({
+ 'partner_category_id': self.category_government.id})
def test_type_modifications(self):
self.assertTrue(bool(self.tab_board))
@@ -123,3 +137,22 @@ class TestPartnerTabs(common.TestCommon):
self.assertEqual(
onchange_result['domain']['type_selection_id'][-1],
('tab_id', '=', self.tab_board.id))
+
+ def test_compute_visibility(self):
+ """Check the computation of visibility on partners."""
+ # pylint: disable=protected-access
+ main_partner = self.env.ref('base.main_partner')
+ main_partner._compute_tabs_visibility()
+ tab_obj = Tab(self.tab_departments)
+ fieldname = tab_obj.get_fieldname()
+ visible_fieldname = tab_obj.get_visible_fieldname()
+ self.assertIn(visible_fieldname, main_partner._fields)
+ self.assertIn(fieldname, main_partner._fields)
+ self.assertEqual(main_partner[visible_fieldname], True)
+ department_relations = main_partner[fieldname]
+ self.assertTrue(len(department_relations) >= 1)
+ departments = [
+ relation.other_partner_id for relation in department_relations]
+ for department in departments:
+ self.assertIn(
+ self.category_department, department.category_id)
diff --git a/partner_multi_relation_tabs/tests/test_tab.py b/partner_multi_relation_tabs/tests/test_tab.py
index e5b746d5d..276411dbc 100644
--- a/partner_multi_relation_tabs/tests/test_tab.py
+++ b/partner_multi_relation_tabs/tests/test_tab.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Therp BV .
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
-# pylint: disable=protected-access
from . import common
from ..tablib import Tab
@@ -25,7 +24,17 @@ class TestTab(common.TestCommon):
tab_obj = Tab(self.tab_positions)
self.assertTrue(
tab_obj.compute_visibility(self.partner_important_person),
- 'Board tab should be visible for functionary.')
+ 'Positions tab should be visible for functionary.')
self.assertFalse(
tab_obj.compute_visibility(self.partner_common_person),
- 'Board tab should not be visible for non-functionary.')
+ 'Positions tab should not be visible for non-functionary.')
+ # Tab for departments should only be visible for main partner
+ self.assertTrue(bool(self.tab_departments))
+ self.assertTrue(bool(self.partner_big_company))
+ tab_obj = Tab(self.tab_departments)
+ self.assertTrue(
+ tab_obj.compute_visibility(self.env.ref('base.main_partner')),
+ 'Department tab should be visible for main partner.')
+ self.assertFalse(
+ tab_obj.compute_visibility(self.partner_big_company),
+ 'Department tab should not be visible for other partners.')