Browse Source

Merge pull request #145 from charbeljc/relations_to_self

[ADD] allow same partner on both sides of a relation
pull/174/head
Holger Brunn 10 years ago
parent
commit
6584239225
  1. 1
      partner_relations/__init__.py
  2. 6
      partner_relations/__openerp__.py
  3. 8
      partner_relations/model/res_partner_relation.py
  4. 4
      partner_relations/model/res_partner_relation_type.py
  5. 22
      partner_relations/test/test_allow.yml
  6. 1
      partner_relations/tests/__init__.py
  7. 80
      partner_relations/tests/test_partner_relations.py
  8. 2
      partner_relations/view/res_partner_relation_type.xml

1
partner_relations/__init__.py

@ -19,3 +19,4 @@
#
##############################################################################
from . import model
from . import tests

6
partner_relations/__openerp__.py

@ -21,7 +21,7 @@
{
"name": "Partner relations",
"version": "1.1",
"author": "Therp BV,Odoo Community Association (OCA)",
"author": "Therp BV,Camptocamp,Odoo Community Association (OCA)",
"complexity": "normal",
"category": "Customer Relationship Management",
"depends": [
@ -30,6 +30,10 @@
"demo": [
"data/demo.xml",
],
"test": [
"test/test_allow.yml",
# "test/test_disallow.yml",
],
"data": [
"view/res_partner_relation_all.xml",
'view/res_partner_relation.xml',

8
partner_relations/model/res_partner_relation.py

@ -82,6 +82,7 @@ class ResPartnerRelation(models.Model):
),
}
allow_self = fields.Boolean(related='type_id.allow_self')
left_contact_type = fields.Selection(
lambda s: s.env['res.partner.relation.type']._get_partner_types(),
'Left Partner Type',
@ -287,9 +288,10 @@ class ResPartnerRelation(models.Model):
:raises exceptions.Warning: When constraint is violated
"""
if self.left_partner_id == self.right_partner_id:
raise exceptions.Warning(
_('Partners cannot have a relation with themselves.')
)
if not self.allow_self:
raise exceptions.Warning(
_('Partners cannot have a relation with themselves.')
)
@api.one
@api.constrains('left_partner_id', 'right_partner_id', 'active')

4
partner_relations/model/res_partner_relation_type.py

@ -57,6 +57,10 @@ class ResPartnerRelationType(models.Model):
'res.partner.category',
'Right partner category',
)
allow_self = fields.Boolean(
'Allow both sides to be the same',
default=False,
)
@api.model
def _get_partner_types(self):

22
partner_relations/test/test_allow.yml

@ -0,0 +1,22 @@
-
I create a relation allowing the same partner at both ends.
-
!record {model: res.partner.relation.type, id: partner_relations.allow_self}:
name: 'Relation Allow'
name_inverse: 'Inverse Relation Allow'
contact_type_right: 'p'
contact_type_left: 'p'
allow_self: True
-
I create a partner U for testing purposes
-
!record {model: res.partner, id: partner_relations.test_U}:
name: 'unittests.U'
image: ''
-
I create relation instance U -- (allow) --> U
-
!record {model: res.partner.relation, id: partner_relations.test_allow}:
left_partner_id: partner_relations.test_U
right_partner_id: partner_relations.test_U
type_id: partner_relations.allow_self

1
partner_relations/tests/__init__.py

@ -0,0 +1 @@
from . import test_partner_relations

80
partner_relations/tests/test_partner_relations.py

@ -0,0 +1,80 @@
# Author: Charbel Jacquin
# Copyright 2015 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from openerp.tests import common
from openerp.exceptions import ValidationError
class TestPartnerRelation(common.TransactionCase):
def setUp(self):
super(TestPartnerRelation, self).setUp()
self.partner_model = self.env['res.partner']
self.relation_type_model = self.env['res.partner.relation.type']
self.relation_model = self.env['res.partner.relation']
self.partner_1 = self.partner_model.create({
'name': 'Test User 1',
'is_company': False
})
self.partner_2 = self.partner_model.create({
'name': 'Test User 2',
'is_company': False
})
self.relation_allow = self.relation_type_model.create({
'name': 'allow',
'name_inverse': 'allow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': True
})
self.relation_disallow = self.relation_type_model.create({
'name': 'disallow',
'name_inverse': 'disallow_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
'allow_self': False
})
self.relation_default = self.relation_type_model.create({
'name': 'default',
'name_inverse': 'default_inverse',
'contact_type_left': 'p',
'contact_type_right': 'p',
})
def test_self_allowed(self):
self.relation_model.create({'type_id': self.relation_allow.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id})
def test_self_disallowed(self):
with self.assertRaises(ValidationError):
self.relation_model.create({'type_id': self.relation_disallow.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id})
def test_self_default(self):
with self.assertRaises(ValidationError):
self.relation_model.create({'type_id': self.relation_default.id,
'left_partner_id': self.partner_1.id,
'right_partner_id': self.partner_1.id})

2
partner_relations/view/res_partner_relation_type.xml

@ -9,6 +9,7 @@
<field name="name_inverse" />
<field name="contact_type_left" />
<field name="contact_type_right" />
<field name="allow_self" />
</tree>
</field>
</record>
@ -19,6 +20,7 @@
<form version="7.0" string="Partner relation">
<sheet>
<group>
<field name="allow_self" />
<group
colspan="2" col="2"
string="Left side of relation"

Loading…
Cancel
Save