diff --git a/src/sakia/data/connectors/bma.py b/src/sakia/data/connectors/bma.py index 5d9ef85bbbb179f485dc48803dd64d1ee436e11d..c646b90789b6e143a29bd48ccb8011cf94553bdf 100644 --- a/src/sakia/data/connectors/bma.py +++ b/src/sakia/data/connectors/bma.py @@ -17,18 +17,21 @@ async def parse_responses(responses): result = (False, "") for r in responses: if not result[0]: - if isinstance(r, BaseException): - result = (False, str(r)) - elif r.status == 400: - error = await r.text() - try: - result = (False, errors.DuniterError(bma.parse_error(error)).message) - except jsonschema.ValidationError: - result = (False, error) - elif r.status == 200: - result = (True, (await r.json())) - elif not result[0]: - result = (False, (await r.text())) + try: + if isinstance(r, BaseException): + result = (False, str(r)) + elif r.status == 400: + error = await r.text() + try: + result = (False, errors.DuniterError(bma.parse_error(error)).message) + except jsonschema.ValidationError: + result = (False, error) + elif r.status == 200: + result = (True, (await r.json())) + elif not result[0]: + result = (False, (await r.text())) + except BaseException as e: + result = (False, str(e)) else: await r.release() return result diff --git a/src/sakia/gui/dialogs/transfer/controller.py b/src/sakia/gui/dialogs/transfer/controller.py index e50ffbcf3f0299dc5317ae7be4dae13b717d0b86..571116255034b771c103c253425450d818efd42c 100644 --- a/src/sakia/gui/dialogs/transfer/controller.py +++ b/src/sakia/gui/dialogs/transfer/controller.py @@ -4,6 +4,7 @@ import logging from PyQt5.QtCore import Qt, QObject from PyQt5.QtWidgets import QApplication +from sakia.money import Quantitative from sakia.data.processors import ConnectionsProcessor from sakia.decorators import asyncify from sakia.gui.password_asker import PasswordAskerDialog @@ -58,6 +59,8 @@ class TransferController(QObject): search_user.identity_selected.connect(user_information.search_identity) view.set_keys(transfer.model.available_connections()) + view.radio_pubkey.toggle() + return transfer @classmethod @@ -144,7 +147,7 @@ class TransferController(QObject): recipient = self.selected_pubkey() amount = self.view.spinbox_amount.value() * 100 #TODO: Handle other amount base than 0 - amount_base = 0 + amount_base = self.model.current_base() logging.debug("Showing password dialog...") password = await PasswordAskerDialog(self.model.connection).async_exec() @@ -178,6 +181,8 @@ class TransferController(QObject): def refresh(self): amount = self.model.wallet_value() + current_base = self.model.current_base() + current_base_amount = amount / pow(10, current_base) total_text = self.model.localized_amount(amount) self.view.refresh_labels(total_text) @@ -186,18 +191,14 @@ class TransferController(QObject): else: self.view.set_button_box(TransferView.ButtonBoxState.OK) - max_relative = self.model.quant_to_rel(amount/100) - current_base = self.model.current_base() + max_relative = self.model.quant_to_rel(current_base_amount/100) + self.view.spinbox_amount.setSuffix(Quantitative.base_str(current_base)) - self.view.set_spinboxes_parameters(pow(10, current_base), amount, max_relative) + self.view.set_spinboxes_parameters(current_base_amount / 100, max_relative) def handle_amount_change(self, value): relative = self.model.quant_to_rel(value) self.view.change_relative_amount(relative) - self.refresh_amount_suffix() - - def refresh_amount_suffix(self): - self.view.spinbox_amount.setSuffix(" " + self.model.connection.currency) def handle_relative_change(self, value): amount = self.model.rel_to_quant(value) diff --git a/src/sakia/gui/dialogs/transfer/model.py b/src/sakia/gui/dialogs/transfer/model.py index 7d07b33d80273f61e2fe62d38103c6a7fd5f4987..ebb523d508fabcab80626ed17e4d0f466667ad09 100644 --- a/src/sakia/gui/dialogs/transfer/model.py +++ b/src/sakia/gui/dialogs/transfer/model.py @@ -33,10 +33,10 @@ class TransferModel(QObject): :rtype: int """ dividend, base = self._blockchain_processor.last_ud(self.connection.currency) - amount = rel_value * dividend * pow(10, base) + amount = rel_value * dividend # amount is rounded to the nearest power of 10 depending of last ud base - rounded = int(pow(10, base) * round(float(amount) / pow(10, base))) - return rounded / 100 + # rounded = int(pow(10, base) * round(float(amount) / pow(10, base))) + return int(amount) / 100 def quant_to_rel(self, amount): """ @@ -45,7 +45,7 @@ class TransferModel(QObject): :rtype: float """ dividend, base = self._blockchain_processor.last_ud(self.connection.currency) - relative = amount * 100 / (dividend * pow(10, base)) + relative = amount * 100 / dividend return relative def wallet_value(self): @@ -65,7 +65,6 @@ class TransferModel(QObject): """ Get the value of the current referential """ - localized = self.app.current_ref.instance(amount, self.connection.currency, self.app).diff_localized(True, True) return localized @@ -92,7 +91,7 @@ class TransferModel(QObject): """ result = await self.app.documents_service.send_money(self.connection, password, - recipient, amount, amount_base, comment) + recipient, amount, amount_base, comment) self.app.db.commit() return result diff --git a/src/sakia/gui/dialogs/transfer/view.py b/src/sakia/gui/dialogs/transfer/view.py index 458215e38fc15adce2eb263965da38ccf245b5a1..2952944331184488677aa29b3817a017aaf58fb5 100644 --- a/src/sakia/gui/dialogs/transfer/view.py +++ b/src/sakia/gui/dialogs/transfer/view.py @@ -97,17 +97,15 @@ class TransferView(QDialog, Ui_TransferMoneyDialog): self.spinbox_relative.setValue(relative) self.spinbox_relative.blockSignals(False) - def set_spinboxes_parameters(self, tick_quant, max_quant, max_rel): + def set_spinboxes_parameters(self, max_quant, max_rel): """ Configure the spinboxes It should depend on what the last UD base is - :param int tick_quant: :param int max_quant: :param float max_rel: """ - self.spinbox_amount.setMaximum(max_quant/100) + self.spinbox_amount.setMaximum(max_quant) self.spinbox_relative.setMaximum(max_rel) - self.spinbox_amount.setSingleStep(tick_quant) def refresh_labels(self, total_text): """