From ab9dcae365f171cfaa8290802e27e05bb33e2bd9 Mon Sep 17 00:00:00 2001
From: Vincent Texier <vit@free.fr>
Date: Sun, 12 Apr 2015 11:25:32 +0200
Subject: [PATCH] Display balance and total payment and total deposit in
 transactions tab

---
 res/ui/transactions_tab.ui           | 29 ++++++++++++++++++++--
 src/cutecoin/core/account.py         |  3 +--
 src/cutecoin/gui/currency_tab.py     |  1 +
 src/cutecoin/gui/transactions_tab.py | 36 +++++++++++++++++++++++++++-
 src/cutecoin/main.py                 |  2 +-
 src/cutecoin/models/txhistory.py     | 21 +++++++++++++++-
 6 files changed, 85 insertions(+), 7 deletions(-)

diff --git a/res/ui/transactions_tab.ui b/res/ui/transactions_tab.ui
index d61b34cd..c610144a 100644
--- a/res/ui/transactions_tab.ui
+++ b/res/ui/transactions_tab.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>481</width>
+    <height>456</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -43,6 +43,31 @@
        </item>
       </layout>
      </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label_balance">
+         <property name="text">
+          <string>Balance:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_payment">
+         <property name="text">
+          <string>Payment:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_deposit">
+         <property name="text">
+          <string>Deposit:</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
      <item>
       <widget class="QTableView" name="table_history">
        <property name="contextMenuPolicy">
diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py
index de8f903a..dd879657 100644
--- a/src/cutecoin/core/account.py
+++ b/src/cutecoin/core/account.py
@@ -259,8 +259,7 @@ class Account(QObject):
         '''
         sent = []
         for w in self.wallets:
-            for transfer in w.transfers(community):
-                sent.append(transfer)
+            sent.extend(w.transfers(community))
         return sent
 
     def amount(self, community):
diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py
index f162c2ce..e5d63315 100644
--- a/src/cutecoin/gui/currency_tab.py
+++ b/src/cutecoin/gui/currency_tab.py
@@ -173,6 +173,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget):
                                                      QModelIndex(),
                                                      QModelIndex(),
                                                      [])
+            self.tab_history.refresh_balance()
 
         if self.tab_wallets:
             self.tab_wallets.refresh()
diff --git a/src/cutecoin/gui/transactions_tab.py b/src/cutecoin/gui/transactions_tab.py
index 43e61eec..46324b5f 100644
--- a/src/cutecoin/gui/transactions_tab.py
+++ b/src/cutecoin/gui/transactions_tab.py
@@ -1,6 +1,6 @@
 from PyQt5.QtWidgets import QWidget, QAbstractItemView, QHeaderView, QDialog, \
     QMenu, QAction, QApplication, QMessageBox
-from PyQt5.QtCore import Qt, QDateTime, QModelIndex
+from PyQt5.QtCore import Qt, QDateTime, QModelIndex, QLocale
 from PyQt5.QtGui import QCursor
 from ..gen_resources.transactions_tab_uic import Ui_transactionsTabWidget
 from ..models.txhistory import HistoryTableModel, TxFilterProxyModel
@@ -62,6 +62,40 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget):
         self.table_history.setSortingEnabled(True)
         self.table_history.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
 
+        self.refresh_balance()
+
+    def refresh_balance(self):
+        proxy = self.table_history.model()
+        balance = proxy.deposits - proxy.payments
+        if isinstance(proxy.deposits, int):
+            localized_deposits = QLocale().toString(
+                self.app.current_account.units_to_ref(proxy.deposits, self.community))
+            localized_payments = QLocale().toString(
+                self.app.current_account.units_to_ref(proxy.payments, self.community))
+            localized_balance = QLocale().toString(
+                self.app.current_account.units_to_diff_ref(balance, self.community))
+
+        else:
+            localized_deposits = QLocale().toString(
+                self.app.current_account.units_to_ref(proxy.deposits, self.community), 'f', 2)
+            localized_payments = QLocale().toString(
+                self.app.current_account.units_to_ref(proxy.payments, self.community), 'f', 2)
+            localized_balance = QLocale().toString(
+                self.app.current_account.units_to_diff_ref(balance, self.community), 'f', 2)
+
+        self.label_deposit.setText("Deposits: {:} {:}".format(
+            localized_deposits,
+            self.app.current_account.ref_name(self.community.short_currency)
+        ))
+        self.label_payment.setText("Payments: {:} {:}".format(
+            localized_payments,
+            self.app.current_account.ref_name(self.community.short_currency)
+        ))
+        self.label_balance.setText("Balance: {:} {:}".format(
+            localized_balance,
+            self.app.current_account.ref_name(self.community.short_currency)
+        ))
+
     def history_context_menu(self, point):
         index = self.table_history.indexAt(point)
         model = self.table_history.model()
diff --git a/src/cutecoin/main.py b/src/cutecoin/main.py
index d92b85ca..93b00b45 100755
--- a/src/cutecoin/main.py
+++ b/src/cutecoin/main.py
@@ -31,6 +31,6 @@ if __name__ == '__main__':
     app = Application(sys.argv)
     QLocale.setDefault(QLocale("en_GB"))
     window = MainWindow(app)
-    window.show()
+    window.showMaximized()
     sys.exit(cutecoin.exec_())
     pass
diff --git a/src/cutecoin/models/txhistory.py b/src/cutecoin/models/txhistory.py
index 97dc590e..cdb28b91 100644
--- a/src/cutecoin/models/txhistory.py
+++ b/src/cutecoin/models/txhistory.py
@@ -20,6 +20,9 @@ class TxFilterProxyModel(QSortFilterProxyModel):
         self.account = None
         self.ts_from = ts_from
         self.ts_to = ts_to
+        # total by column
+        self.payments = 0
+        self.deposits = 0
 
     def set_period(self, ts_from, ts_to):
         """
@@ -31,11 +34,27 @@ class TxFilterProxyModel(QSortFilterProxyModel):
 
     def filterAcceptsRow(self, sourceRow, sourceParent):
         def in_period(date_ts):
-            return (date_ts in range(self.ts_from, self.ts_to))
+            return date_ts in range(self.ts_from, self.ts_to)
 
         date_col = self.sourceModel().column_types.index('date')
         source_index = self.sourceModel().index(sourceRow, date_col)
         date = self.sourceModel().data(source_index, Qt.DisplayRole)
+        if in_period(date):
+            # calculate sum total payments
+            payment = self.sourceModel().data(
+                self.sourceModel().index(sourceRow, self.sourceModel().column_types.index('payment')),
+                Qt.DisplayRole
+            )
+            if payment:
+                self.payments += int(payment)
+            # calculate sum total deposits
+            deposit = self.sourceModel().data(
+                self.sourceModel().index(sourceRow, self.sourceModel().column_types.index('deposit')),
+                Qt.DisplayRole
+            )
+            if deposit:
+                self.deposits += int(deposit)
+
         return in_period(date)
 
     def columnCount(self, parent):
-- 
GitLab