From c2330394daf004974656d8240ca6c83567401595 Mon Sep 17 00:00:00 2001 From: jessib Date: Tue, 23 Apr 2013 11:47:09 -0700 Subject: Basic functionality to edit credit card on file. --- .../app/controllers/credit_card_info_controller.rb | 27 ++++++++++++++++++++++ billing/app/models/customer.rb | 1 + .../app/views/credit_card_info/confirm.html.haml | 5 ++++ billing/app/views/credit_card_info/edit.html.haml | 16 +++++++++++++ billing/app/views/customer/edit.html.haml | 4 ++-- 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 billing/app/controllers/credit_card_info_controller.rb create mode 100644 billing/app/views/credit_card_info/confirm.html.haml create mode 100644 billing/app/views/credit_card_info/edit.html.haml 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) -- cgit v1.2.3