spree_backend 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend/admin.js.erb +3 -1
  3. data/app/assets/javascripts/spree/backend/checkouts/edit.js +0 -11
  4. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js.erb +4 -1
  5. data/app/assets/javascripts/spree/backend/payments/new.js +42 -12
  6. data/app/assets/javascripts/spree/backend/select_payments.js.coffee +7 -0
  7. data/app/assets/javascripts/spree/backend/shipments.js.erb +1 -1
  8. data/app/assets/javascripts/spree/backend/taxonomy.js.coffee +2 -2
  9. data/app/assets/stylesheets/spree/backend/sections/_users.scss +5 -0
  10. data/app/assets/stylesheets/spree/backend/spree_admin.scss +1 -0
  11. data/app/controllers/spree/admin/base_controller.rb +2 -0
  12. data/app/controllers/spree/admin/payments_controller.rb +9 -4
  13. data/app/controllers/spree/admin/promotions_controller.rb +18 -0
  14. data/app/controllers/spree/admin/resource_controller.rb +6 -37
  15. data/app/controllers/spree/admin/shipping_methods_controller.rb +1 -1
  16. data/app/controllers/spree/admin/stock_locations_controller.rb +11 -5
  17. data/app/controllers/spree/admin/users_controller.rb +159 -0
  18. data/app/views/spree/admin/orders/_risk_analysis.html.erb +1 -1
  19. data/app/views/spree/admin/orders/_shipment.html.erb +1 -1
  20. data/app/views/spree/admin/payments/_form.html.erb +11 -5
  21. data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +20 -18
  22. data/app/views/spree/admin/promotions/index.html.erb +42 -0
  23. data/app/views/spree/admin/shared/_destroy.js.erb +0 -1
  24. data/app/views/spree/admin/shared/_tabs.html.erb +3 -0
  25. data/app/views/spree/admin/shared/_translations.html.erb +5 -0
  26. data/app/views/spree/admin/users/_addresses_form.html.erb +19 -0
  27. data/app/views/spree/admin/users/_form.html.erb +37 -0
  28. data/app/views/spree/admin/users/_sidebar.html.erb +36 -0
  29. data/app/views/spree/admin/users/_user_page_actions.html.erb +5 -0
  30. data/app/views/spree/admin/users/addresses.html.erb +24 -0
  31. data/app/views/spree/admin/users/edit.html.erb +55 -0
  32. data/app/views/spree/admin/users/index.html.erb +53 -0
  33. data/app/views/spree/admin/users/items.html.erb +74 -0
  34. data/app/views/spree/admin/users/new.html.erb +23 -0
  35. data/app/views/spree/admin/users/orders.html.erb +57 -0
  36. data/app/views/spree/admin/variants/_split.js.erb +3 -3
  37. data/config/routes.rb +11 -0
  38. data/lib/spree/backend/action_callbacks.rb +1 -1
  39. data/lib/spree/backend/callbacks.rb +47 -0
  40. data/lib/spree/backend/engine.rb +2 -0
  41. data/lib/spree/backend.rb +2 -0
  42. metadata +21 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0eb4b17ed3a2191a75982b34586811474e257424
4
- data.tar.gz: 11d1332518050f7b4cc0d918ed90202876e8fb0c
3
+ metadata.gz: b64003f2a6519db60fa7c939b19cbb0a0843f46e
4
+ data.tar.gz: 01aa9c882c54b3b5ea6ddcac76adceb038c2faa9
5
5
  SHA512:
6
- metadata.gz: 51695cae86f3f9fd40b797749b05c15d78d4d80b7c1e7f995d86e473fe00e1e34c1812a626f6f071999898ee0feec3fd391c8925c65a04fe5132627311380384
7
- data.tar.gz: 2956047cd5b1b703bd524c539f3f2b9d2dffe729a100a33119e257fbf3b58b459a5b4aa555eb80bfe6882bec038b51afd1eb2b463b4a39c9f7ff46a0d2c543f1
6
+ metadata.gz: f327dd06a82084cfe7dcbd14bf1042fc44b881d00263065a6549492ab39076a0c75ac442ebfdc8880e21975170ed876b9810813d694b56fb170438f18fdacaa3
7
+ data.tar.gz: 7704dc393a526fbc4082cb96f98c6d17f3f30caa180f996d3a700079ea5844061c30526f8b01cff747ee198576bf5ed60cf43e7fc59c1758b577ca4584de25c6
@@ -173,7 +173,9 @@ $(document).ready(function(){
173
173
  },
174
174
  dataType: 'script',
175
175
  success: function(response) {
176
- el.parents("tr").fadeOut('hide');
176
+ el.parents("tr").fadeOut('hide', function() {
177
+ $(this).remove();
178
+ });
177
179
  },
178
180
  error: function(response, textStatus, errorThrown) {
179
181
  show_flash('error', response.responseText);
@@ -1,20 +1,9 @@
1
1
  //= require_self
2
- //= require jquery.payment
3
2
  $(document).ready(function() {
4
3
  if ($('#customer_autocomplete_template').length > 0) {
5
4
  window.customerTemplate = Handlebars.compile($('#customer_autocomplete_template').text());
6
5
  }
7
6
 
8
- if ($("#card_number").is("*")) {
9
- $("#card_number").payment('formatCardNumber')
10
- $("#card_expiry").payment('formatCardExpiry')
11
- $("#card_code").payment('formatCardCVC')
12
-
13
- $("#card_number").change(function() {
14
- $("#cc_type").val($.payment.cardType(this.value))
15
- })
16
- }
17
-
18
7
  formatCustomerResult = function(customer) {
19
8
  return customerTemplate({
20
9
  customer: customer,
@@ -6,7 +6,10 @@ $(document).ready(function () {
6
6
  placeholder: Spree.translations.option_type_placeholder,
7
7
  multiple: true,
8
8
  initSelection: function (element, callback) {
9
- return $.getJSON(Spree.routes.option_type_search + '?ids=' + (element.val()), null, function (data) {
9
+ var url = Spree.url(Spree.routes.option_type_search, {
10
+ ids: element.val()
11
+ });
12
+ return $.getJSON(url, null, function (data) {
10
13
  return callback(data);
11
14
  });
12
15
  },
@@ -1,16 +1,46 @@
1
- $(document).ready(function(){
1
+ //= require jquery.payment
2
+ $(document).ready(function() {
3
+ if ($("#new_payment").is("*")) {
4
+ $(".cardNumber").payment('formatCardNumber');
5
+ $(".cardExpiry").payment('formatCardExpiry');
6
+ $(".cardCode").payment('formatCardCVC');
2
7
 
3
- $("#card_new").radioControlsVisibilityOfElement('#card_form');
8
+ $(".cardNumber").change(function() {
9
+ $(".ccType").val($.payment.cardType(this.value))
10
+ })
4
11
 
5
- $('select.jump_menu').change(function(){
6
- window.location = this.options[this.selectedIndex].value;
7
- });
12
+ $('.payment_methods_radios').click(
13
+ function() {
14
+ $('.payment-methods').hide();
15
+ if (this.checked) {
16
+ $('#payment_method_' + this.value).show();
17
+ }
18
+ }
19
+ );
8
20
 
9
- $('#cvv_link').click(function(event){
10
- window_name = 'cvv_info';
11
- window_options = 'left=20,top=20,width=500,height=500,toolbar=0,resizable=0,scrollbars=1';
12
- window.open($(this).prop('href'), window_name, window_options);
13
- event.preventDefault();
14
- });
21
+ $('.payment_methods_radios').each(
22
+ function() {
23
+ if (this.checked) {
24
+ $('#payment_method_' + this.value).show();
25
+ } else {
26
+ $('#payment_method_' + this.value).hide();
27
+ }
15
28
 
16
- });
29
+ if ($("#card_new" + this.value).is("*")) {
30
+ $("#card_new" + this.value).radioControlsVisibilityOfElement('#card_form' + this.value);
31
+ }
32
+ }
33
+ );
34
+
35
+ $('.cvvLink').click(function(event){
36
+ window_name = 'cvv_info';
37
+ window_options = 'left=20,top=20,width=500,height=500,toolbar=0,resizable=0,scrollbars=1';
38
+ window.open($(this).prop('href'), window_name, window_options);
39
+ event.preventDefault();
40
+ });
41
+
42
+ $('select.jump_menu').change(function(){
43
+ window.location = this.options[this.selectedIndex].value;
44
+ });
45
+ }
46
+ });
@@ -0,0 +1,7 @@
1
+ $ ->
2
+ if $('.new_payment').is('*')
3
+ $('.payment-method-settings fieldset').addClass('hidden').first().removeClass('hidden')
4
+ $('input[name="payment[payment_method_id]"]').click ()->
5
+ $('.payment-method-settings fieldset').addClass('hidden')
6
+ id = $(this).parents('li').data('id')
7
+ $("fieldset##{id}").removeClass('hidden')
@@ -219,7 +219,7 @@ startItemSplit = function(event){
219
219
  fadeOutTime: 50,
220
220
  intentPollInterval: 300
221
221
  });
222
- $('#item_stock_location').select2({ width: 'resolve', placeholder: 'Choose Location' });
222
+ $('#item_stock_location').select2({ width: 'resolve', placeholder: Spree.translations.item_stock_placeholder });
223
223
  }
224
224
 
225
225
  completeItemSplit = function(event) {
@@ -74,7 +74,7 @@ root.setup_taxonomy_tree = (taxonomy_id) ->
74
74
  root.base_url = Spree.url(Spree.routes.taxonomy_taxons_path)
75
75
 
76
76
  $.ajax
77
- url: base_url.path().replace("/taxons", "/jstree"),
77
+ url: Spree.url(base_url.path().replace("/taxons", "/jstree")).toString(),
78
78
  success: (taxonomy) ->
79
79
  last_rollback = null
80
80
 
@@ -83,7 +83,7 @@ root.setup_taxonomy_tree = (taxonomy_id) ->
83
83
  data: taxonomy,
84
84
  ajax:
85
85
  url: (e) ->
86
- base_url.path() + '/' + e.prop('id') + '/jstree'
86
+ Spree.url(base_url.path() + '/' + e.prop('id') + '/jstree').toString()
87
87
  themes:
88
88
  theme: "apple",
89
89
  url: Spree.url(Spree.routes.jstree_theme_path)
@@ -0,0 +1,5 @@
1
+ #listing_orders, #listing_items {
2
+ td.order-state {
3
+ height: 60px;
4
+ }
5
+ }
@@ -36,6 +36,7 @@
36
36
  @import 'spree/backend/sections/tax_zones';
37
37
  @import 'spree/backend/sections/log_entries';
38
38
  @import 'spree/backend/sections/taxons';
39
+ @import 'spree/backend/sections/users';
39
40
 
40
41
  @import 'spree/backend/hacks/mozilla';
41
42
  @import 'spree/backend/hacks/opera';
@@ -11,6 +11,7 @@ module Spree
11
11
  before_filter :authorize_admin
12
12
 
13
13
  protected
14
+
14
15
  def action
15
16
  params[:action].to_sym
16
17
  end
@@ -85,6 +86,7 @@ module Spree
85
86
  def config_locale
86
87
  Spree::Backend::Config[:locale]
87
88
  end
89
+
88
90
  end
89
91
  end
90
92
  end
@@ -1,6 +1,8 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class PaymentsController < Spree::Admin::BaseController
4
+ include Spree::Backend::Callbacks
5
+
4
6
  before_filter :load_order, :only => [:create, :new, :index, :fire]
5
7
  before_filter :load_payment, :except => [:create, :new, :index]
6
8
  before_filter :load_data
@@ -18,23 +20,27 @@ module Spree
18
20
  end
19
21
 
20
22
  def create
21
- @payment = @order.payments.build(object_params)
22
- if @payment.payment_method.is_a?(Spree::Gateway) && @payment.payment_method.payment_profiles_supported? && params[:card].present? and params[:card] != 'new'
23
- @payment.source = CreditCard.find_by_id(params[:card])
23
+ invoke_callbacks(:create, :before)
24
+ @payment ||= @order.payments.build(object_params)
25
+ if params[:card].present? and params[:card] != 'new'
26
+ @payment.source = @payment.payment_method.payment_source_class.find_by_id(params[:card])
24
27
  end
25
28
 
26
29
  begin
27
30
  if @payment.save
31
+ invoke_callbacks(:create, :after)
28
32
  # Transition order as far as it will go.
29
33
  while @order.next; end
30
34
  @payment.process! if @order.completed?
31
35
  flash[:success] = flash_message_for(@payment, :successfully_created)
32
36
  redirect_to admin_order_payments_path(@order)
33
37
  else
38
+ invoke_callbacks(:create, :fails)
34
39
  flash[:error] = Spree.t(:payment_could_not_be_created)
35
40
  render :new
36
41
  end
37
42
  rescue Spree::Core::GatewayError => e
43
+ invoke_callbacks(:create, :fails)
38
44
  flash[:error] = "#{e.message}"
39
45
  redirect_to new_admin_order_payment_path(@order)
40
46
  end
@@ -74,7 +80,6 @@ module Spree
74
80
  else
75
81
  @payment_method = @payment_methods.first
76
82
  end
77
- @previous_cards = @order.credit_cards.with_payment_profile
78
83
  end
79
84
 
80
85
  def can_transition_to_payment
@@ -13,6 +13,24 @@ module Spree
13
13
  def load_data
14
14
  @calculators = Rails.application.config.spree.calculators.promotion_actions_create_adjustments
15
15
  end
16
+
17
+ def collection
18
+ return @collection if @collection.present?
19
+ params[:q] ||= HashWithIndifferentAccess.new
20
+
21
+ @collection = super
22
+ @search = @collection.ransack(params[:q])
23
+ @collection = @search.result(distinct: true).
24
+ includes(promotion_includes).
25
+ page(params[:page]).
26
+ per(params[:per_page] || Spree::Config[:promotions_per_page])
27
+
28
+ @collection
29
+ end
30
+
31
+ def promotion_includes
32
+ [:promotion_actions]
33
+ end
16
34
  end
17
35
  end
18
36
  end
@@ -1,6 +1,6 @@
1
- require 'spree/backend/action_callbacks'
2
-
3
1
  class Spree::Admin::ResourceController < Spree::Admin::BaseController
2
+ include Spree::Backend::Callbacks
3
+
4
4
  helper_method :new_object_url, :edit_object_url, :object_url, :collection_url
5
5
  before_filter :load_resource, :except => [:update_positions]
6
6
  rescue_from ActiveRecord::RecordNotFound, :with => :resource_not_found
@@ -86,14 +86,8 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
86
86
 
87
87
  protected
88
88
 
89
- def resource_not_found
90
- flash[:error] = flash_message_for(model_class.new, :not_found)
91
- redirect_to collection_url
92
- end
93
-
94
89
  class << self
95
90
  attr_accessor :parent_data
96
- attr_accessor :callbacks
97
91
 
98
92
  def belongs_to(model_name, options = {})
99
93
  @parent_data ||= {}
@@ -101,26 +95,11 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
101
95
  @parent_data[:model_class] = model_name.to_s.classify.constantize
102
96
  @parent_data[:find_by] = options[:find_by] || :id
103
97
  end
98
+ end
104
99
 
105
- def new_action
106
- @callbacks ||= {}
107
- @callbacks[:new_action] ||= Spree::ActionCallbacks.new
108
- end
109
-
110
- def create
111
- @callbacks ||= {}
112
- @callbacks[:create] ||= Spree::ActionCallbacks.new
113
- end
114
-
115
- def update
116
- @callbacks ||= {}
117
- @callbacks[:update] ||= Spree::ActionCallbacks.new
118
- end
119
-
120
- def destroy
121
- @callbacks ||= {}
122
- @callbacks[:destroy] ||= Spree::ActionCallbacks.new
123
- end
100
+ def resource_not_found
101
+ flash[:error] = flash_message_for(model_class.new, :not_found)
102
+ redirect_to collection_url
124
103
  end
125
104
 
126
105
  def model_class
@@ -209,16 +188,6 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
209
188
  collection_url
210
189
  end
211
190
 
212
- def invoke_callbacks(action, callback_type)
213
- callbacks = self.class.callbacks || {}
214
- return if callbacks[action].nil?
215
- case callback_type.to_sym
216
- when :before then callbacks[action].before_methods.each {|method| send method }
217
- when :after then callbacks[action].after_methods.each {|method| send method }
218
- when :fails then callbacks[action].fails_methods.each {|method| send method }
219
- end
220
- end
221
-
222
191
  # URL helpers
223
192
 
224
193
  def new_object_url(options = {})
@@ -6,7 +6,7 @@ module Spree
6
6
  before_filter :set_zones, :only => [:create, :update]
7
7
 
8
8
  def destroy
9
- @object.touch :deleted_at
9
+ @object.destroy
10
10
 
11
11
  flash[:success] = flash_message_for(@object, :successfully_removed)
12
12
 
@@ -2,15 +2,21 @@ module Spree
2
2
  module Admin
3
3
  class StockLocationsController < ResourceController
4
4
 
5
- new_action.before :set_country
5
+ before_filter :set_country, :only => :new
6
6
 
7
7
  private
8
8
 
9
9
  def set_country
10
- if Spree::Config[:default_country_id].present?
11
- @stock_location.country = Spree::Country.find(Spree::Config[:default_country_id])
12
- else
13
- @stock_location.country = Spree::Country.find_by_iso('US')
10
+ begin
11
+ if Spree::Config[:default_country_id].present?
12
+ @stock_location.country = Spree::Country.find(Spree::Config[:default_country_id])
13
+ else
14
+ @stock_location.country = Spree::Country.find_by!(iso: 'US')
15
+ end
16
+
17
+ rescue ActiveRecord::RecordNotFound
18
+ flash[:error] = Spree.t(:stock_locations_need_a_default_country)
19
+ redirect_to admin_stock_locations_path and return
14
20
  end
15
21
  end
16
22
 
@@ -0,0 +1,159 @@
1
+ module Spree
2
+ module Admin
3
+ class UsersController < ResourceController
4
+ rescue_from Spree::Core::DestroyWithOrdersError, :with => :user_destroy_with_orders_error
5
+
6
+ after_filter :sign_in_if_change_own_password, :only => :update
7
+
8
+ # http://spreecommerce.com/blog/2010/11/02/json-hijacking-vulnerability/
9
+ before_filter :check_json_authenticity, :only => :index
10
+ before_filter :load_roles
11
+
12
+ def index
13
+ respond_with(@collection) do |format|
14
+ format.html
15
+ format.json { render :json => json_data }
16
+ end
17
+ end
18
+
19
+ def show
20
+ redirect_to edit_admin_user_path(@user)
21
+ end
22
+
23
+ def create
24
+ if params[:user]
25
+ roles = params[:user].delete("spree_role_ids")
26
+ end
27
+
28
+ @user = Spree.user_class.new(user_params)
29
+ if @user.save
30
+
31
+ if roles
32
+ @user.spree_roles = roles.reject(&:blank?).collect{|r| Spree::Role.find(r)}
33
+ end
34
+
35
+ flash.now[:success] = Spree.t(:created_successfully)
36
+ render :edit
37
+ else
38
+ render :new
39
+ end
40
+ end
41
+
42
+ def update
43
+ if params[:user]
44
+ roles = params[:user].delete("spree_role_ids")
45
+ end
46
+
47
+ if @user.update_attributes(user_params)
48
+ if roles
49
+ @user.spree_roles = roles.reject(&:blank?).collect{|r| Spree::Role.find(r)}
50
+ end
51
+ flash.now[:success] = Spree.t(:account_updated)
52
+ end
53
+
54
+ render :edit
55
+ end
56
+
57
+ def addresses
58
+ if request.put?
59
+ if @user.update_attributes(user_params)
60
+ flash.now[:success] = Spree.t(:account_updated)
61
+ end
62
+
63
+ render :addresses
64
+ end
65
+ end
66
+
67
+ def orders
68
+ params[:q] ||= {}
69
+ @search = Spree::Order.ransack(params[:q].merge(user_id_eq: @user.id))
70
+ @orders = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page])
71
+ end
72
+
73
+ def items
74
+ params[:q] ||= {}
75
+ @search = Spree::Order.includes(
76
+ line_items: {
77
+ variant: [:product, { option_values: :option_type }]
78
+ }).ransack(params[:q].merge(user_id_eq: @user.id))
79
+ @orders = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page])
80
+ end
81
+
82
+ def generate_api_key
83
+ if @user.generate_spree_api_key!
84
+ flash[:success] = Spree.t('api.key_generated')
85
+ end
86
+ redirect_to edit_admin_user_path(@user)
87
+ end
88
+
89
+ def clear_api_key
90
+ if @user.clear_spree_api_key!
91
+ flash[:success] = Spree.t('api.key_cleared')
92
+ end
93
+ redirect_to edit_admin_user_path(@user)
94
+ end
95
+
96
+ def model_class
97
+ Spree.user_class
98
+ end
99
+
100
+ protected
101
+
102
+ def collection
103
+ return @collection if @collection.present?
104
+ if request.xhr? && params[:q].present?
105
+ @collection = Spree.user_class.includes(:bill_address, :ship_address)
106
+ .where("spree_users.email #{LIKE} :search
107
+ OR (spree_addresses.firstname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
108
+ OR (spree_addresses.lastname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
109
+ OR (spree_addresses.firstname #{LIKE} :search AND spree_addresses.id = spree_users.ship_address_id)
110
+ OR (spree_addresses.lastname #{LIKE} :search AND spree_addresses.id = spree_users.ship_address_id)",
111
+ { :search => "#{params[:q].strip}%" })
112
+ .limit(params[:limit] || 100)
113
+ else
114
+ @search = Spree.user_class.ransack(params[:q])
115
+ @collection = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page])
116
+ end
117
+ end
118
+
119
+ private
120
+ def user_params
121
+ params.require(:user).permit(PermittedAttributes.user_attributes |
122
+ [:spree_role_ids,
123
+ ship_address_attributes: PermittedAttributes.address_attributes,
124
+ bill_address_attributes: PermittedAttributes.address_attributes])
125
+ end
126
+
127
+ # handling raise from Spree::Admin::ResourceController#destroy
128
+ def user_destroy_with_orders_error
129
+ invoke_callbacks(:destroy, :fails)
130
+ render :status => :forbidden, :text => Spree.t(:error_user_destroy_with_orders)
131
+ end
132
+
133
+ # Allow different formats of json data to suit different ajax calls
134
+ def json_data
135
+ json_format = params[:json_format] or 'default'
136
+ case json_format
137
+ when 'basic'
138
+ collection.map { |u| { 'id' => u.id, 'name' => u.email } }.to_json
139
+ else
140
+ address_fields = [:firstname, :lastname, :address1, :address2, :city, :zipcode, :phone, :state_name, :state_id, :country_id]
141
+ includes = { :only => address_fields , :include => { :state => { :only => :name }, :country => { :only => :name } } }
142
+
143
+ collection.to_json(:only => [:id, :email], :include =>
144
+ { :bill_address => includes, :ship_address => includes })
145
+ end
146
+ end
147
+
148
+ def sign_in_if_change_own_password
149
+ if try_spree_current_user == @user && @user.password.present?
150
+ sign_in(@user, :event => :authentication, :bypass => true)
151
+ end
152
+ end
153
+
154
+ def load_roles
155
+ @roles = Spree::Role.all
156
+ end
157
+ end
158
+ end
159
+ end
@@ -12,7 +12,7 @@
12
12
  </strong></td>
13
13
  <td class="align-center">
14
14
  <span class="<%= @order.payments.failed.count > 0 ? 'state void' : 'state complete' %>">
15
- <%= link_to "#{pluralize(@order.payments.failed.count, Spree.t(:payment))}", spree.admin_order_payments_path(@order) %>
15
+ <%= link_to "#{Spree.t 'payments_count', count: @order.payments.failed.count, default: pluralize(@order.payments.failed.count, Spree.t(:payment))}", spree.admin_order_payments_path(@order) %>
16
16
  </span>
17
17
  </td>
18
18
  </tr>
@@ -41,7 +41,7 @@
41
41
  <div class="field alpha five columns">
42
42
  <%= label_tag 'selected_shipping_rate_id', Spree.t(:shipping_method) %>
43
43
  <%= select_tag :selected_shipping_rate_id,
44
- options_for_select(shipment.shipping_rates.with_shipping_method.map {|sr| ["#{sr.name} #{sr.display_price}", sr.id] }, shipment.selected_shipping_rate_id),
44
+ options_for_select(shipment.shipping_rates.map {|sr| ["#{sr.name} #{sr.display_price}", sr.id] }, shipment.selected_shipping_rate_id),
45
45
  {:class => 'select2 fullwidth', :data => {'shipment-number' => shipment.number } } %>
46
46
  </div>
47
47
  </td>
@@ -10,19 +10,25 @@
10
10
  <label><%= Spree.t(:payment_method) %></label>
11
11
  <ul>
12
12
  <% @payment_methods.each do |method| %>
13
- <li>
13
+ <li data-id="<%= Spree.t(method.name, :scope => :payment_methods, :default => method.name).parameterize %>">
14
14
  <label data-hook="payment_method_field">
15
- <%= radio_button_tag 'payment[payment_method_id]', method.id, method == @payment_method %>
15
+ <%= radio_button_tag 'payment[payment_method_id]', method.id, method == @payment_method, { class: "payment_methods_radios" } %>
16
16
  <%= Spree.t(method.name, :scope => :payment_methods, :default => method.name) %>
17
17
  </label>
18
18
  </li>
19
19
  <% end %>
20
20
  </ul>
21
+
21
22
  <div class="payment-method-settings">
22
23
  <% @payment_methods.each do |method| %>
23
- <% if method.source_required? %>
24
- <%= render :partial => "spree/admin/payments/source_forms/#{method.method_type}", :locals => { :payment_method => method } %>
25
- <% end %>
24
+
25
+ <div class="payment-methods" id="payment_method_<%= method.id %>">
26
+ <% if method.source_required? %>
27
+ <br />
28
+ <%= render :partial => "spree/admin/payments/source_forms/#{method.method_type}",
29
+ :locals => { :payment_method => method, previous_cards: method.sources_with_profile(@order) } %>
30
+ <% end %>
31
+ </div>
26
32
  <% end %>
27
33
  </div>
28
34
  </div>