add worker-based precalculation of cashbook-values

This commit is contained in:
Frederik Jaeckel 2023-12-29 23:07:39 +01:00
parent fb062243d6
commit ec97351db9
5 changed files with 216 additions and 17 deletions

View file

@ -174,6 +174,24 @@ class CbInvTestCase(object):
self.assertEqual(books[0].diff_amount, Decimal('-5.49'))
self.assertEqual(books[0].diff_percent, Decimal('-18.74'))
# searcher
self.assertEqual(Book.search_count([
('current_value', '=', Decimal('23.8'))]), 1)
self.assertEqual(Book.search_count([
('current_value_ref', '=', Decimal('23.8'))]), 1)
self.assertEqual(Book.search_count([
('diff_amount', '=', Decimal('-5.49'))]), 1)
self.assertEqual(Book.search_count([
('diff_percent', '=', Decimal('-18.74'))]), 1)
self.assertEqual(Book.search_count([
('quantity', '=', Decimal('1.0'))]), 2)
self.assertEqual(Book.search_count([
('quantity_all', '=', Decimal('1.0'))]), 2)
self.assertEqual(Book.search_count([
('current_rate', '=', Decimal('11.9'))]), 1)
self.assertEqual(Book.search_count([
('purchase_amount', '=', Decimal('15.0'))]), 2)
self.assertEqual(len(books[0].childs), 4)
self.assertEqual(
@ -327,10 +345,11 @@ class CbInvTestCase(object):
# wf --> check
Line.wfcheck(book.lines)
self.prep_valstore_run_worker()
# check quantities at cashbook
with Transaction().set_context({
'qdate': date(2022, 5, 5)}):
'date': date(2022, 5, 5)}):
book2, = Book.browse([book])
self.assertEqual(book.asset.rate, Decimal('2.8')) # usd
self.assertEqual(book2.quantity, Decimal('1.453'))
@ -340,7 +359,7 @@ class CbInvTestCase(object):
self.assertEqual(book2.current_value_ref, Decimal('3.87'))
with Transaction().set_context({
'qdate': date(2022, 5, 12)}):
'date': date(2022, 5, 12)}):
book2, = Book.browse([book])
self.assertEqual(book2.quantity, Decimal('4.753'))
self.assertEqual(book2.quantity_all, Decimal('4.753'))
@ -399,6 +418,17 @@ class CbInvTestCase(object):
'Aurum | 1,750.0000 usd/oz | 05/01/2022')
(usd, euro) = self.prep_2nd_currency(company)
usd.rates[0].date = date(2022, 5, 1)
usd.rates[0].save()
self.assertEqual(len(usd.rates), 1)
self.assertEqual(usd.rates[0].date, date(2022, 5, 1))
euro.rates[0].date = date(2022, 5, 1)
euro.rates[0].save()
self.assertEqual(len(euro.rates), 1)
self.assertEqual(euro.rates[0].date, date(2022, 5, 1))
self.assertEqual(company.currency.rec_name, 'Euro')
self.assertEqual(asset.symbol, 'usd/oz')
@ -441,7 +471,7 @@ class CbInvTestCase(object):
# check quantities at cashbook
with Transaction().set_context({
'qdate': date(2022, 5, 1)}):
'date': date(2022, 5, 1)}):
book2, = Book.browse([book])
self.assertEqual(book.asset.rate, Decimal('1750.0')) # usd
self.assertEqual(book2.quantity, Decimal('20.0'))
@ -508,6 +538,16 @@ class CbInvTestCase(object):
'Aurum | 1,750.0000 usd/oz | 05/01/2022')
(usd, euro) = self.prep_2nd_currency(company)
usd.rates[0].date = date(2022, 5, 1)
usd.rates[0].save()
self.assertEqual(len(usd.rates), 1)
self.assertEqual(usd.rates[0].date, date(2022, 5, 1))
euro.rates[0].date = date(2022, 5, 1)
euro.rates[0].save()
self.assertEqual(len(euro.rates), 1)
self.assertEqual(euro.rates[0].date, date(2022, 5, 1))
self.assertEqual(company.currency.rec_name, 'Euro')
self.assertEqual(asset.symbol, 'usd/oz')
chf, = Currency.create([{
@ -562,7 +602,7 @@ class CbInvTestCase(object):
# check quantities at cashbook
with Transaction().set_context({
'qdate': date(2022, 5, 1)}):
'date': date(2022, 5, 1)}):
book2, = Book.browse([book])
self.assertEqual(book.asset.rate, Decimal('1750.0')) # usd
self.assertEqual(book2.quantity, Decimal('20.0'))
@ -924,6 +964,7 @@ class CbInvTestCase(object):
# set line to 'checked', this creates the counterpart
Line.wfcheck(list(book.lines))
self.prep_valstore_run_worker()
self.assertEqual(book.rec_name, 'Book 1 | -1.00 usd | Open')
self.assertEqual(len(book.lines), 1)
@ -1069,6 +1110,7 @@ class CbInvTestCase(object):
self.assertEqual(len(book2.lines), 0)
Line.wfcheck(list(book1.lines))
self.prep_valstore_run_worker()
self.assertEqual(
book1.rec_name,
@ -1167,6 +1209,7 @@ class CbInvTestCase(object):
# set line to 'checked', this creates the counterpart
Line.wfcheck(list(book.lines))
self.prep_valstore_run_worker()
self.assertEqual(book.rec_name, 'Book 1 | 1.00 usd | Open')
self.assertEqual(len(book.lines), 1)
@ -1314,6 +1357,7 @@ class CbInvTestCase(object):
# set line to 'checked', this creates the counterpart
Line.wfcheck(list(book.lines))
self.prep_valstore_run_worker()
self.assertEqual(
book.rec_name,
@ -1498,6 +1542,7 @@ class CbInvTestCase(object):
# set line to 'checked', this creates the counterpart
Line.wfcheck(list(book.lines))
self.prep_valstore_run_worker()
self.assertEqual(
book.rec_name,
@ -1855,6 +1900,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(
books[0].rec_name,
@ -2010,6 +2056,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(
books[0].rec_name,
@ -2192,6 +2239,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(
books[0].rec_name,
@ -2531,6 +2579,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(
books[0].rec_name,
@ -2690,6 +2739,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(books[0].rec_name, 'Book Cash | -11.00 usd | Open')
self.assertEqual(books[0].balance_all, Decimal('-11.0'))
@ -2882,6 +2932,7 @@ class CbInvTestCase(object):
self.assertEqual(len(books[1].lines), 0)
Line.wfcheck([books[0].lines[0]])
self.prep_valstore_run_worker()
self.assertEqual(
books[0].rec_name,

View file

@ -152,6 +152,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 1)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -257,6 +258,7 @@ class YieldTestCase(object):
}])
Line.wfcheck(book_cash.lines)
self.prep_valstore_run_worker()
self.assertEqual(
book_asset.rec_name,
@ -366,6 +368,7 @@ class YieldTestCase(object):
}])
Line.wfcheck(book_asset.lines)
self.prep_valstore_run_worker()
self.assertEqual(
book_asset.rec_name,
@ -451,6 +454,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 1)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -532,6 +536,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 1)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -631,6 +636,7 @@ class YieldTestCase(object):
}])
Line.wfcheck(book_cash.lines)
self.prep_valstore_run_worker()
self.assertEqual(
book_asset.rec_name,
@ -743,6 +749,7 @@ class YieldTestCase(object):
}])
Line.wfcheck(book_asset.lines)
self.prep_valstore_run_worker()
self.assertEqual(
book_asset.rec_name,
@ -879,6 +886,7 @@ class YieldTestCase(object):
lines[0].rec_name,
'05/02/2022|Exp/Sp|-23.50 usd|all out (1) [-]|-3.0000 u')
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -1007,6 +1015,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 2)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -1150,6 +1159,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 1)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -1301,6 +1311,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 3)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,
@ -1438,6 +1449,7 @@ class YieldTestCase(object):
self.assertEqual(len(lines), 2)
Line.wfcheck(lines)
self.prep_valstore_run_worker()
self.assertEqual(
lines[0].rec_name,