asset: aktueller kurs-anzeige, online-update begonnen
This commit is contained in:
parent
42ede3decb
commit
a936d85043
13 changed files with 317 additions and 5 deletions
114
asset.py
114
asset.py
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue