summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjessib <jessib@leap.se>2013-04-23 11:47:09 -0700
committerAzul <azul@leap.se>2013-07-17 10:47:13 +0200
commitc2330394daf004974656d8240ca6c83567401595 (patch)
treebbf9dace2344efc68c3a6b97921309caeed922e4
parent416ae5da6b87c78fcf49592885a916e9ce4f0904 (diff)
Basic functionality to edit credit card on file.
-rw-r--r--billing/app/controllers/credit_card_info_controller.rb27
-rw-r--r--billing/app/models/customer.rb1
-rw-r--r--billing/app/views/credit_card_info/confirm.html.haml5
-rw-r--r--billing/app/views/credit_card_info/edit.html.haml16
-rw-r--r--billing/app/views/customer/edit.html.haml4
5 files changed, 51 insertions, 2 deletions
diff --git a/billing/app/controllers/credit_card_info_controller.rb b/billing/app/controllers/credit_card_info_controller.rb
new file mode 100644
index 0000000..99bf5cf
--- /dev/null
+++ b/billing/app/controllers/credit_card_info_controller.rb
@@ -0,0 +1,27 @@
+class CreditCardInfoController < ApplicationController
+ before_filter :authorize
+
+ def edit
+ @credit_card = Braintree::CreditCard.find(params[:id])
+ customer = Customer.find_by_user_id(current_user.id)
+ if customer and customer.braintree_customer_id == @credit_card.customer_id
+ @tr_data = Braintree::TransparentRedirect.
+ update_credit_card_data(:redirect_url => confirm_credit_card_info_url,
+ :payment_method_token => @credit_card.token)
+ else
+ access_denied
+ end
+
+ end
+
+ def confirm
+ @result = Braintree::TransparentRedirect.confirm(request.query_string)
+ if @result.success?
+ render :action => "confirm"
+ else
+ @credit_card = Braintree::CreditCard.find(@result.params[:payment_method_token])
+ render :action => "edit"
+ end
+ end
+
+end
diff --git a/billing/app/models/customer.rb b/billing/app/models/customer.rb
index c7f216c..fa43b96 100644
--- a/billing/app/models/customer.rb
+++ b/billing/app/models/customer.rb
@@ -29,6 +29,7 @@ class Customer < CouchRest::Model::Base
=end
#slow to get Braintree Customer data, so pass it if have already retrieved it
+ # won't really have multiple credit cards on file
def default_credit_card(braintree_data = nil)
return unless has_payment_info?
braintree_data = braintree_data || Braintree::Customer.find(braintree_customer_id)
diff --git a/billing/app/views/credit_card_info/confirm.html.haml b/billing/app/views/credit_card_info/confirm.html.haml
new file mode 100644
index 0000000..9dd8176
--- /dev/null
+++ b/billing/app/views/credit_card_info/confirm.html.haml
@@ -0,0 +1,5 @@
+%h1 Payment Info Confirmation
+%p Your payment information was successfully saved.
+%dl
+ %dt Credit Card
+ %dd= @result.credit_card.masked_number
diff --git a/billing/app/views/credit_card_info/edit.html.haml b/billing/app/views/credit_card_info/edit.html.haml
new file mode 100644
index 0000000..95f450f
--- /dev/null
+++ b/billing/app/views/credit_card_info/edit.html.haml
@@ -0,0 +1,16 @@
+%h1 Change Credit Card
+- if @result
+ #total-errors{:style => "color:red;"}
+ = h(@result.errors.size)
+ error(s)
+= form_for :credit_card,:url => Braintree::TransparentRedirect.url, :params => @result && @result.params[:credit_card], :builder => BraintreeFormHelper::BraintreeFormBuilder, :existing => @credit_card, :errors => @result && @result.errors.for(:credit_card) do |f| |
+ = field_set_tag "Credit Card" do
+ %dl
+ %dt= f.label :number, 'Number'
+ %dd= f.text_field :number
+ %dt= f.label :expiration_date, 'Expiration Date (MM/YY)'
+ %dd= f.text_field :expiration_date
+ %dt= f.label :cvv, 'CVV'
+ %dd= f.text_field :cvv
+ = hidden_field_tag :tr_data, @tr_data
+ = f.submit 'Save Payment Info' \ No newline at end of file
diff --git a/billing/app/views/customer/edit.html.haml b/billing/app/views/customer/edit.html.haml
index 686c551..2104b09 100644
--- a/billing/app/views/customer/edit.html.haml
+++ b/billing/app/views/customer/edit.html.haml
@@ -14,9 +14,9 @@
- if @default_cc
%ul
%li
- Default Credit Card
+ Stored Credit Card
= @default_cc.masked_number
- = # (#{link_to @default_cc.token, edit_credit_card_info_path(:id => @default_cc.token)})
+ = link_to 'Change credit card', edit_credit_card_info_path(:id => @default_cc.token)
%li
Transaction History
= render(:partial => "transaction", :collection => @transactions)