From e505970cdbbe0629a4cec51a0c386664ebd98501 Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Mon, 11 May 2015 16:52:11 +0200
Subject: [PATCH] Fix bugs in transactions tab : - Transactions order by date
 was not correct ( issue #123 ) - From transactions tab, the transfers dialog
 call was wrong

---
 src/cutecoin/__init__.py             |  2 +-
 src/cutecoin/core/transfer.py        |  1 +
 src/cutecoin/core/wallet.py          | 17 ++++++++++++-----
 src/cutecoin/gui/transactions_tab.py |  2 +-
 src/cutecoin/models/txhistory.py     | 23 ++++++++++++++++++-----
 5 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/src/cutecoin/__init__.py b/src/cutecoin/__init__.py
index 684173bd..c11c8dd8 100644
--- a/src/cutecoin/__init__.py
+++ b/src/cutecoin/__init__.py
@@ -1,2 +1,2 @@
-__version_info__ = ('0', '9', '2')
+__version_info__ = ('0', '10', '0')
 __version__ = '.'.join(__version_info__)
diff --git a/src/cutecoin/core/transfer.py b/src/cutecoin/core/transfer.py
index b01a4426..dcfeb9cf 100644
--- a/src/cutecoin/core/transfer.py
+++ b/src/cutecoin/core/transfer.py
@@ -48,6 +48,7 @@ class Transfer(object):
         assert('comment' in metadata)
         assert('issuer_uid' in metadata)
         assert('receiver_uid' in metadata)
+        assert('txid' in metadata)
 
         self.txdoc = txdoc
         self.state = state
diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py
index 145ae112..729d843f 100644
--- a/src/cutecoin/core/wallet.py
+++ b/src/cutecoin/core/wallet.py
@@ -68,7 +68,8 @@ class Cache():
     def transfers(self):
         return [t for t in self._transfers if t.state != Transfer.DROPPED]
 
-    def _parse_transaction(self, community, tx, block_number, mediantime, received_list):
+    def _parse_transaction(self, community, tx, block_number,
+                           mediantime, received_list, txid):
         logging.debug(tx)
         receivers = [o.pubkey for o in tx.outputs
                      if o.pubkey != tx.issuers[0]]
@@ -89,7 +90,8 @@ class Cache():
                     'issuer': tx.issuers[0],
                     'issuer_uid': issuer_uid,
                     'receiver': receivers[0],
-                    'receiver_uid': receiver_uid}
+                    'receiver_uid': receiver_uid,
+                    'txid': txid}
 
         in_issuers = len([i for i in tx.issuers
                      if i == self.wallet.pubkey]) > 0
@@ -136,9 +138,10 @@ class Cache():
         except:
             logging.debug("Error in {0}".format(block_number))
             raise
-        for tx in block_doc.transactions:
+        for (txid, tx) in enumerate(block_doc.transactions):
             self._parse_transaction(community, tx, block_number,
-                                    block_doc.mediantime, received_list)
+                                    block_doc.mediantime, received_list,
+                                    txid)
 
         logging.debug("Received {0} transactions".format(len(received_list)))
         awaiting = [t for t in self._transfers
@@ -379,6 +382,9 @@ class Wallet(QObject):
         '''
         time = community.get_block().mediantime
         block_number = community.current_blockid()['number']
+        block = community.request(bma.blockchain.Block,
+                                  req_args={'number': block_number})
+        txid = len(block['transactions'])
         key = None
         logging.debug("Key : {0} : {1}".format(salt, password))
         if self.walletid == 0:
@@ -404,7 +410,8 @@ class Wallet(QObject):
                     'issuer_uid': issuer_uid,
                     'receiver': recipient,
                     'receiver_uid': receiver_uid,
-                    'comment': message
+                    'comment': message,
+                    'txid': txid
                     }
         transfer = Transfer.initiate(metadata)
 
diff --git a/src/cutecoin/gui/transactions_tab.py b/src/cutecoin/gui/transactions_tab.py
index e0142c55..ed333a20 100644
--- a/src/cutecoin/gui/transactions_tab.py
+++ b/src/cutecoin/gui/transactions_tab.py
@@ -122,7 +122,7 @@ class TransactionsTabWidget(QWidget, Ui_transactionsTabWidget):
                                                    state_col)
             state_data = model.sourceModel().data(state_index, Qt.DisplayRole)
 
-            pubkey_col = model.sourceModel().column_types.index('uid')
+            pubkey_col = model.sourceModel().column_types.index('pubkey')
             person_index = model.sourceModel().index(source_index.row(),
                                                     pubkey_col)
             person = model.sourceModel().data(person_index, Qt.DisplayRole)
diff --git a/src/cutecoin/models/txhistory.py b/src/cutecoin/models/txhistory.py
index 511aa594..a704fc96 100644
--- a/src/cutecoin/models/txhistory.py
+++ b/src/cutecoin/models/txhistory.py
@@ -62,7 +62,7 @@ class TxFilterProxyModel(QSortFilterProxyModel):
         return in_period(date)
 
     def columnCount(self, parent):
-        return self.sourceModel().columnCount(None) - 1
+        return self.sourceModel().columnCount(None) - 3
 
     def setSourceModel(self, sourceModel):
         self.community = sourceModel.community
@@ -80,6 +80,11 @@ class TxFilterProxyModel(QSortFilterProxyModel):
             return self.sortOrder() == Qt.DescendingOrder
         elif right_data == "":
             return self.sortOrder() == Qt.AscendingOrder
+        if left_data == right_data:
+            txid_col = source_model.column_types.index('txid')
+            txid_left = source_model.index(left.row(), txid_col)
+            txid_right = source_model.index(right.row(), txid_col)
+            return (txid_left < txid_right)
 
         return (left_data < right_data)
 
@@ -160,7 +165,9 @@ class HistoryTableModel(QAbstractTableModel):
             'payment',
             'deposit',
             'comment',
-            'state'
+            'state',
+            'txid',
+            'pubkey'
         )
 
         self.column_headers = (
@@ -169,7 +176,9 @@ class HistoryTableModel(QAbstractTableModel):
             self.tr('Payment'),
             self.tr('Deposit'),
             self.tr('Comment'),
-            self.tr('State')
+            'State',
+            'TXID'
+            'Pubkey'
         )
 
     @property
@@ -187,9 +196,11 @@ class HistoryTableModel(QAbstractTableModel):
             sender = "pub:{0}".format(transfer.metadata['issuer'][:5])
 
         date_ts = transfer.metadata['time']
+        txid = transfer.metadata['txid']
 
         return (date_ts, sender, "", amount,
-                comment, transfer.state)
+                comment, transfer.state, txid,
+                transfer.metadata['issuer'])
 
     def data_sent(self, transfer):
         amount = transfer.metadata['amount']
@@ -203,9 +214,11 @@ class HistoryTableModel(QAbstractTableModel):
 
 
         date_ts = transfer.metadata['time']
+        txid = transfer.metadata['txid']
 
         return (date_ts, receiver, amount,
-                "", comment, transfer.state)
+                "", comment, transfer.state, txid,
+                transfer.metadata['receiver'])
 
     def refresh_transfers(self):
         self.beginResetModel()
-- 
GitLab