rate: optimize for speed

This commit is contained in:
Frederik Jaeckel 2023-01-05 22:25:16 +01:00
parent 8a4c8fa58f
commit 3dc79fc292

61
rate.py
View file

@ -22,15 +22,14 @@ class Rate(SymbolMixin, ModelSQL, ModelView):
depends=['asset_digits']) depends=['asset_digits'])
asset_digits = fields.Function(fields.Integer(string='Digits', asset_digits = fields.Function(fields.Integer(string='Digits',
readonly=True), 'on_change_with_asset_digits') readonly=True), 'get_rate_data')
currency = fields.Function(fields.Many2One(string='Currency', currency = fields.Function(fields.Many2One(string='Currency',
readonly=True, model_name='currency.currency'), readonly=True, model_name='currency.currency'),
'on_change_with_currency') 'get_rate_data')
uom = fields.Function(fields.Many2One(string='Uom', uom = fields.Function(fields.Many2One(string='Uom',
readonly=True, model_name='product.uom'), readonly=True, model_name='product.uom'), 'get_rate_data')
'on_change_with_uom')
symbol = fields.Function(fields.Char(string='Symbol', symbol = fields.Function(fields.Char(string='Symbol',
readonly=True), 'on_change_with_symbol') readonly=True), 'get_rate_data')
@classmethod @classmethod
def __setup__(cls): def __setup__(cls):
@ -53,31 +52,39 @@ class Rate(SymbolMixin, ModelSQL, ModelView):
IrDate = Pool().get('ir.date') IrDate = Pool().get('ir.date')
return IrDate.today() return IrDate.today()
def on_change_with_symbol(self, name=None): @classmethod
""" symbol:% def get_rate_data(cls, rates, names):
""" speed up: get values for rate
""" """
return '%' pool = Pool()
Asset = pool.get('investment.asset')
tab_asset = Asset.__table__()
tab_rate = cls.__table__()
cursor = Transaction().connection.cursor()
@fields.depends('asset', '_parent_asset.uom') query = tab_asset.join(tab_rate,
def on_change_with_uom(self, name=None): condition=tab_asset.id==tab_rate.asset,
""" get unit of asset ).select(
""" tab_rate.id,
if self.asset: tab_asset.uom,
return self.asset.uom.id tab_asset.currency,
tab_asset.currency_digits,
where=tab_rate.id.in_([x.id for x in rates]),
)
cursor.execute(*query)
records = cursor.fetchall()
@fields.depends('asset', '_parent_asset.currency') result = {x:{y.id: None for y in rates} for x in names}
def on_change_with_currency(self, name=None): for record in records:
""" get currency r1 = {
""" 'symbol': '%',
if self.asset: 'uom': record[1],
return self.asset.currency.id 'currency': record[2],
'asset_digits': record[3],
}
@fields.depends('asset', '_parent_asset.currency_digits') for n in names:
def on_change_with_asset_digits(self, name=None): result[n][record[0]] = r1[n]
""" get digits for asset return result
"""
if self.asset:
return self.asset.currency_digits
return 4
# Rate # Rate