From 46ff73aa023884b7b288116542ee160032232b63 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Fri, 3 Jul 2015 15:35:34 -0300 Subject: [PATCH 1/5] Adds CSV history --- public/views/walletHome.html | 8 +++- src/js/controllers/index.js | 70 ++++++++++++++++++++++++++++++++ src/js/controllers/walletHome.js | 2 +- 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/public/views/walletHome.html b/public/views/walletHome.html index 98f86ab02..00daaa1b9 100644 --- a/public/views/walletHome.html +++ b/public/views/walletHome.html @@ -445,7 +445,7 @@ -
+
@@ -495,6 +495,12 @@
+
+ + + Download CSV file + +
diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index dd742aba4..ff21b8300 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -535,6 +535,76 @@ angular.module('copayApp.controllers').controller('indexController', function($r } }; + this.csvHistory = function() { + + function formatDate(date) { + var dateObj = new Date(date); + if (!dateObj) { + log.error('Error formating a date'); + return 'DateError' + } + if (!dateObj.toJSON()) { + return ''; + } + + return dateObj.toJSON().substring(0, 10); + } + + function formatString(str) { + if (!str) return ''; + + if (str.indexOf('"') !== -1) { + //replace all + str = str.replace(new RegExp('"', 'g'), '\''); + } + + //escaping commas + str = '\"' + str + '\"'; + + return str; + } + + if (isCordova) { + log.info('Not available on mobile'); + return; + } + var fc = profileService.focusedClient; + if (!fc.isComplete()) return; + var self = this; + $log.debug('Generating CSV from History'); + self.setOngoingProcess('generatingCSV', true); + $timeout(function() { + fc.getTxHistory({ + skip: 0, + limit: 1000000000 + }, function(err, txs) { + self.setOngoingProcess('generatingCSV', false); + if (err) { + $log.debug('TxHistory ERROR:', err); + } else { + $log.debug('Wallet Transaction History:', txs); + + self.satToUnit = 1 / self.unitToSatoshi; + var data = txs; + var filename = "copay_history.csv"; + var csvContent = "data:text/csv;charset=utf-8,"; + csvContent += "Date,Amount (" + self.unitName + "),Action,AddressTo,Comment\n"; + + data.forEach(function(it, index) { + var dataString = formatDate(it.time * 1000) + ',' + strip(it.amount * self.satToUnit) + ',' + it.action + ',' + formatString(it.addressTo) + ',' + formatString(it.message); + csvContent += index < data.length ? dataString + "\n" : dataString; + }); + + var encodedUri = encodeURI(csvContent); + var link = document.createElement("a"); + link.setAttribute("href", encodedUri); + link.setAttribute("download", filename); + link.click(); + } + $rootScope.$apply(); + }); + }); + }; self.clientError = function(err) { if (isCordova) { diff --git a/src/js/controllers/walletHome.js b/src/js/controllers/walletHome.js index ee93614b6..ff167ebbe 100644 --- a/src/js/controllers/walletHome.js +++ b/src/js/controllers/walletHome.js @@ -1054,7 +1054,7 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi if (confirmed) self._doSendAll(amount); }); - } + }; /* Start setup */ From aa746705fe3df1e0c24a3554332ba6981841833d Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Mon, 6 Jul 2015 16:31:54 -0300 Subject: [PATCH 2/5] CSV compatible with LibraTax --- src/js/controllers/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index ff21b8300..3058ff4d9 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -547,7 +547,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r return ''; } - return dateObj.toJSON().substring(0, 10); + return dateObj.toJSON(); } function formatString(str) { @@ -586,12 +586,14 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.satToUnit = 1 / self.unitToSatoshi; var data = txs; + var satToBtc = 1 / 100000000; var filename = "copay_history.csv"; var csvContent = "data:text/csv;charset=utf-8,"; - csvContent += "Date,Amount (" + self.unitName + "),Action,AddressTo,Comment\n"; + csvContent += "Date,Destination,Note,Amount,Currency,Spot Value,Total Value,Tax Type,Category\n"; data.forEach(function(it, index) { - var dataString = formatDate(it.time * 1000) + ',' + strip(it.amount * self.satToUnit) + ',' + it.action + ',' + formatString(it.addressTo) + ',' + formatString(it.message); + var _amount = (it.action == 'sent' ? '-' : '') + (it.amount * satToBtc).toFixed(8); + var dataString = formatDate(it.time * 1000) + ',' + formatString(it.addressTo) + ',' + formatString(it.message) + ',' + _amount + ',BTC,,,,'; csvContent += index < data.length ? dataString + "\n" : dataString; }); From 44f4f204c0e5c9ae72e8ea7a4eccec0ac28ff0a7 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 7 Jul 2015 10:01:08 -0300 Subject: [PATCH 3/5] Only for Desktop --- public/views/walletHome.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/walletHome.html b/public/views/walletHome.html index 00daaa1b9..ff866e2c6 100644 --- a/public/views/walletHome.html +++ b/public/views/walletHome.html @@ -495,7 +495,7 @@ -
+ Download CSV file diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index 3058ff4d9..9205a2363 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettextCatalog, gettext, amMoment) { +angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, lodash, go, profileService, configService, isCordova, rateService, storageService, addressService, gettextCatalog, gettext, amMoment, nodeWebkit) { var self = this; self.isCordova = isCordova; self.onGoingProcess = {}; @@ -537,6 +537,20 @@ angular.module('copayApp.controllers').controller('indexController', function($r this.csvHistory = function() { + function saveFile(name,data) { + var chooser = document.querySelector(name); + chooser.addEventListener("change", function(evt) { + console.log(this.value); // get your file name + var fs = require('fs'); // save it now + fs.writeFile(this.value, data, function(err) { + if(err) { + alert("error"+err); + } + }); + }, false); + chooser.click(); + } + function formatDate(date) { var dateObj = new Date(date); if (!dateObj) { @@ -597,11 +611,16 @@ angular.module('copayApp.controllers').controller('indexController', function($r csvContent += index < data.length ? dataString + "\n" : dataString; }); - var encodedUri = encodeURI(csvContent); - var link = document.createElement("a"); - link.setAttribute("href", encodedUri); - link.setAttribute("download", filename); - link.click(); + if (nodeWebkit.isDefined()) { + saveFile('#export_file',csvContent); + } + else { + var encodedUri = encodeURI(csvContent); + var link = document.createElement("a"); + link.setAttribute("href", encodedUri); + link.setAttribute("download", filename); + link.click(); + } } $rootScope.$apply(); }); From 9fad9fd43911a0a9d8beb1040d2c60ec8f024d6c Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 7 Jul 2015 13:48:45 -0300 Subject: [PATCH 5/5] Adds wallet name to filename --- public/views/walletHome.html | 2 +- src/js/controllers/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/views/walletHome.html b/public/views/walletHome.html index 3bf7a9bc1..406b86608 100644 --- a/public/views/walletHome.html +++ b/public/views/walletHome.html @@ -496,7 +496,7 @@