fix sorting/searcher of field 'yield_balance'
This commit is contained in:
parent
6d9a5b080d
commit
12b5442f19
2 changed files with 69 additions and 28 deletions
45
book.py
45
book.py
|
@ -177,7 +177,7 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
||||||
readonly=True, digits=(16, Eval('currency_digits', 2)),
|
readonly=True, digits=(16, Eval('currency_digits', 2)),
|
||||||
states={'invisible': Eval('feature', '') != 'asset'},
|
states={'invisible': Eval('feature', '') != 'asset'},
|
||||||
depends=['currency_digits', 'feature']),
|
depends=['currency_digits', 'feature']),
|
||||||
'on_change_with_yield_balance', searcher='search_asset_quantity')
|
'get_yield_balance_data', searcher='search_asset_quantity')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def __setup__(cls):
|
def __setup__(cls):
|
||||||
|
@ -331,15 +331,39 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
||||||
"""
|
"""
|
||||||
return 4
|
return 4
|
||||||
|
|
||||||
@fields.depends('yield_sales', 'yield_dividend_total', 'diff_amount')
|
@classmethod
|
||||||
def on_change_with_yield_balance(self, name=None):
|
def get_yield_balance_data(cls, cashbooks, names):
|
||||||
""" calculate yield total
|
""" calculate yield total
|
||||||
fee is already contained in 'diff_amount'
|
fee is already contained in 'diff_amount'
|
||||||
"""
|
"""
|
||||||
sum_lst = [
|
context = Transaction().context
|
||||||
self.diff_amount, self.yield_dividend_total, self.yield_sales]
|
|
||||||
sum2 = sum([x for x in sum_lst if x is not None])
|
result = {x: {y.id: Decimal('0.0') for y in cashbooks} for x in names}
|
||||||
return sum2
|
|
||||||
|
query_date = context.get('date', None)
|
||||||
|
if context.get(
|
||||||
|
'compute_yield_balance',
|
||||||
|
False) or query_date is not None:
|
||||||
|
amounts = {}
|
||||||
|
amounts.update(cls.get_asset_quantity(cashbooks, ['diff_amount']))
|
||||||
|
amounts.update(cls.get_yield_data(
|
||||||
|
cashbooks,
|
||||||
|
['yield_dividend_total', 'yield_sales']))
|
||||||
|
|
||||||
|
for cashbook in cashbooks:
|
||||||
|
sum_lst = [
|
||||||
|
amounts[x][cashbook.id]
|
||||||
|
for x in [
|
||||||
|
'diff_amount', 'yield_dividend_total',
|
||||||
|
'yield_sales']]
|
||||||
|
sum2 = sum([x for x in sum_lst if x is not None])
|
||||||
|
result['yield_balance'][cashbook.id] = sum2
|
||||||
|
else:
|
||||||
|
for cashbook in cashbooks:
|
||||||
|
for value in cashbook.value_store:
|
||||||
|
if value.field_name in names:
|
||||||
|
result[value.field_name][cashbook.id] = value.numvalue
|
||||||
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_yield_data_sql(cls, date_from=None, date_to=None):
|
def get_yield_data_sql(cls, date_from=None, date_to=None):
|
||||||
|
@ -754,7 +778,8 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
||||||
'quantity', 'quantity_all', 'current_value', 'current_value_ref',
|
'quantity', 'quantity_all', 'current_value', 'current_value_ref',
|
||||||
'diff_amount', 'diff_percent', 'current_rate', 'purchase_amount',
|
'diff_amount', 'diff_percent', 'current_rate', 'purchase_amount',
|
||||||
'yield_fee_total', 'yield_dividend_total', 'yield_sales',
|
'yield_fee_total', 'yield_dividend_total', 'yield_sales',
|
||||||
'yield_fee_12m', 'yield_dividend_12m', 'yield_sales_12m'])
|
'yield_fee_12m', 'yield_dividend_12m', 'yield_sales_12m',
|
||||||
|
'yield_balance'])
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -779,6 +804,10 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
||||||
'yield_fee_total', 'yield_dividend_total',
|
'yield_fee_total', 'yield_dividend_total',
|
||||||
'yield_sales', 'yield_fee_12m', 'yield_dividend_12m',
|
'yield_sales', 'yield_fee_12m', 'yield_dividend_12m',
|
||||||
'yield_sales_12m']))
|
'yield_sales_12m']))
|
||||||
|
with Transaction().set_context({
|
||||||
|
'compute_yield_balance': True}):
|
||||||
|
ValStore.update_values(
|
||||||
|
cls.get_yield_balance_data(records, ['yield_balance']))
|
||||||
|
|
||||||
@fields.depends('id')
|
@fields.depends('id')
|
||||||
def on_change_with_show_performance(self, name=None):
|
def on_change_with_show_performance(self, name=None):
|
||||||
|
|
|
@ -132,21 +132,24 @@ class ValueStoreTestCase(object):
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[11].rec_name,
|
values[11].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_balance|4.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[12].rec_name,
|
values[12].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[13].rec_name,
|
values[13].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[14].rec_name,
|
values[14].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[15].rec_name,
|
values[15].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[16].rec_name,
|
values[16].rec_name,
|
||||||
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
||||||
|
self.assertEqual(
|
||||||
|
values[17].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
||||||
|
|
||||||
# add rate
|
# add rate
|
||||||
|
@ -203,21 +206,24 @@ class ValueStoreTestCase(object):
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[11].rec_name,
|
values[11].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_balance|4.29|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[12].rec_name,
|
values[12].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[13].rec_name,
|
values[13].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[14].rec_name,
|
values[14].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[15].rec_name,
|
values[15].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[16].rec_name,
|
values[16].rec_name,
|
||||||
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
||||||
|
self.assertEqual(
|
||||||
|
values[17].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
||||||
|
|
||||||
# update rate
|
# update rate
|
||||||
|
@ -275,21 +281,24 @@ class ValueStoreTestCase(object):
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[11].rec_name,
|
values[11].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_balance|5.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[12].rec_name,
|
values[12].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[13].rec_name,
|
values[13].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[14].rec_name,
|
values[14].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[15].rec_name,
|
values[15].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[16].rec_name,
|
values[16].rec_name,
|
||||||
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
||||||
|
self.assertEqual(
|
||||||
|
values[17].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
||||||
|
|
||||||
# delete rate
|
# delete rate
|
||||||
|
@ -345,21 +354,24 @@ class ValueStoreTestCase(object):
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[11].rec_name,
|
values[11].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_balance|4.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[12].rec_name,
|
values[12].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[13].rec_name,
|
values[13].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_dividend_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[14].rec_name,
|
values[14].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_12m|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[15].rec_name,
|
values[15].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_fee_total|0.00|2')
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
values[16].rec_name,
|
values[16].rec_name,
|
||||||
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales|2.50|2')
|
||||||
|
self.assertEqual(
|
||||||
|
values[17].rec_name,
|
||||||
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
'[Book 1 | 2.50 € | Open | 1.500 u]|yield_sales_12m|0.00|2')
|
||||||
|
|
||||||
# end ValueStoreTestCase
|
# end ValueStoreTestCase
|
||||||
|
|
Loading…
Reference in a new issue