tests: increase complexity when booking cash->asset
This commit is contained in:
parent
79926fbe5d
commit
2e8f81bd99
2 changed files with 52 additions and 21 deletions
38
planner.py
38
planner.py
|
@ -498,35 +498,36 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView):
|
||||||
IrDate = pool.get('ir.date')
|
IrDate = pool.get('ir.date')
|
||||||
Line = pool.get('cashbook.line')
|
Line = pool.get('cashbook.line')
|
||||||
Currency = pool.get('currency.currency')
|
Currency = pool.get('currency.currency')
|
||||||
Cashbook = pool.get('cashbook.book')
|
|
||||||
|
|
||||||
def add_asset_values(aline):
|
def add_asset_values(aline, from_book, to_book):
|
||||||
""" compute quantity from rate of asset and
|
""" compute quantity from rate of asset and
|
||||||
amount to invest
|
amount to invest
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
aline (dict): prepared dictionary to create
|
aline (dict): prepared dictionary to create
|
||||||
cashbook-line-record
|
cashbook-line-record
|
||||||
|
from_book (record): cashbook record,
|
||||||
|
to_book (record): cashbook record
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict: dictionary to create cashbook-line record
|
dict: dictionary to create cashbook-line record
|
||||||
"""
|
"""
|
||||||
from_book = Cashbook(aline['cashbook'])
|
|
||||||
to_book = Cashbook(aline['booktransf'])
|
|
||||||
|
|
||||||
# add 2nd currency if currencies are different
|
|
||||||
aline = Line.add_2nd_currency(aline, from_book.currency)
|
|
||||||
target_amount = aline.get('amount_2nd_currency', aline['amount'])
|
|
||||||
asset_rate = to_book.asset.rate
|
|
||||||
with Transaction().set_context({'date': aline['date']}):
|
with Transaction().set_context({'date': aline['date']}):
|
||||||
# convert rate of asset to currency of target-cashbook
|
# convert amount to target-currency
|
||||||
asset_rate = Currency.compute(
|
target_amount = Currency.compute(
|
||||||
to_book.asset.currency, asset_rate, to_book.currency,
|
from_book.currency, aline['amount'],
|
||||||
round=False)
|
to_book.currency, round=False)
|
||||||
aline['quantity'] = Decimal('0.0')
|
# convert asset-rate of target-cashbook to target-currency
|
||||||
if asset_rate:
|
asset_rate = (Currency.compute(
|
||||||
aline['quantity'] = (target_amount / asset_rate).quantize(
|
to_book.asset.currency, to_book.asset.rate,
|
||||||
Decimal(Decimal(1) / 10 ** to_book.quantity_digits))
|
to_book.currency, round=False) * Decimal(
|
||||||
|
to_book.asset.uom.factor /
|
||||||
|
to_book.quantity_uom.factor))
|
||||||
|
|
||||||
|
aline['quantity'] = Decimal('0.0')
|
||||||
|
if asset_rate:
|
||||||
|
aline['quantity'] = (target_amount / asset_rate).quantize(
|
||||||
|
Decimal(Decimal(1) / 10 ** to_book.quantity_digits))
|
||||||
return aline
|
return aline
|
||||||
|
|
||||||
to_create = []
|
to_create = []
|
||||||
|
@ -548,7 +549,8 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView):
|
||||||
if record.booktransf:
|
if record.booktransf:
|
||||||
line['booktransf'] = record.booktransf.id
|
line['booktransf'] = record.booktransf.id
|
||||||
if record.booktransf.feature == 'asset':
|
if record.booktransf.feature == 'asset':
|
||||||
line.update(add_asset_values(line))
|
line.update(add_asset_values(
|
||||||
|
line, record.cashbook, record.booktransf))
|
||||||
|
|
||||||
if record.wfcheck:
|
if record.wfcheck:
|
||||||
to_create_check.append(line)
|
to_create_check.append(line)
|
||||||
|
|
|
@ -632,6 +632,8 @@ class PlannerTestCase(object):
|
||||||
Category = pool.get('cashbook.category')
|
Category = pool.get('cashbook.category')
|
||||||
Cashbook = pool.get('cashbook.book')
|
Cashbook = pool.get('cashbook.book')
|
||||||
Currency = pool.get('currency.currency')
|
Currency = pool.get('currency.currency')
|
||||||
|
Uom = pool.get('product.uom')
|
||||||
|
Asset = pool.get('investment.asset')
|
||||||
|
|
||||||
company = self.prep_company()
|
company = self.prep_company()
|
||||||
with Transaction().set_context({'company': company.id}):
|
with Transaction().set_context({'company': company.id}):
|
||||||
|
@ -657,15 +659,41 @@ class PlannerTestCase(object):
|
||||||
job = self.prep_create_job()
|
job = self.prep_create_job()
|
||||||
self.assertEqual(job.cashbook.rec_name, 'Book 1 | 0.00 € | Open')
|
self.assertEqual(job.cashbook.rec_name, 'Book 1 | 0.00 € | Open')
|
||||||
|
|
||||||
|
uom_u, = Uom.search([('symbol', '=', 'u')])
|
||||||
|
self.assertEqual(uom_u.factor, Decimal('1.0'))
|
||||||
|
self.assertEqual(uom_u.rate, Decimal('1.0'))
|
||||||
|
|
||||||
|
uom_10u, = Uom.create([{
|
||||||
|
'category': uom_u.category.id,
|
||||||
|
'name': '10 Units',
|
||||||
|
'symbol': '10xU',
|
||||||
|
'factor': Decimal('10.0'),
|
||||||
|
'rate': Decimal('0.1'),
|
||||||
|
'rounding': Decimal('0.01'),
|
||||||
|
'digits': 2}])
|
||||||
|
self.assertEqual(uom_10u.factor, Decimal('10.0'))
|
||||||
|
self.assertEqual(uom_10u.rate, 0.1)
|
||||||
|
# check conversion: 1 [u] = 0.1 [10xU]
|
||||||
|
self.assertEqual(Uom.compute_qty(uom_u, 1.0, uom_10u), 0.1)
|
||||||
|
|
||||||
# asset-cashbook in CHF
|
# asset-cashbook in CHF
|
||||||
Cashbook.write(*[[asset_book], {'currency': chf.id}])
|
Cashbook.write(*[[asset_book], {'currency': chf.id}])
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
asset_book.rec_name,
|
asset_book.rec_name,
|
||||||
'Depot | 0.00 SFr | Open | 0.0000 u')
|
'Depot | 0.00 SFr | Open | 0.0000 u')
|
||||||
# rate of asset = 12.5 usd
|
|
||||||
|
Asset.write(*[
|
||||||
|
[asset_book.asset],
|
||||||
|
{
|
||||||
|
'uom': uom_10u.id,
|
||||||
|
'rates': [(
|
||||||
|
'write',
|
||||||
|
[asset_book.asset.rates[0]],
|
||||||
|
{'rate': Decimal('1.25')})]}])
|
||||||
|
# rate of asset = 1.25 usd
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
asset_book.asset.rec_name,
|
asset_book.asset.rec_name,
|
||||||
'Product 1 | 12.5000 usd/u | 05/02/2022')
|
'Product 1 | 1.2500 usd/10xU | 05/02/2022')
|
||||||
self.assertEqual(len(asset_book.lines), 0)
|
self.assertEqual(len(asset_book.lines), 0)
|
||||||
|
|
||||||
IrDate.today = MagicMock(return_value=date(2022, 5, 24))
|
IrDate.today = MagicMock(return_value=date(2022, 5, 24))
|
||||||
|
@ -700,7 +728,8 @@ class PlannerTestCase(object):
|
||||||
self.assertEqual(chf.rate, Decimal('0.95'))
|
self.assertEqual(chf.rate, Decimal('0.95'))
|
||||||
self.assertEqual(euro.rate, Decimal('1.0'))
|
self.assertEqual(euro.rate, Decimal('1.0'))
|
||||||
self.assertEqual(usd.rate, Decimal('1.05'))
|
self.assertEqual(usd.rate, Decimal('1.05'))
|
||||||
self.assertEqual(asset_book.asset.rate, Decimal('12.5'))
|
self.assertEqual(asset_book.asset.rate, Decimal('1.25'))
|
||||||
|
self.assertEqual(asset_book.asset.uom.factor, Decimal('10.0'))
|
||||||
|
|
||||||
# we invest 10€
|
# we invest 10€
|
||||||
# transfer to chf-account, buy asset with rate in usd
|
# transfer to chf-account, buy asset with rate in usd
|
||||||
|
|
Loading…
Reference in a new issue