line/splitline: quantitiy-states korrigiert

This commit is contained in:
Frederik Jaeckel 2023-01-16 22:23:13 +01:00
parent b9b500624e
commit bf84b092fc
3 changed files with 40 additions and 28 deletions

36
line.py
View file

@ -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}),

View file

@ -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')

View file

@ -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