From ec2801ef37fee9de831c6b67d0c92919452937d9 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Fri, 9 Dec 2016 12:46:27 -0300 Subject: [PATCH] Buy, enter amount --- src/js/controllers/amount.js | 47 +++++++++++++++++++++++++++++++++--- src/js/routes.js | 20 +++++++++++++++ www/views/amount.html | 25 ++++++++++++++++--- www/views/coinbase.html | 4 +-- 4 files changed, 88 insertions(+), 8 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 2a07c3ba5..81d819e94 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService, glideraService) { +angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService, glideraService, coinbaseService) { var unitToSatoshi; var satToUnit; var unitDecimals; @@ -20,6 +20,9 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.isGlidera = data.stateParams.isGlidera; $scope.glideraAccessToken = data.stateParams.glideraAccessToken; + // Coinbase parameters + $scope.isCoinbase = data.stateParams.isCoinbase; + $scope.cardId = data.stateParams.cardId; $scope.showMenu = $ionicHistory.backView() && $ionicHistory.backView().stateName == 'tabs.send'; var isWallet = data.stateParams.isWallet || 'false'; @@ -27,13 +30,13 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.toAddress = data.stateParams.toAddress; $scope.toName = data.stateParams.toName; $scope.toEmail = data.stateParams.toEmail; - $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard || !!$scope.isGlidera; + $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard || !!$scope.isGlidera || !!$scope.isCoinbase; $scope.toColor = data.stateParams.toColor; $scope.showSendMax = false; $scope.customAmount = data.stateParams.customAmount; - if (!$scope.cardId && !$scope.isGiftCard && !$scope.isGlidera && !data.stateParams.toAddress) { + if (!$scope.cardId && !$scope.isGiftCard && !$scope.isGlidera && !$scope.isCoinbase && !data.stateParams.toAddress) { $log.error('Bad params at amount') throw ('bad params'); } @@ -47,6 +50,33 @@ angular.module('copayApp.controllers').controller('amountController', function($ }); } + if ($scope.isCoinbase) { + var currency = 'USD'; + coinbaseService.init($scope.coinbaseAccessToken, function(err, data) { + if ($scope.isCoinbase == 'buy') { + coinbaseService.buyPrice(data.accessToken, currency, function(err, b) { + $scope.coinbaseBuyPrice = b.data || null; + }); + } else { + coinbaseService.sellPrice(data.accessToken, currency, function(err, b) { + $scope.coinbaseSellPrice = b.data || null; + }); + } + + $scope.coinbasePaymentMethods = []; + coinbaseService.getPaymentMethods(data.accessToken, function(err, p) { + lodash.each(p.data, function(pm) { + if (pm.allow_buy) { + $scope.coinbasePaymentMethods.push(pm); + } + if (pm.allow_buy && pm.primary_buy) { + $scope.coinbaseSelectedPaymentMethod = pm; + } + }); + }); + }); + } + var reNr = /^[1234567890\.]$/; var reOp = /^[\*\+\-\/]$/; @@ -350,6 +380,17 @@ angular.module('copayApp.controllers').controller('amountController', function($ isGlidera: $scope.isGlidera, glideraAccessToken: $scope.glideraAccessToken }); + } else if ($scope.isCoinbase) { + if (lodash.isEmpty($scope.coinbaseSelectedPaymentMethod)) { + popupService.showAlert(gettextCatalog.getString('Error'), 'No Payment Method Selected'); + return; + } + var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; + $state.transitionTo('tabs.buyandsell.glidera.confirm', { + toAmount: (amount * unitToSatoshi).toFixed(0), + isCoinbase: $scope.isCoinbase, + coinbasePaymentMethodId: $scope.coinbaseSelectedPaymentMethod.id + }); } else { var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; if ($scope.customAmount) { diff --git a/src/js/routes.js b/src/js/routes.js index 4561bc68a..d466a17eb 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -945,6 +945,25 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } } }) + .state('tabs.buyandsell.coinbase.amount', { + url: '/amount/:isCoinbase', + views: { + 'tab-home@tabs': { + controller: 'amountController', + templateUrl: 'views/amount.html' + } + } + }) + .state('tabs.buyandsell.coinbase.confirm', { + url: '/confirm/:toAmount/:isCoinbase/:coinbasePaymentMethodId', + views: { + 'tab-home@tabs': { + controller: 'confirmController', + templateUrl: 'views/confirm.html' + } + } + }) + /* .state('tabs.buyandsell.coinbase.buy', { url: '/buy', 'tab-home@tabs': { @@ -961,6 +980,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr templateUrl: 'views/sellCoinbase.html' } }) + */ /* * diff --git a/www/views/amount.html b/www/views/amount.html index 68499b244..a730d0525 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -14,14 +14,14 @@ -
+
Recipient
- + @@ -39,7 +39,7 @@
-
+
@@ -66,6 +66,25 @@ (remaining {{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}})
+ +
+
+ 1 BTC ~ {{coinbaseBuyPrice.amount}} {{coinbaseBuyPrice.currency}} +
+
+ 1 BTC ~ {{coinbaseSellPrice.amount}} {{coinbaseSellPrice.currency}} +
+
+ +
+
diff --git a/www/views/coinbase.html b/www/views/coinbase.html index 82ba63d8c..f531b2e07 100644 --- a/www/views/coinbase.html +++ b/www/views/coinbase.html @@ -68,13 +68,13 @@