Create booking from standard-cashbook to asset-cashbook
This commit is contained in:
parent
9c40e8990a
commit
d7aaa5eacc
2 changed files with 46 additions and 21 deletions
47
planner.py
47
planner.py
|
@ -489,11 +489,43 @@ class ScheduledBooking(DeactivableMixin, ModelSQL, ModelView):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run_booking(cls, records):
|
def run_booking(cls, records):
|
||||||
""" do prepared booking
|
""" create planned bookings
|
||||||
|
|
||||||
|
Args:
|
||||||
|
records (list): list of planned bokings
|
||||||
"""
|
"""
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
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')
|
||||||
|
Cashbook = pool.get('cashbook.book')
|
||||||
|
|
||||||
|
def add_asset_values(aline):
|
||||||
|
""" compute quantity from rate of asset and
|
||||||
|
amount to invest
|
||||||
|
|
||||||
|
Args:
|
||||||
|
aline (dict): prepared dictionary to create
|
||||||
|
cashbook-line-record
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: dictionary to create cashbook-line record
|
||||||
|
"""
|
||||||
|
asset_book = Cashbook(aline['booktransf'])
|
||||||
|
|
||||||
|
# add 2nd currency if currencies are different
|
||||||
|
aline = Line.add_2nd_currency(aline, asset_book.currency)
|
||||||
|
target_amount = aline.get('amount_2nd_currency', aline['amount'])
|
||||||
|
asset_rate = asset_book.asset.rate
|
||||||
|
with Transaction().set_context({'date': aline['date']}):
|
||||||
|
# convert rate of asset to currency of target-cashbook
|
||||||
|
asset_rate = Currency.compute(
|
||||||
|
asset_book.asset.currency, asset_rate, asset_book.currency,
|
||||||
|
round=False)
|
||||||
|
aline['quantity'] = Decimal('0.0')
|
||||||
|
if asset_rate:
|
||||||
|
aline['quantity'] = target_amount / asset_rate
|
||||||
|
return aline
|
||||||
|
|
||||||
to_create = []
|
to_create = []
|
||||||
to_create_check = []
|
to_create_check = []
|
||||||
|
@ -514,28 +546,17 @@ 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':
|
||||||
# add 2nd currency if currencies are different
|
line.update(add_asset_values(line))
|
||||||
line = Line.add_2nd_currency(
|
|
||||||
line, record.booktransf.currency)
|
|
||||||
print('-- line-1:', line)
|
|
||||||
if record.booktransf.current_rate:
|
|
||||||
line['quantity'] = (line.get(
|
|
||||||
'amount_2nd_currency', record.amount) /
|
|
||||||
record.booktransf.asset.rate)
|
|
||||||
|
|
||||||
print('-- line-2:', line)
|
|
||||||
if record.wfcheck:
|
if record.wfcheck:
|
||||||
to_create_check.append(line)
|
to_create_check.append(line)
|
||||||
else:
|
else:
|
||||||
to_create.append(line)
|
to_create.append(line)
|
||||||
|
|
||||||
if to_create_check:
|
if to_create_check:
|
||||||
print('-- to_create_check:', to_create_check)
|
|
||||||
lines = Line.create(to_create_check)
|
lines = Line.create(to_create_check)
|
||||||
Line.wfcheck(lines)
|
Line.wfcheck(lines)
|
||||||
|
|
||||||
if to_create:
|
if to_create:
|
||||||
print('-- to_create:', to_create)
|
|
||||||
Line.create(to_create)
|
Line.create(to_create)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -551,6 +551,8 @@ class PlannerTestCase(object):
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
def test_planner_cronjobs_booking_transfer_asset(self):
|
def test_planner_cronjobs_booking_transfer_asset(self):
|
||||||
""" create job, configure transfer-booking to asset-cashbook,
|
""" create job, configure transfer-booking to asset-cashbook,
|
||||||
|
same currencies between cashbooks,
|
||||||
|
same units between asset and cashbook
|
||||||
"""
|
"""
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
Planner = pool.get('cashbook.planner')
|
Planner = pool.get('cashbook.planner')
|
||||||
|
@ -561,6 +563,7 @@ class PlannerTestCase(object):
|
||||||
company = self.prep_company()
|
company = self.prep_company()
|
||||||
with Transaction().set_context({'company': company.id}):
|
with Transaction().set_context({'company': company.id}):
|
||||||
job = self.prep_create_job()
|
job = self.prep_create_job()
|
||||||
|
# rate of asset = 12.5 usd
|
||||||
asset_book = self.prep_planner_asset_book()
|
asset_book = self.prep_planner_asset_book()
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
asset_book.rec_name,
|
asset_book.rec_name,
|
||||||
|
@ -573,14 +576,14 @@ class PlannerTestCase(object):
|
||||||
Planner.write(*[
|
Planner.write(*[
|
||||||
[job],
|
[job],
|
||||||
{
|
{
|
||||||
'name': 'Transfer to Book-2',
|
'name': 'buy asset',
|
||||||
'amount': Decimal('10.0'),
|
'amount': Decimal('10.0'),
|
||||||
'bookingtype': 'mvout',
|
'bookingtype': 'mvout',
|
||||||
'category': category.id,
|
'category': category.id,
|
||||||
'subject': 'booking 10 usd --> 10.5 usd',
|
'subject': 'invest 10.00 usd to buy 0.80 units',
|
||||||
'booktransf': asset_book.id,
|
'booktransf': asset_book.id,
|
||||||
'wfcheck': True}])
|
'wfcheck': True}])
|
||||||
self.assertEqual(job.rec_name, 'Transfer to Book-2')
|
self.assertEqual(job.rec_name, 'buy asset')
|
||||||
self.assertEqual(job.cashbook.rec_name, 'Book 1 | 0.00 usd | Open')
|
self.assertEqual(job.cashbook.rec_name, 'Book 1 | 0.00 usd | Open')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
job.booktransf.rec_name,
|
job.booktransf.rec_name,
|
||||||
|
@ -600,17 +603,18 @@ class PlannerTestCase(object):
|
||||||
self.assertEqual(len(cashbook.lines), 1)
|
self.assertEqual(len(cashbook.lines), 1)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
cashbook.lines[0].rec_name,
|
cashbook.lines[0].rec_name,
|
||||||
"06/01/2022|to|-10.00 €|booking 10 usd --> 10.5 usd" +
|
"06/01/2022|to|-10.00 usd|invest 10.00 usd to buy 0.80 " +
|
||||||
" [Depot | 10.50 usd | Open]")
|
"units [Depot | 10.00 usd | Open | 0.8000 u]")
|
||||||
self.assertEqual(cashbook.lines[0].state, 'check')
|
self.assertEqual(cashbook.lines[0].state, 'check')
|
||||||
|
|
||||||
asset_book, = Cashbook.browse([job.booktransf])
|
asset_book, = Cashbook.browse([job.booktransf])
|
||||||
self.assertEqual(asset_book.rec_name, 'Depot | 10.50 usd | Open')
|
self.assertEqual(
|
||||||
|
asset_book.rec_name, 'Depot | 10.00 usd | Open | 0.8000 u')
|
||||||
self.assertEqual(len(asset_book.lines), 1)
|
self.assertEqual(len(asset_book.lines), 1)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
asset_book.lines[0].rec_name,
|
asset_book.lines[0].rec_name,
|
||||||
"06/01/2022|from|10.50 usd|booking 10 € --> 10.5 usd" +
|
"06/01/2022|from|10.00 usd|invest 10.00 usd to " +
|
||||||
" [Book 1 | -10.00 € | Open]")
|
"buy 0.80 units [Book 1 | -10.00 usd | Open]|0.8000 u")
|
||||||
self.assertEqual(asset_book.lines[0].state, 'check')
|
self.assertEqual(asset_book.lines[0].state, 'check')
|
||||||
self.assertEqual(asset_book.lines[0].state, 'check')
|
self.assertEqual(asset_book.lines[0].state, 'check')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue