report: add totla-yield, tests todo
This commit is contained in:
parent
74f9d91c53
commit
e51932e732
4 changed files with 269 additions and 124 deletions
233
investment.py
233
investment.py
|
@ -20,12 +20,15 @@ class InvestmentEvaluation(metaclass=PoolMeta):
|
||||||
('cashbooks_gldiff', gettext('cashbook_report.msg_dtype_cashbook_gldiff')),
|
('cashbooks_gldiff', gettext('cashbook_report.msg_dtype_cashbook_gldiff')),
|
||||||
('cashbooks_glperc', gettext('cashbook_report.msg_dtype_cashbook_glperc')),
|
('cashbooks_glperc', gettext('cashbook_report.msg_dtype_cashbook_glperc')),
|
||||||
('cashbooks_glvalue', gettext('cashbook_report.msg_dtype_cashbooks_glvalue')),
|
('cashbooks_glvalue', gettext('cashbook_report.msg_dtype_cashbooks_glvalue')),
|
||||||
|
('cashbooks_glyield', gettext('cashbook_report.msg_dtype_cashbooks_glyield')),
|
||||||
('category_gldiff', gettext('cashbook_report.msg_dtype_category_gldiff')),
|
('category_gldiff', gettext('cashbook_report.msg_dtype_category_gldiff')),
|
||||||
('category_glvalue', gettext('cashbook_report.msg_dtype_category_glvalue')),
|
('category_glvalue', gettext('cashbook_report.msg_dtype_category_glvalue')),
|
||||||
('category_glperc', gettext('cashbook_report.msg_dtype_category_glperc')),
|
('category_glperc', gettext('cashbook_report.msg_dtype_category_glperc')),
|
||||||
|
('category_glyield', gettext('cashbook_report.msg_dtype_category_glyield')),
|
||||||
('types_gldiff', gettext('cashbook_report.msg_dtype_types_gldiff')),
|
('types_gldiff', gettext('cashbook_report.msg_dtype_types_gldiff')),
|
||||||
('types_glvalue', gettext('cashbook_report.msg_dtype_types_glvalue')),
|
('types_glvalue', gettext('cashbook_report.msg_dtype_types_glvalue')),
|
||||||
('types_glperc', gettext('cashbook_report.msg_dtype_types_glperc')),
|
('types_glperc', gettext('cashbook_report.msg_dtype_types_glperc')),
|
||||||
|
('types_glyield', gettext('cashbook_report.msg_dtype_types_glyield')),
|
||||||
])
|
])
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -35,26 +38,6 @@ class InvestmentEvaluation(metaclass=PoolMeta):
|
||||||
class InvestmentLine(metaclass=PoolMeta):
|
class InvestmentLine(metaclass=PoolMeta):
|
||||||
__name__ = 'cashbook_report.eval_line'
|
__name__ = 'cashbook_report.eval_line'
|
||||||
|
|
||||||
def get_value_types_glperc(self):
|
|
||||||
""" get percent of profit/loss by type
|
|
||||||
"""
|
|
||||||
if self.dtype is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_percent_by_query([
|
|
||||||
('btype.id', '=', self.dtype.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_value_category_glperc(self):
|
|
||||||
""" get percent of profit/loss by category
|
|
||||||
"""
|
|
||||||
if self.category is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_percent_by_query([
|
|
||||||
('categories.id', '=', self.category.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_percent_by_query(self, query):
|
def get_percent_by_query(self, query):
|
||||||
""" get percentual difference of bookings in categories
|
""" get percentual difference of bookings in categories
|
||||||
converted to currency of evaluation
|
converted to currency of evaluation
|
||||||
|
@ -80,69 +63,6 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
)
|
)
|
||||||
return Decimal('0.0')
|
return Decimal('0.0')
|
||||||
|
|
||||||
def get_value_types_glvalue(self):
|
|
||||||
""" get current value by type
|
|
||||||
"""
|
|
||||||
if self.dtype is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_currentvalue_by_query([
|
|
||||||
('btype.id', '=', self.dtype.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_value_category_glvalue(self):
|
|
||||||
""" get current value by category
|
|
||||||
"""
|
|
||||||
if self.category is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_currentvalue_by_query([
|
|
||||||
('categories.id', '=', self.category.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_currentvalue_by_query(self, query):
|
|
||||||
""" get current value of bookings in categories
|
|
||||||
converted to currency of evaluation
|
|
||||||
"""
|
|
||||||
Book = Pool().get('cashbook.book')
|
|
||||||
|
|
||||||
query2 = [('state', '=', 'open')]
|
|
||||||
query2.extend(query)
|
|
||||||
books = Book.search(query2)
|
|
||||||
|
|
||||||
result = Decimal('0.0')
|
|
||||||
if len(books) > 0:
|
|
||||||
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
|
|
||||||
|
|
||||||
def get_value_types_gldiff(self):
|
|
||||||
""" get difference amount by type
|
|
||||||
"""
|
|
||||||
if self.dtype is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_difference_by_query([
|
|
||||||
('btype.id', '=', self.dtype.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_value_category_gldiff(self):
|
|
||||||
""" get difference amount by category
|
|
||||||
"""
|
|
||||||
if self.category is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return self.get_difference_by_query([
|
|
||||||
('categories.id', '=', self.category.id),
|
|
||||||
])
|
|
||||||
|
|
||||||
def get_difference_by_query(self, query):
|
def get_difference_by_query(self, query):
|
||||||
""" get difference amount of bookings in categories
|
""" get difference amount of bookings in categories
|
||||||
converted to currency of evaluation
|
converted to currency of evaluation
|
||||||
|
@ -163,6 +83,137 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
books[0].company.currency, result)
|
books[0].company.currency, result)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def get_currentvalue_by_query(self, query):
|
||||||
|
""" get current value of bookings in categories
|
||||||
|
converted to currency of evaluation
|
||||||
|
"""
|
||||||
|
Book = Pool().get('cashbook.book')
|
||||||
|
|
||||||
|
query2 = [('state', '=', 'open')]
|
||||||
|
query2.extend(query)
|
||||||
|
books = Book.search(query2)
|
||||||
|
|
||||||
|
result = Decimal('0.0')
|
||||||
|
if len(books) > 0:
|
||||||
|
for book in books:
|
||||||
|
if (book.feature == 'asset') or \
|
||||||
|
((book.feature is None) and (book.current_value_ref is not None)):
|
||||||
|
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
|
||||||
|
|
||||||
|
def get_totalyield_by_query(self, query):
|
||||||
|
""" get total yield of cashbookings
|
||||||
|
converted to currency of evaluation
|
||||||
|
"""
|
||||||
|
Book = Pool().get('cashbook.book')
|
||||||
|
|
||||||
|
query2 = [('state', '=', 'open')]
|
||||||
|
query2.extend(query)
|
||||||
|
books = Book.search(query2)
|
||||||
|
|
||||||
|
result = Decimal('0.0')
|
||||||
|
if len(books) > 0:
|
||||||
|
for book in books:
|
||||||
|
if (book.feature == 'asset') and (book.yield_balance is not None):
|
||||||
|
result += self.convert_to_evalcurrency(
|
||||||
|
books[0].currency, book.yield_balance)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_value_category_glperc(self):
|
||||||
|
""" get percent of profit/loss by category
|
||||||
|
"""
|
||||||
|
if self.category is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_percent_by_query([
|
||||||
|
('categories.id', '=', self.category.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_category_gldiff(self):
|
||||||
|
""" get difference amount by category
|
||||||
|
"""
|
||||||
|
if self.category is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_difference_by_query([
|
||||||
|
('categories.id', '=', self.category.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_category_glvalue(self):
|
||||||
|
""" get current value by category
|
||||||
|
"""
|
||||||
|
if self.category is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_currentvalue_by_query([
|
||||||
|
('categories.id', '=', self.category.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_category_glyield(self):
|
||||||
|
""" get total yield by type
|
||||||
|
"""
|
||||||
|
if self.category is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_totalyield_by_query([
|
||||||
|
('categories.id', '=', self.category.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_types_glperc(self):
|
||||||
|
""" get percent of profit/loss by type
|
||||||
|
"""
|
||||||
|
if self.dtype is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_percent_by_query([
|
||||||
|
('btype.id', '=', self.dtype.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_types_gldiff(self):
|
||||||
|
""" get difference amount by type
|
||||||
|
"""
|
||||||
|
if self.dtype is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_difference_by_query([
|
||||||
|
('btype.id', '=', self.dtype.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_types_glvalue(self):
|
||||||
|
""" get current value by type
|
||||||
|
"""
|
||||||
|
if self.dtype is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_currentvalue_by_query([
|
||||||
|
('btype.id', '=', self.dtype.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_types_glyield(self):
|
||||||
|
""" get total yield by type
|
||||||
|
"""
|
||||||
|
if self.dtype is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self.get_totalyield_by_query([
|
||||||
|
('btype.id', '=', self.dtype.id),
|
||||||
|
])
|
||||||
|
|
||||||
|
def get_value_cashbooks_glperc(self):
|
||||||
|
""" percent of profit/loss of cashbooks
|
||||||
|
"""
|
||||||
|
if self.cashbook:
|
||||||
|
if self.cashbook.feature == 'asset':
|
||||||
|
return self.cashbook.diff_percent
|
||||||
|
else :
|
||||||
|
return Decimal('0.0')
|
||||||
|
|
||||||
def get_value_cashbooks_gldiff(self):
|
def get_value_cashbooks_gldiff(self):
|
||||||
""" amount of profit/loss of cashbooks
|
""" amount of profit/loss of cashbooks
|
||||||
"""
|
"""
|
||||||
|
@ -182,22 +233,22 @@ class InvestmentLine(metaclass=PoolMeta):
|
||||||
Currency = Pool().get('currency.currency')
|
Currency = Pool().get('currency.currency')
|
||||||
|
|
||||||
if self.cashbook:
|
if self.cashbook:
|
||||||
if self.cashbook.feature == 'asset':
|
if (self.cashbook.feature == 'asset') or \
|
||||||
|
((self.cashbook.feature is None) and (self.cashbook.current_value is not None)):
|
||||||
return self.convert_to_evalcurrency(
|
return self.convert_to_evalcurrency(
|
||||||
self.cashbook.currency,
|
self.cashbook.currency,
|
||||||
self.cashbook.current_value)
|
self.cashbook.current_value)
|
||||||
else :
|
else :
|
||||||
return self.convert_to_evalcurrency(
|
return self.convert_to_evalcurrency(
|
||||||
self.cashbook.currency,
|
self.cashbook.currency,
|
||||||
self.cashbook.balance_ref)
|
self.cashbook.balance)
|
||||||
|
|
||||||
def get_value_cashbooks_glperc(self):
|
def get_value_cashbooks_glyield(self):
|
||||||
""" percent of profit/loss of cashbooks
|
""" total yield of investment
|
||||||
"""
|
"""
|
||||||
if self.cashbook:
|
if self.cashbook:
|
||||||
if self.cashbook.feature == 'asset':
|
return self.get_totalyield_by_query([
|
||||||
return self.cashbook.diff_percent
|
('id', '=', self.cashbook.id)
|
||||||
else :
|
])
|
||||||
return Decimal('0.0')
|
|
||||||
|
|
||||||
# end InvestmentLine
|
# end InvestmentLine
|
||||||
|
|
|
@ -26,6 +26,10 @@ msgctxt "model:ir.message,text:msg_dtype_cashbooks_glvalue"
|
||||||
msgid "Cashbooks [Current Value]"
|
msgid "Cashbooks [Current Value]"
|
||||||
msgstr "Kassenbücher [aktueller Wert]"
|
msgstr "Kassenbücher [aktueller Wert]"
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_dtype_cashbooks_glyield"
|
||||||
|
msgid "Cashbooks [Total Yield]"
|
||||||
|
msgstr "Kassenbücher [Gesamtertrag]"
|
||||||
|
|
||||||
msgctxt "model:ir.message,text:msg_dtype_type"
|
msgctxt "model:ir.message,text:msg_dtype_type"
|
||||||
msgid "Types of Cashbooks [Amount]"
|
msgid "Types of Cashbooks [Amount]"
|
||||||
msgstr "Typen von Kassenbüchern [Betrag]"
|
msgstr "Typen von Kassenbüchern [Betrag]"
|
||||||
|
@ -62,6 +66,10 @@ msgctxt "model:ir.message,text:msg_dtype_category_glperc"
|
||||||
msgid "Categories [Percent of Profit/Loss]"
|
msgid "Categories [Percent of Profit/Loss]"
|
||||||
msgstr "Kategorien [Prozent Gewinn/Verlust]"
|
msgstr "Kategorien [Prozent Gewinn/Verlust]"
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_dtype_category_glyield"
|
||||||
|
msgid "Categories [Total Yield]"
|
||||||
|
msgstr "Kategorien [Gesamtertrag]"
|
||||||
|
|
||||||
msgctxt "model:ir.message,text:msg_name_graph"
|
msgctxt "model:ir.message,text:msg_name_graph"
|
||||||
msgid "Graph: %(gname)s"
|
msgid "Graph: %(gname)s"
|
||||||
msgstr "Diagramm: %(gname)s"
|
msgstr "Diagramm: %(gname)s"
|
||||||
|
|
|
@ -22,6 +22,10 @@ msgctxt "model:ir.message,text:msg_dtype_cashbooks_glvalue"
|
||||||
msgid "Cashbooks [Current Value]"
|
msgid "Cashbooks [Current Value]"
|
||||||
msgstr "Cashbooks [Current Value]"
|
msgstr "Cashbooks [Current Value]"
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_dtype_cashbooks_glyield"
|
||||||
|
msgid "Cashbooks [Total Yield]"
|
||||||
|
msgstr "Cashbooks [Total Yield]"
|
||||||
|
|
||||||
msgctxt "model:ir.message,text:msg_dtype_type"
|
msgctxt "model:ir.message,text:msg_dtype_type"
|
||||||
msgid "Types of Cashbooks [Amount]"
|
msgid "Types of Cashbooks [Amount]"
|
||||||
msgstr "Types of Cashbooks [Amount]"
|
msgstr "Types of Cashbooks [Amount]"
|
||||||
|
@ -58,6 +62,10 @@ msgctxt "model:ir.message,text:msg_dtype_category_glperc"
|
||||||
msgid "Categories [Percent of Profit/Loss]"
|
msgid "Categories [Percent of Profit/Loss]"
|
||||||
msgstr "Categories [Percent of Profit/Loss]"
|
msgstr "Categories [Percent of Profit/Loss]"
|
||||||
|
|
||||||
|
msgctxt "model:ir.message,text:msg_dtype_category_glyield"
|
||||||
|
msgid "Categories [Total Yield]"
|
||||||
|
msgstr "Categories [Total Yield]"
|
||||||
|
|
||||||
msgctxt "model:ir.message,text:msg_name_graph"
|
msgctxt "model:ir.message,text:msg_name_graph"
|
||||||
msgid "Graph: %(gname)s"
|
msgid "Graph: %(gname)s"
|
||||||
msgstr "Graph: %(gname)s"
|
msgstr "Graph: %(gname)s"
|
||||||
|
|
|
@ -7,12 +7,12 @@ from trytond.tests.test_tryton import ModuleTestCase, with_transaction, activate
|
||||||
from trytond.pool import Pool
|
from trytond.pool import Pool
|
||||||
from trytond.transaction import Transaction
|
from trytond.transaction import Transaction
|
||||||
from trytond.exceptions import UserError
|
from trytond.exceptions import UserError
|
||||||
from trytond.modules.cashbook.tests import CashbookTestCase
|
from trytond.modules.cashbook_investment.tests import CashbookInvestmentTestCase
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
|
|
||||||
class ReportTestCase(CashbookTestCase):
|
class ReportTestCase(CashbookInvestmentTestCase):
|
||||||
'Test cashbook book report module'
|
'Test cashbook book report module'
|
||||||
module = 'cashbook_report'
|
module = 'cashbook_report'
|
||||||
|
|
||||||
|
@ -28,13 +28,28 @@ class ReportTestCase(CashbookTestCase):
|
||||||
"""
|
"""
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
Book = pool.get('cashbook.book')
|
Book = pool.get('cashbook.book')
|
||||||
|
Line = pool.get('cashbook.line')
|
||||||
|
BookType = pool.get('cashbook.type')
|
||||||
ResUser = pool.get('res.user')
|
ResUser = pool.get('res.user')
|
||||||
|
|
||||||
user_admin, = ResUser.search([])
|
user_admin, = ResUser.search([])
|
||||||
type_cash = self.prep_type()
|
|
||||||
type_bank = self.prep_type(name='Bank', short='BK')
|
|
||||||
company = self.prep_company()
|
|
||||||
|
|
||||||
|
company = self.prep_company()
|
||||||
|
asset_cfg = self.prep_yield_config(
|
||||||
|
fee = 'Fee',
|
||||||
|
dividend = 'Dividend',
|
||||||
|
gainloss = 'Gain-Loss',
|
||||||
|
company = company)
|
||||||
|
|
||||||
|
type_cash, = BookType.search([('name', '=', 'Cash')])
|
||||||
|
type_bank = self.prep_type(name='Bank', short='BK')
|
||||||
|
type_asset = self.prep_type(name='Asset', short='A')
|
||||||
|
|
||||||
|
BookType.write(*[
|
||||||
|
[type_asset],
|
||||||
|
{
|
||||||
|
'feature': 'asset',
|
||||||
|
}])
|
||||||
ResUser.write(*[
|
ResUser.write(*[
|
||||||
[user_admin],
|
[user_admin],
|
||||||
{
|
{
|
||||||
|
@ -43,9 +58,14 @@ class ReportTestCase(CashbookTestCase):
|
||||||
}])
|
}])
|
||||||
self.assertEqual(user_admin.company.id, company.id)
|
self.assertEqual(user_admin.company.id, company.id)
|
||||||
|
|
||||||
(usd, euro) = self.prep_2nd_currency(company)
|
|
||||||
sequ_id = self.prep_sequence().id
|
sequ_id = self.prep_sequence().id
|
||||||
category = self.prep_category(cattype='in')
|
category = self.prep_category(cattype='in')
|
||||||
|
asset = self.prep_asset_item(
|
||||||
|
company=company,
|
||||||
|
product = self.prep_asset_product(name='Product 1'))
|
||||||
|
self.assertEqual(asset.symbol, 'usd/u')
|
||||||
|
(usd, euro) = self.prep_2nd_currency(company)
|
||||||
|
|
||||||
party = self.prep_party()
|
party = self.prep_party()
|
||||||
books = Book.create([{
|
books = Book.create([{
|
||||||
'name': 'Book 1',
|
'name': 'Book 1',
|
||||||
|
@ -113,8 +133,43 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'category': category.id,
|
'category': category.id,
|
||||||
'party': party.id,
|
'party': party.id,
|
||||||
}])],
|
}])],
|
||||||
|
}, {
|
||||||
|
'name': 'Book 4 - Asset',
|
||||||
|
'btype': type_asset.id,
|
||||||
|
'asset': asset.id,
|
||||||
|
'quantity_uom': asset.uom.id,
|
||||||
|
'company': company.id,
|
||||||
|
'currency': euro.id,
|
||||||
|
'number_sequ': sequ_id,
|
||||||
|
'start_date': date(2022, 4, 1),
|
||||||
|
'lines': [('create', [{
|
||||||
|
'date': date(2022, 5, 1),
|
||||||
|
'description': 'Buy Shares',
|
||||||
|
'bookingtype': 'in',
|
||||||
|
'amount': Decimal('100.0'),
|
||||||
|
'quantity': Decimal('1.0'),
|
||||||
|
'category': category.id,
|
||||||
|
'party': party.id,
|
||||||
|
}, {
|
||||||
|
'date': date(2022, 5, 5),
|
||||||
|
'description': 'Fee',
|
||||||
|
'bookingtype': 'out',
|
||||||
|
'amount': Decimal('2.5'),
|
||||||
|
'quantity': Decimal('0.0'),
|
||||||
|
'category': asset_cfg.fee_category.id,
|
||||||
|
'party': party.id,
|
||||||
|
}, {
|
||||||
|
'date': date(2022, 5, 3),
|
||||||
|
'description': 'Dividend',
|
||||||
|
'bookingtype': 'in',
|
||||||
|
'amount': Decimal('5.0'),
|
||||||
|
'quantity': Decimal('0.0'),
|
||||||
|
'category': asset_cfg.dividend_category.id,
|
||||||
|
'party': party.id,
|
||||||
|
}])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(books), 3)
|
Line.wfcheck([line for book in books for line in book.lines])
|
||||||
|
self.assertEqual(len(books), 4)
|
||||||
self.assertEqual(books[0].name, 'Book 1')
|
self.assertEqual(books[0].name, 'Book 1')
|
||||||
self.assertEqual(books[0].btype.rec_name, 'CAS - Cash')
|
self.assertEqual(books[0].btype.rec_name, 'CAS - Cash')
|
||||||
self.assertEqual(len(books[0].lines), 2)
|
self.assertEqual(len(books[0].lines), 2)
|
||||||
|
@ -129,6 +184,11 @@ class ReportTestCase(CashbookTestCase):
|
||||||
self.assertEqual(books[2].btype.rec_name, 'BK - Bank')
|
self.assertEqual(books[2].btype.rec_name, 'BK - Bank')
|
||||||
self.assertEqual(len(books[2].lines), 2)
|
self.assertEqual(len(books[2].lines), 2)
|
||||||
self.assertEqual(books[2].balance, Decimal('23.0'))
|
self.assertEqual(books[2].balance, Decimal('23.0'))
|
||||||
|
|
||||||
|
self.assertEqual(books[3].name, 'Book 4 - Asset')
|
||||||
|
self.assertEqual(books[3].btype.rec_name, 'A - Asset')
|
||||||
|
self.assertEqual(len(books[3].lines), 3)
|
||||||
|
self.assertEqual(books[3].balance, Decimal('102.5'))
|
||||||
return books
|
return books
|
||||||
|
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
|
@ -158,6 +218,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
('cashbook_hasbookings', '=', True)
|
('cashbook_hasbookings', '=', True)
|
||||||
]), 2)
|
]), 2)
|
||||||
|
|
||||||
|
Lines.wfedit(books[2].lines)
|
||||||
Lines.delete(books[2].lines)
|
Lines.delete(books[2].lines)
|
||||||
self.assertEqual(euro.cashbook_hasbookings, False)
|
self.assertEqual(euro.cashbook_hasbookings, False)
|
||||||
|
|
||||||
|
@ -264,13 +325,15 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'dtype': 'types',
|
'dtype': 'types',
|
||||||
'types': [('add', [x.id for x in Type.search([])])],
|
'types': [('add', [x.id for x in Type.search([])])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation2.types), 2)
|
self.assertEqual(len(evaluation2.types), 3)
|
||||||
self.assertEqual(evaluation2.currency.rec_name, 'Euro')
|
self.assertEqual(evaluation2.currency.rec_name, 'Euro')
|
||||||
self.assertEqual(len(evaluation2.line_values), 2)
|
self.assertEqual(len(evaluation2.line_values), 3)
|
||||||
self.assertEqual(evaluation2.line_values[0].name, 'BK - Bank')
|
self.assertEqual(evaluation2.line_values[0].name, 'A - Asset')
|
||||||
self.assertEqual(evaluation2.line_values[0].balance, Decimal('0.0'))
|
self.assertEqual(evaluation2.line_values[0].balance, Decimal('35.71'))
|
||||||
self.assertEqual(evaluation2.line_values[1].name, 'CAS - Cash')
|
self.assertEqual(evaluation2.line_values[1].name, 'BK - Bank')
|
||||||
self.assertEqual(evaluation2.line_values[1].balance, Decimal('35.71'))
|
self.assertEqual(evaluation2.line_values[1].balance, Decimal('0.0'))
|
||||||
|
self.assertEqual(evaluation2.line_values[2].name, 'CAS - Cash')
|
||||||
|
self.assertEqual(evaluation2.line_values[2].balance, Decimal('35.71'))
|
||||||
|
|
||||||
evaluation3, = Evaluation.create([{
|
evaluation3, = Evaluation.create([{
|
||||||
'name': 'Evaluation User 1 - Currencies',
|
'name': 'Evaluation User 1 - Currencies',
|
||||||
|
@ -457,8 +520,8 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'dtype': 'cashbooks',
|
'dtype': 'cashbooks',
|
||||||
'cashbooks': [('add', [x.id for x in books])],
|
'cashbooks': [('add', [x.id for x in books])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 3)
|
self.assertEqual(len(evaluation.cashbooks), 4)
|
||||||
self.assertEqual(len(evaluation.line_values), 3)
|
self.assertEqual(len(evaluation.line_values), 4)
|
||||||
|
|
||||||
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
|
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
|
||||||
self.assertEqual(evaluation.line_values[0].name_line, None)
|
self.assertEqual(evaluation.line_values[0].name_line, None)
|
||||||
|
@ -512,7 +575,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'dtype': 'cashbooks',
|
'dtype': 'cashbooks',
|
||||||
'cashbooks': [('add', [x.id for x in books])],
|
'cashbooks': [('add', [x.id for x in books])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 3)
|
self.assertEqual(len(evaluation.cashbooks), 4)
|
||||||
self.assertEqual(len(evaluation.types), 0)
|
self.assertEqual(len(evaluation.types), 0)
|
||||||
self.assertEqual(len(evaluation.currencies), 0)
|
self.assertEqual(len(evaluation.currencies), 0)
|
||||||
self.assertEqual(len(evaluation.categories), 0)
|
self.assertEqual(len(evaluation.categories), 0)
|
||||||
|
@ -525,7 +588,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
{
|
{
|
||||||
'dtype': 'cashbooks_gldiff',
|
'dtype': 'cashbooks_gldiff',
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 3)
|
self.assertEqual(len(evaluation.cashbooks), 4)
|
||||||
self.assertEqual(len(evaluation.types), 0)
|
self.assertEqual(len(evaluation.types), 0)
|
||||||
self.assertEqual(len(evaluation.currencies), 0)
|
self.assertEqual(len(evaluation.currencies), 0)
|
||||||
self.assertEqual(len(evaluation.categories), 0)
|
self.assertEqual(len(evaluation.categories), 0)
|
||||||
|
@ -535,7 +598,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
{
|
{
|
||||||
'dtype': 'cashbooks_glperc',
|
'dtype': 'cashbooks_glperc',
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 3)
|
self.assertEqual(len(evaluation.cashbooks), 4)
|
||||||
self.assertEqual(len(evaluation.types), 0)
|
self.assertEqual(len(evaluation.types), 0)
|
||||||
self.assertEqual(len(evaluation.currencies), 0)
|
self.assertEqual(len(evaluation.currencies), 0)
|
||||||
self.assertEqual(len(evaluation.categories), 0)
|
self.assertEqual(len(evaluation.categories), 0)
|
||||||
|
@ -549,7 +612,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'types': [('add', [x.id for x in Types.search([])])],
|
'types': [('add', [x.id for x in Types.search([])])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 0)
|
self.assertEqual(len(evaluation.cashbooks), 0)
|
||||||
self.assertEqual(len(evaluation.types), 2)
|
self.assertEqual(len(evaluation.types), 3)
|
||||||
self.assertEqual(len(evaluation.currencies), 0)
|
self.assertEqual(len(evaluation.currencies), 0)
|
||||||
self.assertEqual(len(evaluation.categories), 0)
|
self.assertEqual(len(evaluation.categories), 0)
|
||||||
|
|
||||||
|
@ -560,7 +623,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
'dtype': 'types',
|
'dtype': 'types',
|
||||||
}])
|
}])
|
||||||
self.assertEqual(len(evaluation.cashbooks), 0)
|
self.assertEqual(len(evaluation.cashbooks), 0)
|
||||||
self.assertEqual(len(evaluation.types), 2)
|
self.assertEqual(len(evaluation.types), 3)
|
||||||
self.assertEqual(len(evaluation.currencies), 0)
|
self.assertEqual(len(evaluation.currencies), 0)
|
||||||
self.assertEqual(len(evaluation.categories), 0)
|
self.assertEqual(len(evaluation.categories), 0)
|
||||||
|
|
||||||
|
@ -724,6 +787,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
pool = Pool()
|
pool = Pool()
|
||||||
Evaluation = pool.get('cashbook_report.evaluation')
|
Evaluation = pool.get('cashbook_report.evaluation')
|
||||||
Book = pool.get('cashbook.book')
|
Book = pool.get('cashbook.book')
|
||||||
|
Line = pool.get('cashbook.line')
|
||||||
|
|
||||||
company = self.prep_company()
|
company = self.prep_company()
|
||||||
with Transaction().set_context({
|
with Transaction().set_context({
|
||||||
|
@ -772,6 +836,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
|
|
||||||
books = self.prep_report_3books()
|
books = self.prep_report_3books()
|
||||||
cb_cat, = CbCategory.create([{'name': 'CB Category'}])
|
cb_cat, = CbCategory.create([{'name': 'CB Category'}])
|
||||||
|
Line.wfedit([books.lines])
|
||||||
Book.write(*[
|
Book.write(*[
|
||||||
books,
|
books,
|
||||||
{
|
{
|
||||||
|
@ -955,26 +1020,31 @@ class ReportTestCase(CashbookTestCase):
|
||||||
</graph>
|
</graph>
|
||||||
""")
|
""")
|
||||||
|
|
||||||
self.assertEqual(len(evaluation.cashbooks), 3)
|
self.assertEqual(len(evaluation.cashbooks), 4)
|
||||||
self.assertEqual(evaluation.cashbooks[0].rec_name, 'Book 1 | 25.00 usd | Open')
|
self.assertEqual(evaluation.cashbooks[0].rec_name, 'Book 1 | 25.00 usd | Open')
|
||||||
self.assertEqual(evaluation.cashbooks[1].rec_name, 'Book 2 | 12.50 usd | Open')
|
self.assertEqual(evaluation.cashbooks[1].rec_name, 'Book 2 | 12.50 usd | Open')
|
||||||
self.assertEqual(evaluation.cashbooks[2].rec_name, 'Book 3 | 23.00 € | Open')
|
self.assertEqual(evaluation.cashbooks[2].rec_name, 'Book 3 | 23.00 € | Open')
|
||||||
|
self.assertEqual(evaluation.cashbooks[3].rec_name, 'Book 4 - Asset | 102.50 € | Open | 1.0000 u')
|
||||||
self.assertEqual(evaluation.cashbooks[0].currency.code, 'usd')
|
self.assertEqual(evaluation.cashbooks[0].currency.code, 'usd')
|
||||||
self.assertEqual(evaluation.cashbooks[1].currency.code, 'usd')
|
self.assertEqual(evaluation.cashbooks[1].currency.code, 'usd')
|
||||||
self.assertEqual(evaluation.cashbooks[2].currency.code, 'EUR')
|
self.assertEqual(evaluation.cashbooks[2].currency.code, 'EUR')
|
||||||
|
self.assertEqual(evaluation.cashbooks[3].currency.code, 'EUR')
|
||||||
|
|
||||||
self.assertEqual(len(evaluation.line_values), 3)
|
self.assertEqual(len(evaluation.line_values), 4)
|
||||||
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
|
self.assertEqual(evaluation.line_values[0].name, 'Book 1 | 25.00 usd | Open')
|
||||||
self.assertEqual(evaluation.line_values[1].name, 'Book 2 | 12.50 usd | Open')
|
self.assertEqual(evaluation.line_values[1].name, 'Book 2 | 12.50 usd | Open')
|
||||||
self.assertEqual(evaluation.line_values[2].name, 'Book 3 | 23.00 € | Open')
|
self.assertEqual(evaluation.line_values[2].name, 'Book 3 | 23.00 € | Open')
|
||||||
|
self.assertEqual(evaluation.line_values[3].name, 'Book 4 - Asset | 102.50 € | Open | 1.0000 u')
|
||||||
|
|
||||||
self.assertEqual(evaluation.line_values[0].eval_currency.code, 'EUR')
|
self.assertEqual(evaluation.line_values[0].eval_currency.code, 'EUR')
|
||||||
self.assertEqual(evaluation.line_values[1].eval_currency.code, 'EUR')
|
self.assertEqual(evaluation.line_values[1].eval_currency.code, 'EUR')
|
||||||
self.assertEqual(evaluation.line_values[2].eval_currency.code, 'EUR')
|
self.assertEqual(evaluation.line_values[2].eval_currency.code, 'EUR')
|
||||||
|
self.assertEqual(evaluation.line_values[3].eval_currency.code, 'EUR')
|
||||||
|
|
||||||
self.assertEqual(evaluation.line_values[0].balance, Decimal('23.81'))
|
self.assertEqual(evaluation.line_values[0].balance, Decimal('23.81'))
|
||||||
self.assertEqual(evaluation.line_values[1].balance, Decimal('11.90'))
|
self.assertEqual(evaluation.line_values[1].balance, Decimal('11.90'))
|
||||||
self.assertEqual(evaluation.line_values[2].balance, Decimal('23.00'))
|
self.assertEqual(evaluation.line_values[2].balance, Decimal('23.00'))
|
||||||
|
self.assertEqual(evaluation.line_values[3].balance, Decimal('102.50'))
|
||||||
|
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
def test_report_chart_pie_type_red(self):
|
def test_report_chart_pie_type_red(self):
|
||||||
|
@ -1006,19 +1076,27 @@ class ReportTestCase(CashbookTestCase):
|
||||||
|
|
||||||
# 37.50 USD, Cash
|
# 37.50 USD, Cash
|
||||||
# 23.00 EUR, Bank
|
# 23.00 EUR, Bank
|
||||||
self.assertEqual(len(evaluation.types), 2)
|
self.assertEqual(len(evaluation.types), 3)
|
||||||
self.assertEqual(evaluation.types[0].rec_name, 'BK - Bank')
|
self.assertEqual(evaluation.types[0].rec_name, 'A - Asset')
|
||||||
self.assertEqual(evaluation.types[1].rec_name, 'CAS - Cash')
|
self.assertEqual(evaluation.types[1].rec_name, 'BK - Bank')
|
||||||
# 23.00 EUR
|
self.assertEqual(evaluation.types[2].rec_name, 'CAS - Cash')
|
||||||
self.assertEqual(len(evaluation.line_values), 2)
|
|
||||||
|
self.assertEqual(len(evaluation.line_values), 3)
|
||||||
|
|
||||||
|
# xx.xx USD --> EUR
|
||||||
|
self.assertEqual(evaluation.line_values[0].name, 'A - Asset')
|
||||||
self.assertEqual(evaluation.line_values[0].eval_currency.code, 'EUR')
|
self.assertEqual(evaluation.line_values[0].eval_currency.code, 'EUR')
|
||||||
self.assertEqual(evaluation.line_values[0].name, 'BK - Bank')
|
self.assertEqual(evaluation.line_values[0].balance, Decimal('102.50'))
|
||||||
self.assertEqual(evaluation.line_values[0].balance, Decimal('23.0'))
|
|
||||||
|
# 23.00 EUR
|
||||||
|
self.assertEqual(evaluation.line_values[1].eval_currency.code, 'EUR')
|
||||||
|
self.assertEqual(evaluation.line_values[1].name, 'BK - Bank')
|
||||||
|
self.assertEqual(evaluation.line_values[1].balance, Decimal('23.0'))
|
||||||
|
|
||||||
# 37.50 USD --> EUR
|
# 37.50 USD --> EUR
|
||||||
self.assertEqual(evaluation.line_values[1].name, 'CAS - Cash')
|
self.assertEqual(evaluation.line_values[2].name, 'CAS - Cash')
|
||||||
self.assertEqual(evaluation.line_values[1].eval_currency.code, 'EUR')
|
self.assertEqual(evaluation.line_values[2].eval_currency.code, 'EUR')
|
||||||
self.assertEqual(evaluation.line_values[1].balance, Decimal('35.71'))
|
self.assertEqual(evaluation.line_values[2].balance, Decimal('35.71'))
|
||||||
|
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
def test_report_chart_pie_currency_red(self):
|
def test_report_chart_pie_currency_red(self):
|
||||||
|
@ -1053,7 +1131,7 @@ class ReportTestCase(CashbookTestCase):
|
||||||
|
|
||||||
self.assertEqual(len(evaluation.line_values), 2)
|
self.assertEqual(len(evaluation.line_values), 2)
|
||||||
self.assertEqual(evaluation.line_values[0].name, 'Euro')
|
self.assertEqual(evaluation.line_values[0].name, 'Euro')
|
||||||
self.assertEqual(evaluation.line_values[0].balance, Decimal('23.0'))
|
self.assertEqual(evaluation.line_values[0].balance, Decimal('125.5'))
|
||||||
self.assertEqual(evaluation.line_values[1].name, 'usd')
|
self.assertEqual(evaluation.line_values[1].name, 'usd')
|
||||||
self.assertEqual(evaluation.line_values[1].balance, Decimal('35.71'))
|
self.assertEqual(evaluation.line_values[1].balance, Decimal('35.71'))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue