asset: query für update

This commit is contained in:
Frederik Jaeckel 2022-11-17 22:51:29 +01:00
parent a936d85043
commit f8ba90d633
5 changed files with 211 additions and 117 deletions

153
asset.py
View file

@ -9,6 +9,8 @@ from trytond.pool import Pool
from trytond.pyson import Eval, Bool, And
from decimal import Decimal
from datetime import time
from sql.functions import CurrentTime
from sql.conditionals import Case
class Asset(ModelSQL, ModelView):
@ -64,25 +66,13 @@ class Asset(ModelSQL, ModelView):
updtsource = fields.Many2One(string='Update Source',
help='Select a source for the course update.',
ondelete='SET NULL', model_name='investment.source')
updttime1 = fields.Time(string='Time 1',
updttime = fields.Time(string='Time',
states={
'readonly': ~Bool(Eval('updtsource')),
}, depends=['updtsource'])
updttime2 = fields.Time(string='Time 2',
states={
'readonly': ~And(
Bool(Eval('updtsource')),
Bool(Eval('updttime1')),
),
}, depends=['updtsource', 'updttime1'])
updttime3 = fields.Time(string='Time 3',
states={
'readonly': ~And(
Bool(Eval('updtsource')),
Bool(Eval('updttime1')),
Bool(Eval('updttime2')),
),
}, depends=['updtsource', 'updttime1', 'updttime2'])
updtneeded = fields.Function(fields.Boolean(string='Course update needed',
readonly=True),
'on_change_with_updtneeded', searcher='search_updtneeded')
@classmethod
def default_currency(cls):
@ -106,31 +96,14 @@ class Asset(ModelSQL, ModelView):
"""
return 4
@fields.depends('updtsource', 'updttime1', 'updttime2', 'updttime3')
@fields.depends('updtsource', 'updttime')
def on_change_updtsource(self):
""" clear time-fields
"""
if self.updtsource is None:
self.updttime1 = None
self.updttime2 = None
self.updttime3 = None
self.updttime = None
else :
self.updttime1 = time(11, 30)
@fields.depends('updttime1', 'updttime2', 'updttime3')
def on_change_updttime1(self):
""" clear fiels
"""
if self.updttime1 is None:
self.updttime2 = None
self.updttime3 = None
@fields.depends('updttime2', 'updttime3')
def on_change_updttime2(self):
""" clear fiels
"""
if self.updttime2 is None:
self.updttime3 = None
self.updttime = time(11, 30)
@fields.depends('id', 'currency_digits')
def on_change_with_rate(self, name=None):
@ -165,6 +138,78 @@ class Asset(ModelSQL, ModelView):
if self.currency:
self.currency_digits = self.currency.digits
@fields.depends('product')
def on_change_with_product_uom(self, name=None):
""" get category of product-uom
"""
if self.product:
return self.product.default_uom.category.id
@fields.depends('currency')
def on_change_with_currency_digits(self, name=None):
""" currency of cashbook
"""
if self.currency:
return self.currency.digits
else:
return 2
@fields.depends('company', 'currency')
def on_change_with_company_currency(self, name=None):
""" get company-currency if its different from current
asset-currency
"""
if self.company:
if self.currency:
if self.company.currency.id != self.currency.id:
return self.company.currency.id
@fields.depends('id')
def on_change_with_updtneeded(self, name=None):
""" get state of update
"""
Asset2 = Pool().get('investment.asset')
if self.id:
if Asset2.search_count([
('updtneeded', '=', True),
('id', '=', self.id)
]) == 1:
return True
return False
@classmethod
def search_updtneeded(cls, names, clause):
""" search for assets to update
"""
pool = Pool()
Asset2 = pool.get('investment.asset')
Rate = pool.get('investment.rate')
IrDate = pool.get('ir.date')
tab_asset = Asset2.__table__()
tab_rate = Rate.__table__()
Operator = fields.SQL_OPERATORS[clause[1]]
context = Transaction().context
query_date = context.get('qdate', IrDate.today())
query_time = context.get('qtime', CurrentTime())
query = tab_asset.join(tab_rate,
condition=(tab_asset.id==tab_rate.asset) & \
(tab_rate.date == query_date),
type_ = 'LEFT OUTER',
).select(tab_asset.id,
where=Operator(
Case(
((tab_rate.id == None) & \
(tab_asset.updtsource != None) & \
(tab_asset.updttime <= query_time), True),
default_ = False,
),
clause[2]),
)
return [('id', '=', query)]
@classmethod
def get_identifier_sql(cls, tab_asset):
""" sql-query for identifiers
@ -246,32 +291,6 @@ class Asset(ModelSQL, ModelView):
return result
@fields.depends('product')
def on_change_with_product_uom(self, name=None):
""" get category of product-uom
"""
if self.product:
return self.product.default_uom.category.id
@fields.depends('currency')
def on_change_with_currency_digits(self, name=None):
""" currency of cashbook
"""
if self.currency:
return self.currency.digits
else:
return 2
@fields.depends('company', 'currency')
def on_change_with_company_currency(self, name=None):
""" get company-currency if its different from current
asset-currency
"""
if self.company:
if self.currency:
if self.company.currency.id != self.currency.id:
return self.company.currency.id
def get_rec_name(self, name):
if self.product:
return self.product.rec_name
@ -290,13 +309,11 @@ class Asset(ModelSQL, ModelView):
"""
pool = Pool()
Asset2 = pool.get('investment.asset')
IrDate = pool.get('ir.date')
assets = Asset2.search([
('updtsource', '!=', None),
(),
])
print('\n## assets:', assets)
for asset in Asset2.search([
('updtneeded', '=', True),
]):
pass
@classmethod
def create(cls, vlist):