diff options
| -rw-r--r-- | app/views/layouts/_navigation.html.haml | 2 | ||||
| -rw-r--r-- | config/locales/en/users.en.yml | 2 | ||||
| -rw-r--r-- | config/locales/es.yml | 4 | ||||
| -rw-r--r-- | engines/billing/app/controllers/customer_controller.rb | 63 | ||||
| -rw-r--r-- | engines/billing/app/controllers/subscriptors.rb | 9 | ||||
| -rw-r--r-- | engines/billing/app/helpers/billing_helper.rb | 2 | ||||
| -rw-r--r-- | engines/billing/app/views/customer/_subs_form.html.haml | 10 | ||||
| -rw-r--r-- | engines/billing/app/views/customer/new.html.haml | 44 | ||||
| -rw-r--r-- | engines/billing/app/views/subscriptions/new.html.erb | 52 | ||||
| -rw-r--r-- | engines/billing/app/views/subscriptions/new12.html.haml | 27 | 
10 files changed, 110 insertions, 105 deletions
diff --git a/app/views/layouts/_navigation.html.haml b/app/views/layouts/_navigation.html.haml index 0b81831..68d841a 100644 --- a/app/views/layouts/_navigation.html.haml +++ b/app/views/layouts/_navigation.html.haml @@ -9,6 +9,6 @@    - if APP_CONFIG[:billing]      = link_to_navigation :donations, new_payment_path,        active: (controller?(:payments) and action?(:new)) -    = link_to_navigation :billing_settings, billing_top_link(@user), +    = link_to_navigation :subscriptions, billing_top_link(@user),        active: controller?(:subscriptions)    = link_to_navigation :logout, logout_path, method: :delete diff --git a/config/locales/en/users.en.yml b/config/locales/en/users.en.yml index 543b511..7158743 100644 --- a/config/locales/en/users.en.yml +++ b/config/locales/en/users.en.yml @@ -6,7 +6,7 @@ en:        tickets: "Tickets"    user_control_panel: "user control panel"    donations: "Donations" -  billing_settings: "Billing Settings" +  subscriptions: "Subscriptions"    account_settings: "Account Settings"    username: "Username"    password: "Password" diff --git a/config/locales/es.yml b/config/locales/es.yml index 0a29604..99b8601 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -23,8 +23,8 @@ es:    pricing: Tarifas    about: Sobre nosotros    contact: Contacto -  donations: Donaciones -  billing_settings: Configuración de cuenta +  donations: "Donaciones" +  subscriptions: "Subscripciones"    signup: Registrarse    login: Iniciar sesión    logout: Cerrar sesión diff --git a/engines/billing/app/controllers/customer_controller.rb b/engines/billing/app/controllers/customer_controller.rb index 6cbcb44..3a82ff7 100644 --- a/engines/billing/app/controllers/customer_controller.rb +++ b/engines/billing/app/controllers/customer_controller.rb @@ -1,64 +1,19 @@  class CustomerController < BillingBaseController -  before_filter :require_login, :fetch_customer - -  def show -    if @customer -      @customer.with_braintree_data! -      @default_cc = @customer.default_credit_card -      @active_subscription = @customer.subscriptions -      @transactions = @customer.braintree_customer.transactions -    end -  end +  before_filter :require_login    def new -    if @customer.has_payment_info? -      redirect_to edit_customer_path(@user), :notice => 'Here is your saved customer data' -    else -      fetch_new_transparent_redirect_data -    end -  end - -  def edit -    fetch_edit_transparent_redirect_data -  end - -  def confirm -    @result = Braintree::TransparentRedirect.confirm(request.query_string) -    if @result.success? -      @customer.braintree_customer =  @result.customer -      @customer.save -      render :action => "confirm" -    elsif @customer.has_payment_info? -      fetch_edit_transparent_redirect_data -      render :action => "edit" +    if current_user.braintree_customer_id +      Braintree::Customer.find current_user.braintree_customer_id      else -      fetch_new_transparent_redirect_data -      render :action => "new" +      customer = Braintree::Customer.create(payment_method_nonce: params[:payment_method_nonce]).customer +      current_user.update_attributes braintree_customer_id: customer.id +      customer      end    end -  protected - -  def fetch_new_transparent_redirect_data -    access_denied unless @user == current_user # admins cannot do this for others -    @tr_data = Braintree::TransparentRedirect. -      create_customer_data(:redirect_url => confirm_customer_url) -  end - -  def fetch_edit_transparent_redirect_data -    access_denied unless @user == current_user # admins cannot do this for others -    @customer.with_braintree_data! -    @default_cc = @customer.default_credit_card -    @tr_data = Braintree::TransparentRedirect. -      update_customer_data(:redirect_url => confirm_customer_url, -                           :customer_id => @customer.braintree_customer_id) ##?? +  def show +    if current_user.braintree_customer_id +      Braintree::Customer.find current_user.braintree_customer_id    end - -  def fetch_customer -    @customer = Customer.find_by_user_id(@user.id) -    if @user == current_user -      @customer ||= Customer.new(user: @user) -    end -    access_denied unless (@customer and (@customer.user == current_user)) or admin?    end  end diff --git a/engines/billing/app/controllers/subscriptors.rb b/engines/billing/app/controllers/subscriptors.rb new file mode 100644 index 0000000..2e80e69 --- /dev/null +++ b/engines/billing/app/controllers/subscriptors.rb @@ -0,0 +1,9 @@ +def braintree_customer +  if current_user.braintree_customer_id +    Braintree::Customer.find current_user.braintree_customer_id +  else +    customer = Braintree::Customer.create(payment_method_nonce: params[:payment_method_nonce]).customer +    current_user.update_attributes braintree_customer_id: customer.id +    customer +  end +end diff --git a/engines/billing/app/helpers/billing_helper.rb b/engines/billing/app/helpers/billing_helper.rb index b9e5e2e..cb8abd6 100644 --- a/engines/billing/app/helpers/billing_helper.rb +++ b/engines/billing/app/helpers/billing_helper.rb @@ -14,7 +14,7 @@ module BillingHelper      if (admin? and user == current_user)        billing_admin_path      else -      show_or_new_customer_link(user) +      new_subscription_path      end    end diff --git a/engines/billing/app/views/customer/_subs_form.html.haml b/engines/billing/app/views/customer/_subs_form.html.haml new file mode 100644 index 0000000..82828cd --- /dev/null +++ b/engines/billing/app/views/customer/_subs_form.html.haml @@ -0,0 +1,10 @@ +%p + = t(:personal_info) +%div + = text_field_tag :first_name, "",placeholder: "First Name", class: "radius" +%div + = text_field_tag :last_name, "",placeholder: "Last Name", class: "radius" +%div + = text_field_tag :company, "",placeholder: "Company", class: "radius" +%div + = text_field_tag :phone, "",placeholder: "Phone", class: "radius" diff --git a/engines/billing/app/views/customer/new.html.haml b/engines/billing/app/views/customer/new.html.haml index e1f5ba9..81185e4 100644 --- a/engines/billing/app/views/customer/new.html.haml +++ b/engines/billing/app/views/customer/new.html.haml @@ -1,24 +1,20 @@ -- if @result -  #total-errors{:style => "color:red;"} -    = h(@result.errors.size) -    error(s) -= braintree_form_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, 'Expiration 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' +%h2.mbs New Customer +%br/ += form_tag new_customer_path, id: "checkout-form" do +  - if current_user and !current_user.has_payment_info? +    = render 'subs_form' unless current_user.is_anonymous? +  %br/ +  %p +    = t(:donation_info) +  %div{:id => "payment-form" } +  %div{:id => "coinbase-container-id" } +  %input{:name => "amount", :placeholder => "Enter amount", :type => "text"} +  %input.btn.btn-primary{:type => "submit", :value => "Donate"} +%script{:src => "https://js.braintreegateway.com/v2/braintree.js"} +:javascript +  var clientToken = "#{@client_token}"; +  braintree.setup(clientToken, "dropin", { +    container: "payment-form", +    form: "checkout-form", +    coinbase: { container: "coinbase-container-id" } +  }); diff --git a/engines/billing/app/views/subscriptions/new.html.erb b/engines/billing/app/views/subscriptions/new.html.erb index f3e143a..2336981 100644 --- a/engines/billing/app/views/subscriptions/new.html.erb +++ b/engines/billing/app/views/subscriptions/new.html.erb @@ -3,33 +3,41 @@  <br>  <%= form_tag subscriptions_path, id: "checkout-form" do %>    <% if current_user and !current_user.has_payment_info? %> -    <%= render 'customer_form' unless @anonymous_user%> -  <% end %> +     <%= render 'customer_form' %> +   <% end %>  <br>  <p>Choose subcription:</p> -<ul> -  <% @subscriptions.each do |subscription| %> -  <li> -    <%= subscription.name %> -    - -    <%= subscription.price %> -    <%= simple_form_for :subscription, :url => :subscriptions, :id => "checkout-form-#{subscription.id}" do |f| %> -      <input type="hidden" name="plan_id" id="" value="<%= subscription.id%>" /> -      <div id="payment-form-<%= subscription.id%>"></div> -      <div class="form-actions"> -        <%= f.submit t(:subscribe), :class => 'btn btn-primary' %> +<br> +<ul class="nav nav-tabs nav-stacked"> +   <% @subscriptions.each do |subscription| %> +     <li> +      <div class="btn-group"> +        <button class="btn"> <%= subscription.name %> +          <%= subscription.price %> </button>        </div> -      <script type="text/javascript" charset="utf-8"> -        var clientToken = "<%= @client_token %>"; -        braintree.setup(clientToken, "dropin", { -          container: "payment-form-<%= subscription.id%>", -          coinbase: { container: "coinbase-container-id" } -        }); -      </script> -    <% end %> -  </li> +      <br> +      <br> +      <%= simple_form_for :subscription, :url => :subscriptions, :id => "checkout-form-#{subscription.id}" do |f| %> +        <input type="hidden" name="plan_id" id="" value="<%= subscription.id%>" /> +        <div id="payment-form-<%= subscription.id%>"></div> +        <div class="form-actions"> +         <%= f.submit t(:subscribe), :class => 'btn btn-primary' %> +        </div> +        <script type="text/javascript" charset="utf-8"> +          var clientToken = "<%= @client_token %>"; +          braintree.setup(clientToken, "dropin", { +            container: "payment-form-<%= subscription.id%>", +            coinbase: { container: "coinbase-container-id" } +          }); +        </script> +      <% end %> +      </li>    <% end %>  </ul>  <div id="payment-form"></div>  <div id='coinbase-container-id'></div>  <% end %> + + + + diff --git a/engines/billing/app/views/subscriptions/new12.html.haml b/engines/billing/app/views/subscriptions/new12.html.haml new file mode 100644 index 0000000..8b302f2 --- /dev/null +++ b/engines/billing/app/views/subscriptions/new12.html.haml @@ -0,0 +1,27 @@ +%script{:src => "https://js.braintreegateway.com/v2/braintree.js"} +%h2.mbs Subscriptions +%br/ += form_tag subscriptions_path, id: "checkout-form" do +  - if current_user and !current_user.has_payment_info? +    = render 'customer_form' +  %br/ +  %p Choose subcription: +  %ul +  - @subscriptions.each do |subscription| +  %li +  = subscription.name +  = subscription.price +  = simple_form_for :subscription, :url => :subscriptions, :id => "checkout-form-#{subscription.id}" do |f| +  %input{:id => "", :name => "plan_id", :type => "hidden", :value => subscription.id} +  %div{:id => "payment-form-#{subscription.id}"} +  .form-actions +    = f.submit t(:subscribe), :class => 'btn btn-primary' +  %script{:charset => "utf-8", :type => "text/javascript"} +  :cdata +    var clientToken = "#{@client_token}"; +    braintree.setup(clientToken, "dropin", { +      container: "payment-form-#{subscription.id}", +      coinbase: { container: "coinbase-container-id" } +    }); +#payment-form +#coinbase-container-id  | 
