From 83acfbb14b666ae2f086c92bca66d5a7c7af6c28 Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Fri, 25 Nov 2022 22:46:32 +0100 Subject: [PATCH] =?UTF-8?q?asset:=20suche=20in=20name,=20sortiert=20nach?= =?UTF-8?q?=20name,=20sortierer=20f=C3=BCr=20wkn,=20isin,=20symbl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asset.py | 76 +++++++++++++++++++++++++++++++++++++++++++-- tests/test_asset.py | 41 ++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 2 deletions(-) diff --git a/asset.py b/asset.py index 00b3e37..66869f9 100644 --- a/asset.py +++ b/asset.py @@ -23,7 +23,7 @@ class Asset(ModelSQL, ModelView): __name__ = 'investment.asset' 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', required=True, ondelete="RESTRICT") product = fields.Many2One(string='Product', required=True, @@ -104,6 +104,11 @@ class Asset(ModelSQL, ModelView): readonly=True, digits=(16,digits_percent)), 'get_percentage_change', searcher='search_percentage') + @classmethod + def __setup__(cls): + super(Asset, cls).__setup__() + cls._order.insert(0, ('name', 'ASC')) + @classmethod def view_attributes(cls): return super().view_attributes() + [ @@ -516,6 +521,70 @@ class Asset(ModelSQL, ModelView): ) 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 def search_identifier(cls, names, clause): """ search in identifier @@ -580,7 +649,10 @@ class Asset(ModelSQL, ModelView): def search_rec_name(cls, name, clause): """ 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 def cron_update(cls): diff --git a/tests/test_asset.py b/tests/test_asset.py index 88b8385..2e117ca 100644 --- a/tests/test_asset.py +++ b/tests/test_asset.py @@ -110,6 +110,7 @@ class AssetTestCase(ModuleTestCase): }])], }]) 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() 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([('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([ ('wkn', 'ilike', '9655%'), ]), 1) @@ -500,6 +511,36 @@ class AssetTestCase(ModuleTestCase): self.assertEqual(asset2.isin, 'XC0009653103') 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() def test_asset_check_product_update(self): """ check update of product on asset