diff --git a/src/sakia/core/money/quant_zerosum.py b/src/sakia/core/money/quant_zerosum.py index 9bb7e21124a238988bfdbdf17189baf51462231b..a27bdbf937bcc173653dbfa9b2d4b55f699f4e90 100644 --- a/src/sakia/core/money/quant_zerosum.py +++ b/src/sakia/core/money/quant_zerosum.py @@ -33,13 +33,13 @@ class QuantitativeZSum: :param sakia.core.community.Community community: Community instance :return: int """ - ud_block = yield from self.community.get_ud_block() - if ud_block and ud_block['membersCount'] > 0: + current = yield from self.community.get_block() + if current and current['membersCount'] > 0: monetary_mass = yield from self.community.monetary_mass() - average = monetary_mass / ud_block['membersCount'] + average = monetary_mass / current['membersCount'] else: average = 0 - return self.amount - average + return self.amount - monetary_mass @asyncio.coroutine def differential(self): @@ -50,7 +50,11 @@ class QuantitativeZSum: def localized(self, units=False, international_system=False): value = yield from self.value() - localized_value = QLocale().toString(float(value), 'f', 0) + prefix = "" + if international_system: + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', 0) if units: return QCoreApplication.translate("QuantitativeZSum", diff --git a/src/sakia/core/money/quantitative.py b/src/sakia/core/money/quantitative.py index e0072fbfb512c4efa42462a455a06157fd4d9018..4ac9024f329d17ce3bf813dd41358612dac0d8d5 100644 --- a/src/sakia/core/money/quantitative.py +++ b/src/sakia/core/money/quantitative.py @@ -39,8 +39,15 @@ class Quantitative(): value = yield from self.value() return value - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 + scientific_value = value prefix_index = 0 prefix = "" @@ -51,10 +58,9 @@ class Quantitative(): if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', 0) + localized_value = QLocale().toString(float(value * multiplier), 'f', 0) return localized_value, prefix @@ -63,7 +69,7 @@ class Quantitative(): value = yield from self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) @@ -81,7 +87,7 @@ class Quantitative(): value = yield from self.differential() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Quantitative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', 0) diff --git a/src/sakia/core/money/relative.py b/src/sakia/core/money/relative.py index 30d83ff4de45c20aa3a0bba11bbdefdd13127bb7..171a09fe15c7a54272456348cdcf2b832caaedc8 100644 --- a/src/sakia/core/money/relative.py +++ b/src/sakia/core/money/relative.py @@ -42,8 +42,14 @@ class Relative(): value = yield from self.value() return value - def _to_si(self, value): + @staticmethod + def to_si(value, digits): prefixes = ['', 'd', 'c', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y'] + if value < 0: + value = -value + multiplier = -1 + else: + multiplier = 1 scientific_value = value prefix_index = 0 prefix = "" @@ -57,11 +63,9 @@ class Relative(): if prefix_index < len(prefixes): prefix = prefixes[prefix_index] - localized_value = QLocale().toString(float(scientific_value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(scientific_value * multiplier), 'f', digits) else: - localized_value = QLocale().toString(float(value), 'f', - self.app.preferences['digits_after_comma']) + localized_value = QLocale().toString(float(value * multiplier), 'f', digits) return localized_value, prefix @@ -70,7 +74,7 @@ class Relative(): value = yield from self.value() prefix = "" if international_system: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) @@ -87,7 +91,7 @@ class Relative(): value = yield from self.differential() prefix = "" if international_system and value != 0: - localized_value, prefix = self._to_si(value) + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) else: localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) diff --git a/src/sakia/core/money/relative_zerosum.py b/src/sakia/core/money/relative_zerosum.py index f32b5274eb0b1c25c36cb46a15166615da4b9b4d..a98ae864052ca758e99e91317c430b99d415088b 100644 --- a/src/sakia/core/money/relative_zerosum.py +++ b/src/sakia/core/money/relative_zerosum.py @@ -2,6 +2,7 @@ from PyQt5.QtCore import QCoreApplication, QT_TRANSLATE_NOOP, QLocale from .relative import Relative import asyncio + class RelativeZSum: _NAME_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', 'Relat Z-sum') _REF_STR_ = QT_TRANSLATE_NOOP('RelativeZSum', "{0} R0 {1}") @@ -33,17 +34,15 @@ class RelativeZSum: :param sakia.core.community.Community community: Community instance :return: float """ - ud_block = yield from self.community.get_ud_block() - if ud_block and ud_block['membersCount'] > 0: + 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() - median = monetary_mass / ud_block['membersCount'] - relative_value = self.amount / float(dividend) - relative_median = median / dividend + average = monetary_mass / current['membersCount'] + rz_value = (self.amount - average) / float(dividend) else: - relative_value = self.amount - relative_median = 0 - return relative_value - relative_median + rz_value = self.amount + return rz_value @asyncio.coroutine def differential(self): @@ -53,7 +52,11 @@ class RelativeZSum: def localized(self, units=False, international_system=False): value = yield from self.value() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\ @@ -65,7 +68,11 @@ class RelativeZSum: def diff_localized(self, units=False, international_system=False): value = yield from self.differential() - localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) + prefix = "" + if international_system and value != 0: + localized_value, prefix = Relative.to_si(value, self.app.preferences['digits_after_comma']) + else: + localized_value = QLocale().toString(float(value), 'f', self.app.preferences['digits_after_comma']) if units: return QCoreApplication.translate("RelativeZSum", RelativeZSum._REF_STR_)\