asset: suche in name, sortiert nach name, sortierer für wkn, isin, symbl
This commit is contained in:
parent
82c451377c
commit
83acfbb14b
2 changed files with 115 additions and 2 deletions
76
asset.py
76
asset.py
|
@ -23,7 +23,7 @@ class Asset(ModelSQL, ModelView):
|
||||||
__name__ = 'investment.asset'
|
__name__ = 'investment.asset'
|
||||||
|
|
||||||
name = fields.Function(fields.Char(string='Name', readonly=True),
|
name = fields.Function(fields.Char(string='Name', readonly=True),
|
||||||
'on_change_with_name')
|
'on_change_with_name', searcher='search_rec_name')
|
||||||
company = fields.Many2One(string='Company', model_name='company.company',
|
company = fields.Many2One(string='Company', model_name='company.company',
|
||||||
required=True, ondelete="RESTRICT")
|
required=True, ondelete="RESTRICT")
|
||||||
product = fields.Many2One(string='Product', required=True,
|
product = fields.Many2One(string='Product', required=True,
|
||||||
|
@ -104,6 +104,11 @@ class Asset(ModelSQL, ModelView):
|
||||||
readonly=True, digits=(16,digits_percent)),
|
readonly=True, digits=(16,digits_percent)),
|
||||||
'get_percentage_change', searcher='search_percentage')
|
'get_percentage_change', searcher='search_percentage')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __setup__(cls):
|
||||||
|
super(Asset, cls).__setup__()
|
||||||
|
cls._order.insert(0, ('name', 'ASC'))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def view_attributes(cls):
|
def view_attributes(cls):
|
||||||
return super().view_attributes() + [
|
return super().view_attributes() + [
|
||||||
|
@ -516,6 +521,70 @@ class Asset(ModelSQL, ModelView):
|
||||||
)
|
)
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def order_name(tables):
|
||||||
|
""" order name
|
||||||
|
"""
|
||||||
|
pool = Pool()
|
||||||
|
Templ = pool.get('product.template')
|
||||||
|
Product = pool.get('product.product')
|
||||||
|
Asset = pool.get('investment.asset')
|
||||||
|
table, _ = tables[None]
|
||||||
|
tab_asset = Asset.__table__()
|
||||||
|
tab_prod = Product.__table__()
|
||||||
|
tab_templ = Templ.__table__()
|
||||||
|
|
||||||
|
query = tab_asset.join(tab_prod,
|
||||||
|
condition=tab_asset.product==tab_prod.id
|
||||||
|
).join(tab_templ,
|
||||||
|
condition=tab_templ.id==tab_prod.template
|
||||||
|
).select(tab_templ.name,
|
||||||
|
where=tab_asset.id==table.id
|
||||||
|
)
|
||||||
|
return [query]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def order_wkn(tables):
|
||||||
|
""" order wkn
|
||||||
|
"""
|
||||||
|
Asset = Pool().get('investment.asset')
|
||||||
|
tab_ids = Asset.get_identifier_sql(Asset.__table__())
|
||||||
|
table, _ = tables[None]
|
||||||
|
|
||||||
|
query = tab_ids.select(
|
||||||
|
getattr(tab_ids, 'wkn'),
|
||||||
|
where=tab_ids.id==table.id,
|
||||||
|
)
|
||||||
|
return [query]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def order_isin(tables):
|
||||||
|
""" order isin
|
||||||
|
"""
|
||||||
|
Asset = Pool().get('investment.asset')
|
||||||
|
tab_ids = Asset.get_identifier_sql(Asset.__table__())
|
||||||
|
table, _ = tables[None]
|
||||||
|
|
||||||
|
query = tab_ids.select(
|
||||||
|
getattr(tab_ids, 'isin'),
|
||||||
|
where=tab_ids.id==table.id,
|
||||||
|
)
|
||||||
|
return [query]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def order_secsymb(tables):
|
||||||
|
""" order secsymb
|
||||||
|
"""
|
||||||
|
Asset = Pool().get('investment.asset')
|
||||||
|
tab_ids = Asset.get_identifier_sql(Asset.__table__())
|
||||||
|
table, _ = tables[None]
|
||||||
|
|
||||||
|
query = tab_ids.select(
|
||||||
|
getattr(tab_ids, 'secsymb'),
|
||||||
|
where=tab_ids.id==table.id,
|
||||||
|
)
|
||||||
|
return [query]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def search_identifier(cls, names, clause):
|
def search_identifier(cls, names, clause):
|
||||||
""" search in identifier
|
""" search in identifier
|
||||||
|
@ -580,7 +649,10 @@ class Asset(ModelSQL, ModelView):
|
||||||
def search_rec_name(cls, name, clause):
|
def search_rec_name(cls, name, clause):
|
||||||
""" search in rec_name
|
""" search in rec_name
|
||||||
"""
|
"""
|
||||||
return [('product.rec_name',) + tuple(clause[1:])]
|
return ['OR',
|
||||||
|
('product.rec_name',) + tuple(clause[1:]),
|
||||||
|
('product.identifiers.code',) + tuple(clause[1:]),
|
||||||
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def cron_update(cls):
|
def cron_update(cls):
|
||||||
|
|
|
@ -110,6 +110,7 @@ class AssetTestCase(ModuleTestCase):
|
||||||
}])],
|
}])],
|
||||||
}])
|
}])
|
||||||
self.assertEqual(asset.rec_name, 'Product 1 - 2.4500 usd/Unit [05/15/2022]')
|
self.assertEqual(asset.rec_name, 'Product 1 - 2.4500 usd/Unit [05/15/2022]')
|
||||||
|
self.assertEqual(Asset.search_count([('name', '=', 'Product 1')]), 1)
|
||||||
|
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
def test_asset_percentages_daterange(self):
|
def test_asset_percentages_daterange(self):
|
||||||
|
@ -489,6 +490,16 @@ class AssetTestCase(ModuleTestCase):
|
||||||
self.assertEqual(Asset.search_count([('isin', '=', 'XC0009655157')]), 1)
|
self.assertEqual(Asset.search_count([('isin', '=', 'XC0009655157')]), 1)
|
||||||
self.assertEqual(Asset.search_count([('secsymb', '=', '1472977')]), 1)
|
self.assertEqual(Asset.search_count([('secsymb', '=', '1472977')]), 1)
|
||||||
|
|
||||||
|
self.assertEqual(Asset.search_count([('rec_name', '=', '965515')]), 1)
|
||||||
|
self.assertEqual(Asset.search_count([('rec_name', '=', 'XC0009655157')]), 1)
|
||||||
|
self.assertEqual(Asset.search_count([('rec_name', '=', '1472977')]), 1)
|
||||||
|
|
||||||
|
self.assertEqual(Asset.search_count([('name', '=', '965515')]), 1)
|
||||||
|
self.assertEqual(Asset.search_count([('name', '=', 'XC0009655157')]), 1)
|
||||||
|
self.assertEqual(Asset.search_count([('name', '=', '1472977')]), 1)
|
||||||
|
|
||||||
|
self.assertEqual(Asset.search_count([('name', '=', 'Product unit')]), 1)
|
||||||
|
|
||||||
self.assertEqual(Asset.search_count([
|
self.assertEqual(Asset.search_count([
|
||||||
('wkn', 'ilike', '9655%'),
|
('wkn', 'ilike', '9655%'),
|
||||||
]), 1)
|
]), 1)
|
||||||
|
@ -500,6 +511,36 @@ class AssetTestCase(ModuleTestCase):
|
||||||
self.assertEqual(asset2.isin, 'XC0009653103')
|
self.assertEqual(asset2.isin, 'XC0009653103')
|
||||||
self.assertEqual(asset2.secsymb, '1431157')
|
self.assertEqual(asset2.secsymb, '1431157')
|
||||||
|
|
||||||
|
# order wkn
|
||||||
|
assets = Asset.search([], order=[('wkn', 'ASC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].wkn, '965310')
|
||||||
|
self.assertEqual(assets[1].wkn, '965515')
|
||||||
|
assets = Asset.search([], order=[('wkn', 'DESC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].wkn, '965515')
|
||||||
|
self.assertEqual(assets[1].wkn, '965310')
|
||||||
|
|
||||||
|
# order isin
|
||||||
|
assets = Asset.search([], order=[('isin', 'ASC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].isin, 'XC0009653103')
|
||||||
|
self.assertEqual(assets[1].isin, 'XC0009655157')
|
||||||
|
assets = Asset.search([], order=[('wkn', 'DESC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].isin, 'XC0009655157')
|
||||||
|
self.assertEqual(assets[1].isin, 'XC0009653103')
|
||||||
|
|
||||||
|
# order secsymb
|
||||||
|
assets = Asset.search([], order=[('secsymb', 'ASC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].secsymb, '1431157')
|
||||||
|
self.assertEqual(assets[1].secsymb, '1472977')
|
||||||
|
assets = Asset.search([], order=[('wkn', 'DESC')])
|
||||||
|
self.assertEqual(len(assets), 2)
|
||||||
|
self.assertEqual(assets[0].secsymb, '1472977')
|
||||||
|
self.assertEqual(assets[1].secsymb, '1431157')
|
||||||
|
|
||||||
@with_transaction()
|
@with_transaction()
|
||||||
def test_asset_check_product_update(self):
|
def test_asset_check_product_update(self):
|
||||||
""" check update of product on asset
|
""" check update of product on asset
|
||||||
|
|
Loading…
Reference in a new issue