# © 2014-2016 Acsone (http://acsone.eu) # © 2016 Akretion (http://www.akretion.com/) # @author Stéphane Bidoul # @author Alexis de Lattre # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from datetime import datetime from odoo.exceptions import ValidationError from odoo.tests import common class TestAccountPartnerRequired(common.TransactionCase): def setUp(self): super(TestAccountPartnerRequired, self).setUp() self.account_obj = self.env["account.account"] self.account_type_obj = self.env["account.account.type"] self.move_obj = self.env["account.move"] self.move_line_obj = self.env["account.move.line"] self.sale_journal = self.env["account.journal"].create( { "type": "sale", "code": "SJXX", "name": "Sale journal", } ) liq_acc_type = self.env.ref("account.data_account_type_liquidity") self.account1 = self.account_obj.create( { "code": "124242", "name": "Test 1", "user_type_id": liq_acc_type.id, } ) self.account_type_custom = self.account_type_obj.create( { "name": "acc type test", "type": "other", "partner_policy": "optional", } ) self.account2 = self.account_obj.create( { "code": "124243", "name": "Test 2", "user_type_id": self.account_type_custom.id, } ) self.account3 = self.account_obj.create( { "code": "124244", "name": "Test 3", "user_type_id": self.account_type_custom.id, } ) def _create_move(self, with_partner, amount=100): date = datetime.now() if with_partner: partner_id = self.env.ref("base.res_partner_1").id else: partner_id = False move_vals = { "journal_id": self.sale_journal.id, "date": date, "line_ids": [ ( 0, 0, { "name": "/", "debit": 0, "credit": amount, "account_id": self.account1.id, }, ), ( 0, 0, { "name": "/", "debit": amount, "credit": 0, "account_id": self.account2.id, "partner_id": partner_id, }, ), ], } move = self.move_obj.create(move_vals) move_line = False for line in move.line_ids: if line.account_id == self.account2: move_line = line break return move_line def test_optional(self): self._create_move(with_partner=False) self._create_move(with_partner=True) def test_always_no_partner(self): self.account_type_custom.partner_policy = "always" with self.assertRaises(ValidationError): self._create_move(with_partner=False) def test_always_no_partner_0(self): # accept missing partner when debit=credit=0 self.account_type_custom.partner_policy = "always" self._create_move(with_partner=False, amount=0) def test_always_with_partner(self): self.account_type_custom.partner_policy = "always" self._create_move(with_partner=True) def test_never_no_partner(self): self.account_type_custom.partner_policy = "never" self._create_move(with_partner=False) def test_never_with_partner(self): self.account_type_custom.partner_policy = "never" with self.assertRaises(ValidationError): self._create_move(with_partner=True) def test_never_with_partner_0(self): self.account_type_custom.partner_policy = "never" # accept partner when debit=credit=0 self._create_move(with_partner=True, amount=0) def test_always_remove_partner(self): # remove partner when policy is always self.account_type_custom.partner_policy = "always" line = self._create_move(with_partner=True) with self.assertRaises(ValidationError): line.write({"partner_id": False}) def test_change_account(self): self.account_type_custom.partner_policy = "optional" line = self._create_move(with_partner=False) # change account to an account with policy always but missing partner self.account_type_custom.partner_policy = "always" with self.assertRaises(ValidationError): line.write({"account_id": self.account3.id}) # change account to an account with policy always with partner line.write( { "account_id": self.account3.id, "partner_id": self.env.ref("base.res_partner_1").id, } )