asset: query für update
This commit is contained in:
parent
a936d85043
commit
f8ba90d633
5 changed files with 211 additions and 117 deletions
153
asset.py
153
asset.py
|
@ -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):
|
||||
|
|
20
locale/de.po
20
locale/de.po
|
@ -78,10 +78,6 @@ msgctxt "view:investment.asset:"
|
|||
msgid "Course Update"
|
||||
msgstr "Kursaktualisierung"
|
||||
|
||||
msgctxt "view:investment.asset:"
|
||||
msgid "You can have the course updated up to three times a day. The results are averaged."
|
||||
msgstr "Sie können den Kurs bis zu dreimal täglich aktualisieren lassen. Die Ergebnisse werden gemittelt."
|
||||
|
||||
msgctxt "field:investment.asset,company:"
|
||||
msgid "Company"
|
||||
msgstr "Unternehmen"
|
||||
|
@ -158,17 +154,13 @@ msgctxt "help:investment.asset,updtsource:"
|
|||
msgid "Select a source for the course update."
|
||||
msgstr "Wählen Sie eine Quelle für die Kursaktualisierung aus."
|
||||
|
||||
msgctxt "field:investment.asset,updttime1:"
|
||||
msgid "Time 1"
|
||||
msgstr "Zeitpunkt 1"
|
||||
msgctxt "field:investment.asset,updttime:"
|
||||
msgid "Time"
|
||||
msgstr "Zeitpunkt"
|
||||
|
||||
msgctxt "field:investment.asset,updttime2:"
|
||||
msgid "Time 2"
|
||||
msgstr "Zeitpunkt 2"
|
||||
|
||||
msgctxt "field:investment.asset,updttime3:"
|
||||
msgid "Time 3"
|
||||
msgstr "Zeitpunkt 3"
|
||||
msgctxt "field:investment.asset,updtneeded:"
|
||||
msgid "Course update needed"
|
||||
msgstr "Kursaktualisierung nötig"
|
||||
|
||||
|
||||
###################
|
||||
|
|
20
locale/en.po
20
locale/en.po
|
@ -54,10 +54,6 @@ msgctxt "view:investment.asset:"
|
|||
msgid "Course Update"
|
||||
msgstr "Course Update"
|
||||
|
||||
msgctxt "view:investment.asset:"
|
||||
msgid "You can have the course updated up to three times a day. The results are averaged."
|
||||
msgstr "You can have the course updated up to three times a day. The results are averaged."
|
||||
|
||||
msgctxt "field:investment.asset,company:"
|
||||
msgid "Company"
|
||||
msgstr "Company"
|
||||
|
@ -134,17 +130,13 @@ msgctxt "help:investment.asset,updtsource:"
|
|||
msgid "Select a source for the course update."
|
||||
msgstr "Select a source for the course update."
|
||||
|
||||
msgctxt "field:investment.asset,updttime1:"
|
||||
msgid "Time 1"
|
||||
msgstr "Time 1"
|
||||
msgctxt "field:investment.asset,updttime:"
|
||||
msgid "Time"
|
||||
msgstr "Time"
|
||||
|
||||
msgctxt "field:investment.asset,updttime2:"
|
||||
msgid "Time 2"
|
||||
msgstr "Time 2"
|
||||
|
||||
msgctxt "field:investment.asset,updttime3:"
|
||||
msgid "Time 3"
|
||||
msgstr "Time 3"
|
||||
msgctxt "field:investment.asset,updtneeded:"
|
||||
msgid "Course update needed"
|
||||
msgstr "Course update needed"
|
||||
|
||||
msgctxt "model:investment.rate,name:"
|
||||
msgid "Rate"
|
||||
|
|
|
@ -6,8 +6,9 @@
|
|||
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
|
||||
from trytond.pool import Pool
|
||||
from trytond.modules.company.tests import create_company
|
||||
from trytond.transaction import Transaction
|
||||
from decimal import Decimal
|
||||
from datetime import time
|
||||
from datetime import time, date
|
||||
|
||||
|
||||
class AssetTestCase(ModuleTestCase):
|
||||
|
@ -102,20 +103,121 @@ class AssetTestCase(ModuleTestCase):
|
|||
}])
|
||||
|
||||
self.assertEqual(asset.updtsource, None)
|
||||
self.assertEqual(asset.updttime1, None)
|
||||
self.assertEqual(asset.updttime2, None)
|
||||
self.assertEqual(asset.updttime3, None)
|
||||
self.assertEqual(asset.updttime, None)
|
||||
|
||||
asset.updtsource = o_source
|
||||
asset.updttime1 = time(10, 45)
|
||||
asset.updttime = time(10, 45)
|
||||
asset.save()
|
||||
self.assertEqual(asset.updtsource.rec_name, 'Source 1')
|
||||
self.assertEqual(asset.updttime1, time(10, 45))
|
||||
self.assertEqual(asset.updttime, time(10, 45))
|
||||
|
||||
asset.updtsource = None
|
||||
asset.on_change_updtsource()
|
||||
self.assertEqual(asset.updtsource, None)
|
||||
self.assertEqual(asset.updttime1, None)
|
||||
self.assertEqual(asset.updttime, None)
|
||||
|
||||
@with_transaction()
|
||||
def test_asset_check_update_select(self):
|
||||
""" create asset, add online-source,
|
||||
check selection of assets to update
|
||||
"""
|
||||
pool = Pool()
|
||||
OnlineSource = pool.get('investment.source')
|
||||
Asset = pool.get('investment.asset')
|
||||
|
||||
company = self.prep_asset_company()
|
||||
product = self.prep_asset_product(
|
||||
name='Product 1',
|
||||
description='some asset')
|
||||
|
||||
asset = self.prep_asset_item(
|
||||
company=company,
|
||||
product = product)
|
||||
|
||||
o_source, = OnlineSource.create([{
|
||||
'name': 'Source 1',
|
||||
}])
|
||||
Asset.write(*[
|
||||
[asset],
|
||||
{
|
||||
'updtsource': o_source.id,
|
||||
'updttime': time(10, 45),
|
||||
}])
|
||||
self.assertEqual(asset.updtsource.rec_name, 'Source 1')
|
||||
self.assertEqual(asset.updttime, time(10, 45))
|
||||
self.assertEqual(len(asset.rates), 0)
|
||||
|
||||
with Transaction().set_context({
|
||||
'qdate': date(2022, 10, 15),
|
||||
'qtime': time(10, 30),
|
||||
}):
|
||||
# no rates exists - wait for 10:45
|
||||
self.assertEqual(asset.updtneeded, True)
|
||||
self.assertEqual(
|
||||
Asset.search_count([('updtneeded', '=', True)]),
|
||||
0)
|
||||
|
||||
with Transaction().set_context({
|
||||
'qdate': date(2022, 10, 15),
|
||||
'qtime': time(10, 46),
|
||||
}):
|
||||
# no rates exists - run at 10:46
|
||||
self.assertEqual(asset.updtneeded, True)
|
||||
self.assertEqual(
|
||||
Asset.search_count([('updtneeded', '=', True)]),
|
||||
1)
|
||||
|
||||
# add rate at yesterday
|
||||
Asset.write(*[
|
||||
[asset],
|
||||
{
|
||||
'rates': [('create', [{
|
||||
'date': date(2022, 10, 14),
|
||||
'rate': Decimal('1.5'),
|
||||
}])],
|
||||
}])
|
||||
self.assertEqual(len(asset.rates), 1)
|
||||
|
||||
with Transaction().set_context({
|
||||
'qdate': date(2022, 10, 15),
|
||||
'qtime': time(10, 30),
|
||||
}):
|
||||
# 1x rate exists - run at 10:30
|
||||
self.assertEqual(asset.updtneeded, True)
|
||||
self.assertEqual(
|
||||
Asset.search_count([('updtneeded', '=', True)]),
|
||||
0)
|
||||
|
||||
with Transaction().set_context({
|
||||
'qdate': date(2022, 10, 15),
|
||||
'qtime': time(10, 46),
|
||||
}):
|
||||
# 1x rate exists yesterday - run at 10:46
|
||||
self.assertEqual(asset.updtneeded, True)
|
||||
self.assertEqual(
|
||||
Asset.search_count([('updtneeded', '=', True)]),
|
||||
1)
|
||||
|
||||
# add rate at today
|
||||
Asset.write(*[
|
||||
[asset],
|
||||
{
|
||||
'rates': [('create', [{
|
||||
'date': date(2022, 10, 15),
|
||||
'rate': Decimal('1.5'),
|
||||
}])],
|
||||
}])
|
||||
self.assertEqual(len(asset.rates), 2)
|
||||
|
||||
with Transaction().set_context({
|
||||
'qdate': date(2022, 10, 15),
|
||||
'qtime': time(10, 47),
|
||||
}):
|
||||
# 1x rate exists today - run at 10:47
|
||||
self.assertEqual(asset.updtneeded, True)
|
||||
self.assertEqual(
|
||||
Asset.search_count([('updtneeded', '=', True)]),
|
||||
0)
|
||||
|
||||
@with_transaction()
|
||||
def test_asset_indentifiers(self):
|
||||
|
@ -188,7 +290,7 @@ class AssetTestCase(ModuleTestCase):
|
|||
|
||||
@with_transaction()
|
||||
def test_asset_check_product_update(self):
|
||||
""" create asset
|
||||
""" check update of product on asset
|
||||
"""
|
||||
company = self.prep_asset_company()
|
||||
product1 = self.prep_asset_product(
|
||||
|
|
|
@ -32,20 +32,11 @@ full copyright notices and license terms. -->
|
|||
<page name="rates" col="1" string="Rates">
|
||||
<field name="rates" mode="tree,form,graph"/>
|
||||
</page>
|
||||
<page id="pgupdate" col="6" string="Course Update">
|
||||
<page id="pgupdate" col="4" string="Course Update">
|
||||
<label name="updtsource"/>
|
||||
<field name="updtsource" colspan="3"/>
|
||||
<newline/>
|
||||
|
||||
<label name="updttime1"/>
|
||||
<field name="updttime1"/>
|
||||
<label name="updttime2"/>
|
||||
<field name="updttime2"/>
|
||||
<label name="updttime3"/>
|
||||
<field name="updttime3"/>
|
||||
|
||||
<label id="lab1" colspan="6" xalign="0.0"
|
||||
string="You can have the course updated up to three times a day. The results are averaged."/>
|
||||
<field name="updtsource"/>
|
||||
<label name="updttime"/>
|
||||
<field name="updttime"/>
|
||||
</page>
|
||||
</notebook>
|
||||
|
||||
|
|
Loading…
Reference in a new issue