solidus_backend 2.10.2 → 2.11.3

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 (234) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/backend.js +4 -1
  3. data/app/assets/javascripts/spree/backend/adjustments.js +1 -1
  4. data/app/assets/javascripts/spree/backend/admin.js +18 -29
  5. data/app/assets/javascripts/spree/backend/collections/states.js +1 -1
  6. data/app/assets/javascripts/spree/backend/components/selectable_table.js +5 -0
  7. data/app/assets/javascripts/spree/backend/components/selectable_table/return_items.js +5 -0
  8. data/app/assets/javascripts/spree/backend/components/selectable_table/summary.js +7 -0
  9. data/app/assets/javascripts/spree/backend/components/sortable_table.js +31 -25
  10. data/app/assets/javascripts/spree/backend/models/order.js +3 -3
  11. data/app/assets/javascripts/spree/backend/models/payment.js +1 -1
  12. data/app/assets/javascripts/spree/backend/models/shipment.js +1 -1
  13. data/app/assets/javascripts/spree/backend/models/stock_item.js +1 -1
  14. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +2 -2
  15. data/app/assets/javascripts/spree/backend/option_value_picker.js +2 -2
  16. data/app/assets/javascripts/spree/backend/product_picker.js +2 -2
  17. data/app/assets/javascripts/spree/backend/routes.js +40 -21
  18. data/app/assets/javascripts/spree/backend/shipments.js +5 -5
  19. data/app/assets/javascripts/spree/backend/shipping_methods/stock_locations_picker.js +18 -0
  20. data/app/assets/javascripts/spree/backend/stock_management.js +4 -2
  21. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +2 -2
  22. data/app/assets/javascripts/spree/backend/taxons.js +3 -3
  23. data/app/assets/javascripts/spree/backend/templates/index.js +2 -0
  24. data/app/assets/javascripts/spree/backend/templates/orders/customer_details/autocomplete.hbs +2 -2
  25. data/app/assets/javascripts/spree/backend/templates/stock_items/stock_location_stock_item.hbs +5 -1
  26. data/app/assets/javascripts/spree/backend/templates/tables/return_item_sum_amount.hbs +7 -0
  27. data/app/assets/javascripts/spree/backend/templates/tables/selectable_label.hbs +6 -0
  28. data/app/assets/javascripts/spree/backend/user_picker.js +3 -4
  29. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +2 -2
  30. data/app/assets/javascripts/spree/backend/views/cart/empty_cart_button.js +2 -2
  31. data/app/assets/javascripts/spree/backend/views/index.js +4 -0
  32. data/app/assets/javascripts/spree/backend/views/order/address.js +1 -1
  33. data/app/assets/javascripts/spree/backend/views/order/customer_select.js +2 -3
  34. data/app/assets/javascripts/spree/backend/views/order/details_adjustments.js +4 -1
  35. data/app/assets/javascripts/spree/backend/views/stock/edit_stock_item_row.js +4 -0
  36. data/app/assets/javascripts/spree/backend/views/tables/return_items.js +9 -0
  37. data/app/assets/javascripts/spree/backend/views/tables/selectable_table.js +70 -0
  38. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/sum_return_item_amount.js +32 -0
  39. data/app/assets/javascripts/spree/backend/views/tables/selectable_table/summary.js +45 -0
  40. data/app/assets/stylesheets/spree/backend/components/_navigation.scss +4 -5
  41. data/app/assets/stylesheets/spree/backend/sections/_orders.scss +5 -1
  42. data/app/assets/stylesheets/spree/backend/sections/_style_guide.scss +4 -0
  43. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -0
  44. data/app/controllers/spree/admin/base_controller.rb +6 -0
  45. data/app/controllers/spree/admin/cancellations_controller.rb +2 -0
  46. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -4
  47. data/app/controllers/spree/admin/images_controller.rb +2 -1
  48. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -0
  49. data/app/controllers/spree/admin/orders_controller.rb +7 -2
  50. data/app/controllers/spree/admin/payments_controller.rb +3 -1
  51. data/app/controllers/spree/admin/product_properties_controller.rb +1 -1
  52. data/app/controllers/spree/admin/products_controller.rb +18 -24
  53. data/app/controllers/spree/admin/promotion_codes_controller.rb +9 -4
  54. data/app/controllers/spree/admin/refunds_controller.rb +20 -0
  55. data/app/controllers/spree/admin/resource_controller.rb +27 -7
  56. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  57. data/app/controllers/spree/admin/root_controller.rb +1 -1
  58. data/app/controllers/spree/admin/search_controller.rb +1 -2
  59. data/app/controllers/spree/admin/stock_items_controller.rb +6 -5
  60. data/app/controllers/spree/admin/stock_locations_controller.rb +4 -0
  61. data/app/controllers/spree/admin/stock_movements_controller.rb +7 -0
  62. data/app/controllers/spree/admin/taxons_controller.rb +12 -1
  63. data/app/controllers/spree/admin/users/api_key_controller.rb +29 -0
  64. data/app/controllers/spree/admin/users_controller.rb +37 -20
  65. data/app/controllers/spree/admin/variants_controller.rb +4 -2
  66. data/app/controllers/spree/admin/zones_controller.rb +1 -1
  67. data/app/helpers/spree/admin/base_helper.rb +4 -0
  68. data/app/helpers/spree/admin/customer_returns_helper.rb +1 -1
  69. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  70. data/app/helpers/spree/admin/orders_helper.rb +8 -4
  71. data/app/helpers/spree/admin/stock_movements_helper.rb +8 -4
  72. data/app/views/spree/admin/customer_returns/_return_item_selection.html.erb +2 -3
  73. data/app/views/spree/admin/images/index.html.erb +25 -21
  74. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +8 -1
  75. data/app/views/spree/admin/option_types/edit.html.erb +3 -1
  76. data/app/views/spree/admin/orders/customer_details/_form.html.erb +13 -13
  77. data/app/views/spree/admin/orders/index.html.erb +23 -13
  78. data/app/views/spree/admin/payment_methods/_form.html.erb +7 -2
  79. data/app/views/spree/admin/payments/index.html.erb +3 -1
  80. data/app/views/spree/admin/prices/_master_variant_table.html.erb +3 -3
  81. data/app/views/spree/admin/prices/_table.html.erb +3 -3
  82. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +7 -2
  83. data/app/views/spree/admin/product_properties/index.html.erb +14 -2
  84. data/app/views/spree/admin/products/_form.html.erb +13 -2
  85. data/app/views/spree/admin/products/index.html.erb +2 -2
  86. data/app/views/spree/admin/promotion_codes/index.html.erb +1 -1
  87. data/app/views/spree/admin/promotions/_actions.html.erb +1 -1
  88. data/app/views/spree/admin/promotions/_activations_new.html.erb +1 -1
  89. data/app/views/spree/admin/promotions/_rules.html.erb +1 -1
  90. data/app/views/spree/admin/promotions/edit.html.erb +2 -2
  91. data/app/views/spree/admin/promotions/index.html.erb +12 -5
  92. data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -10
  93. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  94. data/app/views/spree/admin/search/users.json.jbuilder +15 -1
  95. data/app/views/spree/admin/shared/_address.html.erb +6 -6
  96. data/app/views/spree/admin/shared/_address_form.html.erb +15 -8
  97. data/app/views/spree/admin/shared/_order_submenu.html.erb +4 -4
  98. data/app/views/spree/admin/shared/_payments_tabs.html.erb +1 -1
  99. data/app/views/spree/admin/shared/_settings_checkout_tabs.html.erb +5 -5
  100. data/app/views/spree/admin/shared/_settings_sub_menu.html.erb +6 -6
  101. data/app/views/spree/admin/shared/_shipping_tabs.html.erb +3 -3
  102. data/app/views/spree/admin/shared/_taxes_tabs.html.erb +2 -2
  103. data/app/views/spree/admin/shared/preference_fields/_encrypted_string.html.erb +12 -0
  104. data/app/views/spree/admin/shipping_methods/_form.html.erb +18 -0
  105. data/app/views/spree/admin/stock_items/_stock_management.html.erb +1 -1
  106. data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
  107. data/app/views/spree/admin/stock_locations/index.html.erb +3 -1
  108. data/app/views/spree/admin/stock_movements/index.html.erb +30 -1
  109. data/app/views/spree/admin/store_credits/index.html.erb +1 -1
  110. data/app/views/spree/admin/stores/_form.html.erb +6 -0
  111. data/app/views/spree/admin/style_guide/topics/tables/_building_tables.html.erb +27 -3
  112. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -0
  113. data/app/views/spree/admin/users/_form.html.erb +2 -2
  114. data/app/views/spree/admin/users/_tabs.html.erb +1 -1
  115. data/app/views/spree/admin/users/edit.html.erb +4 -4
  116. data/app/views/spree/admin/users/items.html.erb +5 -3
  117. data/app/views/spree/admin/users/orders.html.erb +5 -3
  118. data/app/views/spree/admin/variants/_table_filter.html.erb +1 -1
  119. data/app/views/spree/admin/variants/index.html.erb +2 -2
  120. data/config/initializers/form_builder.rb +2 -2
  121. data/lib/spree/backend/engine.rb +0 -2
  122. data/lib/spree/backend_configuration.rb +14 -1
  123. data/solidus_backend.gemspec +4 -4
  124. metadata +24 -123
  125. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +0 -35
  126. data/script/rails +0 -10
  127. data/spec/controllers/spree/admin/base_controller_spec.rb +0 -26
  128. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +0 -83
  129. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +0 -235
  130. data/spec/controllers/spree/admin/locale_controller_spec.rb +0 -45
  131. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +0 -18
  132. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +0 -128
  133. data/spec/controllers/spree/admin/orders_controller_spec.rb +0 -408
  134. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +0 -95
  135. data/spec/controllers/spree/admin/payments_controller_spec.rb +0 -194
  136. data/spec/controllers/spree/admin/prices_controller_spec.rb +0 -45
  137. data/spec/controllers/spree/admin/product_properties_controller_spec.rb +0 -71
  138. data/spec/controllers/spree/admin/products_controller_spec.rb +0 -270
  139. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +0 -23
  140. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +0 -32
  141. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +0 -36
  142. data/spec/controllers/spree/admin/promotions_controller_spec.rb +0 -122
  143. data/spec/controllers/spree/admin/refunds_controller_spec.rb +0 -35
  144. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +0 -137
  145. data/spec/controllers/spree/admin/resource_controller_spec.rb +0 -201
  146. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +0 -291
  147. data/spec/controllers/spree/admin/return_items_controller_spec.rb +0 -29
  148. data/spec/controllers/spree/admin/root_controller_spec.rb +0 -43
  149. data/spec/controllers/spree/admin/search_controller_spec.rb +0 -106
  150. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +0 -16
  151. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +0 -52
  152. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +0 -44
  153. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +0 -311
  154. data/spec/controllers/spree/admin/users_controller_spec.rb +0 -287
  155. data/spec/controllers/spree/admin/variants_controller_spec.rb +0 -71
  156. data/spec/features/admin/configuration/payment_methods_spec.rb +0 -176
  157. data/spec/features/admin/configuration/shipping_methods_spec.rb +0 -126
  158. data/spec/features/admin/configuration/stock_locations_spec.rb +0 -54
  159. data/spec/features/admin/configuration/store_spec.rb +0 -62
  160. data/spec/features/admin/configuration/tax_categories_spec.rb +0 -58
  161. data/spec/features/admin/configuration/tax_rates_spec.rb +0 -31
  162. data/spec/features/admin/configuration/taxonomies_spec.rb +0 -61
  163. data/spec/features/admin/configuration/zones_spec.rb +0 -41
  164. data/spec/features/admin/homepage_spec.rb +0 -86
  165. data/spec/features/admin/javascript_format_money_spec.rb +0 -22
  166. data/spec/features/admin/locale_spec.rb +0 -34
  167. data/spec/features/admin/orders/adjustments_promotions_spec.rb +0 -55
  168. data/spec/features/admin/orders/adjustments_spec.rb +0 -130
  169. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +0 -45
  170. data/spec/features/admin/orders/cancelling_inventory_spec.rb +0 -50
  171. data/spec/features/admin/orders/customer_details_spec.rb +0 -203
  172. data/spec/features/admin/orders/customer_returns_spec.rb +0 -41
  173. data/spec/features/admin/orders/line_items_spec.rb +0 -52
  174. data/spec/features/admin/orders/listing_spec.rb +0 -186
  175. data/spec/features/admin/orders/log_entries_spec.rb +0 -56
  176. data/spec/features/admin/orders/new_order_spec.rb +0 -379
  177. data/spec/features/admin/orders/new_refund_spec.rb +0 -35
  178. data/spec/features/admin/orders/order_details_spec.rb +0 -591
  179. data/spec/features/admin/orders/payments_spec.rb +0 -330
  180. data/spec/features/admin/orders/return_authorizations_spec.rb +0 -56
  181. data/spec/features/admin/orders/return_payment_state_spec.rb +0 -65
  182. data/spec/features/admin/orders/risk_analysis_spec.rb +0 -49
  183. data/spec/features/admin/orders/shipments_spec.rb +0 -145
  184. data/spec/features/admin/payments/store_credits_spec.rb +0 -23
  185. data/spec/features/admin/products/edit/images_spec.rb +0 -76
  186. data/spec/features/admin/products/edit/products_spec.rb +0 -92
  187. data/spec/features/admin/products/edit/taxons_spec.rb +0 -57
  188. data/spec/features/admin/products/edit/variants_spec.rb +0 -63
  189. data/spec/features/admin/products/option_types_spec.rb +0 -116
  190. data/spec/features/admin/products/pricing_spec.rb +0 -127
  191. data/spec/features/admin/products/products_spec.rb +0 -348
  192. data/spec/features/admin/products/properties_spec.rb +0 -141
  193. data/spec/features/admin/products/stock_management_spec.rb +0 -101
  194. data/spec/features/admin/products/variant_spec.rb +0 -89
  195. data/spec/features/admin/promotion_adjustments_spec.rb +0 -286
  196. data/spec/features/admin/promotions/option_value_rule_spec.rb +0 -90
  197. data/spec/features/admin/promotions/product_rule_spec.rb +0 -35
  198. data/spec/features/admin/promotions/promotion_categories_spec.rb +0 -83
  199. data/spec/features/admin/promotions/promotion_code_batches_spec.rb +0 -37
  200. data/spec/features/admin/promotions/promotion_code_spec.rb +0 -31
  201. data/spec/features/admin/promotions/promotion_spec.rb +0 -52
  202. data/spec/features/admin/promotions/tiered_calculator_spec.rb +0 -76
  203. data/spec/features/admin/promotions/user_rule_spec.rb +0 -42
  204. data/spec/features/admin/reimbursements_spec.rb +0 -18
  205. data/spec/features/admin/store_credits_spec.rb +0 -132
  206. data/spec/features/admin/stores_spec.rb +0 -37
  207. data/spec/features/admin/style_guide_spec.rb +0 -14
  208. data/spec/features/admin/taxons_spec.rb +0 -90
  209. data/spec/features/admin/users_spec.rb +0 -412
  210. data/spec/fixtures/files/ror_ringer.jpeg +0 -0
  211. data/spec/helpers/admin/base_helper_spec.rb +0 -49
  212. data/spec/helpers/admin/navigation_helper_spec.rb +0 -139
  213. data/spec/helpers/admin/stock_movements_helper_spec.rb +0 -29
  214. data/spec/helpers/admin/store_credit_events_helper_spec.rb +0 -97
  215. data/spec/helpers/promotion_rules_helper_spec.rb +0 -14
  216. data/spec/javascripts/fixtures/_boot.html.erb +0 -8
  217. data/spec/javascripts/fixtures/number_with_currency/with_currency_select.html.erb +0 -3
  218. data/spec/javascripts/fixtures/number_with_currency/without_select.html.erb +0 -3
  219. data/spec/javascripts/format_money_spec.js +0 -48
  220. data/spec/javascripts/spec_helper.js +0 -13
  221. data/spec/javascripts/support/show_errors.js +0 -8
  222. data/spec/javascripts/support/with_translations.js +0 -11
  223. data/spec/javascripts/translation_spec.js +0 -58
  224. data/spec/javascripts/views/number_with_currency_spec.js +0 -72
  225. data/spec/lib/spree/backend_configuration/menu_item_spec.rb +0 -17
  226. data/spec/lib/spree/backend_configuration_spec.rb +0 -22
  227. data/spec/spec_helper.rb +0 -123
  228. data/spec/support/appear_before_matcher.rb +0 -10
  229. data/spec/support/feature/base_feature_helper.rb +0 -17
  230. data/spec/support/feature/order_feature_helper.rb +0 -27
  231. data/spec/teaspoon_env.rb +0 -51
  232. data/spec/test_views/spree/admin/widgets/edit.html.erb +0 -1
  233. data/spec/test_views/spree/admin/widgets/new.html.erb +0 -1
  234. data/spec/views/spree/admin/shared/navigation_footer_spec.rb +0 -67
@@ -3,6 +3,7 @@ input[type="password"],
3
3
  input[type="email"],
4
4
  input[type="date"],
5
5
  input[type="datetime"],
6
+ input[type="datetime-local"],
6
7
  input[type="time"],
7
8
  input[type="url"],
8
9
  input[type="number"],
@@ -62,6 +62,12 @@ module Spree
62
62
  def order_mutex_redirect_path
63
63
  edit_admin_order_path(@order)
64
64
  end
65
+
66
+ def resource_not_found(flash_class:, redirect_url:)
67
+ flash[:error] = flash_message_for(flash_class.new, :not_found)
68
+ redirect_to redirect_url
69
+ nil
70
+ end
65
71
  end
66
72
  end
67
73
  end
@@ -36,6 +36,8 @@ module Spree
36
36
  def load_order
37
37
  @order = Spree::Order.find_by!(number: params[:order_id])
38
38
  authorize! action, @order
39
+ rescue ActiveRecord::RecordNotFound
40
+ resource_not_found(flash_class: Spree::Order, redirect_url: admin_orders_path)
39
41
  end
40
42
 
41
43
  def model_class
@@ -37,13 +37,15 @@ module Spree
37
37
  end
38
38
 
39
39
  def find_resource
40
- Spree::CustomerReturn.accessible_by(current_ability, :read).find(params[:id])
40
+ Spree::CustomerReturn.accessible_by(current_ability, :show).find(params[:id])
41
41
  end
42
42
 
43
43
  def collection
44
44
  parent # trigger loading the order
45
+ return unless @order
46
+
45
47
  @collection ||= Spree::ReturnItem
46
- .accessible_by(current_ability, :read)
48
+ .accessible_by(current_ability)
47
49
  .where(inventory_unit_id: @order.inventory_units.pluck(:id))
48
50
  .map(&:customer_return).uniq.compact
49
51
  @customer_returns = @collection
@@ -70,8 +72,6 @@ module Spree
70
72
  return_item = item_params[:id] ? Spree::ReturnItem.find(item_params[:id]) : Spree::ReturnItem.new
71
73
  return_item.assign_attributes(item_params)
72
74
 
73
- return_item.skip_customer_return_processing = true
74
-
75
75
  if item_params[:reception_status_event].blank?
76
76
  return redirect_to(new_object_url, flash: { error: 'Reception status choice required' })
77
77
  end
@@ -4,7 +4,6 @@ module Spree
4
4
  module Admin
5
5
  class ImagesController < ResourceController
6
6
  before_action :load_data
7
-
8
7
  create.before :set_viewable
9
8
  update.before :set_viewable
10
9
 
@@ -24,6 +23,8 @@ module Spree
24
23
  [variant.sku_and_options_text, variant.id]
25
24
  end
26
25
  @variants.insert(0, [t('spree.all'), @product.master.id])
26
+ rescue ActiveRecord::RecordNotFound
27
+ resource_not_found(flash_class: Spree::Product, redirect_url: admin_products_path)
27
28
  end
28
29
 
29
30
  def set_viewable
@@ -61,6 +61,8 @@ module Spree
61
61
 
62
62
  def load_order
63
63
  @order = Spree::Order.includes(:adjustments).find_by!(number: params[:order_id])
64
+ rescue ActiveRecord::RecordNotFound
65
+ resource_not_found(flash_class: Spree::Order, redirect_url: admin_orders_path)
64
66
  end
65
67
 
66
68
  def model_class
@@ -10,7 +10,6 @@ module Spree
10
10
  around_action :lock_order, only: [:update, :advance, :complete, :confirm, :cancel, :resume, :approve, :resend]
11
11
 
12
12
  rescue_from Spree::Order::InsufficientStock, with: :insufficient_stock_error
13
-
14
13
  respond_to :html
15
14
 
16
15
  def index
@@ -61,7 +60,11 @@ module Spree
61
60
 
62
61
  def new
63
62
  user = Spree.user_class.find_by(id: params[:user_id]) if params[:user_id]
64
- @order = Spree::Core::Importer::Order.import(user, order_params)
63
+ order_importer_params = order_params
64
+ order_importer_params[:bill_address] = user&.bill_address
65
+ order_importer_params[:ship_address] = user&.ship_address
66
+
67
+ @order = Spree::Core::Importer::Order.import(user, order_importer_params)
65
68
  redirect_to cart_admin_order_url(@order)
66
69
  end
67
70
 
@@ -164,6 +167,8 @@ module Spree
164
167
  def load_order
165
168
  @order = Spree::Order.includes(:adjustments).find_by!(number: params[:id])
166
169
  authorize! action, @order
170
+ rescue ActiveRecord::RecordNotFound
171
+ resource_not_found(flash_class: Spree::Order, redirect_url: admin_orders_path)
167
172
  end
168
173
 
169
174
  # Used for extensions which need to provide their own custom event links on the order details view.
@@ -80,7 +80,7 @@ module Spree
80
80
 
81
81
  def load_data
82
82
  @amount = params[:amount] || load_order.total
83
- @payment_methods = Spree::PaymentMethod.active.available_to_admin
83
+ @payment_methods = Spree::PaymentMethod.active.available_to_admin.ordered_by_position
84
84
  if @payment && @payment.payment_method
85
85
  @payment_method = @payment.payment_method
86
86
  else
@@ -92,6 +92,8 @@ module Spree
92
92
  @order = Spree::Order.find_by!(number: params[:order_id])
93
93
  authorize! action, @order
94
94
  @order
95
+ rescue ActiveRecord::RecordNotFound
96
+ resource_not_found(flash_class: Spree::Order, redirect_url: admin_orders_path)
95
97
  end
96
98
 
97
99
  def load_payment
@@ -15,7 +15,7 @@ module Spree
15
15
  end
16
16
 
17
17
  def setup_property
18
- @product.product_properties.build
18
+ @product.product_properties.build if @product.product_properties.empty?
19
19
  end
20
20
 
21
21
  def setup_variant_property_rules
@@ -9,6 +9,7 @@ module Spree
9
9
  update.before :update_before
10
10
  helper_method :clone_object_url
11
11
  before_action :split_params, only: [:create, :update]
12
+ before_action :normalize_variant_property_rules, only: [:update]
12
13
 
13
14
  def show
14
15
  redirect_to action: :edit
@@ -19,29 +20,6 @@ module Spree
19
20
  respond_with(@collection)
20
21
  end
21
22
 
22
- def update
23
- if updating_variant_property_rules?
24
- params[:product][:variant_property_rules_attributes].each do |_index, param_attrs|
25
- param_attrs[:option_value_ids] = param_attrs[:option_value_ids].split(',')
26
- end
27
- end
28
- invoke_callbacks(:update, :before)
29
- if @object.update(permitted_resource_params)
30
- invoke_callbacks(:update, :after)
31
- flash[:success] = flash_message_for(@object, :successfully_updated)
32
- respond_with(@object) do |format|
33
- format.html { redirect_to location_after_save }
34
- format.js { render layout: false }
35
- end
36
- else
37
- # Stops people submitting blank slugs, causing errors when they try to
38
- # update the product again
39
- @product.slug = @product.slug_was if @product.slug.blank?
40
- invoke_callbacks(:update, :fails)
41
- respond_with(@object)
42
- end
43
- end
44
-
45
23
  def destroy
46
24
  @product = Spree::Product.friendly.find(params[:id])
47
25
  @product.discard
@@ -78,7 +56,7 @@ module Spree
78
56
  end
79
57
 
80
58
  def find_resource
81
- Spree::Product.with_deleted.friendly.find(params[:id])
59
+ Spree::Product.with_discarded.friendly.find(params[:id])
82
60
  end
83
61
 
84
62
  def location_after_save
@@ -96,6 +74,7 @@ module Spree
96
74
 
97
75
  def load_data
98
76
  @tax_categories = Spree::TaxCategory.order(:name)
77
+ @default_tax_category = @tax_categories.detect(&:is_default)
99
78
  @shipping_categories = Spree::ShippingCategory.order(:name)
100
79
  end
101
80
 
@@ -138,6 +117,21 @@ module Spree
138
117
  def updating_variant_property_rules?
139
118
  params[:product][:variant_property_rules_attributes].present?
140
119
  end
120
+
121
+ def render_after_update_error
122
+ # Stops people submitting blank slugs, causing errors when they try to
123
+ # update the product again
124
+ @product.slug = @product.slug_was if @product.slug.blank?
125
+ render action: 'edit'
126
+ end
127
+
128
+ def normalize_variant_property_rules
129
+ return unless updating_variant_property_rules?
130
+
131
+ params[:product][:variant_property_rules_attributes].each do |_index, param_attrs|
132
+ param_attrs[:option_value_ids] = param_attrs[:option_value_ids].split(',')
133
+ end
134
+ end
141
135
  end
142
136
  end
143
137
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  module Admin
7
7
  class PromotionCodesController < Spree::Admin::ResourceController
8
8
  def index
9
- @promotion = Spree::Promotion.accessible_by(current_ability, :read).find(params[:promotion_id])
9
+ @promotion = Spree::Promotion.accessible_by(current_ability, :show).find(params[:promotion_id])
10
10
  @promotion_codes = @promotion.promotion_codes.order(:value)
11
11
 
12
12
  respond_to do |format|
@@ -22,12 +22,17 @@ module Spree
22
22
  end
23
23
 
24
24
  def new
25
- @promotion = Spree::Promotion.accessible_by(current_ability, :read).find(params[:promotion_id])
26
- @promotion_code = @promotion.promotion_codes.build
25
+ @promotion = Spree::Promotion.accessible_by(current_ability, :show).find(params[:promotion_id])
26
+ if @promotion.apply_automatically
27
+ flash[:error] = t('activerecord.errors.models.spree/promotion_code.attributes.base.disallowed_with_apply_automatically')
28
+ redirect_to admin_promotion_promotion_codes_url(@promotion)
29
+ else
30
+ @promotion_code = @promotion.promotion_codes.build
31
+ end
27
32
  end
28
33
 
29
34
  def create
30
- @promotion = Spree::Promotion.accessible_by(current_ability, :read).find(params[:promotion_id])
35
+ @promotion = Spree::Promotion.accessible_by(current_ability, :show).find(params[:promotion_id])
31
36
  @promotion_code = @promotion.promotion_codes.build(value: params[:promotion_code][:value])
32
37
 
33
38
  if @promotion_code.save
@@ -10,6 +10,22 @@ module Spree
10
10
 
11
11
  rescue_from Spree::Core::GatewayError, with: :spree_core_gateway_error
12
12
 
13
+ def create
14
+ @refund.attributes = refund_params
15
+
16
+ if @refund.valid? && @refund.perform!
17
+ flash[:success] = flash_message_for(@refund, :successfully_created)
18
+ respond_with(@refund) do |format|
19
+ format.html { redirect_to location_after_save }
20
+ end
21
+ else
22
+ flash.now[:error] = @refund.errors.full_messages.join(", ")
23
+ respond_with(@refund) do |format|
24
+ format.html { render action: 'new' }
25
+ end
26
+ end
27
+ end
28
+
13
29
  private
14
30
 
15
31
  def location_after_save
@@ -25,6 +41,10 @@ module Spree
25
41
  @refund_reasons ||= Spree::RefundReason.active.all
26
42
  end
27
43
 
44
+ def refund_params
45
+ params.require(:refund).permit!
46
+ end
47
+
28
48
  def build_resource
29
49
  super.tap do |refund|
30
50
  refund.amount = refund.payment.credit_allowed
@@ -5,7 +5,10 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
5
5
 
6
6
  helper_method :new_object_url, :edit_object_url, :object_url, :collection_url
7
7
  before_action :load_resource, except: :update_positions
8
- rescue_from ActiveRecord::RecordNotFound, with: :resource_not_found
8
+ rescue_from ActiveRecord::RecordNotFound do |exception|
9
+ resource_not_found(flash_class: exception.model.constantize)
10
+ end
11
+ rescue_from ActiveRecord::RecordInvalid, with: :resource_invalid
9
12
 
10
13
  respond_to :html
11
14
 
@@ -76,7 +79,7 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
76
79
  def update_positions
77
80
  ActiveRecord::Base.transaction do
78
81
  params[:positions].each do |id, index|
79
- model_class.find(id).set_list_position(index)
82
+ model_class.find_by(id: id)&.set_list_position(index)
80
83
  end
81
84
  end
82
85
 
@@ -133,9 +136,8 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
133
136
  end
134
137
  end
135
138
 
136
- def resource_not_found
137
- flash[:error] = flash_message_for(model_class.new, :not_found)
138
- redirect_to collection_url
139
+ def resource_not_found(flash_class: model_class, redirect_url: collection_url)
140
+ super
139
141
  end
140
142
 
141
143
  def model_class
@@ -192,12 +194,14 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
192
194
  if parent?
193
195
  @parent ||= self.class.parent_data[:model_class]
194
196
  .includes(self.class.parent_data[:includes])
195
- .find_by(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"])
197
+ .find_by!(self.class.parent_data[:find_by] => params["#{parent_model_name}_id"])
196
198
  instance_variable_set("@#{parent_model_name}", @parent)
197
199
  else
198
200
  Spree::Deprecation.warn "Calling #parent is deprecated on a ResourceController which has not defined a belongs_to"
199
201
  nil
200
202
  end
203
+ rescue ActiveRecord::RecordNotFound => e
204
+ resource_not_found(flash_class: e.model.constantize, redirect_url: spree.polymorphic_url([:admin, parent_model_name.pluralize]))
201
205
  end
202
206
 
203
207
  def parent?
@@ -221,7 +225,8 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
221
225
  end
222
226
 
223
227
  def collection
224
- return parent.send(controller_name) if parent?
228
+ return parent.send(controller_name) if parent? && parent
229
+
225
230
  if model_class.respond_to?(:accessible_by) && !current_ability.has_block?(params[:action], model_class)
226
231
  model_class.accessible_by(current_ability, action)
227
232
  else
@@ -299,4 +304,19 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
299
304
  def render_after_update_error
300
305
  render action: 'edit'
301
306
  end
307
+
308
+ def resource_invalid(exception)
309
+ invoke_callbacks(action, :fails)
310
+ respond_with(@object) do |format|
311
+ format.html do
312
+ flash.now[:error] = exception.message
313
+ if @object.new_record?
314
+ render_after_create_error
315
+ else
316
+ render_after_update_error
317
+ end
318
+ end
319
+ format.js { render layout: false }
320
+ end
321
+ end
302
322
  end
@@ -47,7 +47,7 @@ module Spree
47
47
  end
48
48
 
49
49
  def load_reimbursement_types
50
- @reimbursement_types = Spree::ReimbursementType.accessible_by(current_ability, :read).active
50
+ @reimbursement_types = Spree::ReimbursementType.accessible_by(current_ability).active
51
51
  end
52
52
 
53
53
  def load_return_reasons
@@ -12,7 +12,7 @@ module Spree
12
12
  private
13
13
 
14
14
  def admin_root_redirect_path
15
- if can?(:display, Spree::Order) && can?(:admin, Spree::Order)
15
+ if can?(:show, Spree::Order) && can?(:admin, Spree::Order)
16
16
  spree.admin_orders_path
17
17
  elsif can?(:admin, :dashboards) && can?(:home, :dashboards)
18
18
  spree.home_admin_dashboards_path
@@ -16,8 +16,7 @@ module Spree
16
16
  @users = Spree.user_class.ransack({
17
17
  m: 'or',
18
18
  email_start: params[:q],
19
- addresses_firstname_start: params[:q],
20
- addresses_lastname_start: params[:q]
19
+ firstname_or_lastname_start: params[:q]
21
20
  }).result.limit(10)
22
21
  end
23
22
  end
@@ -15,8 +15,8 @@ module Spree
15
15
  private
16
16
 
17
17
  def build_resource
18
- variant = Spree::Variant.accessible_by(current_ability, :read).find(params[:variant_id])
19
- stock_location = Spree::StockLocation.accessible_by(current_ability, :read).find(params[:stock_location_id])
18
+ variant = Spree::Variant.accessible_by(current_ability, :show).find(params[:variant_id])
19
+ stock_location = Spree::StockLocation.accessible_by(current_ability, :show).find(params[:stock_location_id])
20
20
  stock_location.stock_movements.build(stock_movement_params).tap do |stock_movement|
21
21
  stock_movement.originator = try_spree_current_user
22
22
  stock_movement.stock_item = stock_location.set_up_stock_item(variant)
@@ -36,11 +36,11 @@ module Spree
36
36
  end
37
37
 
38
38
  def load_product
39
- @product = Spree::Product.accessible_by(current_ability, :read).friendly.find(params[:product_slug]) if params[:product_slug]
39
+ @product = Spree::Product.accessible_by(current_ability, :show).friendly.find(params[:product_slug]) if params[:product_slug]
40
40
  end
41
41
 
42
42
  def load_stock_management_data
43
- @stock_locations = Spree::StockLocation.accessible_by(current_ability, :read)
43
+ @stock_locations = Spree::StockLocation.accessible_by(current_ability)
44
44
  @stock_item_stock_locations = params[:stock_location_id].present? ? @stock_locations.where(id: params[:stock_location_id]) : @stock_locations
45
45
  @variant_display_attributes = self.class.variant_display_attributes
46
46
  @variants = Spree::Config.variant_search_class.new(params[:variant_search_term], scope: variant_scope).results
@@ -50,8 +50,9 @@ module Spree
50
50
  end
51
51
 
52
52
  def variant_scope
53
- scope = Spree::Variant.accessible_by(current_ability, :read)
53
+ scope = Spree::Variant.accessible_by(current_ability)
54
54
  scope = scope.where(product: @product) if @product
55
+ scope = scope.order(:sku)
55
56
  scope
56
57
  end
57
58
 
@@ -13,6 +13,10 @@ module Spree
13
13
  flash[:error] = t('spree.stock_locations_need_a_default_country')
14
14
  redirect_to(admin_stock_locations_path) && return
15
15
  end
16
+
17
+ def collection
18
+ super.page(params[:page]).per(Spree::Config[:admin_products_per_page])
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -6,6 +6,13 @@ module Spree
6
6
  belongs_to 'spree/stock_location'
7
7
  before_action :parent
8
8
 
9
+ def index
10
+ params[:q] ||= {}
11
+
12
+ @search = collection.ransack(params[:q])
13
+ @stock_movements = @search.result.page(params[:page])
14
+ end
15
+
9
16
  private
10
17
 
11
18
  def permitted_resource_params