fix sorting/searcher of field 'yield_balance'
This commit is contained in:
parent
293dd014a0
commit
3f1fee5503
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)),
|
||||
states={'invisible': Eval('feature', '') != 'asset'},
|
||||
depends=['currency_digits', 'feature']),
|
||||
'on_change_with_yield_balance', searcher='search_asset_quantity')
|
||||
'get_yield_balance_data', searcher='search_asset_quantity')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
|
@ -331,15 +331,39 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
|||
"""
|
||||
return 4
|
||||
|
||||
@fields.depends('yield_sales', 'yield_dividend_total', 'diff_amount')
|
||||
def on_change_with_yield_balance(self, name=None):
|
||||
@classmethod
|
||||
def get_yield_balance_data(cls, cashbooks, names):
|
||||
""" calculate yield total
|
||||
fee is already contained in 'diff_amount'
|
||||
"""
|
||||
sum_lst = [
|
||||
self.diff_amount, self.yield_dividend_total, self.yield_sales]
|
||||
sum2 = sum([x for x in sum_lst if x is not None])
|
||||
return sum2
|
||||
context = Transaction().context
|
||||
|
||||
result = {x: {y.id: Decimal('0.0') for y in cashbooks} for x in names}
|
||||
|
||||
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
|
||||
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',
|
||||
'diff_amount', 'diff_percent', 'current_rate', 'purchase_amount',
|
||||
'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
|
||||
|
||||
@classmethod
|
||||
|
@ -779,6 +804,10 @@ class Book(SymbolMixin, metaclass=PoolMeta):
|
|||
'yield_fee_total', 'yield_dividend_total',
|
||||
'yield_sales', 'yield_fee_12m', 'yield_dividend_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')
|
||||
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')
|
||||
self.assertEqual(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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')
|
||||
|
||||
# add rate
|
||||
|
@ -203,21 +206,24 @@ class ValueStoreTestCase(object):
|
|||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||
self.assertEqual(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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')
|
||||
|
||||
# update rate
|
||||
|
@ -275,21 +281,24 @@ class ValueStoreTestCase(object):
|
|||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||
self.assertEqual(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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')
|
||||
|
||||
# delete rate
|
||||
|
@ -345,21 +354,24 @@ class ValueStoreTestCase(object):
|
|||
'[Book 1 | 2.50 € | Open | 1.500 u]|quantity_all|1.500|3')
|
||||
self.assertEqual(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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(
|
||||
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')
|
||||
|
||||
# end ValueStoreTestCase
|
||||
|
|
Loading…
Reference in a new issue