diff --git a/modules/purchase_trade/fee.py b/modules/purchase_trade/fee.py index 2a75034..40e60f0 100755 --- a/modules/purchase_trade/fee.py +++ b/modules/purchase_trade/fee.py @@ -44,7 +44,9 @@ class Fee(ModelSQL,ModelView): shipment_out = fields.Many2One('stock.shipment.out', ondelete='CASCADE') shipment_internal = fields.Many2One( 'stock.shipment.internal', ondelete='CASCADE') - currency = fields.Many2One('currency.currency',"Currency", required=True) + currency = fields.Many2One('currency.currency',"Currency", states={ + 'required': ~Eval('enable_linked_currency'), + }, depends=['enable_linked_currency']) supplier = fields.Many2One('party.party',"Supplier", required=True) type = fields.Selection([ ('budgeted', 'Budgeted'), @@ -60,17 +62,14 @@ class Fee(ModelSQL,ModelView): enable_linked_currency = fields.Boolean("Linked currencies") linked_price = fields.Numeric("Linked Price", digits='unit', states={ 'invisible': ~Eval('enable_linked_currency'), - 'required': Eval('enable_linked_currency'), }, depends=['enable_linked_currency']) linked_currency = fields.Many2One('currency.linked', "Linked Currency", states={ 'invisible': ~Eval('enable_linked_currency'), - 'required': Eval('enable_linked_currency'), }, depends=['enable_linked_currency']) linked_unit = fields.Many2One('product.uom', "Linked Unit", states={ 'invisible': ~Eval('enable_linked_currency'), - 'required': Eval('enable_linked_currency'), }, depends=['enable_linked_currency']) mode = fields.Selection([ ('lumpsum', 'Lump sum'), diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index 7c8e255..2dd4329 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -2537,9 +2537,20 @@ class PurchaseTradeTestCase(ModuleTestCase): self.assertEqual(fee.on_change_with_quantity(), Decimal('25')) - def test_fee_currency_is_required(self): - 'fee currency is required for every fee mode' - self.assertTrue(fee_module.Fee.currency.required) + def test_fee_currency_is_conditionally_required_for_linked_currency(self): + 'fee currency does not block linked currency draft saves' + self.assertFalse(fee_module.Fee.currency.required) + self.assertIn('required', fee_module.Fee.currency.states) + self.assertEqual( + fee_module.Fee.currency.states['required'], + ~Eval('enable_linked_currency')) + + for field in ( + fee_module.Fee.linked_price, + fee_module.Fee.linked_currency, + fee_module.Fee.linked_unit): + self.assertFalse(field.required) + self.assertNotIn('required', field.states) def test_fee_get_non_cog_returns_zero_without_move_lines(self): 'fee non-cog amount is zero before any accounting move line exists' diff --git a/modules/purchase_trade/view/fee_tree_sequence.xml b/modules/purchase_trade/view/fee_tree_sequence.xml index 0e84426..b64929f 100755 --- a/modules/purchase_trade/view/fee_tree_sequence.xml +++ b/modules/purchase_trade/view/fee_tree_sequence.xml @@ -8,6 +8,7 @@ this repository contains the full copyright notices and license terms. --> + diff --git a/modules/purchase_trade/view/fee_tree_sequence2.xml b/modules/purchase_trade/view/fee_tree_sequence2.xml index fff37c4..5c66ca1 100755 --- a/modules/purchase_trade/view/fee_tree_sequence2.xml +++ b/modules/purchase_trade/view/fee_tree_sequence2.xml @@ -8,6 +8,7 @@ this repository contains the full copyright notices and license terms. --> +