diff --git a/public/views/modals/tx-details.html b/public/views/modals/tx-details.html index 9a3c87ea4..3c8e6711f 100644 --- a/public/views/modals/tx-details.html +++ b/public/views/modals/tx-details.html @@ -125,12 +125,12 @@ -
  • +
  • Comment - {{comment}}
    + {{btx.note.body}}
    - {{editedBy}} - + {{btx.note.editedByName}} +
  • diff --git a/public/views/preferencesHistory.html b/public/views/preferencesHistory.html index 1de09b0c3..de8142b7e 100644 --- a/public/views/preferencesHistory.html +++ b/public/views/preferencesHistory.html @@ -6,14 +6,22 @@

    diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index bd3876217..d88520776 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -692,135 +692,6 @@ angular.module('copayApp.controllers').controller('indexController', function($r } }; - self.csvHistory = function() { - - function formatDate(date) { - var dateObj = new Date(date); - if (!dateObj) { - $log.debug('Error formating a date'); - return 'DateError' - } - if (!dateObj.toJSON()) { - return ''; - } - - return dateObj.toJSON(); - } - - function formatString(str) { - if (!str) return ''; - - if (str.indexOf('"') !== -1) { - //replace all - str = str.replace(new RegExp('"', 'g'), '\''); - } - - //escaping commas - str = '\"' + str + '\"'; - - return str; - } - - var step = 6; - var unique = {}; - - function getHistory(cb) { - storageService.getTxHistory(c.walletId, function(err, txs) { - if (err) return cb(err); - - var txsFromLocal = []; - try { - txsFromLocal = JSON.parse(txs); - } catch (ex) { - $log.warn(ex); - } - - allTxs.push(txsFromLocal); - return cb(null, lodash.flatten(allTxs)); - }); - } - - if (isCordova) { - $log.info('CSV generation not available in mobile'); - return; - } - var fc = profileService.focusedClient; - var c = fc.credentials; - if (!fc.isComplete()) return; - var self = this; - var allTxs = []; - - $log.debug('Generating CSV from History'); - self.setOngoingProcess('generatingCSV', true); - - getHistory(function(err, txs) { - self.setOngoingProcess('generatingCSV', false); - if (err) { - self.handleError(err); - } else { - $log.debug('Wallet Transaction History:', txs); - - self.satToUnit = 1 / self.unitToSatoshi; - var data = txs; - var satToBtc = 1 / 100000000; - self.csvContent = []; - self.csvFilename = 'Copay-' + (self.alias || self.walletName) + '.csv'; - self.csvHeader = ['Date', 'Destination', 'Description', 'Amount', 'Currency', 'Txid', 'Creator', 'Copayers']; - - var _amount, _note, _copayers, _creator; - data.forEach(function(it, index) { - var amount = it.amount; - - if (it.action == 'moved') - amount = 0; - - _copayers = ''; - _creator = ''; - - if (it.actions && it.actions.length > 1) { - for (var i = 0; i < it.actions.length; i++) { - _copayers += it.actions[i].copayerName + ':' + it.actions[i].type + ' - '; - } - _creator = (it.creatorName && it.creatorName != 'undefined') ? it.creatorName : ''; - } - _copayers = formatString(_copayers); - _creator = formatString(_creator); - _amount = (it.action == 'sent' ? '-' : '') + (amount * satToBtc).toFixed(8); - _note = formatString((it.message ? it.message : '')); - - if (it.action == 'moved') - _note += ' Moved:' + (it.amount * satToBtc).toFixed(8) - - self.csvContent.push({ - 'Date': formatDate(it.time * 1000), - 'Destination': formatString(it.addressTo), - 'Description': _note, - 'Amount': _amount, - 'Currency': 'BTC', - 'Txid': it.txid, - 'Creator': _creator, - 'Copayers': _copayers - }); - - if (it.fees && (it.action == 'moved' || it.action == 'sent')) { - var _fee = (it.fees * satToBtc).toFixed(8) - self.csvContent.push({ - 'Date': formatDate(it.time * 1000), - 'Destination': 'Bitcoin Network Fees', - 'Description': '', - 'Amount': '-' + _fee, - 'Currency': 'BTC', - 'Txid': '', - 'Creator': '', - 'Copayers': '' - }); - } - }); - return; - } - }); - }; - self.removeAndMarkSoftConfirmedTx = function(txs) { return lodash.filter(txs, function(tx) { if (tx.confirmations >= SOFT_CONFIRMATION_LIMIT) diff --git a/src/js/controllers/modals/txDetails.js b/src/js/controllers/modals/txDetails.js index 2ebbe4ace..17081ca2f 100644 --- a/src/js/controllers/modals/txDetails.js +++ b/src/js/controllers/modals/txDetails.js @@ -13,20 +13,21 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio $scope.copayerId = fc.credentials.copayerId; $scope.isShared = fc.credentials.n > 1; - if ($scope.btx.txid) { - fc.getTxNote({ - txid: $scope.btx.txid - }, function(err, note) { - if (err || !note) { - $log.debug(gettextCatalog.getString('Could not fetch transaction note')); - return; - } - $scope.comment = note.body; - $scope.editedBy = gettextCatalog.getString('Edited by') + ' ' + note.editedByName; - $scope.createdOn = note.createdOn; - }); - } - +console.log('[txDetails.js.16:btx:]',$scope.btx); //TODO + // if ($scope.btx.txid) { + // fc.getTxNote({ + // txid: $scope.btx.txid + // }, function(err, note) { + // if (err || !note) { + // $log.debug(gettextCatalog.getString('Could not fetch transaction note')); + // return; + // } + // $scope.comment = note.body; + // $scope.editedBy = gettextCatalog.getString('Edited by') + ' ' + note.editedByName; + // $scope.createdOn = note.createdOn; + // }); + // } + // $scope.showCommentPopup = function() { $scope.data = { comment: '' @@ -45,11 +46,16 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio fc.editTxNote({ txid: $scope.btx.txid, body: $scope.data.comment - }, function() {}); - $scope.comment = $scope.data.comment; - $scope.editedBy = gettextCatalog.getString('Edited by') + ' ' + fc.credentials.copayerName; - $scope.createdOn = Math.floor(Date.now() / 1000); - commentPopup.close(); + }, function(err) { + if (err) { + $log.debug('Could not save tx comment'); + return; + } + $scope.comment = $scope.data.comment; + $scope.editedBy = gettextCatalog.getString('Edited by') + ' ' + fc.credentials.copayerName; + $scope.createdOn = Math.floor(Date.now() / 1000); + commentPopup.close(); + }); }; }; diff --git a/src/js/controllers/preferencesHistory.js b/src/js/controllers/preferencesHistory.js index 2a71425bb..f4b340dd2 100644 --- a/src/js/controllers/preferencesHistory.js +++ b/src/js/controllers/preferencesHistory.js @@ -1,9 +1,142 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesHistory', - function($scope, $log, $timeout, storageService, go, profileService) { + function($scope, $log, $timeout, storageService, go, profileService, platformInfo, lodash) { var fc = profileService.focusedClient; var c = fc.credentials; + var isCordova = platformInfo.isCordova; + this.csvReady = false; + + + this.csvHistory = function() { + if (isCordova) return; + + function formatDate(date) { + var dateObj = new Date(date); + if (!dateObj) { + $log.debug('Error formating a date'); + return 'DateError' + } + if (!dateObj.toJSON()) { + return ''; + } + + return dateObj.toJSON(); + } + + function formatString(str) { + console.log('[index.js.710:str:]', str); //TODO + if (!str) return ''; + + if (str.indexOf('"') !== -1) { + //replace all + str = str.replace(new RegExp('"', 'g'), '\''); + } + + //escaping commas + str = '\"' + str + '\"'; + console.log('[index.js.720:str:]', str); //TODO + + return str; + } + + var step = 6; + var unique = {}; + + function getHistory(cb) { + storageService.getTxHistory(c.walletId, function(err, txs) { + if (err) return cb(err); + + var txsFromLocal = []; + try { + txsFromLocal = JSON.parse(txs); + } catch (ex) { + $log.warn(ex); + } + + allTxs.push(txsFromLocal); + return cb(null, lodash.flatten(allTxs)); + }); + } + + var fc = profileService.focusedClient; + var c = fc.credentials; + if (!fc.isComplete()) return; + var self = this; + var allTxs = []; + + $log.debug('Generating CSV from History'); + + getHistory(function(err, txs) { + if (err || !txs || !txs[0]) { + $log.warn('Failed to generate CSV:', err); + return; + } else { + $log.debug('Wallet Transaction History Length:', txs.length); + + self.satToUnit = 1 / self.unitToSatoshi; + var data = txs; + var satToBtc = 1 / 100000000; + self.csvContent = []; + self.csvFilename = 'Copay-' + (self.alias || self.walletName) + '.csv'; + self.csvHeader = ['Date', 'Destination', 'Description', 'Amount', 'Currency', 'Txid', 'Creator', 'Copayers']; + + var _amount, _note, _copayers, _creator, _comment; + data.forEach(function(it, index) { + var amount = it.amount; + + if (it.action == 'moved') + amount = 0; + + _copayers = ''; + _creator = ''; + + if (it.actions && it.actions.length > 1) { + for (var i = 0; i < it.actions.length; i++) { + _copayers += it.actions[i].copayerName + ':' + it.actions[i].type + ' - '; + } + _creator = (it.creatorName && it.creatorName != 'undefined') ? it.creatorName : ''; + } + _amount = (it.action == 'sent' ? '-' : '') + (amount * satToBtc).toFixed(8); + _note = it.message || ''; + _comment = it.note ? it.note.body : ''; + + if (it.action == 'moved') + _note += ' Moved:' + (it.amount * satToBtc).toFixed(8) + + self.csvContent.push({ + 'Date': formatDate(it.time * 1000), + 'Destination': formatString(it.addressTo), + 'Description': _note, + 'Amount': _amount, + 'Currency': 'BTC', + 'Txid': it.txid, + 'Creator': _creator, + 'Copayers': _copayers, + 'Comment': _comment + }); + + if (it.fees && (it.action == 'moved' || it.action == 'sent')) { + var _fee = (it.fees * satToBtc).toFixed(8) + self.csvContent.push({ + 'Date': formatDate(it.time * 1000), + 'Destination': 'Bitcoin Network Fees', + 'Description': '', + 'Amount': '-' + _fee, + 'Currency': 'BTC', + 'Txid': '', + 'Creator': '', + 'Copayers': '' + }); + } + }); + + self.csvReady = true; + return; + } + }); + }; + this.clearTransactionHistory = function() { storageService.removeTxHistory(c.walletId, function(err) {