diff --git a/line.py b/line.py index bb31fac..a734d59 100644 --- a/line.py +++ b/line.py @@ -6,22 +6,36 @@ from decimal import Decimal from trytond.model import fields from trytond.pool import PoolMeta, Pool -from trytond.pyson import Eval, Or, If +from trytond.pyson import Eval, Or, If, And from trytond.exceptions import UserError from trytond.i18n import gettext from trytond.report import Report from trytond.modules.cashbook.line import STATES, DEPENDS from .mixin import SecondUomMixin -STATESQ = { - 'required': Eval('feature', '') == 'asset', - 'invisible': Eval('feature', '') != 'asset', +STATESQ1 = { + 'invisible': And( + Eval('feature', '') != 'asset', + Eval('booktransf_feature', '') != 'asset', + ), + 'required': Or( + Eval('feature', '') == 'asset', + Eval('booktransf_feature', '') == 'asset', + ), 'readonly': Or( STATES['readonly'], Eval('bookingtype', '').in_(['spin', 'spout']), ), } -DEPENDSQ = DEPENDS+['feature', 'quantity_digits', 'bookingtype'] +DEPENDSQ1 = ['feature', 'booktransf_feature', 'quantity_digits', 'bookingtype'] +DEPENDSQ1.extend(DEPENDS) + + +STATESQ2 = { + 'invisible': Eval('feature', '') != 'asset', + 'required': Eval('feature', '') == 'asset', + } +DEPENDSQ2 = ['feature', 'quantity_digits', 'bookingtype'] class Line(SecondUomMixin, metaclass=PoolMeta): @@ -29,19 +43,13 @@ class Line(SecondUomMixin, metaclass=PoolMeta): quantity = fields.Numeric(string='Quantity', digits=(16, Eval('quantity_digits', 4)), - states=STATESQ, depends=DEPENDSQ) + states=STATESQ1, depends=DEPENDSQ1) quantity_credit = fields.Numeric(string='Quantity Credit', digits=(16, Eval('quantity_digits', 4)), readonly=True, - states={ - 'invisible': STATESQ['invisible'], - 'required': STATESQ['required'], - }, depends=DEPENDSQ) + states=STATESQ2, depends=DEPENDSQ2) quantity_debit = fields.Numeric(string='Quantity Debit', digits=(16, Eval('quantity_digits', 4)), readonly=True, - states={ - 'invisible': STATESQ['invisible'], - 'required': STATESQ['required'], - }, depends=DEPENDSQ) + states=STATESQ2, depends=DEPENDSQ2) quantity_digits = fields.Function(fields.Integer(string='Digits', readonly=True, states={'invisible': True}), diff --git a/splitline.py b/splitline.py index 2f775c3..3ac08c5 100644 --- a/splitline.py +++ b/splitline.py @@ -6,27 +6,27 @@ from trytond.pool import PoolMeta, Pool from trytond.model import fields -from trytond.pyson import Eval, Or +from trytond.pyson import Eval, Or, And +from trytond.modules.cashbook.line import STATES from .mixin import SecondUomMixin +from .line import STATESQ1, DEPENDSQ1 - -STATES = { - 'readonly': Or( - Eval('state', '') != 'edit', - Eval('state_cashbook', '') != 'open', - ), - 'required': Eval('feature', '') == 'asset', - 'invisible': Eval('feature', '') != 'asset', - } -DEPENDS=['state', 'state_cashbook', 'feature'] - +STATESQ1A = {} +STATESQ1A.update(STATESQ1) +STATESQ1A['readonly'] = ~And( + ~STATES['readonly'], + Eval('bookingtype', '').in_(['spin', 'spout']), + Or( + Eval('feature', '') == 'asset', + Eval('booktransf_feature', '') == 'asset', + )) class SplitLine(SecondUomMixin, metaclass=PoolMeta): __name__ = 'cashbook.split' quantity = fields.Numeric(string='Quantity', digits=(16, Eval('quantity_digits', 4)), - states=STATES, depends=DEPENDS+['quantity_digits']) + states=STATESQ1A, depends=DEPENDSQ1) quantity_digits = fields.Function(fields.Integer(string='Digits', readonly=True, states={'invisible': True}), 'on_change_with_quantity_digits') diff --git a/tests/test_book.py b/tests/test_book.py index d76acdb..1aa80e2 100644 --- a/tests/test_book.py +++ b/tests/test_book.py @@ -600,6 +600,7 @@ class CbInvTestCase(CashbookTestCase, InvestmentTestCase): self.assertEqual(book.lines[0].quantity_credit, None) self.assertEqual(book.lines[0].quantity_debit, None) self.assertEqual(book.lines[0].feature, 'gen') + self.assertEqual(book.lines[0].booktransf_feature, 'asset') self.assertEqual(len(book2.lines), 0) self.assertEqual(book.lines[0].rec_name, '05/01/2022|to|-1.00 usd|Transfer Out [Asset-Book | 0.00 usd | Open | 0.0000 u]') @@ -739,6 +740,7 @@ class CbInvTestCase(CashbookTestCase, InvestmentTestCase): self.assertEqual(book.lines[0].quantity_credit, None) self.assertEqual(book.lines[0].quantity_debit, None) self.assertEqual(book.lines[0].feature, 'gen') + self.assertEqual(book.lines[0].booktransf_feature, 'asset') self.assertEqual(len(book2.lines), 0) self.assertEqual(book.lines[0].rec_name, '05/01/2022|from|1.00 usd|Transfer In [Asset-Book | 0.00 usd | Open | 0.0000 u]') @@ -863,6 +865,7 @@ class CbInvTestCase(CashbookTestCase, InvestmentTestCase): self.assertEqual(book.lines[0].quantity_credit, Decimal('1.5')) self.assertEqual(book.lines[0].quantity_debit, Decimal('0.0')) self.assertEqual(book.lines[0].feature, 'asset') + self.assertEqual(book.lines[0].booktransf_feature, 'asset') self.assertEqual(len(book2.lines), 0) self.assertEqual(book.lines[0].rec_name, '05/01/2022|from|1.00 usd|Transfer In [Asset-Book 1 | 0.00 usd | Open | 0.0000 u]|1.5000 u') @@ -1228,6 +1231,7 @@ class CbInvTestCase(CashbookTestCase, InvestmentTestCase): { 'lines': [('create', [{ 'bookingtype': 'spin', + 'date': date(2022, 5, 1), 'splitlines': [('create', [{ 'amount': Decimal('5.0'), 'splittype': 'cat', @@ -1251,6 +1255,6 @@ class CbInvTestCase(CashbookTestCase, InvestmentTestCase): self.assertEqual(book.lines[0].amount, Decimal('11.0')) self.assertEqual(book.lines[0].quantity, Decimal('4.0')) self.assertEqual(book.lines[0].quantity_uom.symbol, 'u') - self.assertEqual(book.lines[0].rec_name, '01/15/2023|Rev/Sp|11.00 usd|- [-]|4.00 u') + self.assertEqual(book.lines[0].rec_name, '05/01/2022|Rev/Sp|11.00 usd|- [-]|4.00 u') # end CbInvTestCase