diff --git a/src/sakia/core/money/quant_zerosum.py b/src/sakia/core/money/quant_zerosum.py index a27bdbf937bcc173653dbfa9b2d4b55f699f4e90..c8fb532f27dcbb69f201215ec6dde3ecff570d3d 100644 --- a/src/sakia/core/money/quant_zerosum.py +++ b/src/sakia/core/money/quant_zerosum.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale from . import Quantitative import asyncio + class QuantitativeZSum: _NAME_STR_ = QT_TRANSLATE_NOOP('QuantitativeZSum', 'Quant Z-sum') _REF_STR_ = QT_TRANSLATE_NOOP('QuantitativeZSum', "{0} Q0 {1}") @@ -22,24 +23,31 @@ class QuantitativeZSum: @classmethod def diff_units(cls, currency): - return QuantitativeZSum.units(currency) + return Quantitative.units(currency) @asyncio.coroutine def value(self): """ Return quantitative value of amount minus the average value + t = last UD block + t-1 = penultimate UD block + M = Monetary mass + N = Members count + + zsum value = value - ( M(t-1) / N(t) ) + :param int amount: Value :param sakia.core.community.Community community: Community instance :return: int """ - current = yield from self.community.get_block() - if current and current['membersCount'] > 0: - monetary_mass = yield from self.community.monetary_mass() - average = monetary_mass / current['membersCount'] + ud_block = yield from self.community.get_ud_block() + ud_block_minus_1 = yield from self.community.get_ud_block(1) + if ud_block_minus_1 and ud_block['membersCount'] > 0: + average = ud_block_minus_1['monetaryMass'] / ud_block['membersCount'] else: average = 0 - return self.amount - monetary_mass + return self.amount - average @asyncio.coroutine def differential(self): @@ -67,4 +75,4 @@ class QuantitativeZSum: @asyncio.coroutine def diff_localized(self, units=False, international_system=False): localized = yield from Quantitative(self.amount, self.community, self.app).localized(units, international_system) - return localized \ No newline at end of file + return localized diff --git a/src/sakia/core/money/quantitative.py b/src/sakia/core/money/quantitative.py index 4ac9024f329d17ce3bf813dd41358612dac0d8d5..809ce5fe470f43b93d6cb682e9257fd119ea23ab 100644 --- a/src/sakia/core/money/quantitative.py +++ b/src/sakia/core/money/quantitative.py @@ -1,6 +1,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QObject, QLocale import asyncio + class Quantitative(): _NAME_STR_ = QT_TRANSLATE_NOOP('Quantitative', 'Units') _REF_STR_ = QT_TRANSLATE_NOOP('Quantitative', "{0} {1}{2}") diff --git a/src/sakia/core/money/relative.py b/src/sakia/core/money/relative.py index 171a09fe15c7a54272456348cdcf2b832caaedc8..a524e468468f9e61265ea52fd0e1155c57473e30 100644 --- a/src/sakia/core/money/relative.py +++ b/src/sakia/core/money/relative.py @@ -1,7 +1,8 @@ from PyQt5.QtCore import QObject, QCoreApplication, QT_TRANSLATE_NOOP, QLocale import asyncio -class Relative(): + +class Relative: _NAME_STR_ = QT_TRANSLATE_NOOP('Relative', 'UD') _REF_STR_ = QT_TRANSLATE_NOOP('Relative', "{0} {1}UD {2}") _UNITS_STR_ = QT_TRANSLATE_NOOP('Relative', "UD {0}") diff --git a/src/sakia/core/money/relative_zerosum.py b/src/sakia/core/money/relative_zerosum.py index a98ae864052ca758e99e91317c430b99d415088b..79629e88f829311c32c2583556f15c9d8c98ed69 100644 --- a/src/sakia/core/money/relative_zerosum.py +++ b/src/sakia/core/money/relative_zerosum.py @@ -23,26 +23,34 @@ class RelativeZSum: @classmethod def diff_units(cls, currency): - return RelativeZSum.units(currency) + return Relative.units(currency) @asyncio.coroutine def value(self): """ Return relative value of amount minus the average value + t = last UD block + t-1 = penultimate UD block + M = Monetary mass + N = Members count + + zsum value = (value / UD(t)) - (( M(t-1) / N(t) ) / UD(t)) + :param int amount: Value :param sakia.core.community.Community community: Community instance :return: float """ - current = yield from self.community.get_block() - if current and current['membersCount'] > 0: - monetary_mass = yield from self.community.monetary_mass() - dividend = yield from self.community.dividend() - average = monetary_mass / current['membersCount'] - rz_value = (self.amount - average) / float(dividend) + ud_block = yield from self.community.get_ud_block() + ud_block_minus_1 = yield from self.community.get_ud_block(1) + if ud_block_minus_1 and ud_block['membersCount'] > 0: + median = ud_block_minus_1['monetaryMass'] / ud_block['membersCount'] + relative_value = self.amount / float(ud_block['dividend']) + relative_median = median / ud_block['dividend'] else: - rz_value = self.amount - return rz_value + relative_value = self.amount + relative_median = 0 + return relative_value - relative_median @asyncio.coroutine def differential(self): diff --git a/src/sakia/gui/informations_tab.py b/src/sakia/gui/informations_tab.py index a2184503ea6ca3346a7b4589dab7402db40cf213..9a4fa7a8a200b77c394b7a4bfff0d1447cac1d31 100644 --- a/src/sakia/gui/informations_tab.py +++ b/src/sakia/gui/informations_tab.py @@ -6,7 +6,6 @@ Created on 31 janv. 2015 import logging import asyncio -import math from PyQt5.QtCore import QLocale, QDateTime, QEvent from PyQt5.QtWidgets import QWidget from ..gen_resources.informations_tab_uic import Ui_InformationsTabWidget @@ -14,6 +13,7 @@ from ..tools.decorators import asyncify, once_at_a_time, cancel_once_task from ..tools.exceptions import NoPeerAvailable from .widgets import Busy + class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """ classdocs @@ -23,8 +23,8 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): """ Constructor of the InformationsTabWidget - :param app: sakia.core.Application - :param community: sakia.core.Community + :param sakia.core.app.Application app: Application instance + :return: """ super().__init__() @@ -36,6 +36,10 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): self.busy.hide() def change_account(self, account): + """ + + :param sakia.core.app.Account account: Account instance selected + """ cancel_once_task(self, self.refresh_labels) self.account = account @@ -110,6 +114,7 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): <tr><td align="right"><b>{:2.2%} / {:} days</b></td><td>{:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> + <tr><td align="right"><b>{:}</b></td><td>{:}</td></tr> </table> """).format( localized_ud, @@ -128,6 +133,12 @@ class InformationsTabWidget(QWidget, Ui_InformationsTabWidget): params['dt'] / 86400, self.tr('Actual growth c = UD(t)/[M(t-1)/N(t)]'), + QLocale.toString( + QLocale(), + QDateTime.fromTime_t(block_ud_minus_1['medianTime']), + QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) + ), + self.tr('Penultimate UD date and time (t-1)'), QLocale.toString( QLocale(), QDateTime.fromTime_t(block_ud['medianTime']),