diff options
| author | dsc <xmrdsc@protonmail.com> | 2019-01-20 16:18:27 +0100 |
|---|---|---|
| committer | dsc <xmrdsc@protonmail.com> | 2019-01-21 04:50:43 +0100 |
| commit | fd3280c2547e7d54e6d28bd65342512eea51ee67 (patch) | |
| tree | 7888e2a9eb8b98deb46451067723507ed1136264 /src | |
| parent | 36eb1f80e1c070f753746519e2c9e4f01784f6c2 (diff) | |
| download | monzero-gui-fd3280c2547e7d54e6d28bd65342512eea51ee67.tar.gz monzero-gui-fd3280c2547e7d54e6d28bd65342512eea51ee67.tar.xz monzero-gui-fd3280c2547e7d54e6d28bd65342512eea51ee67.zip | |
CSV export functionality for transaction history
Diffstat (limited to 'src')
| -rw-r--r-- | src/libwalletqt/TransactionHistory.cpp | 66 | ||||
| -rw-r--r-- | src/libwalletqt/TransactionHistory.h | 1 |
2 files changed, 67 insertions, 0 deletions
diff --git a/src/libwalletqt/TransactionHistory.cpp b/src/libwalletqt/TransactionHistory.cpp index 243db642..86e9c4c7 100644 --- a/src/libwalletqt/TransactionHistory.cpp +++ b/src/libwalletqt/TransactionHistory.cpp @@ -2,6 +2,7 @@ #include "TransactionInfo.h" #include <wallet/api/wallet2_api.h> +#include <QFile> #include <QDebug> @@ -113,3 +114,68 @@ TransactionHistory::TransactionHistory(Monero::TransactionHistory *pimpl, QObjec m_firstDateTime = QDateTime(QDate(2014, 4, 18)); // the genesis block m_lastDateTime = QDateTime::currentDateTime().addDays(1); // tomorrow (guard against jitter and timezones) } + +QString TransactionHistory::writeCSV(quint32 accountIndex, QString out) +{ + QList<TransactionInfo *> history = this->getAll(accountIndex); + if(history.count() < 1){ + return QString(""); + } + + // construct filename + qint64 now = QDateTime::currentDateTime().currentMSecsSinceEpoch(); + QString fn = QString(QString("%1/monero-txs_%2.csv").arg(out, QString::number(now / 1000))); + + // open file + QFile data(fn); + if(!data.open(QFile::WriteOnly | QFile::Truncate)){ + return QString(""); + } + + // write header + QTextStream output(&data); + output << "blockHeight,epoch,date,direction,amount,atomicAmount,fee,txid,label,subaddrAccount,paymentId\n"; + + foreach(const TransactionInfo *info, history) + { + // collect column data + double amount = info->amount(); + quint64 atomicAmount = info->atomicAmount(); + quint32 subaddrAccount = info->subaddrAccount(); + QString fee = info->fee(); + QString direction = QString(""); + TransactionInfo::Direction _direction = info->direction(); + if(_direction == TransactionInfo::Direction_In) + { + direction = QString("in"); + } + else if(_direction == TransactionInfo::Direction_Out){ + direction = QString("out"); + } + else { + continue; // skip TransactionInfo::Direction_Both + } + QString label = info->label(); + label.remove(QChar('"')); // reserved + quint64 blockHeight = info->blockHeight(); + QDateTime timeStamp = info->timestamp(); + QString date = info->date() + " " + info->time(); + uint epoch = timeStamp.toTime_t(); + QString displayAmount = info->displayAmount(); + QString paymentId = info->paymentId(); + if(paymentId == "0000000000000000"){ + paymentId = ""; + } + + // format and write + QString line = QString("%1,%2,%3,%4,%5,%6,%7,%8,\"%9\",%10,%11\n") + .arg(QString::number(blockHeight), QString::number(epoch), date) + .arg(direction, QString::number(amount), QString::number(atomicAmount)) + .arg(info->fee(), info->hash(), label, QString::number(subaddrAccount)) + .arg(paymentId); + output << line; + } + + data.close(); + return fn; +} diff --git a/src/libwalletqt/TransactionHistory.h b/src/libwalletqt/TransactionHistory.h index ac0c4400..cff62ef8 100644 --- a/src/libwalletqt/TransactionHistory.h +++ b/src/libwalletqt/TransactionHistory.h @@ -25,6 +25,7 @@ public: // Q_INVOKABLE TransactionInfo * transaction(const QString &id); Q_INVOKABLE QList<TransactionInfo*> getAll(quint32 accountIndex) const; Q_INVOKABLE void refresh(quint32 accountIndex); + Q_INVOKABLE QString writeCSV(quint32 accountIndex, QString out); quint64 count() const; QDateTime firstDateTime() const; QDateTime lastDateTime() const; |
