rate: optimize for speed
This commit is contained in:
parent
8a4c8fa58f
commit
3dc79fc292
1 changed files with 34 additions and 27 deletions
61
rate.py
61
rate.py
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue