From 981179a58d47589f8444347856c1e8acce1f91d1 Mon Sep 17 00:00:00 2001 From: jessib Date: Tue, 9 Apr 2013 13:51:02 -0700 Subject: Display of subscription information on a customer's edit page. It is *super* slow. Posted stackoverflow question as not clear if there is more efficient way to get this information via braintree API. --- billing/app/controllers/customer_controller.rb | 10 ++++++++++ billing/app/controllers/subscriptions_controller.rb | 3 +++ billing/app/views/customer/_subscription.html.haml | 13 +++++++++++++ billing/app/views/customer/edit.html.haml | 5 +++++ 4 files changed, 31 insertions(+) create mode 100644 billing/app/views/customer/_subscription.html.haml (limited to 'billing/app') diff --git a/billing/app/controllers/customer_controller.rb b/billing/app/controllers/customer_controller.rb index 9ad6d93..06d1cb1 100644 --- a/billing/app/controllers/customer_controller.rb +++ b/billing/app/controllers/customer_controller.rb @@ -19,6 +19,16 @@ class CustomerController < BillingBaseController @tr_data = Braintree::TransparentRedirect. update_customer_data(:redirect_url => confirm_customer_url, :customer_id => params[:id]) + @subscriptions = Array.new + + # SUPER SLOW :( + # asked question to see about optimizing: http://stackoverflow.com/questions/15910980/retrieving-a-braintree-customers-subscriptions + transactions = @braintree_data.transactions + transactions.each do |cust_transaction| + transaction = Braintree::Transaction.find(cust_transaction.id) if (cust_transaction and cust_transaction.id) # why is cust_transaction nil in cases? + subscription = Braintree::Subscription.find(transaction.subscription_id) if (transaction and transaction.subscription_id) + @subscriptions << subscription if subscription and subscription.status == 'Active' + end else # TODO: will want to have case for admins, presumably access_denied diff --git a/billing/app/controllers/subscriptions_controller.rb b/billing/app/controllers/subscriptions_controller.rb index fcf5ecb..38b17b4 100644 --- a/billing/app/controllers/subscriptions_controller.rb +++ b/billing/app/controllers/subscriptions_controller.rb @@ -2,12 +2,15 @@ class SubscriptionsController < ApplicationController before_filter :authorize def new + # don't show link to subscribe if they are already subscribed? customer = Customer.find_by_user_id(current_user.id) + @payment_method_token = customer.default_credit_card.token @plans = Braintree::Plan.all end + def create @result = Braintree::Subscription.create( :payment_method_token => params[:payment_method_token], :plan_id => params[:plan_id] ) end diff --git a/billing/app/views/customer/_subscription.html.haml b/billing/app/views/customer/_subscription.html.haml new file mode 100644 index 0000000..f2a0410 --- /dev/null +++ b/billing/app/views/customer/_subscription.html.haml @@ -0,0 +1,13 @@ +%p + = subscription.id + Balance: + = number_to_currency(subscription.balance) + Bill on: + = subscription.billing_day_of_month + Start date: + = subscription.first_billing_date + Paid through + = subscription.paid_through_date + Price + = subscription.price + - # would be good to get plan name but not sure if that is possible? \ 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 25dfc79..0f37e61 100644 --- a/billing/app/views/customer/edit.html.haml +++ b/billing/app/views/customer/edit.html.haml @@ -17,5 +17,10 @@ Default Credit Card = @default_cc.masked_number = # (#{link_to @default_cc.token, edit_credit_card_info_path(:id => @default_cc.token)}) + - if @subscriptions.any? + %li + Active Subscriptions + = render(:partial => "subscription", :collection => @subscriptions) + = hidden_field_tag :tr_data, @tr_data = f.submit 'Save Payment Info' \ No newline at end of file -- cgit v1.2.3