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. -->
+