fix test import and use uom rouding for float_compare

This commit is contained in:
Damien Crier
2023-06-27 15:12:24 +02:00
parent 3a44806859
commit 20bf0ca88b
3 changed files with 31 additions and 14 deletions

View File

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

View File

@@ -46,7 +46,7 @@ class TestContractSplit(TestContractBase):
"quantity_to_split": line.quantity, "quantity_to_split": line.quantity,
}, },
) )
for line in self.contract_line_ids for line in self.contract3.contract_line_ids
], ],
} }
self.assertEqual(self.contract3._get_default_split_values(), expected_result) self.assertEqual(self.contract3._get_default_split_values(), expected_result)
@@ -58,6 +58,7 @@ class TestContractSplit(TestContractBase):
.create({}) .create({})
) )
wizard.partner_id = self.partner_2.id wizard.partner_id = self.partner_2.id
wizard.split_line_ids.quantity_to_split = 0
initial_contracts_length = self.env["contract.contract"].search_count([]) initial_contracts_length = self.env["contract.contract"].search_count([])
# confirm wizard without setting to_split quantities # confirm wizard without setting to_split quantities
wizard.action_split_contract() wizard.action_split_contract()
@@ -75,6 +76,7 @@ class TestContractSplit(TestContractBase):
.create({}) .create({})
) )
wizard.partner_id = self.partner_2.id wizard.partner_id = self.partner_2.id
wizard.split_line_ids.quantity_to_split = 0
initial_contracts_length = self.env["contract.contract"].search_count([]) initial_contracts_length = self.env["contract.contract"].search_count([])
# set quantity to split in the wizard # set quantity to split in the wizard
wizard.split_line_ids[0].quantity_to_split = wizard.split_line_ids[ wizard.split_line_ids[0].quantity_to_split = wizard.split_line_ids[
@@ -87,10 +89,10 @@ class TestContractSplit(TestContractBase):
initial_contracts_length + 1, self.env["contract.contract"].search_count([]) initial_contracts_length + 1, self.env["contract.contract"].search_count([])
) )
# new contract has now the splitted line # new contract has now the splitted line
self.assertEqual(self.partner2.id, new_contract.partner_id.id) self.assertEqual(self.partner_2.id, new_contract.partner_id.id)
self.assertEqual(1, len(new_contract.contract_line_ids.ids)) self.assertEqual(1, len(new_contract.contract_line_ids.ids))
self.assertEqual( self.assertEqual(
self.contract3.id, self.contract3,
new_contract.contract_line_ids.mapped("splitted_from_contract_id"), new_contract.contract_line_ids.mapped("splitted_from_contract_id"),
) )
# Original contract has now only 2 lines (3 at the beginning) # Original contract has now only 2 lines (3 at the beginning)
@@ -107,6 +109,7 @@ class TestContractSplit(TestContractBase):
.create({}) .create({})
) )
wizard.partner_id = self.partner_2.id wizard.partner_id = self.partner_2.id
wizard.split_line_ids.quantity_to_split = 0
initial_contracts_length = self.env["contract.contract"].search_count([]) initial_contracts_length = self.env["contract.contract"].search_count([])
# set quantity to split in the wizard # set quantity to split in the wizard
wizard.split_line_ids.filtered(lambda l: l.name == "Line").quantity_to_split = 1 wizard.split_line_ids.filtered(lambda l: l.name == "Line").quantity_to_split = 1
@@ -116,13 +119,13 @@ class TestContractSplit(TestContractBase):
self.assertEqual( self.assertEqual(
initial_contracts_length + 1, self.env["contract.contract"].search_count([]) initial_contracts_length + 1, self.env["contract.contract"].search_count([])
) )
# new contract has partner2 as partner_id # new contract has partner_2 as partner_id
self.assertEqual(self.partner2.id, new_contract.partner_id.id) self.assertEqual(self.partner_2.id, new_contract.partner_id.id)
# new contract has now the splitted line with a qty of one # new contract has now the splitted line with a qty of one
self.assertEqual(1, len(new_contract.contract_line_ids.ids)) self.assertEqual(1, len(new_contract.contract_line_ids.ids))
self.assertEqual(1, new_contract.contract_line_ids.quantity) self.assertEqual(1, new_contract.contract_line_ids.quantity)
self.assertEqual( self.assertEqual(
self.contract3.id, self.contract3,
new_contract.contract_line_ids.mapped("splitted_from_contract_id"), new_contract.contract_line_ids.mapped("splitted_from_contract_id"),
) )
# Original contract still has 3 lines but with a qty=1 in the last line named "Line" # Original contract still has 3 lines but with a qty=1 in the last line named "Line"
@@ -141,9 +144,7 @@ class TestContractSplit(TestContractBase):
.create({}) .create({})
) )
# set quantity to split in the wizard # set quantity to split in the wizard
with self.assertRaises(ValidationError):
wizard.split_line_ids[0].quantity_to_split = ( wizard.split_line_ids[0].quantity_to_split = (
wizard.split_line_ids[0].original_qty + 2 wizard.split_line_ids[0].original_qty + 2
) )
# confirm wizard with setting to_split quantities that should raise an error
with self.assertRaises(ValidationError):
wizard.action_split_contract()

View File

@@ -44,13 +44,19 @@ class SplitContract(models.TransientModel):
contract_obj._get_values_create_split_contract(self) contract_obj._get_values_create_split_contract(self)
) )
# TODO: play onchange on partner_id. use onchange_helper from OCA ? # TODO: play onchange on partner_id. use onchange_helper from OCA ?
precision = self.env["decimal.precision"].precision_get(
"Product Unit of Measure"
)
for line in self.split_line_ids: for line in self.split_line_ids:
original_line = line.original_contract_line_id original_line = line.original_contract_line_id
if not line.quantity_to_split: if not line.quantity_to_split:
continue continue
if ( if (
float_compare( float_compare(
line.quantity_to_split, line.original_qty, precision_digits=2 line.quantity_to_split,
line.original_qty,
precision_digits=line.uom_id and None or precision,
precision_rounding=line.uom_id.rounding or None,
) )
== 0 == 0
): ):
@@ -60,7 +66,10 @@ class SplitContract(models.TransientModel):
) )
elif ( elif (
float_compare( float_compare(
line.quantity_to_split, line.original_qty, precision_digits=2 line.quantity_to_split,
line.original_qty,
precision_digits=line.uom_id and None or precision,
precision_rounding=line.uom_id.rounding or None,
) )
< 0 < 0
): ):
@@ -108,10 +117,16 @@ class SplitContractLine(models.TransientModel):
@api.constrains("quantity_to_split") @api.constrains("quantity_to_split")
def _check_quantity_to_move(self): def _check_quantity_to_move(self):
precision = self.env["decimal.precision"].precision_get(
"Product Unit of Measure"
)
for rec in self: for rec in self:
if ( if (
float_compare( float_compare(
rec.quantity_to_split, rec.original_qty, precision_digits=2 rec.quantity_to_split,
rec.original_qty,
precision_digits=rec.uom_id and None or precision,
precision_rounding=rec.uom_id.rounding or None,
) )
> 0 > 0
): ):