From ffa268a827e4cf452ee71f89e08c91c4e874b0a9 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Thu, 3 Sep 2015 02:50:59 -0300 Subject: [PATCH] Sell flow completed --- bower.json | 2 +- public/views/sellGlidera.html | 101 ++++++++++--------- src/js/controllers/buyGlidera.js | 20 ---- src/js/controllers/index.js | 2 +- src/js/controllers/sellGlidera.js | 161 ++++++++++++------------------ src/js/services/glideraService.js | 6 +- 6 files changed, 122 insertions(+), 170 deletions(-) diff --git a/bower.json b/bower.json index d9ad490ab..4a2bf2acf 100644 --- a/bower.json +++ b/bower.json @@ -17,7 +17,7 @@ "ng-lodash": "~0.2.0", "angular-moment": "0.10.1", "moment": "2.10.3", - "angular-bitcore-wallet-client": "0.1.2", + "angular-bitcore-wallet-client": "0.1.4", "angular-ui-router": "~0.2.13", "qrcode-decoder-js": "*", "fastclick": "*", diff --git a/public/views/sellGlidera.html b/public/views/sellGlidera.html index 862b4a551..d1125fce8 100644 --- a/public/views/sellGlidera.html +++ b/public/views/sellGlidera.html @@ -1,63 +1,70 @@
+ ng-init="titleSection='Sell Bitcoin'; goBackToState = 'glidera'">
-
-
+
-

Sell Bitcoin

+
+
+ +
+ - - - - - - - + -

Sell Price

-
    -
  • qty: {{sell.sellPrice.qty}} -
  • price: {{sell.sellPrice.price}} -
  • subtotal: {{sell.sellPrice.subtotal}} -
  • fees: {{sell.sellPrice.fees}} -
  • total: {{sell.sellPrice.total}} -
  • currency: {{sell.sellPrice.currency}} -
  • expires: {{sell.sellPrice.expires}} -
  • priceUuid: {{sell.sellPrice.priceUuid}} -
- -

Create Tx

- -
- refundAddress: {{sell.addr[index.walletId]}}
- sellAddress: {{sell.sellAddress}} + BTC + USD + +
+ +
+ Sell + ${{sell.sellPrice.subtotal}} {{sell.sellPrice.currency}} in Bitcoin + {{sell.sellPrice.qty}} BTC + at ${{sell.sellPrice.price}} {{sell.sellPrice.currency}} +
- - - - -
{{sell.raw}}
- -

Send 2FA Code

- - -

Send TX to Glider

-
- - -
+
+

+ The bitcoin amount of {{sell.sellPrice.qty}} will be immediately sent from your bitcoin + wallet ({{index.walletName}}) to Glidera. +

+

+ The total of ${{sell.sellPrice.subtotal}} {{sell.sellPrice.currency}} will be deposited + in your bank account in 4-6 business days. +

+
+ + + +
+
+
+

Sale complete

+

+ A transfer has been initiated to your bank account and should arrive in 4-6 business days. +

+ +
diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js index b362fb769..b7813054b 100644 --- a/src/js/controllers/buyGlidera.js +++ b/src/js/controllers/buyGlidera.js @@ -8,24 +8,6 @@ angular.module('copayApp.controllers').controller('buyGlideraController', this.error = null; this.success = null; - this.setDestinationAddress = function() { - var self = this; - this.addrError = null; - var fc = profileService.focusedClient; - if (!fc) return; - - $timeout(function() { - addressService.getAddress(fc.credentials.walletId, null, function(err, addr) { - if (err) { - return; - } else { - if (addr) self.addr[fc.credentials.walletId] = addr; - } - $scope.$digest(); - }); - }); - }; - this.getBuyPrice = function(token, price) { var self = this; if (!price || (price && !price.qty && !price.fiat)) { @@ -60,9 +42,7 @@ angular.module('copayApp.controllers').controller('buyGlideraController', useCurrentPrice: false, ip: null }; -console.log('[sellGlidera.js:128]',token, twoFaCode, addr, data); //TODO glideraService.buy(token, twoFaCode, data, function(error, data) { -console.log('[sellGlidera.js:116]', error, data); //TODO self.loading = false; if (error) { self.error = error; diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js index fe5b1e86a..ee8dd7634 100644 --- a/src/js/controllers/index.js +++ b/src/js/controllers/index.js @@ -851,7 +851,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r self.initGlidera = function() { if (self.isShared) return; storageService.getGlideraToken(self.network, function(err, val) { - if (err) return; + if (err || !val) return; else { self.glideraToken = val; glideraService.getTransactions(val, function(error, txs) { diff --git a/src/js/controllers/sellGlidera.js b/src/js/controllers/sellGlidera.js index e8ef73943..2deb79142 100644 --- a/src/js/controllers/sellGlidera.js +++ b/src/js/controllers/sellGlidera.js @@ -4,89 +4,86 @@ angular.module('copayApp.controllers').controller('sellGlideraController', function($scope, $timeout, $log, gettext, configService, profileService, addressService, feeService, glideraService) { var config = configService.getSync(); - this.addr = {}; this.data = {}; - this.sellAddress = null; this.show2faCodeInput = null; + this.success = null; this.currentSpendUnconfirmed = config.wallet.spendUnconfirmed; this.currentFeeLevel = config.wallet.settings.feeLevel || 'normal'; - this.setRefundAddress = function() { - var self = this; - this.addrError = null; - var fc = profileService.focusedClient; - if (!fc) return; - - $timeout(function() { - addressService.getAddress(fc.credentials.walletId, null, function(err, addr) { - if (err) { - self.addrError = err; - } else { - if (addr) self.addr[fc.credentials.walletId] = addr; - } - $scope.$digest(); - }); - }); - }; - - this.setSellAddress = function(token) { - var self = this; - glideraService.getSellAddress(token, function(error, addr) { - self.sellAddress = addr.sellAddress; - }); - }; - this.getSellPrice = function(token, price) { var self = this; - this.sellAmount = price.qty; + if (!price || (price && !price.qty && !price.fiat)) { + this.sellPrice = null; + return; + } glideraService.sellPrice(token, price, function(error, sellPrice) { self.sellPrice = sellPrice; - self.setSellAddress(token); - self.setRefundAddress(); }); }; - this.createTx = function() { + this.get2faCode = function(token) { + var self = this; + $timeout(function() { + glideraService.get2faCode(token, function(error, sent) { + self.show2faCodeInput = sent; + }); + }, 100); + }; + + this.createTx = function(token, twoFaCode) { var self = this; var fc = profileService.focusedClient; $timeout(function() { - var address = self.sellAddress; - var amount = parseInt((self.sellAmount * 100000000).toFixed(0)); + addressService.getAddress(fc.credentials.walletId, null, function(err, refundAddress) { + if (!refundAddress) return; + glideraService.getSellAddress(token, function(error, sellAddress) { + if (!sellAddress) return; + var amount = parseInt((self.sellPrice.qty * 100000000).toFixed(0)); - feeService.getCurrentFeeValue(self.currentFeeLevel, function(err, feePerKb) { - if (err) $log.debug(err); - fc.sendTxProposal({ - toAddress: address, - amount: amount, - message: 'Glidera', - payProUrl: null, - feePerKb: feePerKb, - excludeUnconfirmedUtxos: self.currentSpendUnconfirmed ? false : true - }, function(err, txp) { -console.log('[sellGlidera.js:62]',txp); //TODO - if (err) { - profileService.lockFC(); - $log.error(err); - return; - } + feeService.getCurrentFeeValue(self.currentFeeLevel, function(err, feePerKb) { + if (err) $log.debug(err); + fc.sendTxProposal({ + toAddress: sellAddress, + amount: amount, + message: 'Glidera', + payProUrl: null, + feePerKb: feePerKb, + excludeUnconfirmedUtxos: self.currentSpendUnconfirmed ? false : true + }, function(err, txp) { + if (err) { + profileService.lockFC(); + $log.error(err); + return; + } - if (!fc.canSign()) { - $log.info('No signing proposal: No private key'); - return; - } + if (!fc.canSign()) { + $log.info('No signing proposal: No private key'); + return; + } - self.signTx(txp, function(err, raw) { - profileService.lockFC(); - if (err) { - self.error = err.message ? err.message : gettext('The payment was created but could not be completed. Please try again from home screen'); - $timeout(function() { - $scope.$digest(); - }, 1); - } - else { - return raw; - } + _signTx(txp, function(err, rawTx) { + profileService.lockFC(); + if (err) { + self.error = err.message ? err.message : gettext('The payment was created but could not be completed. Please try again from home screen'); + $timeout(function() { + $scope.$digest(); + }, 1); + } + else { + var data = { + refundAddress: refundAddress, + signedTransaction: rawTx, + priceUuid: self.sellPrice.priceUuid, + useCurrentPrice: false, + ip: null + }; + glideraService.sell(token, twoFaCode, data, function(error, data) { + self.success = data + }); + } + }); + }); }); }); }); @@ -95,11 +92,10 @@ console.log('[sellGlidera.js:62]',txp); //TODO }; - this.signTx = function(txp, cb) { + var _signTx = function(txp, cb) { var self = this; var fc = profileService.focusedClient; fc.signTxProposal(txp, function(err, signedTx) { - console.log('[sellGlidera.js:96]',signedTx); //TODO profileService.lockFC(); if (err) { err.message = bwsError.msg(err, gettextCatalog.getString('The payment was created but could not be signed. Please try again from home screen')); @@ -107,42 +103,13 @@ console.log('[sellGlidera.js:62]',txp); //TODO } if (signedTx.status == 'accepted') { - var t = profileService.getUtils().buildTx(signedTx); - var raw = t.uncheckedSerialize(); - console.log('[sellGlidera.js:104]',raw); //TODO - return cb(null, raw); + return cb(null, signedTx.raw); } else { + return cb(true); console.log('NO ACCEPTED TX'); - } }); }; - this.get2faCode = function(token, cb) { - var self = this; - glideraService.get2faCode(token, function(error, sent) { - self.show2faCodeInput = sent; - }); - }; - - this.sendTx = function(token, twoFaCode, raw) { - var fc = profileService.focusedClient; - var self = this; - var data = { - refundAddress: self.addr[fc.credentials.walletId], - signedTransaction: raw, - priceUuid: self.sellPrice.priceUuid, - useCurrentPrice: false, - ip: null - }; -console.log('[sellGlidera.js:128]',token, twoFaCode, data); //TODO - glideraService.sell(token, twoFaCode, data, function(error, data) { -console.log('[sellGlidera.js:116]',data); //TODO - - }); - - }; - - }); diff --git a/src/js/services/glideraService.js b/src/js/services/glideraService.js index 26576417d..1f5a29fb8 100644 --- a/src/js/services/glideraService.js +++ b/src/js/services/glideraService.js @@ -135,7 +135,7 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l if (!token) return cb('Invalid Token'); $http(_get('/user/create_sell_address', token)).then(function(data) { $log.info('Glidera Create Sell Address: SUCCESS'); - return cb(null, data.data); + return cb(null, data.data.sellAddress); }, function(data) { $log.error('Glidera Create Sell Address: ERROR ' + data.statusText); return cb(data.statusText); @@ -189,11 +189,9 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l useCurrentPrice: data.useCurrentPrice, ip: data.ip }; -console.log('[glideraService.js:161]',data); //TODO $http(_post('/sell', token, twoFaCode, data)).then(function(data) { -console.log('[glideraService.js:168]',data); //TODO $log.info('Glidera Sell: SUCCESS'); - return cb(null, data); + return cb(null, data.data); }, function(data) { $log.error('Glidera Sell: ERROR ' + data.statusText); return cb(data.statusText);