solidus_backend 2.9.5 → 2.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend.js +1 -0
  3. data/app/assets/javascripts/spree/backend/components/admin_nav.js +24 -0
  4. data/app/assets/javascripts/spree/backend/components/tabs.js +1 -1
  5. data/app/assets/javascripts/spree/backend/models/order.js +9 -0
  6. data/app/assets/javascripts/spree/backend/orders/cart.js +6 -0
  7. data/app/assets/javascripts/spree/backend/shipments.js +0 -62
  8. data/app/assets/javascripts/spree/backend/templates/index.js +0 -1
  9. data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +29 -0
  10. data/app/assets/javascripts/spree/backend/views/cart/line_item_table.js +5 -0
  11. data/app/assets/javascripts/spree/backend/views/index.js +1 -0
  12. data/app/assets/javascripts/spree/backend/views/order/address.js +7 -5
  13. data/app/assets/stylesheets/spree/backend/_bootstrap_custom.scss +2 -0
  14. data/app/assets/stylesheets/spree/backend/components/_breadcrumb.scss +3 -3
  15. data/app/assets/stylesheets/spree/backend/components/_messages.scss +4 -0
  16. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +182 -49
  17. data/app/assets/stylesheets/spree/backend/globals/{_mixins.css → _mixins.scss} +0 -0
  18. data/app/assets/stylesheets/spree/backend/globals/_variables.scss +2 -0
  19. data/app/assets/stylesheets/spree/backend/shared/_header.scss +5 -1
  20. data/app/assets/stylesheets/spree/backend/shared/_layout.scss +0 -9
  21. data/app/controllers/spree/admin/adjustments_controller.rb +1 -1
  22. data/app/controllers/spree/admin/base_controller.rb +1 -1
  23. data/app/controllers/spree/admin/orders_controller.rb +2 -2
  24. data/app/controllers/spree/admin/payment_methods_controller.rb +4 -4
  25. data/app/controllers/spree/admin/payments_controller.rb +2 -2
  26. data/app/controllers/spree/admin/product_properties_controller.rb +1 -1
  27. data/app/controllers/spree/admin/products_controller.rb +2 -2
  28. data/app/controllers/spree/admin/resource_controller.rb +13 -4
  29. data/app/controllers/spree/admin/style_guide_controller.rb +1 -1
  30. data/app/controllers/spree/admin/taxons/attachment_controller.rb +20 -0
  31. data/app/controllers/spree/admin/users_controller.rb +6 -2
  32. data/app/helpers/spree/admin/navigation_helper.rb +3 -2
  33. data/app/helpers/spree/promotion_rules_helper.rb +1 -1
  34. data/app/views/spree/admin/customer_returns/new.html.erb +1 -1
  35. data/app/views/spree/admin/option_types/edit.html.erb +1 -1
  36. data/app/views/spree/admin/orders/_line_items_edit_form.html.erb +1 -0
  37. data/app/views/spree/admin/orders/edit.html.erb +3 -4
  38. data/app/views/spree/admin/payment_methods/new.html.erb +1 -1
  39. data/app/views/spree/admin/prices/_master_variant_table.html.erb +41 -41
  40. data/app/views/spree/admin/promotion_code_batches/new.html.erb +1 -1
  41. data/app/views/spree/admin/promotion_codes/new.html.erb +1 -1
  42. data/app/views/spree/admin/promotions/_actions.html.erb +1 -0
  43. data/app/views/spree/admin/promotions/index.html.erb +1 -1
  44. data/app/views/spree/admin/return_authorizations/new.html.erb +1 -1
  45. data/app/views/spree/admin/shared/_calculator_fields.html.erb +5 -0
  46. data/app/views/spree/admin/shared/_navigation.html.erb +3 -0
  47. data/app/views/spree/admin/shared/_new_resource_links.html.erb +1 -1
  48. data/app/views/spree/admin/shared/_order_submenu.html.erb +2 -2
  49. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +1 -1
  50. data/app/views/spree/admin/shipping_methods/_form.html.erb +1 -1
  51. data/app/views/spree/admin/stock_locations/index.html.erb +1 -1
  52. data/app/views/spree/admin/store_credit_reasons/index.html.erb +1 -1
  53. data/app/views/spree/admin/store_credits/index.html.erb +1 -1
  54. data/app/views/spree/admin/tax_rates/_form.html.erb +1 -1
  55. data/app/views/spree/admin/taxonomies/new.html.erb +1 -1
  56. data/app/views/spree/admin/taxons/_form.html.erb +1 -5
  57. data/app/views/spree/admin/taxons/attachment_forms/_paperclip.html.erb +16 -0
  58. data/app/views/spree/admin/users/_form.html.erb +12 -10
  59. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  60. data/app/views/spree/admin/users/edit.html.erb +1 -2
  61. data/app/views/spree/layouts/admin.html.erb +1 -2
  62. data/config/routes.rb +4 -6
  63. data/lib/spree/backend.rb +1 -0
  64. data/lib/spree/backend/config.rb +9 -0
  65. data/lib/spree/backend/engine.rb +5 -3
  66. data/{app/models → lib}/spree/backend_configuration.rb +5 -2
  67. data/solidus_backend.gemspec +2 -1
  68. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +1 -1
  69. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +2 -2
  70. data/spec/controllers/spree/admin/resource_controller_spec.rb +12 -1
  71. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +1 -1
  72. data/spec/controllers/spree/admin/users_controller_spec.rb +23 -0
  73. data/spec/features/admin/configuration/payment_methods_spec.rb +11 -2
  74. data/spec/features/admin/configuration/shipping_methods_spec.rb +13 -1
  75. data/spec/features/admin/configuration/taxonomies_spec.rb +7 -0
  76. data/spec/features/admin/orders/customer_details_spec.rb +1 -2
  77. data/spec/features/admin/orders/customer_returns_spec.rb +20 -7
  78. data/spec/features/admin/orders/new_order_spec.rb +53 -5
  79. data/spec/features/admin/orders/new_refund_spec.rb +1 -1
  80. data/spec/features/admin/orders/order_details_spec.rb +14 -4
  81. data/spec/features/admin/orders/return_authorizations_spec.rb +38 -9
  82. data/spec/features/admin/products/edit/images_spec.rb +1 -1
  83. data/spec/features/admin/products/edit/taxons_spec.rb +8 -2
  84. data/spec/features/admin/products/products_spec.rb +12 -0
  85. data/spec/features/admin/promotion_adjustments_spec.rb +9 -0
  86. data/spec/features/admin/promotions/promotion_code_batches_spec.rb +37 -0
  87. data/spec/features/admin/promotions/promotion_code_spec.rb +31 -0
  88. data/spec/features/admin/taxons_spec.rb +12 -0
  89. data/spec/features/admin/users_spec.rb +18 -8
  90. data/spec/{support → fixtures/files}/ror_ringer.jpeg +0 -0
  91. data/spec/{models → lib}/spree/backend_configuration/menu_item_spec.rb +0 -0
  92. data/spec/{models → lib}/spree/backend_configuration_spec.rb +0 -0
  93. data/spec/spec_helper.rb +1 -0
  94. data/spec/support/feature/base_feature_helper.rb +6 -1
  95. data/spec/teaspoon_env.rb +8 -23
  96. data/vendor/assets/stylesheets/solidus_admin/bootstrap/_variables.scss +1 -1
  97. metadata +33 -14
  98. data/app/assets/javascripts/spree/backend/templates/variants/autocomplete_stock.hbs +0 -56
  99. data/app/views/spree/admin/orders/_add_product.html.erb +0 -12
@@ -169,6 +169,8 @@ $actions-brd-colors: $color-action-edit-brd, $color-action-clone-brd, $color-act
169
169
  //--------------------------------------------------------------
170
170
  $width-sidebar: 200px !default;
171
171
  $width-sidebar-flyout: 225px !default;
172
+ $width-sidebar-collapsed: 52px !default;
173
+ $sidebar-transition: 250ms ease-in !default;
172
174
  $border-sidebar: 1px solid $color-sidebar-border !default;
173
175
 
174
176
  // Main
@@ -1,11 +1,15 @@
1
1
  .main-header {
2
2
  display: flex;
3
3
  align-items: center;
4
- padding: 15px $grid-gutter-width;
5
4
  background-color: $color-header-bg;
5
+ padding: ($grid-gutter-width / 2) $grid-gutter-width;
6
6
  border-bottom: 1px solid $color-border;
7
7
  height: $main-header-height;
8
8
 
9
+ .admin-nav-hidden & {
10
+ margin-left: ($width-sidebar - $width-sidebar-collapsed);
11
+ }
12
+
9
13
  @media print { display: none }
10
14
  }
11
15
 
@@ -12,15 +12,6 @@ body {
12
12
  background-color: $admin-body-bg;
13
13
  }
14
14
 
15
- .admin-nav {
16
- position: absolute;
17
- top: 0;
18
- bottom: 0;
19
- left: 0;
20
- width: $width-sidebar;
21
- @media print { display: none }
22
- }
23
-
24
15
  .content-wrapper {
25
16
  background-color: $content-wrapper-bg;
26
17
  padding-top: 1rem;
@@ -40,7 +40,7 @@ module Spree
40
40
  [
41
41
  Spree::AdjustmentReason.active.to_a,
42
42
  @adjustment.adjustment_reason
43
- ].flatten.compact.uniq.sort_by { |r| r.name.downcase }
43
+ ].flatten.compact.uniq.sort_by { |reason| reason.name.downcase }
44
44
  end
45
45
  end
46
46
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  module Admin
5
5
  class BaseController < Spree::BaseController
6
6
  helper 'spree/admin/navigation'
7
- layout '/spree/layouts/admin'
7
+ layout 'spree/layouts/admin'
8
8
 
9
9
  before_action :authorize_admin
10
10
 
@@ -105,8 +105,8 @@ module Spree
105
105
  @order.complete!
106
106
  flash[:success] = t('spree.order_completed')
107
107
  redirect_to edit_admin_order_url(@order)
108
- rescue StateMachines::InvalidTransition => e
109
- flash[:error] = e.message
108
+ rescue StateMachines::InvalidTransition => error
109
+ flash[:error] = error.message
110
110
  redirect_to confirm_admin_order_url(@order)
111
111
  end
112
112
 
@@ -28,13 +28,13 @@ module Spree
28
28
  invoke_callbacks(:update, :before)
29
29
 
30
30
  attributes = payment_method_params
31
- attributes.each do |k, _v|
32
- if k.include?("password") && attributes[k].blank?
33
- attributes.delete(k)
31
+ attributes.each do |key, _value|
32
+ if key.include?("password") && attributes[key].blank?
33
+ attributes.delete(key)
34
34
  end
35
35
  end
36
36
 
37
- if @payment_method.update_attributes(attributes)
37
+ if @payment_method.update(attributes)
38
38
  invoke_callbacks(:update, :after)
39
39
  flash[:success] = t('spree.successfully_updated', resource: t('spree.payment_method'))
40
40
  redirect_to edit_admin_payment_method_path(@payment_method)
@@ -46,8 +46,8 @@ module Spree
46
46
  flash[:error] = t('spree.payment_could_not_be_created')
47
47
  render :new
48
48
  end
49
- rescue Spree::Core::GatewayError => e
50
- flash[:error] = e.message.to_s
49
+ rescue Spree::Core::GatewayError => error
50
+ flash[:error] = error.message.to_s
51
51
  redirect_to new_admin_order_payment_path(@order)
52
52
  end
53
53
  end
@@ -3,7 +3,7 @@
3
3
  module Spree
4
4
  module Admin
5
5
  class ProductPropertiesController < ResourceController
6
- belongs_to 'spree/product', find_by: :slug
6
+ belongs_to 'spree/product', find_by: :slug, includes: { product_properties: :property }
7
7
  before_action :find_properties
8
8
  before_action :setup_property, only: :index, if: -> { can?(:create, model_class) }
9
9
  before_action :setup_variant_property_rules, only: :index
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
  end
28
28
  invoke_callbacks(:update, :before)
29
- if @object.update_attributes(permitted_resource_params)
29
+ if @object.update(permitted_resource_params)
30
30
  invoke_callbacks(:update, :after)
31
31
  flash[:success] = flash_message_for(@object, :successfully_updated)
32
32
  respond_with(@object) do |format|
@@ -120,7 +120,7 @@ module Spree
120
120
  end
121
121
 
122
122
  def product_includes
123
- [{ variants: [:images], master: [:images, :default_price] }]
123
+ [:variant_images, { variants: [:images], master: [:images, :default_price] }]
124
124
  end
125
125
 
126
126
  def clone_object_url(resource)
@@ -30,7 +30,7 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
30
30
 
31
31
  def update
32
32
  invoke_callbacks(:update, :before)
33
- if @object.update_attributes(permitted_resource_params)
33
+ if @object.update(permitted_resource_params)
34
34
  invoke_callbacks(:update, :after)
35
35
  respond_with(@object) do |format|
36
36
  format.html do
@@ -107,8 +107,14 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
107
107
  else
108
108
  invoke_callbacks(:destroy, :fails)
109
109
  respond_with(@object) do |format|
110
- format.html { redirect_to location_after_destroy }
111
- format.js { render status: :unprocessable_entity, plain: @object.errors.full_messages.join(', ') }
110
+ message = @object.errors.full_messages.to_sentence
111
+ format.html do
112
+ flash[:error] = message
113
+ redirect_to location_after_destroy
114
+ end
115
+ format.js do
116
+ render status: :unprocessable_entity, plain: message
117
+ end
112
118
  end
113
119
  end
114
120
  end
@@ -123,6 +129,7 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
123
129
  @parent_data[:model_name] = model_name
124
130
  @parent_data[:model_class] = (options[:model_class] || model_name.to_s.classify.constantize)
125
131
  @parent_data[:find_by] = options[:find_by] || :id
132
+ @parent_data[:includes] = options[:includes]
126
133
  end
127
134
  end
128
135
 
@@ -183,7 +190,9 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
183
190
 
184
191
  def parent
185
192
  if parent?
186
- @parent ||= self.class.parent_data[:model_class].find_by(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"])
193
+ @parent ||= self.class.parent_data[:model_class]
194
+ .includes(self.class.parent_data[:includes])
195
+ .find_by(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"])
187
196
  instance_variable_set("@#{parent_model_name}", @parent)
188
197
  else
189
198
  Spree::Deprecation.warn "Calling #parent is deprecated on a ResourceController which has not defined a belongs_to"
@@ -4,7 +4,7 @@ module Spree
4
4
  module Admin
5
5
  class StyleGuideController < Spree::Admin::BaseController
6
6
  respond_to :html
7
- layout '/spree/layouts/admin_style_guide'
7
+ layout 'spree/layouts/admin_style_guide'
8
8
 
9
9
  def index
10
10
  @topics = {
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spree
4
+ module Admin
5
+ module Taxons
6
+ class AttachmentController < Spree::Admin::BaseController
7
+ def destroy
8
+ taxonomy = Spree::Taxonomy.find(params[:taxonomy_id])
9
+ taxon = taxonomy.taxons.find(params[:taxon_id])
10
+ if taxon.destroy_attachment(params[:attachment_definition])
11
+ flash[:success] = t('spree.successfully_removed', resource: params[:attachment_definition].titleize)
12
+ else
13
+ flash[:error] = t('spree.taxon_attachment_removal_error')
14
+ end
15
+ redirect_to edit_admin_taxonomy_taxon_path(taxonomy, taxon.id)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -38,7 +38,7 @@ module Spree
38
38
  end
39
39
 
40
40
  def update
41
- if @user.update_attributes(user_params)
41
+ if @user.update(user_params)
42
42
  set_roles
43
43
  set_stock_locations
44
44
 
@@ -55,7 +55,7 @@ module Spree
55
55
 
56
56
  def addresses
57
57
  if request.put?
58
- if @user.update_attributes(user_params)
58
+ if @user.update(user_params)
59
59
  flash.now[:success] = t('spree.account_updated')
60
60
  end
61
61
 
@@ -131,6 +131,10 @@ module Spree
131
131
  attributes += [{ spree_role_ids: [] }]
132
132
  end
133
133
 
134
+ unless can? :update_password, @user
135
+ attributes -= [:password, :password_confirmation]
136
+ end
137
+
134
138
  params.require(:user).permit(attributes)
135
139
  end
136
140
 
@@ -33,7 +33,7 @@ module Spree
33
33
  elsif content_for?(:page_title)
34
34
  content_for(:page_title)
35
35
  elsif admin_breadcrumbs.any?
36
- admin_breadcrumbs.map{ |x| strip_tags(x) }.reverse.join(' - ')
36
+ admin_breadcrumbs.map { |breadcrumb| strip_tags(breadcrumb) }.reverse.join(' - ')
37
37
  else
38
38
  t(controller.controller_name, default: controller.controller_name.titleize, scope: 'spree')
39
39
  end
@@ -181,7 +181,8 @@ module Spree
181
181
  url.ends_with?("#{controller.controller_name.singularize}/edit")
182
182
  options[:class] = 'fa'
183
183
  options[:class] += ' active' if is_active
184
- options[:datahook] = "admin_settings_#{link_text.downcase.tr(' ', '_')}"
184
+ options[:data] ||= {}
185
+ options[:data][:hook] = "admin_settings_#{link_text.downcase.tr(' ', '_')}"
185
186
  content_tag(:li, options) do
186
187
  link_to(link_text, url)
187
188
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  module PromotionRulesHelper
5
5
  def options_for_promotion_rule_types(promotion)
6
6
  existing = promotion.rules.map { |rule| rule.class.name }
7
- rules = Rails.application.config.spree.promotions.rules.reject { |r| existing.include? r.name }
7
+ rules = Rails.application.config.spree.promotions.rules.reject { |rule| existing.include? rule.name }
8
8
  options = rules.map { |rule| [rule.model_name.human, rule.name] }
9
9
  options_for_select(options)
10
10
  end
@@ -40,7 +40,7 @@
40
40
  </div>
41
41
 
42
42
  <div class="form-buttons filter-actions actions" data-hook="buttons">
43
- <%= button_tag t('spree.actions.create'), class: 'btn btn-primary' %>
43
+ <%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
44
44
  <%= link_to t('spree.actions.cancel'), admin_order_customer_returns_url(@order), class: 'btn btn-primary' %>
45
45
  </div>
46
46
  </fieldset>
@@ -9,7 +9,7 @@
9
9
  <%= link_to_add_fields t('spree.add_option_value'), "tbody#option_values", class: 'btn btn-primary' %>
10
10
  </span>
11
11
  </li>
12
- <% end %>
12
+ <% end %>
13
13
 
14
14
  <%= render partial: 'spree/shared/error_messages', locals: { target: @option_type } %>
15
15
 
@@ -7,6 +7,7 @@
7
7
 
8
8
  <% if can?(:update, @order) && can?(:create, Spree::LineItem) %>
9
9
  <button class="js-add-line-item btn btn-primary" disabled><%= t('spree.add_line_item') %></button>
10
+ <button class="js-empty-cart btn btn-primary" disabled><%= t('spree.empty_cart') %></button>
10
11
  <% end %>
11
12
 
12
13
  <%= render "spree/admin/orders/order_details", { order: order } %>
@@ -18,13 +18,12 @@
18
18
  <%= render 'spree/admin/orders/risk_analysis', latest_payment: @order.payments.reorder("created_at DESC").first %>
19
19
  <% end %>
20
20
 
21
- <% if can?(:update, Spree::Shipment) && can?(:update, @order) && @order.shipment_state != "shipped" %>
22
- <%= render partial: 'add_product' %>
23
- <% end %>
21
+ <div data-hook="admin_order_edit_sub_header"></div>
24
22
 
25
23
  <% if @order.line_items.empty? %>
26
24
  <div class="no-objects-found">
27
- <%= t('spree.your_order_is_empty_add_product')%>
25
+ <p><%= t('spree.your_order_is_empty_add_product') %></p>
26
+ <%= link_to t('spree.cart'), spree.cart_admin_order_url(@order), class: 'btn btn-primary' %>
28
27
  </div>
29
28
  <% end %>
30
29
 
@@ -15,7 +15,7 @@
15
15
  <fieldset class="no-border-top">
16
16
  <%= render partial: 'form', locals: { f: f } %>
17
17
  <div data-hook="buttons" class="filter-actions actions">
18
- <%= button_tag t('spree.actions.create'), class: 'btn btn-primary' %>
18
+ <%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
19
19
  </div>
20
20
  </fieldset>
21
21
  <% end %>
@@ -1,41 +1,41 @@
1
- <div class="row">
2
- <div class="col-12">
3
- <fieldset class="no-border-bottom <%= "no-border-top" if !variants %>">
4
- <% if variants %>
5
- <legend align="center"><%= I18n.t(:master_variant, scope: :spree) %> <%= admin_hint I18n.t(:master_variant, scope: :spree), I18n.t(:master_variant, scope: [:spree, :hints, "spree/price"]) %></legend>
6
- <% end %>
7
- <table class="index master_prices">
8
- <colgroup>
9
- <col style="width: 30%">
10
- <col style="width: 30%">
11
- <col style="width: 20%">
12
- <col style="width: 20%">
13
- </colgroup>
14
- <thead data-hook="master_prices_header">
15
- <tr>
16
- <th><%= Spree::Price.human_attribute_name(:country) %></th>
17
- <th><%= Spree::Price.human_attribute_name(:currency) %></th>
18
- <th><%= Spree::Price.human_attribute_name(:amount) %></th>
19
- <th class="actions"></th>
20
- </tr>
21
- </thead>
22
- <% master_prices.each do |price| %>
23
- <tr id="<%= spree_dom_id price %>" data-hook="prices_row" class="<%= "deleted" if price.deleted? %>">
24
- <td><%= price.display_country %></td>
25
- <td><%= price.currency %></td>
26
- <td><%= price.money.to_html %></td>
27
- <td class="actions">
28
- <% if can?(:update, price) %>
29
- <%= link_to_edit(price, no_text: true) unless price.deleted? %>
30
- <% end %>
31
- <% if can?(:destroy, price) %>
32
- &nbsp;
33
- <%= link_to_delete(price, no_text: true) unless price.deleted? %>
34
- <% end %>
35
- </td>
36
- </tr>
37
- <% end %>
38
- </table>
39
- </fieldset>
40
- </div>
41
- </div>
1
+ <%= paginate master_prices, theme: "solidus_admin" %>
2
+
3
+ <fieldset class="no-border-bottom <%= "no-border-top" if !variants %>">
4
+ <% if variants %>
5
+ <legend align="center"><%= I18n.t(:master_variant, scope: :spree) %> <%= admin_hint I18n.t(:master_variant, scope: :spree), I18n.t(:master_variant, scope: [:spree, :hints, "spree/price"]) %></legend>
6
+ <% end %>
7
+ <table class="index master_prices">
8
+ <colgroup>
9
+ <col style="width: 30%">
10
+ <col style="width: 30%">
11
+ <col style="width: 20%">
12
+ <col style="width: 20%">
13
+ </colgroup>
14
+ <thead data-hook="master_prices_header">
15
+ <tr>
16
+ <th><%= Spree::Price.human_attribute_name(:country) %></th>
17
+ <th><%= Spree::Price.human_attribute_name(:currency) %></th>
18
+ <th><%= Spree::Price.human_attribute_name(:amount) %></th>
19
+ <th class="actions"></th>
20
+ </tr>
21
+ </thead>
22
+ <% master_prices.each do |price| %>
23
+ <tr id="<%= spree_dom_id price %>" data-hook="prices_row" class="<%= "deleted" if price.deleted? %>">
24
+ <td><%= price.display_country %></td>
25
+ <td><%= price.currency %></td>
26
+ <td><%= price.money.to_html %></td>
27
+ <td class="actions">
28
+ <% if can?(:update, price) %>
29
+ <%= link_to_edit(price, no_text: true) unless price.deleted? %>
30
+ <% end %>
31
+ <% if can?(:destroy, price) %>
32
+ &nbsp;
33
+ <%= link_to_delete(price, no_text: true) unless price.deleted? %>
34
+ <% end %>
35
+ </td>
36
+ </tr>
37
+ <% end %>
38
+ </table>
39
+ </fieldset>
40
+
41
+ <%= paginate master_prices, theme: "solidus_admin" %>
@@ -24,5 +24,5 @@
24
24
  <%= f.label :email %>
25
25
  <%= f.text_field :email, class: "fullwidth", value: spree_current_user.email %>
26
26
  <% end %>
27
- <%= button_tag t('spree.actions.create'), class: 'btn btn-primary' %>
27
+ <%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
28
28
  <% end %>
@@ -24,7 +24,7 @@
24
24
  </div>
25
25
 
26
26
  <div class="form-buttons filter-actions actions" data-hook="buttons">
27
- <%= button_tag t('spree.actions.create'), class: 'btn btn-primary' %>
27
+ <%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
28
28
  <%= link_to t('spree.actions.cancel'), admin_promotion_promotion_codes_url(@promotion), class: 'button' %>
29
29
  </div>
30
30
  </fieldset>
@@ -7,6 +7,7 @@
7
7
  <% if can?(:update, @promotion) %>
8
8
  <div class="field">
9
9
  <%= label_tag :action_type, t('spree.adjustment_type')%>
10
+ <%= admin_hint t('spree.adjustment_type'), t(:promotions, scope: [:spree, :hints, "spree/calculator"]) %>
10
11
  <%= select_tag 'action_type', options, include_blank: t(:choose_promotion_action, scope: 'spree'), class: 'custom-select fullwidth' %>
11
12
  </div>
12
13
  <div class="filter-actions actions">
@@ -78,7 +78,7 @@
78
78
  <tr id="<%= spree_dom_id promotion %>">
79
79
  <td><%= promotion.name %></td>
80
80
  <td>
81
- <%= (promotion.codes.size == 1) ? promotion.codes.take.try!(:value) : t('spree.number_of_codes', count: promotion.codes.size) %>
81
+ <%= (promotion.codes.size == 1) ? promotion.codes.pluck(:value).first : t('spree.number_of_codes', count: promotion.codes.size) %>
82
82
  </td>
83
83
  <td>
84
84
  <span class="pill pill-<%= promotion.active? ? 'active' : 'inactive' %>">
@@ -13,7 +13,7 @@
13
13
  <%= render partial: 'form', locals: { f: f } %>
14
14
 
15
15
  <div class="form-buttons filter-actions actions" data-hook="buttons">
16
- <%= button_tag t('spree.actions.create'), class: 'btn btn-primary' %>
16
+ <%= f.submit t('spree.actions.create'), class: 'btn btn-primary' %>
17
17
  <%= link_to t('spree.actions.cancel'), admin_order_return_authorizations_url(@order), class: 'btn btn-primary' %>
18
18
  </div>
19
19
  </fieldset>