diff --git a/partner_relations/model/res_partner_relation.py b/partner_relations/model/res_partner_relation.py
index 99dbcfbb7..35bc71ddf 100644
--- a/partner_relations/model/res_partner_relation.py
+++ b/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')
diff --git a/partner_relations/model/res_partner_relation_type.py b/partner_relations/model/res_partner_relation_type.py
index d7e68fbe2..e47041e61 100644
--- a/partner_relations/model/res_partner_relation_type.py
+++ b/partner_relations/model/res_partner_relation_type.py
@@ -57,6 +57,9 @@ class ResPartnerRelationType(models.Model):
'res.partner.category',
'Right partner category',
)
+ allow_self = fields.Boolean(
+ 'Allow both sides to be the same'
+ )
@api.model
def _get_partner_types(self):
diff --git a/partner_relations/view/res_partner_relation_type.xml b/partner_relations/view/res_partner_relation_type.xml
index d0a3c0746..415dbe154 100644
--- a/partner_relations/view/res_partner_relation_type.xml
+++ b/partner_relations/view/res_partner_relation_type.xml
@@ -9,6 +9,7 @@