asset: aktueller kurs-anzeige, online-update begonnen

This commit is contained in:
Frederik Jaeckel 2022-11-14 23:03:54 +01:00
parent 42ede3decb
commit a936d85043
13 changed files with 317 additions and 5 deletions

114
asset.py
View file

@ -6,7 +6,9 @@
from trytond.model import ModelView, ModelSQL, fields
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond.pyson import Eval, Bool
from trytond.pyson import Eval, Bool, And
from decimal import Decimal
from datetime import time
class Asset(ModelSQL, ModelView):
@ -32,6 +34,9 @@ class Asset(ModelSQL, ModelView):
], depends=['product_uom', 'product'])
rates = fields.One2Many(string='Rates', field='asset',
model_name='investment.rate')
rate = fields.Function(fields.Numeric(string='Current Rate',
readonly=True, digits=(16, Eval('currency_digits', 4)),
depends=['currency_digits']), 'on_change_with_rate')
company_currency = fields.Function(fields.Many2One(readonly=True,
string='Company Currency', states={'invisible': True},
@ -56,6 +61,29 @@ 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')
updttime1 = fields.Time(string='Time 1',
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'])
@classmethod
def default_currency(cls):
""" currency of company
@ -78,6 +106,49 @@ class Asset(ModelSQL, ModelView):
"""
return 4
@fields.depends('updtsource', 'updttime1', 'updttime2', 'updttime3')
def on_change_updtsource(self):
""" clear time-fields
"""
if self.updtsource is None:
self.updttime1 = None
self.updttime2 = None
self.updttime3 = 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
@fields.depends('id', 'currency_digits')
def on_change_with_rate(self, name=None):
""" get current rate
"""
pool = Pool()
Rate = pool.get('investment.rate')
IrDate = pool.get('ir.date')
if self.id:
rates = Rate.search([
('date', '<=', IrDate.today()),
('asset.id', '=', self.id),
], order=[('date', 'DESC')], limit=1)
if len(rates) > 0:
exp = Decimal(Decimal(1) / 10 ** (self.currency_digits or 4))
return rates[0].rate.quantize(exp)
@fields.depends('product', 'uom')
def on_change_product(self):
""" update unit by product
@ -213,4 +284,45 @@ class Asset(ModelSQL, ModelView):
"""
return [('product.rec_name',) + tuple(clause[1:])]
@classmethod
def cron_update(cls):
""" update asset-rates
"""
pool = Pool()
Asset2 = pool.get('investment.asset')
IrDate = pool.get('ir.date')
assets = Asset2.search([
('updtsource', '!=', None),
(),
])
print('\n## assets:', assets)
@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['updttime1'] = None
values['updttime2'] = None
values['updttime3'] = 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['updttime1'] = None
values['updttime2'] = None
values['updttime3'] = None
super(Asset, cls).write(*args)
# end Asset