Compare commits

...

13 commits
main ... 6.8

Author SHA1 Message Date
Frederik Jaeckel
5a320e57da Etikett ver 6.8.26 zum Änderungssatz c44e42da0955 hinzugefügt 2023-12-06 22:38:54 +01:00
Frederik Jaeckel
c84c2d2907 Version 6.8.26 2023-12-06 22:37:56 +01:00
Frederik Jaeckel
e63023170f asset: columns optional 2023-12-03 18:20:22 +01:00
Frederik Jaeckel
4656a4c65c Etikett ver 6.8.25 zum Änderungssatz 7e16130066c0 hinzugefügt 2023-12-01 13:40:37 +01:00
Frederik Jaeckel
214edfd070 Version 6.8.25 2023-12-01 13:40:14 +01:00
Frederik Jaeckel
530d382905 formatting 2023-12-01 13:29:46 +01:00
Frederik Jaeckel
6d72822526 asset-list: remove percent-symbol to speed up list view 2023-06-23 21:40:55 +02:00
Frederik Jaeckel
41a86155a1 diagram: simplify queries 2023-06-23 16:41:39 +02:00
Frederik Jaeckel
0b774fc6e2 asset: avoid exceptions in get_identifiers() 2023-06-23 16:29:10 +02:00
Frederik Jaeckel
c06c2b8260 asset/rate: speed up percent-queries 2023-06-23 16:02:31 +02:00
Frederik Jaeckel
8eaddc9b28 asset: fixed possible exceptions 2023-06-22 17:28:58 +02:00
Frederik Jaeckel
4f9fdb6fe7 Etikett ver 6.8.24 zum Änderungssatz 81540c6c6c42 hinzugefügt 2023-06-07 21:58:47 +02:00
Frederik Jaeckel
922c650a71 Version 6.8.24 2023-06-07 21:58:32 +02:00
9 changed files with 112 additions and 89 deletions

View file

@ -22,6 +22,14 @@ You can define the course sources yourself.
Changes
=======
*6.8.26 - 06.12.2023*
- add: columns optional
*6.8.25 - 01.12.2023*
- code/speed optimized
*6.8.24 - 07.06.2023*
- portet to Tryton 6.8

View file

@ -15,6 +15,7 @@ from sql.functions import CurrentDate, CurrentTimestamp, Round, Extract
from sql.conditionals import Case, Coalesce, NullIf
from sql import Literal
from .diagram import Concat2
from .const import DEF_NONE
digits_percent = 2
@ -100,8 +101,8 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
string='URL',
help='URL for data retrieval.',
states={
'invisible': Eval('updturl_enable', False) == False,
'required': Eval('updturl_enable', False) == True,
'invisible': ~Eval('updturl_enable', False),
'required': Eval('updturl_enable', False),
}, depends=['updturl_enable'])
updturl_enable = fields.Function(fields.Boolean(
string='URL required', readonly=True,
@ -191,7 +192,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query = tab_asset.select(
tab_asset.id,
tab_asset.updtsource,
where=tab_asset.updtsource != None,
where=tab_asset.updtsource != DEF_NONE,
)
cursor.execute(*query)
records = cursor.fetchall()
@ -330,12 +331,13 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
"""
cursor = Transaction().connection.cursor()
(query, tab_asset) = cls.get_name_symbol_sql()
query.where = tab_asset.id.in_([x.id for x in assets])
result = {x: {y.id: None for y in assets} for x in names}
(query, tab_asset) = cls.get_name_symbol_sql()
if assets:
query.where = tab_asset.id.in_([x.id for x in assets])
cursor.execute(*query)
records = cursor.fetchall()
result = {x: {y.id: None for y in assets} for x in names}
for record in records:
values = {
@ -384,22 +386,23 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
def get_rate_data(cls, assets, names):
""" get date and rate of asset
"""
Asset2 = Pool().get('investment.asset')
cursor = Transaction().connection.cursor()
result = {x: {y.id: None for y in assets} for x in names}
if assets:
(query, tab_asset) = cls.get_rate_data_sql()
query.where = tab_asset.id.in_([x.id for x in assets])
curr_digits = {x.id: x.currency_digits for x in assets}
cursor.execute(*query)
records = cursor.fetchall()
result = {x: {y.id: None for y in assets} for x in names}
for record in records:
(id1, rate1, date1, id_rate) = record
asset = Asset2(id1)
exp = Decimal(Decimal(1) / 10 ** (asset.currency_digits or 4))
curr_dig = curr_digits.get(id1, 4)
exp = Decimal(Decimal(1) / 10 ** curr_dig)
values = {
'rate': record[1].quantize(exp),
@ -409,7 +412,6 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
for name in names:
result[name][record[0]] = values[name]
return result
@classmethod
@ -472,8 +474,6 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
"""
pool = Pool()
Rate = pool.get('investment.rate')
Asset2 = pool.get('investment.asset')
tab_asset = Asset2.__table__()
tab_rate1 = Rate.__table__()
tab_rate2 = Rate.__table__()
context = Transaction().context
@ -481,17 +481,14 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
query_date = context.get('qdate', CurrentDate())
where_asset = tab_rate1.date <= query_date
if isinstance(asset_ids, list):
where_asset &= tab_asset.id.in_(asset_ids)
where_asset &= tab_rate1.asset.in_(asset_ids)
tab_today = tab_asset.join(
tab_rate1,
condition=tab_asset.id == tab_rate1.asset,
).select(
tab_asset.id,
tab_today = tab_rate1.select(
tab_rate1.asset.as_('id'),
tab_rate1.date,
tab_rate1.rate,
distinct_on=[tab_asset.id],
order_by=[tab_asset.id, tab_rate1.date.desc],
distinct_on=[tab_rate1.asset],
order_by=[tab_rate1.asset, tab_rate1.date.desc],
where=where_asset,
)
@ -612,6 +609,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
exp = Decimal(Decimal(1) / 10 ** digits_percent)
asset_id_lst = [x.id for x in assets]
if asset_id_lst and names:
for x in names:
tab_percent = cls.get_percentage_sql(
days={
@ -841,7 +839,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
).select(
tab_asset.id,
where=Operator(field_qu, clause[2]) &
(field_qu != None),
(field_qu != DEF_NONE),
)
return [('id', 'in', query)]
@ -856,7 +854,7 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
cursor = Transaction().connection.cursor()
result = {x: {y.id: None for y in assets} for x in names}
if assets:
query = cls.get_identifier_sql(tab_asset)
query.where = tab_asset.id.in_([x.id for x in assets])
@ -869,7 +867,6 @@ class Asset(SymbolMixin, ModelSQL, ModelView):
for n in names:
result[n][id1] = r1[n]
return result
def get_rec_name(self, name):

8
const.py Normal file
View file

@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# This file is part of the cashbook-module from m-ds.de for Tryton.
# The COPYRIGHT file at the top level of this repository contains the
# full copyright notices and license terms.
DEF_TRUE = True
DEF_NONE = None

View file

@ -60,16 +60,16 @@ class GraphDef(metaclass=PoolMeta):
return None
if self.scaling == 'alldata':
query = [('asset.id', '=', self.asset.id)]
query = [('asset', '=', self.asset.id)]
elif self.scaling == 'view':
query = [
('asset.id', '=', self.asset.id),
('asset', '=', self.asset.id),
('date', '>=', self.chart.used_start_date()),
('date', '<=', self.chart.used_end_date()),
]
elif self.scaling == 'six':
query = [
('asset.id', '=', self.asset.id),
('asset', '=', self.asset.id),
('date', '>=', self.chart.used_start_date() -
timedelta(days=180)),
('date', '<=', self.chart.used_end_date()),
@ -104,12 +104,12 @@ class ChartPoint(metaclass=PoolMeta):
before = Rate.search([
('date', '<', query_date),
('asset.id', '=', asset_id),
('asset', '=', asset_id),
], limit=1, order=[('date', 'DESC')])
after = Rate.search([
('date', '>', query_date),
('asset.id', '=', asset_id),
('asset', '=', asset_id),
], limit=1, order=[('date', 'ASC')])
if (len(before) == 1) and (len(after) == 1):

View file

@ -173,7 +173,8 @@ class ImportWizard(Wizard):
datefmt='dd%sdd' % dec_divider,
colnr='2'))
if isinstance(date_val, date) and isinstance(rate_val, Decimal):
if isinstance(date_val, date) and isinstance(
rate_val, Decimal):
result.append({'date': date_val, 'rate': rate_val})
# date range

View file

@ -86,7 +86,8 @@ class OnlineSource(ModelSQL, ModelView):
states=STATES_WEB, depends=DEPENDS_WEB)
rgxdecimal = fields.Selection(
string='Decimal Separator',
help='Decimal separator for converting the market value into a number.',
help='Decimal separator for converting the market ' +
'value into a number.',
selection=sel_rgxdecimal, states=STATES_WEB, depends=DEPENDS_WEB)
rgxident = fields.Char(
string='Identifier',

View file

@ -53,6 +53,13 @@ class Rate(SymbolMixin, ModelSQL, ModelView):
Index(
t,
(t.rate, Index.Range())),
Index(
t,
(t.asset, Index.Equality())),
Index(
t,
(t.asset, Index.Equality()),
(t.date, Index.Range(order='DESC'))),
})
@classmethod

View file

@ -1,5 +1,5 @@
[tryton]
version=6.8.24
version=6.8.26
depends:
ir
res
@ -21,3 +21,4 @@ xml:
import_wiz.xml
menu.xml
cron.xml

View file

@ -4,12 +4,12 @@ The COPYRIGHT file at the top level of this repository contains the
full copyright notices and license terms. -->
<tree>
<field name="name" expand="1"/>
<field name="change_day1" symbol="change_symbol"/>
<field name="change_month1" symbol="change_symbol"/>
<field name="change_month3" symbol="change_symbol"/>
<field name="change_month6" symbol="change_symbol"/>
<field name="date"/>
<field name="rate" symbol="asset_symbol"/>
<field name="isin"/>
<field name="wkn" />
<field name="change_day1" optional="0"/>
<field name="change_month1" optional="0"/>
<field name="change_month3" optional="0"/>
<field name="change_month6" optional="0"/>
<field name="date" optional="0"/>
<field name="rate" symbol="asset_symbol" optional="0"/>
<field name="isin" optional="0"/>
<field name="wkn" optional="0"/>
</tree>