You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
4.6 KiB
107 lines
4.6 KiB
# Copyright 2017 Tecnativa - Vicent Cubells
|
|
# Copyright 2020 Tecnativa - João Marques
|
|
# Copyright 2020 Tecnativa - Pedro M. Baeza
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tests import common
|
|
|
|
|
|
class TestResPartnerRefUnique(common.SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestResPartnerRefUnique, cls).setUpClass()
|
|
cls.partner_obj = cls.env["res.partner"]
|
|
cls.company_obj = cls.env["res.company"]
|
|
# look for possible already duplicated refs for being resilient
|
|
cls.partner_obj.search([("ref", "!=", False)]).write({"ref": False})
|
|
cls.company = cls.company_obj.create({"name": "Test company"})
|
|
cls.env.user.write(
|
|
{"company_id": cls.company.id, "company_ids": cls.company.ids}
|
|
)
|
|
cls.partner1 = cls.partner_obj.create({"name": "Partner1", "company_id": False})
|
|
cls.partner2 = cls.partner_obj.create({"name": "Partner2", "company_id": False})
|
|
|
|
def test_check_ref_company(self):
|
|
(self.partner1 + self.partner2).write({"company_id": self.company.id})
|
|
# Test that we can create/modify partners with same ref in current situation
|
|
self.partner1.ref = "same_ref"
|
|
partner = self.partner_obj.create({"name": "other", "ref": "same_ref"})
|
|
# Try to activate restriction
|
|
with self.assertRaises(ValidationError):
|
|
self.company.partner_ref_unique = "all"
|
|
# Let the situation without duplicate refs and apply global condition
|
|
partner.unlink()
|
|
self.company.partner_ref_unique = "all"
|
|
with self.assertRaises(ValidationError):
|
|
self.partner2.ref = "same_ref"
|
|
with self.assertRaises(ValidationError):
|
|
self.partner_obj.create(
|
|
{"name": "other", "ref": "same_ref", "company_id": self.company.id}
|
|
)
|
|
# This one should also raise the constraint as the no-company contact
|
|
# collapses with the company specific contact
|
|
with self.assertRaises(ValidationError):
|
|
self.partner_obj.create(
|
|
{"name": "other", "ref": "same_ref", "company_id": False}
|
|
)
|
|
|
|
def test_partner1_wo_company_new_partner_w_company(self):
|
|
self.company.partner_ref_unique = "all"
|
|
self.partner1.write({"company_id": False, "ref": "same_ref"})
|
|
with self.assertRaises(ValidationError):
|
|
self.partner_obj.create(
|
|
{"name": "other", "ref": "same_ref", "company_id": self.company.id}
|
|
)
|
|
self.partner1.unlink()
|
|
|
|
def test_partner1_w_company_new_partner_wo_company(self):
|
|
self.company.partner_ref_unique = "all"
|
|
self.partner1.ref = "same_ref"
|
|
with self.assertRaises(ValidationError):
|
|
self.partner_obj.create(
|
|
{"name": "other", "ref": "same_ref", "company_id": False}
|
|
)
|
|
self.partner1.unlink()
|
|
|
|
def test_check_ref_companies(self):
|
|
self.company.partner_ref_unique = (
|
|
"none" # Ensure no constraint is applied at beginning
|
|
)
|
|
self.partner1.is_company = True
|
|
self.partner2.is_company = True
|
|
# Test that we can create/modify company partners
|
|
# with same ref in current situation
|
|
self.partner1.ref = "same_ref"
|
|
partner3 = self.partner_obj.create(
|
|
{"name": "Company3", "ref": "same_ref", "is_company": True}
|
|
)
|
|
# Try to activate restriction
|
|
with self.assertRaises(ValidationError):
|
|
self.company.partner_ref_unique = "companies"
|
|
# Let the situation without duplicate refs and apply global condition
|
|
partner3.unlink()
|
|
self.company.partner_ref_unique = "companies"
|
|
with self.assertRaises(ValidationError):
|
|
self.partner2.ref = "same_ref"
|
|
with self.assertRaises(ValidationError):
|
|
self.partner_obj.create(
|
|
{"is_company": True, "name": "other", "ref": "same_ref"}
|
|
)
|
|
# Here there shouldn't be any problem
|
|
self.partner_obj.create(
|
|
{"is_company": False, "name": "other", "ref": "same_ref"}
|
|
)
|
|
|
|
def test_merge(self):
|
|
self.company.partner_ref_unique = "all"
|
|
self.partner1.ref = "same_ref"
|
|
wizard = self.env["base.partner.merge.automatic.wizard"].create(
|
|
{
|
|
"partner_ids": [(4, self.partner1.id), (4, self.partner2.id)],
|
|
"dst_partner_id": self.partner2.id,
|
|
"state": "selection",
|
|
}
|
|
)
|
|
# this shouldn't raise error
|
|
wizard.action_merge()
|