diff options
| -rw-r--r-- | billing/app/controllers/customer_controller.rb | 36 | ||||
| -rw-r--r-- | billing/app/models/customer.rb | 38 | ||||
| -rw-r--r-- | billing/app/views/customer/confirm.html.haml | 12 | ||||
| -rw-r--r-- | billing/app/views/customer/edit.html.haml | 20 | ||||
| -rw-r--r-- | billing/app/views/customer/new.html.haml | 24 | ||||
| -rw-r--r-- | billing/app/views/payments/new.html.haml | 2 | ||||
| -rw-r--r-- | billing/config/routes.rb | 15 | 
7 files changed, 146 insertions, 1 deletions
| diff --git a/billing/app/controllers/customer_controller.rb b/billing/app/controllers/customer_controller.rb new file mode 100644 index 0000000..dcb94eb --- /dev/null +++ b/billing/app/controllers/customer_controller.rb @@ -0,0 +1,36 @@ +class CustomerController < ApplicationController +  before_filter :authorize + +  def new +    @tr_data = Braintree::TransparentRedirect. +                create_customer_data(:redirect_url => confirm_customer_url) +  end + +  def edit +    current_customer = Customer.find_by_user_id(current_user.id) +    #current_customer.with_braintree_data! +    #@credit_card = current_customer.default_credit_card +    @tr_data = Braintree::TransparentRedirect. +                update_customer_data(:redirect_url => confirm_customer_url, +                                     :customer_id => current_customer.braintree_customer_id) +  end + +  def confirm +    @result = Braintree::TransparentRedirect.confirm(request.query_string) + +    if @result.success? +      # customer = Customer.new(:user_id => current_user.id, :braintree_customer_id =>  @result.customer.id) +      customer = Customer.new(:braintree_customer_id =>  @result.customer.id) +      customer.user = current_user +      customer.save +      #current_user.save! +      render :action => "confirm" +    #elsif current_user.has_payment_info? +    elsif (current_customer = Customer.find_by_user_id(current_user.id)) and current_customer.has_payment_info? +      current_customer.with_braintree_data! #todo +      render :action => "edit" +    else +      render :action => "new" +    end +  end +end diff --git a/billing/app/models/customer.rb b/billing/app/models/customer.rb new file mode 100644 index 0000000..611b9d1 --- /dev/null +++ b/billing/app/models/customer.rb @@ -0,0 +1,38 @@ +class Customer < CouchRest::Model::Base + +  #FIELDS = [:first_name, :last_name, :phone, :website, :company, :fax, :addresses, :credit_cards, :custom_fields] + +  use_database "customers" +  belongs_to :user +  property :braintree_customer_id +   +  design do +    view :by_user_id +    view :by_braintree_customer_id +  end + +  def has_payment_info? +    !!braintree_customer_id +  end + +  # from braintree_ruby_examples/rails3_tr_devise and should be tweaked +  def with_braintree_data! +    return self unless has_payment_info? +    braintree_data = Braintree::Customer.find(braintree_customer_id) + +    debugger +    #FIELDS.each do |field| +    #  send(:"#{field}=", braintree_data.send(field)) +    #end +    self +  end + +  ##?? +  def default_credit_card +    return unless has_payment_info? + +    credit_cards.find { |cc| cc.default? } +  end + + +end diff --git a/billing/app/views/customer/confirm.html.haml b/billing/app/views/customer/confirm.html.haml new file mode 100644 index 0000000..cfe127e --- /dev/null +++ b/billing/app/views/customer/confirm.html.haml @@ -0,0 +1,12 @@ +%h1 Payment Info Confirmation +%p Your payment information was successfully saved. +%dl +  %dt First Name +  %dd= @result.customer.first_name +  %dt Last Name +  %dd= @result.customer.last_name +  %dt Phone +  %dd= @result.customer.phone +  %dt Credit Card +  - @result.customer.credit_cards.each do |cc| +    %dd= cc.masked_number
\ No newline at end of file diff --git a/billing/app/views/customer/edit.html.haml b/billing/app/views/customer/edit.html.haml new file mode 100644 index 0000000..c203bb5 --- /dev/null +++ b/billing/app/views/customer/edit.html.haml @@ -0,0 +1,20 @@ +- if @result +  #total-errors{:style => "color:red;"} +    = h(@result.errors.size) +    error(s) += form_for :customer, :url => Braintree::TransparentRedirect.url, :params => @result && @result.params[:customer],:existing => current_user,  :builder => BraintreeHelper::BraintreeFormBuilder, :errors => @result && @result.errors.for(:customer) do |f| | +  = field_set_tag "Customer" do +    %dl +      %dt= f.label :first_name, 'First Name' +      %dd= f.text_field :first_name +      %dt= f.label :last_name, 'Last Name' +      %dd= f.text_field :last_name +      %dt= f.label :phone, 'Phone' +      %dd= f.text_field :phone +  - if @credit_card +    %ul +      %li +        = @credit_card.masked_number +        (#{link_to @credit_card.token, edit_credit_card_info_path(:id => @credit_card.token)}) +  = 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/new.html.haml b/billing/app/views/customer/new.html.haml new file mode 100644 index 0000000..0e1557a --- /dev/null +++ b/billing/app/views/customer/new.html.haml @@ -0,0 +1,24 @@ +- if @result +  #total-errors{:style => "color:red;"} +    = h(@result.errors.size) +    error(s) += form_for :customer, :url => Braintree::TransparentRedirect.url, :params => @result && @result.params[:customer], :builder => BraintreeHelper::BraintreeFormBuilder, :errors => @result && @result.errors.for(:customer) do |f| +  = field_set_tag "Customer" do +    %dl +      %dt= f.label :first_name, 'First Name' +      %dd= f.text_field :first_name +      %dt= f.label :last_name, 'Last Name' +      %dd= f.text_field :last_name +      %dt= f.label :phone, 'Phone' +      %dd= f.text_field :phone +  = field_set_tag "Credit Card" do +    - f.fields_for :credit_card do |cc| +      %dl +        %dt= cc.label :number, 'Number' +        %dd= cc.text_field :number +        %dt= cc.label :expiration_date, 'Exipration Date (MM/YY)' +        %dd= cc.text_field :expiration_date +        %dt= cc.label :cvv, 'CVV' +        %dd= cc.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/payments/new.html.haml b/billing/app/views/payments/new.html.haml index 9b06050..b6dd713 100644 --- a/billing/app/views/payments/new.html.haml +++ b/billing/app/views/payments/new.html.haml @@ -21,5 +21,5 @@        %div= c.text_field :expiration_date        %div= c.label :cvv, "CVV"        %div= c.text_field :cvv -  = hidden_field_tag :tr_data, Braintree::TransparentRedirect.transaction_data(:redirect_url => confirm_payment_url,:transaction => {:type => "sale", :amount => @amount}) +  = hidden_field_tag :tr_data, Braintree::TransparentRedirect.transaction_data(:redirect_url => confirm_payment_url,:transaction => {:type => "sale", :amount => @amount, :options => {:submit_for_settlement => true } })    = f.submit "Submit"
\ No newline at end of file diff --git a/billing/config/routes.rb b/billing/config/routes.rb new file mode 100644 index 0000000..c103e2b --- /dev/null +++ b/billing/config/routes.rb @@ -0,0 +1,15 @@ +Rails.application.routes.draw do + +  match 'payments/new' => 'payments#new', :as => :new_payment +  match 'payments/confirm' => 'payments#confirm', :as => :confirm_payment + +  resources :customer, :only => [:new, :edit] +  resources :credit_card_info, :only => [:edit] + +  match 'customer/confirm' => 'customer#confirm', :as => :confirm_customer +  match 'credit_card_info/confirm' => 'credit_card_info#confirm', :as => :confirm_credit_card_info +  #match 'transactions/:product_id/new' => 'transactions#new', :as => :new_transaction +  #match 'transactions/confirm/:product_id' => 'transactions#confirm', :as => :confirm_transaction + + +end | 
