asset: online-quelle als liste
This commit is contained in:
parent
7334e53f9f
commit
258c14e2b5
8 changed files with 171 additions and 100 deletions
99
asset.py
99
asset.py
|
@ -78,15 +78,16 @@ class Asset(ModelSQL, ModelView):
|
|||
help='Stock market symbol'),
|
||||
'get_identifiers', searcher='search_identifier')
|
||||
|
||||
updtsource = fields.Many2One(string='Update Source',
|
||||
help='Select a source for the course update.',
|
||||
ondelete='SET NULL', model_name='investment.source')
|
||||
updtsources = fields.Many2Many(string='Update Sources',
|
||||
help='Select sources for the course update. The course sources are tried until a valid value has been read.',
|
||||
relation_name='investment.asset_source_rel',
|
||||
origin='asset', target='source')
|
||||
updtdays = fields.Selection(string='Select days', required=True,
|
||||
selection=sel_updtdays)
|
||||
updttime = fields.Time(string='Time',
|
||||
states={
|
||||
'readonly': ~Bool(Eval('updtsource')),
|
||||
}, depends=['updtsource'])
|
||||
'readonly': ~Bool(Eval('updtsources')),
|
||||
}, depends=['updtsources'])
|
||||
nextupdate = fields.Function(fields.DateTime(string='Next Update',
|
||||
readonly=True),
|
||||
'get_nextupdates', searcher='search_nextupdate')
|
||||
|
@ -113,12 +114,48 @@ class Asset(ModelSQL, ModelView):
|
|||
readonly=True, digits=(16,digits_percent)),
|
||||
'get_percentage_change', searcher='search_percentage')
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
""" register and migrate
|
||||
"""
|
||||
super(Asset, cls).__register__(module_name)
|
||||
cls.migrate_updtsource(module_name)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Asset, cls).__setup__()
|
||||
cls._order.insert(0, ('name', 'ASC'))
|
||||
cls._order.insert(0, ('date', 'DESC'))
|
||||
|
||||
@classmethod
|
||||
def migrate_updtsource(cls, module_name):
|
||||
""" replace 'updtsource' by relation
|
||||
"""
|
||||
pool = Pool()
|
||||
Asset2 = pool.get('investment.asset')
|
||||
|
||||
asset_table = Asset2.__table_handler__(module_name)
|
||||
if asset_table.column_exist('updtsource'):
|
||||
AssetSourceRel = pool.get('investment.asset_source_rel')
|
||||
tab_asset = Asset2.__table__()
|
||||
cursor = Transaction().connection.cursor()
|
||||
|
||||
query = tab_asset.select(
|
||||
tab_asset.id,
|
||||
tab_asset.updtsource,
|
||||
where = tab_asset.updtsource != None,
|
||||
)
|
||||
cursor.execute(*query)
|
||||
records = cursor.fetchall()
|
||||
to_create = [{
|
||||
'asset': x[0],
|
||||
'source': x[1],
|
||||
} for x in records]
|
||||
|
||||
if len(to_create) > 0:
|
||||
AssetSourceRel.create(to_create)
|
||||
asset_table.drop_column('updtsource')
|
||||
|
||||
@classmethod
|
||||
def view_attributes(cls):
|
||||
return super().view_attributes() + [
|
||||
|
@ -164,11 +201,11 @@ class Asset(ModelSQL, ModelView):
|
|||
"""
|
||||
return 'work'
|
||||
|
||||
@fields.depends('updtsource', 'updttime')
|
||||
def on_change_updtsource(self):
|
||||
@fields.depends('updtsources', 'updttime')
|
||||
def on_change_updtsources(self):
|
||||
""" clear time-fields
|
||||
"""
|
||||
if self.updtsource is None:
|
||||
if len(self.updtsources) == 0:
|
||||
self.updttime = None
|
||||
else :
|
||||
self.updttime = time(11, 30)
|
||||
|
@ -513,15 +550,21 @@ class Asset(ModelSQL, ModelView):
|
|||
"""
|
||||
pool = Pool()
|
||||
Asset = pool.get('investment.asset')
|
||||
AssetSourceRel = pool.get('investment.asset_source_rel')
|
||||
Rate = pool.get('investment.rate')
|
||||
tab_asset = Asset.__table__()
|
||||
tab_rate = Rate.__table__()
|
||||
tab_rel = AssetSourceRel.__table__()
|
||||
context = Transaction().context
|
||||
|
||||
query_date = context.get('qdate', CurrentDate() - Literal(1))
|
||||
|
||||
# get last date of rate
|
||||
tab_date = tab_asset.join(tab_rate,
|
||||
tab_date = tab_asset.join(tab_rel,
|
||||
# link to asset-source-relation to check if
|
||||
# there are online-sources set
|
||||
condition=tab_rel.asset == tab_asset.id,
|
||||
).join(tab_rate,
|
||||
condition=tab_asset.id == tab_rate.asset,
|
||||
type_ = 'LEFT OUTER',
|
||||
).select(
|
||||
|
@ -531,7 +574,6 @@ class Asset(ModelSQL, ModelView):
|
|||
tab_asset.updttime,
|
||||
distinct_on = [tab_asset.id],
|
||||
order_by = [tab_asset.id, tab_rate.date.desc],
|
||||
where=tab_asset.updtsource != None,
|
||||
)
|
||||
|
||||
query = tab_date.select(
|
||||
|
@ -768,27 +810,18 @@ class Asset(ModelSQL, ModelView):
|
|||
]):
|
||||
OnlineSource.update_rate(asset)
|
||||
|
||||
@classmethod
|
||||
def create(cls, vlist):
|
||||
""" add debit/credit
|
||||
"""
|
||||
vlist = [x.copy() for x in vlist]
|
||||
for values in vlist:
|
||||
if 'updtsource' in values.keys():
|
||||
if values['updtsource'] is None:
|
||||
values['updttime'] = None
|
||||
return super(Asset, cls).create(vlist)
|
||||
|
||||
@classmethod
|
||||
def write(cls, *args):
|
||||
""" deny update if cashbook.line!='open',
|
||||
add or update debit/credit
|
||||
"""
|
||||
actions = iter(args)
|
||||
for lines, values in zip(actions, actions):
|
||||
if 'updtsource' in values.keys():
|
||||
if values['updtsource'] is None:
|
||||
values['updttime'] = None
|
||||
super(Asset, cls).write(*args)
|
||||
|
||||
# end Asset
|
||||
|
||||
|
||||
class AssetSourceRel(ModelSQL):
|
||||
'Asset Source Relation'
|
||||
__name__ = 'investment.asset_source_rel'
|
||||
|
||||
source = fields.Many2One(string='Online Source', select=True,
|
||||
required=True, model_name='investment.source',
|
||||
ondelete='CASCADE')
|
||||
asset = fields.Many2One(string='Asset', select=True,
|
||||
required=True, model_name='investment.asset',
|
||||
ondelete='CASCADE')
|
||||
|
||||
# end AssetSourceRel
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue