convert results to evaluation-currency, fix states
This commit is contained in:
parent
0c3a130ef5
commit
e3a41b821b
3 changed files with 51 additions and 39 deletions
|
@ -78,7 +78,7 @@ class Evaluation(sequence_ordered(), ModelSQL, ModelView):
|
||||||
relation_name='cashbook_report.eval_line',
|
relation_name='cashbook_report.eval_line',
|
||||||
origin='evaluation', target='category',
|
origin='evaluation', target='category',
|
||||||
states={
|
states={
|
||||||
'invisible': Eval('dtype', '').in_(category_types),
|
'invisible': ~Eval('dtype', '').in_(category_types),
|
||||||
}, depends=['dtype'])
|
}, depends=['dtype'])
|
||||||
|
|
||||||
line_values = fields.One2Many(string='Line Values',
|
line_values = fields.One2Many(string='Line Values',
|
||||||
|
|
|
@ -49,12 +49,15 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
amount = Decimal('0.0')
|
amount = Decimal('0.0')
|
||||||
|
|
||||||
if len(books) > 0:
|
if len(books) > 0:
|
||||||
value = sum([x.current_value_ref for x in books])
|
value = sum([x.current_value_ref for x in books
|
||||||
amount = sum([x.balance_ref for x in books])
|
if (x.current_value_ref is not None) and (x.feature == 'asset')])
|
||||||
|
amount = sum([x.balance_ref for x in books
|
||||||
|
if (x.balance_ref is not None) and (x.feature == 'asset')])
|
||||||
if amount != Decimal('0.0'):
|
if amount != Decimal('0.0'):
|
||||||
return (
|
return self.convert_to_evalcurrency(
|
||||||
Decimal('100.0') * value / amount - Decimal('100.0')
|
books[0].company.currency,
|
||||||
).quantize(Decimal(str(1 / 10 ** self.currency_digits)))
|
Decimal('100.0') * value / amount - Decimal('100.0'),
|
||||||
|
)
|
||||||
return Decimal('0.0')
|
return Decimal('0.0')
|
||||||
|
|
||||||
def get_value_category_glvalue(self):
|
def get_value_category_glvalue(self):
|
||||||
|
@ -72,7 +75,15 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
])
|
])
|
||||||
result = Decimal('0.0')
|
result = Decimal('0.0')
|
||||||
if len(books) > 0:
|
if len(books) > 0:
|
||||||
result = sum([x.current_value_ref for x in books])
|
for book in books:
|
||||||
|
if book.feature == 'asset':
|
||||||
|
if book.current_value_ref is not None:
|
||||||
|
result += book.current_value_ref
|
||||||
|
else :
|
||||||
|
if book.balance_ref is not None:
|
||||||
|
result += book.balance_ref
|
||||||
|
return self.convert_to_evalcurrency(
|
||||||
|
books[0].company.currency, result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_value_category_gldiff(self):
|
def get_value_category_gldiff(self):
|
||||||
|
@ -90,7 +101,12 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
])
|
])
|
||||||
result = Decimal('0.0')
|
result = Decimal('0.0')
|
||||||
if len(books) > 0:
|
if len(books) > 0:
|
||||||
result = sum([x.current_value_ref - x.balance_ref for x in books])
|
result = sum([x.current_value_ref - x.balance_ref for x in books
|
||||||
|
if (x.current_value_ref is not None) and \
|
||||||
|
(x.balance_ref is not None) and \
|
||||||
|
(x.feature == 'asset')])
|
||||||
|
result = self.convert_to_evalcurrency(
|
||||||
|
books[0].company.currency, result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_value_cashbooks_gldiff(self):
|
def get_value_cashbooks_gldiff(self):
|
||||||
|
@ -100,12 +116,9 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
|
|
||||||
if self.cashbook:
|
if self.cashbook:
|
||||||
if self.cashbook.feature == 'asset':
|
if self.cashbook.feature == 'asset':
|
||||||
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
|
return self.convert_to_evalcurrency(
|
||||||
return Currency.compute(
|
|
||||||
self.cashbook.currency,
|
self.cashbook.currency,
|
||||||
self.cashbook.diff_amount,
|
self.cashbook.diff_amount)
|
||||||
self.eval_currency,
|
|
||||||
).quantize(exp)
|
|
||||||
|
|
||||||
def get_value_cashbooks_glvalue(self):
|
def get_value_cashbooks_glvalue(self):
|
||||||
""" current value of cashbooks
|
""" current value of cashbooks
|
||||||
|
@ -114,12 +127,9 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
|
|
||||||
if self.cashbook:
|
if self.cashbook:
|
||||||
if self.cashbook.feature == 'asset':
|
if self.cashbook.feature == 'asset':
|
||||||
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
|
return self.convert_to_evalcurrency(
|
||||||
return Currency.compute(
|
|
||||||
self.cashbook.currency,
|
self.cashbook.currency,
|
||||||
self.cashbook.current_value,
|
self.cashbook.current_value)
|
||||||
self.eval_currency,
|
|
||||||
).quantize(exp)
|
|
||||||
|
|
||||||
def get_value_cashbooks_glperc(self):
|
def get_value_cashbooks_glperc(self):
|
||||||
""" percent of profit/loss of cashbooks
|
""" percent of profit/loss of cashbooks
|
||||||
|
|
42
line.py
42
line.py
|
@ -128,18 +128,26 @@ class EvaluationLine(ModelSQL, ModelView):
|
||||||
|
|
||||||
# otherwise use rec_name of linked record
|
# otherwise use rec_name of linked record
|
||||||
if self.eval_dtype:
|
if self.eval_dtype:
|
||||||
|
dtype_sel = {'types': 'dtype', 'currencies': 'currency'}
|
||||||
|
dtype_sel.update({x:'cashbook' for x in cashbook_types})
|
||||||
|
dtype_sel.update({x:'category' for x in category_types})
|
||||||
|
|
||||||
return getattr(
|
return getattr(
|
||||||
getattr(self, {
|
getattr(self, dtype_sel[self.eval_dtype], None),
|
||||||
'cashbooks': 'cashbook',
|
|
||||||
'cashbooks_gldiff': 'cashbook',
|
|
||||||
'cashbooks_glperc': 'cashbook',
|
|
||||||
'cashbooks_glvalue': 'cashbook',
|
|
||||||
'categories': 'category',
|
|
||||||
'types': 'dtype',
|
|
||||||
'currencies': 'currency',
|
|
||||||
}[self.eval_dtype], None),
|
|
||||||
'rec_name', None)
|
'rec_name', None)
|
||||||
|
|
||||||
|
def convert_to_evalcurrency(self, from_currency, amount):
|
||||||
|
""" convert amount to current evaluation-currency
|
||||||
|
"""
|
||||||
|
Currency = Pool().get('currency.currency')
|
||||||
|
|
||||||
|
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
|
||||||
|
return Currency.compute(
|
||||||
|
from_currency,
|
||||||
|
amount,
|
||||||
|
self.eval_currency,
|
||||||
|
).quantize(exp)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate(cls, records):
|
def validate(cls, records):
|
||||||
""" check parent record
|
""" check parent record
|
||||||
|
@ -202,13 +210,9 @@ class EvaluationLine(ModelSQL, ModelView):
|
||||||
(id_currency, bal1) = balance
|
(id_currency, bal1) = balance
|
||||||
|
|
||||||
if bal1 is not None:
|
if bal1 is not None:
|
||||||
total_amount += Currency.compute(
|
total_amount += self.convert_to_evalcurrency(
|
||||||
Currency(id_currency),
|
Currency(id_currency), bal1)
|
||||||
bal1,
|
return total_amount
|
||||||
self.eval_currency,
|
|
||||||
)
|
|
||||||
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
|
|
||||||
return total_amount.quantize(exp)
|
|
||||||
|
|
||||||
def get_value_cashbooks(self):
|
def get_value_cashbooks(self):
|
||||||
""" balance of cashbooks
|
""" balance of cashbooks
|
||||||
|
@ -216,12 +220,10 @@ class EvaluationLine(ModelSQL, ModelView):
|
||||||
Currency = Pool().get('currency.currency')
|
Currency = Pool().get('currency.currency')
|
||||||
|
|
||||||
if self.cashbook:
|
if self.cashbook:
|
||||||
exp = Decimal(Decimal(1) / 10 ** self.currency_digits)
|
return self.convert_to_evalcurrency(
|
||||||
return Currency.compute(
|
|
||||||
self.cashbook.currency,
|
self.cashbook.currency,
|
||||||
self.cashbook.balance,
|
self.cashbook.balance,
|
||||||
self.eval_currency,
|
)
|
||||||
).quantize(exp)
|
|
||||||
|
|
||||||
def get_value_categories(self):
|
def get_value_categories(self):
|
||||||
""" get balance of bookings in categories
|
""" get balance of bookings in categories
|
||||||
|
|
Loading…
Reference in a new issue