spree_backend 3.0.10 → 3.1.0.rc1
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spree/backend.js +22 -19
- data/app/assets/javascripts/spree/backend/admin.js +10 -17
- data/app/assets/javascripts/spree/backend/handlebar_extensions.js +0 -2
- data/app/assets/javascripts/spree/backend/product_picker.js +1 -2
- data/app/assets/javascripts/spree/backend/spree-select2.js +0 -1
- data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +1 -0
- data/app/assets/javascripts/spree/backend/taxons.js.coffee +6 -1
- data/app/assets/stylesheets/spree/backend/components/_labels.scss +1 -0
- data/app/assets/stylesheets/spree/backend/components/_page_header.scss +15 -0
- data/app/assets/stylesheets/spree/backend/shared/_base.scss +9 -1
- data/app/assets/stylesheets/spree/backend/shared/_forms.scss +5 -1
- data/app/controllers/spree/admin/adjustments_controller.rb +2 -2
- data/app/controllers/spree/admin/customer_returns_controller.rb +5 -4
- data/app/controllers/spree/admin/option_types_controller.rb +1 -1
- data/app/controllers/spree/admin/option_values_controller.rb +1 -1
- data/app/controllers/spree/admin/orders/customer_details_controller.rb +37 -20
- data/app/controllers/spree/admin/orders_controller.rb +6 -6
- data/app/controllers/spree/admin/payment_methods_controller.rb +3 -3
- data/app/controllers/spree/admin/payments_controller.rb +2 -2
- data/app/controllers/spree/admin/products_controller.rb +11 -2
- data/app/controllers/spree/admin/promotions_controller.rb +0 -2
- data/app/controllers/spree/admin/properties_controller.rb +0 -2
- data/app/controllers/spree/admin/resource_controller.rb +6 -7
- data/app/controllers/spree/admin/return_index_controller.rb +28 -0
- data/app/controllers/spree/admin/stock_transfers_controller.rb +2 -4
- data/app/controllers/spree/admin/store_credit_categories_controller.rb +6 -0
- data/app/controllers/spree/admin/store_credits_controller.rb +94 -0
- data/app/controllers/spree/admin/taxons_controller.rb +14 -12
- data/app/controllers/spree/admin/users_controller.rb +4 -25
- data/app/controllers/spree/admin/variants_controller.rb +7 -4
- data/app/helpers/spree/admin/base_helper.rb +9 -0
- data/app/helpers/spree/admin/navigation_helper.rb +19 -8
- data/app/helpers/spree/admin/orders_helper.rb +11 -7
- data/app/views/spree/admin/countries/edit.html.erb +4 -0
- data/app/views/spree/admin/countries/new.html.erb +1 -1
- data/app/views/spree/admin/general_settings/edit.html.erb +19 -18
- data/app/views/spree/admin/option_types/edit.html.erb +2 -0
- data/app/views/spree/admin/option_types/new.html.erb +4 -0
- data/app/views/spree/admin/orders/_add_line_item.html.erb +3 -3
- data/app/views/spree/admin/orders/_add_product.html.erb +3 -3
- data/app/views/spree/admin/orders/_form.html.erb +22 -22
- data/app/views/spree/admin/orders/_line_items.html.erb +5 -5
- data/app/views/spree/admin/orders/_line_items_edit_form.html.erb +19 -19
- data/app/views/spree/admin/orders/_order_actions.html.erb +12 -0
- data/app/views/spree/admin/orders/_risk_analysis.html.erb +2 -2
- data/app/views/spree/admin/orders/cart.html.erb +7 -11
- data/app/views/spree/admin/orders/customer_details/_form.html.erb +4 -4
- data/app/views/spree/admin/orders/customer_details/edit.html.erb +3 -3
- data/app/views/spree/admin/orders/edit.html.erb +6 -10
- data/app/views/spree/admin/orders/index.html.erb +7 -5
- data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
- data/app/views/spree/admin/payment_methods/edit.html.erb +4 -0
- data/app/views/spree/admin/payment_methods/index.html.erb +8 -2
- data/app/views/spree/admin/payment_methods/new.html.erb +4 -0
- data/app/views/spree/admin/payments/index.html.erb +1 -1
- data/app/views/spree/admin/payments/source_forms/_storecredit.html.erb +9 -0
- data/app/views/spree/admin/payments/source_views/_storecredit.html.erb +29 -0
- data/app/views/spree/admin/products/_form.html.erb +12 -3
- data/app/views/spree/admin/products/edit.html.erb +1 -0
- data/app/views/spree/admin/products/index.html.erb +10 -0
- data/app/views/spree/admin/products/new.html.erb +4 -0
- data/app/views/spree/admin/promotion_categories/edit.html.erb +4 -0
- data/app/views/spree/admin/promotion_categories/new.html.erb +4 -0
- data/app/views/spree/admin/promotions/edit.html.erb +4 -0
- data/app/views/spree/admin/promotions/new.html.erb +4 -0
- data/app/views/spree/admin/properties/edit.html.erb +4 -0
- data/app/views/spree/admin/properties/new.html.erb +4 -0
- data/app/views/spree/admin/prototypes/edit.html.erb +4 -0
- data/app/views/spree/admin/prototypes/new.html.erb +4 -0
- data/app/views/spree/admin/refund_reasons/destroy.js.erb +1 -0
- data/app/views/spree/admin/reports/sales_total.html.erb +1 -1
- data/app/views/spree/admin/return_authorization_reasons/destroy.js.erb +1 -0
- data/app/views/spree/admin/return_index/customer_returns.html.erb +64 -0
- data/app/views/spree/admin/return_index/return_authorizations.html.erb +76 -0
- data/app/views/spree/admin/roles/edit.html.erb +4 -0
- data/app/views/spree/admin/roles/new.html.erb +4 -0
- data/app/views/spree/admin/shared/_destroy.js.erb +6 -3
- data/app/views/spree/admin/shared/_error_messages.html.erb +1 -1
- data/app/views/spree/admin/shared/_index_table_options.html.erb +7 -1
- data/app/views/spree/admin/shared/_main_menu.html.erb +6 -0
- data/app/views/spree/admin/shared/_order_tabs.html.erb +1 -1
- data/app/views/spree/admin/shared/named_types/_index.html.erb +2 -1
- data/app/views/spree/admin/shared/sub_menu/_configuration.html.erb +1 -0
- data/app/views/spree/admin/shared/sub_menu/_returns.html.erb +4 -0
- data/app/views/spree/admin/shipping_categories/edit.html.erb +4 -0
- data/app/views/spree/admin/shipping_categories/new.html.erb +4 -0
- data/app/views/spree/admin/state_changes/index.html.erb +2 -2
- data/app/views/spree/admin/states/edit.html.erb +4 -0
- data/app/views/spree/admin/states/new.html.erb +4 -0
- data/app/views/spree/admin/stock_locations/edit.html.erb +1 -1
- data/app/views/spree/admin/stock_movements/_form.html.erb +3 -3
- data/app/views/spree/admin/stock_movements/edit.html.erb +2 -1
- data/app/views/spree/admin/stock_movements/index.html.erb +2 -2
- data/app/views/spree/admin/stock_movements/new.html.erb +4 -4
- data/app/views/spree/admin/store_credit_categories/_form.html.erb +8 -0
- data/app/views/spree/admin/store_credit_categories/edit.html.erb +10 -0
- data/app/views/spree/admin/store_credit_categories/index.html.erb +34 -0
- data/app/views/spree/admin/store_credit_categories/new.html.erb +10 -0
- data/app/views/spree/admin/store_credits/_form.html.erb +18 -0
- data/app/views/spree/admin/store_credits/edit.html.erb +12 -0
- data/app/views/spree/admin/store_credits/index.html.erb +46 -0
- data/app/views/spree/admin/store_credits/new.html.erb +12 -0
- data/app/views/spree/admin/tax_categories/edit.html.erb +1 -1
- data/app/views/spree/admin/tax_categories/new.html.erb +1 -1
- data/app/views/spree/admin/tax_rates/edit.html.erb +4 -0
- data/app/views/spree/admin/tax_rates/index.html.erb +1 -1
- data/app/views/spree/admin/tax_rates/new.html.erb +4 -0
- data/app/views/spree/admin/taxonomies/edit.erb +5 -1
- data/app/views/spree/admin/taxonomies/new.html.erb +4 -0
- data/app/views/spree/admin/taxons/_form.html.erb +1 -1
- data/app/views/spree/admin/users/_form.html.erb +5 -6
- data/app/views/spree/admin/users/_lifetime_stats.html.erb +6 -2
- data/app/views/spree/admin/users/_sidebar.html.erb +3 -0
- data/app/views/spree/admin/users/_user_page_actions.html.erb +1 -1
- data/app/views/spree/admin/users/items.html.erb +1 -1
- data/app/views/spree/admin/users/new.html.erb +4 -0
- data/app/views/spree/admin/users/orders.html.erb +1 -1
- data/app/views/spree/admin/variants/_form.html.erb +8 -1
- data/app/views/spree/admin/variants/index.html.erb +4 -2
- data/app/views/spree/admin/zones/index.html.erb +1 -1
- data/config/routes.rb +19 -9
- data/lib/spree/backend/callbacks.rb +4 -8
- data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +164 -9
- data/spec/controllers/spree/admin/orders_controller_spec.rb +16 -9
- data/spec/controllers/spree/admin/payments_controller_spec.rb +10 -10
- data/spec/controllers/spree/admin/products_controller_spec.rb +61 -12
- data/spec/controllers/spree/admin/return_index_controller_spec.rb +37 -0
- data/spec/controllers/spree/admin/users_controller_spec.rb +3 -3
- data/spec/features/admin/configuration/analytics_tracker_spec.rb +3 -2
- data/spec/features/admin/configuration/countries_spec.rb +1 -1
- data/spec/features/admin/configuration/general_settings_spec.rb +1 -0
- data/spec/features/admin/configuration/payment_methods_spec.rb +4 -4
- data/spec/features/admin/configuration/store_credit_categories_spec.rb +50 -0
- data/spec/features/admin/homepage_spec.rb +19 -11
- data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +2 -2
- data/spec/features/admin/orders/customer_details_spec.rb +8 -21
- data/spec/features/admin/orders/line_items_spec.rb +2 -2
- data/spec/features/admin/orders/listing_spec.rb +3 -6
- data/spec/features/admin/orders/new_order_spec.rb +13 -14
- data/spec/features/admin/orders/payments_spec.rb +1 -1
- data/spec/features/admin/products/products_spec.rb +2 -2
- data/spec/features/admin/products/stock_management_spec.rb +5 -4
- data/spec/features/admin/refund_reasons/refund_reasons_spec.rb +57 -0
- data/spec/features/admin/reports_spec.rb +2 -2
- data/spec/features/admin/return_authorization_reasons/return_authorization_reasons_spec.rb +63 -0
- data/spec/features/admin/returns/customer_returns_spec.rb +80 -0
- data/spec/features/admin/returns/return_authorizations_spec.rb +152 -0
- data/spec/features/admin/store_credits_spec.rb +93 -0
- data/spec/features/admin/users_spec.rb +8 -6
- data/spec/helpers/admin/base_helper_spec.rb +6 -0
- data/spec/routing/admin_path_spec.rb +22 -0
- data/spec/spec_helper.rb +1 -0
- data/spree_backend.gemspec +0 -1
- metadata +36 -10
- data/CHANGELOG.md +0 -1
|
@@ -11,7 +11,7 @@ module Spree
|
|
|
11
11
|
respond_to :html
|
|
12
12
|
|
|
13
13
|
def index
|
|
14
|
-
@payments = @order.payments.includes(:
|
|
14
|
+
@payments = @order.payments.includes(refunds: :reason)
|
|
15
15
|
@refunds = @payments.flat_map(&:refunds)
|
|
16
16
|
redirect_to new_admin_order_payment_url(@order) if @payments.empty?
|
|
17
17
|
end
|
|
@@ -77,7 +77,7 @@ module Spree
|
|
|
77
77
|
|
|
78
78
|
def load_data
|
|
79
79
|
@amount = params[:amount] || load_order.total
|
|
80
|
-
@payment_methods = PaymentMethod.
|
|
80
|
+
@payment_methods = PaymentMethod.available_on_back_end
|
|
81
81
|
if @payment and @payment.payment_method
|
|
82
82
|
@payment_method = @payment.payment_method
|
|
83
83
|
else
|
|
@@ -44,9 +44,18 @@ module Spree
|
|
|
44
44
|
|
|
45
45
|
def destroy
|
|
46
46
|
@product = Product.friendly.find(params[:id])
|
|
47
|
-
@product.destroy
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
begin
|
|
49
|
+
# TODO: why is @product.destroy raising ActiveRecord::RecordNotDestroyed instead of failing with false result
|
|
50
|
+
# Issue found for above comment: https://github.com/rails/rails/issues/19761
|
|
51
|
+
if @product.destroy
|
|
52
|
+
flash[:success] = Spree.t('notice_messages.product_deleted')
|
|
53
|
+
else
|
|
54
|
+
flash[:error] = @object.errors.full_messages.join(', ')
|
|
55
|
+
end
|
|
56
|
+
rescue ActiveRecord::RecordNotDestroyed => e
|
|
57
|
+
flash[:error] = Spree.t('notice_messages.product_not_deleted')
|
|
58
|
+
end
|
|
50
59
|
|
|
51
60
|
respond_with(@product) do |format|
|
|
52
61
|
format.html { redirect_to collection_url }
|
|
@@ -88,15 +88,14 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
|
|
|
88
88
|
if @object.destroy
|
|
89
89
|
invoke_callbacks(:destroy, :after)
|
|
90
90
|
flash[:success] = flash_message_for(@object, :successfully_removed)
|
|
91
|
-
respond_with(@object) do |format|
|
|
92
|
-
format.html { redirect_to location_after_destroy }
|
|
93
|
-
format.js { render :partial => "spree/admin/shared/destroy" }
|
|
94
|
-
end
|
|
95
91
|
else
|
|
96
92
|
invoke_callbacks(:destroy, :fails)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
flash[:error] = @object.errors.full_messages.join(', ')
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
respond_with(@object) do |format|
|
|
97
|
+
format.html { redirect_to location_after_destroy }
|
|
98
|
+
format.js { render_js_for_destroy }
|
|
100
99
|
end
|
|
101
100
|
end
|
|
102
101
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Admin
|
|
3
|
+
class ReturnIndexController < BaseController
|
|
4
|
+
def return_authorizations
|
|
5
|
+
collection(Spree::ReturnAuthorization)
|
|
6
|
+
respond_with(@collection)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def customer_returns
|
|
10
|
+
collection(Spree::CustomerReturn)
|
|
11
|
+
respond_with(@collection)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def collection(resource)
|
|
17
|
+
return @collection if @collection.present?
|
|
18
|
+
params[:q] ||= {}
|
|
19
|
+
|
|
20
|
+
@collection = resource.all
|
|
21
|
+
# @search needs to be defined as this is passed to search_form_for
|
|
22
|
+
@search = @collection.ransack(params[:q])
|
|
23
|
+
per_page = params[:per_page] || Spree::Config[:admin_products_per_page]
|
|
24
|
+
@collection = @search.result.order(created_at: :desc).page(params[:page]).per(per_page)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
|
|
9
9
|
@stock_transfers = @q.result.
|
|
10
10
|
includes(stock_movements: { stock_item: :stock_location }).
|
|
11
|
-
order(
|
|
11
|
+
order(created_at: :desc).
|
|
12
12
|
page(params[:page])
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -16,9 +16,7 @@ module Spree
|
|
|
16
16
|
@stock_transfer = StockTransfer.friendly.find(params[:id])
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def new
|
|
20
|
-
|
|
21
|
-
end
|
|
19
|
+
def new; end
|
|
22
20
|
|
|
23
21
|
def create
|
|
24
22
|
variants = Hash.new(0)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Admin
|
|
3
|
+
class StoreCreditError < StandardError; end
|
|
4
|
+
|
|
5
|
+
class StoreCreditsController < Spree::Admin::BaseController
|
|
6
|
+
before_action :load_user
|
|
7
|
+
before_action :load_categories, only: [:new, :edit]
|
|
8
|
+
before_action :load_store_credit, only: [:new, :edit, :update]
|
|
9
|
+
before_action :ensure_unused_store_credit, only: [:update]
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
@store_credits = @user.store_credits.includes(:credit_type, :category).reverse_order
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def create
|
|
16
|
+
@store_credit = @user.store_credits.build(
|
|
17
|
+
permitted_store_credit_params.merge(
|
|
18
|
+
created_by: try_spree_current_user,
|
|
19
|
+
action_originator: try_spree_current_user
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
if @store_credit.save
|
|
24
|
+
flash[:success] = flash_message_for(@store_credit, :successfully_created)
|
|
25
|
+
redirect_to admin_user_store_credits_path(@user)
|
|
26
|
+
else
|
|
27
|
+
load_categories
|
|
28
|
+
flash[:error] = Spree.t('store_credit.errors.unable_to_create')
|
|
29
|
+
render :new
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def update
|
|
34
|
+
@store_credit.assign_attributes(permitted_store_credit_params)
|
|
35
|
+
@store_credit.created_by = try_spree_current_user
|
|
36
|
+
|
|
37
|
+
if @store_credit.save
|
|
38
|
+
flash[:success] = flash_message_for(@store_credit, :successfully_updated)
|
|
39
|
+
redirect_to admin_user_store_credits_path(@user)
|
|
40
|
+
else
|
|
41
|
+
load_categories
|
|
42
|
+
flash[:error] = Spree.t('store_credit.errors.unable_to_update')
|
|
43
|
+
render :edit
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def destroy
|
|
48
|
+
@store_credit = @user.store_credits.find(params[:id])
|
|
49
|
+
ensure_unused_store_credit
|
|
50
|
+
|
|
51
|
+
if @store_credit.destroy
|
|
52
|
+
respond_with(@store_credit) do |format|
|
|
53
|
+
format.html { redirect_to admin_user_store_credits_path(@user) }
|
|
54
|
+
format.js { render_js_for_destroy }
|
|
55
|
+
end
|
|
56
|
+
else
|
|
57
|
+
render text: Spree.t('store_credit.errors.unable_to_delete'), status: :unprocessable_entity
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
protected
|
|
62
|
+
|
|
63
|
+
def permitted_store_credit_params
|
|
64
|
+
params.require(:store_credit).permit(permitted_store_credit_attributes).
|
|
65
|
+
merge(currency: Spree::Config[:currency])
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def load_user
|
|
71
|
+
@user = Spree.user_class.find_by(id: params[:user_id])
|
|
72
|
+
|
|
73
|
+
unless @user
|
|
74
|
+
flash[:error] = Spree.t(:user_not_found)
|
|
75
|
+
redirect_to admin_path
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def load_categories
|
|
80
|
+
@credit_categories = Spree::StoreCreditCategory.order(:name)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def load_store_credit
|
|
84
|
+
@store_credit = Spree::StoreCredit.find_by_id(params[:id]) || Spree::StoreCredit.new
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def ensure_unused_store_credit
|
|
88
|
+
unless @store_credit.amount_used.zero?
|
|
89
|
+
raise StoreCreditError.new(Spree.t('store_credit.errors.cannot_change_used_store_credit'))
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -12,9 +12,9 @@ module Spree
|
|
|
12
12
|
|
|
13
13
|
def search
|
|
14
14
|
if params[:ids]
|
|
15
|
-
@taxons = Spree::Taxon.where(:
|
|
15
|
+
@taxons = Spree::Taxon.where(id: params[:ids].split(','))
|
|
16
16
|
else
|
|
17
|
-
@taxons = Spree::Taxon.limit(20).ransack(:
|
|
17
|
+
@taxons = Spree::Taxon.limit(20).ransack(name_cont: params[:q]).result
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -22,7 +22,7 @@ module Spree
|
|
|
22
22
|
@taxon = @taxonomy.taxons.build(params[:taxon])
|
|
23
23
|
if @taxon.save
|
|
24
24
|
respond_with(@taxon) do |format|
|
|
25
|
-
format.json {render :
|
|
25
|
+
format.json { render json: @taxon.to_json }
|
|
26
26
|
end
|
|
27
27
|
else
|
|
28
28
|
flash[:error] = Spree.t('errors.messages.could_not_create_taxon')
|
|
@@ -59,15 +59,15 @@ module Spree
|
|
|
59
59
|
rename_child_taxons if @update_children
|
|
60
60
|
|
|
61
61
|
respond_with(@taxon) do |format|
|
|
62
|
-
format.html {redirect_to edit_admin_taxonomy_url(@taxonomy) }
|
|
63
|
-
format.json {render :
|
|
62
|
+
format.html { redirect_to edit_admin_taxonomy_url(@taxonomy) }
|
|
63
|
+
format.json { render json: @taxon.to_json }
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def destroy
|
|
68
68
|
@taxon = Taxon.find(params[:id])
|
|
69
69
|
@taxon.destroy
|
|
70
|
-
respond_with(@taxon) { |format| format.json { render :
|
|
70
|
+
respond_with(@taxon) { |format| format.json { render json: '' } }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
private
|
|
@@ -107,18 +107,20 @@ module Spree
|
|
|
107
107
|
|
|
108
108
|
def rename_child_taxons
|
|
109
109
|
@taxon.descendants.each do |taxon|
|
|
110
|
-
taxon
|
|
111
|
-
taxon.set_permalink
|
|
112
|
-
taxon.save!
|
|
110
|
+
reload_taxon_and_set_permalink(taxon)
|
|
113
111
|
end
|
|
114
112
|
end
|
|
115
113
|
|
|
116
114
|
def regenerate_permalink
|
|
117
|
-
@taxon
|
|
118
|
-
@taxon.set_permalink
|
|
119
|
-
@taxon.save!
|
|
115
|
+
reload_taxon_and_set_permalink(@taxon)
|
|
120
116
|
@update_children = true
|
|
121
117
|
end
|
|
118
|
+
|
|
119
|
+
def reload_taxon_and_set_permalink(taxon)
|
|
120
|
+
taxon.reload
|
|
121
|
+
taxon.set_permalink
|
|
122
|
+
taxon.save!
|
|
123
|
+
end
|
|
122
124
|
end
|
|
123
125
|
end
|
|
124
126
|
end
|
|
@@ -7,8 +7,6 @@ module Spree
|
|
|
7
7
|
|
|
8
8
|
# http://spreecommerce.com/blog/2010/11/02/json-hijacking-vulnerability/
|
|
9
9
|
before_action :check_json_authenticity, only: :index
|
|
10
|
-
before_action :load_roles
|
|
11
|
-
before_action :extract_roles_from_params, only: [:create, :update]
|
|
12
10
|
|
|
13
11
|
def index
|
|
14
12
|
respond_with(@collection) do |format|
|
|
@@ -22,11 +20,8 @@ module Spree
|
|
|
22
20
|
end
|
|
23
21
|
|
|
24
22
|
def create
|
|
25
|
-
|
|
26
23
|
@user = Spree.user_class.new(user_params)
|
|
27
24
|
if @user.save
|
|
28
|
-
set_roles
|
|
29
|
-
|
|
30
25
|
flash.now[:success] = flash_message_for(@user, :successfully_created)
|
|
31
26
|
render :edit
|
|
32
27
|
else
|
|
@@ -41,7 +36,6 @@ module Spree
|
|
|
41
36
|
end
|
|
42
37
|
|
|
43
38
|
if @user.update_attributes(user_params)
|
|
44
|
-
set_roles
|
|
45
39
|
flash.now[:success] = Spree.t(:account_updated)
|
|
46
40
|
end
|
|
47
41
|
|
|
@@ -95,8 +89,9 @@ module Spree
|
|
|
95
89
|
|
|
96
90
|
def collection
|
|
97
91
|
return @collection if @collection.present?
|
|
92
|
+
@collection = super
|
|
98
93
|
if request.xhr? && params[:q].present?
|
|
99
|
-
@collection =
|
|
94
|
+
@collection = @collection.includes(:bill_address, :ship_address)
|
|
100
95
|
.where("spree_users.email #{LIKE} :search
|
|
101
96
|
OR (spree_addresses.firstname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
|
|
102
97
|
OR (spree_addresses.lastname #{LIKE} :search AND spree_addresses.id = spree_users.bill_address_id)
|
|
@@ -105,28 +100,16 @@ module Spree
|
|
|
105
100
|
{ :search => "#{params[:q].strip}%" })
|
|
106
101
|
.limit(params[:limit] || 100)
|
|
107
102
|
else
|
|
108
|
-
@search =
|
|
103
|
+
@search = @collection.ransack(params[:q])
|
|
109
104
|
@collection = @search.result.page(params[:page]).per(Spree::Config[:admin_products_per_page])
|
|
110
105
|
end
|
|
111
106
|
end
|
|
112
107
|
|
|
113
108
|
private
|
|
114
109
|
|
|
115
|
-
def set_roles
|
|
116
|
-
if @roles_ids
|
|
117
|
-
@user.spree_roles = Spree::Role.where(id: @roles_ids)
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def extract_roles_from_params
|
|
122
|
-
if params[:user]
|
|
123
|
-
@roles_ids = params[:user].delete("spree_role_ids")
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
110
|
def user_params
|
|
128
111
|
params.require(:user).permit(permitted_user_attributes |
|
|
129
|
-
[:
|
|
112
|
+
[spree_role_ids: [],
|
|
130
113
|
ship_address_attributes: permitted_address_attributes,
|
|
131
114
|
bill_address_attributes: permitted_address_attributes])
|
|
132
115
|
end
|
|
@@ -157,10 +140,6 @@ module Spree
|
|
|
157
140
|
sign_in(@user, event: :authentication, bypass: true)
|
|
158
141
|
end
|
|
159
142
|
end
|
|
160
|
-
|
|
161
|
-
def load_roles
|
|
162
|
-
@roles = Spree::Role.all
|
|
163
|
-
end
|
|
164
143
|
end
|
|
165
144
|
end
|
|
166
145
|
end
|
|
@@ -23,10 +23,13 @@ module Spree
|
|
|
23
23
|
|
|
24
24
|
protected
|
|
25
25
|
def new_before
|
|
26
|
-
|
|
26
|
+
master = @object.product.master
|
|
27
|
+
@object.attributes = master.attributes.except('id', 'created_at', 'deleted_at',
|
|
27
28
|
'sku', 'is_master')
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
if master.default_price.present?
|
|
30
|
+
# Shallow Clone of the default price to populate the price field.
|
|
31
|
+
@object.default_price = master.default_price.clone
|
|
32
|
+
end
|
|
30
33
|
end
|
|
31
34
|
|
|
32
35
|
def collection
|
|
@@ -35,7 +38,7 @@ module Spree
|
|
|
35
38
|
if @deleted.blank?
|
|
36
39
|
@collection ||= super.includes(:default_price, option_values: :option_type)
|
|
37
40
|
else
|
|
38
|
-
@collection ||= Variant.only_deleted.where(:
|
|
41
|
+
@collection ||= Variant.only_deleted.where(product_id: parent.id)
|
|
39
42
|
end
|
|
40
43
|
@collection
|
|
41
44
|
end
|
|
@@ -144,6 +144,15 @@ module Spree
|
|
|
144
144
|
resource_class.model_name.human(count: I18N_PLURAL_MANY_COUNT)
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
+
def back_to_list_button(resource, path)
|
|
148
|
+
button_text = Spree.t(:back_to_resource_list, resource: resource)
|
|
149
|
+
link_to_with_icon 'arrow-left', button_text, path, class: 'btn btn-default'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def order_time(time)
|
|
153
|
+
[I18n.l(time.to_date), time.strftime("%l:%M %p")].join('')
|
|
154
|
+
end
|
|
155
|
+
|
|
147
156
|
private
|
|
148
157
|
def attribute_name_for(field_name)
|
|
149
158
|
field_name.gsub(' ', '_').downcase
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
module Admin
|
|
3
3
|
module NavigationHelper
|
|
4
|
-
#
|
|
4
|
+
# Makes an admin navigation tab (<li> tag) that links to a routing resource under /admin.
|
|
5
|
+
# The arguments should be a list of symbolized controller names that will cause this tab to
|
|
6
|
+
# be highlighted, with the first being the name of the resouce to link (uses URL helpers).
|
|
7
|
+
#
|
|
5
8
|
# Option hash may follow. Valid options are
|
|
6
9
|
# * :label to override link text, otherwise based on the first resource name (translated)
|
|
7
10
|
# * :route to override automatically determining the default route
|
|
8
|
-
# * :match_path as an alternative way to control when the tab is active, /products would
|
|
11
|
+
# * :match_path as an alternative way to control when the tab is active, /products would
|
|
12
|
+
# match /admin/products, /admin/products/5/variants etc. Can be a String or a Regexp.
|
|
13
|
+
# Controller names are ignored if :match_path is provided.
|
|
14
|
+
#
|
|
15
|
+
# Example:
|
|
16
|
+
# # Link to /admin/orders, also highlight tab for ProductsController and ShipmentsController
|
|
17
|
+
# tab :orders, :products, :shipments
|
|
9
18
|
def tab(*args)
|
|
10
19
|
options = { label: args.first.to_s }
|
|
11
20
|
|
|
@@ -92,8 +101,8 @@ module Spree
|
|
|
92
101
|
|
|
93
102
|
# helper method to create proper url to apply per page filtering
|
|
94
103
|
# fixes https://github.com/spree/spree/issues/6888
|
|
95
|
-
def per_page_dropdown_params
|
|
96
|
-
args
|
|
104
|
+
def per_page_dropdown_params(args = nil)
|
|
105
|
+
args ||= params.clone
|
|
97
106
|
args.delete(:page)
|
|
98
107
|
args.delete(:per_page)
|
|
99
108
|
args
|
|
@@ -116,9 +125,11 @@ module Spree
|
|
|
116
125
|
end
|
|
117
126
|
|
|
118
127
|
def link_to_clone(resource, options={})
|
|
119
|
-
options[:data] = { action: 'clone' }
|
|
120
|
-
options[:class] = "btn btn-primary btn-sm"
|
|
121
|
-
|
|
128
|
+
options[:data] = { action: 'clone', :'original-title' => Spree.t(:clone) }
|
|
129
|
+
options[:class] = "btn btn-primary btn-sm with-tip"
|
|
130
|
+
options[:method] = :post
|
|
131
|
+
options[:icon] = :clone
|
|
132
|
+
button_link_to '', clone_object_url(resource), options
|
|
122
133
|
end
|
|
123
134
|
|
|
124
135
|
def link_to_new(resource)
|
|
@@ -177,7 +188,7 @@ module Spree
|
|
|
177
188
|
if (html_options[:method] &&
|
|
178
189
|
html_options[:method].to_s.downcase != 'get' &&
|
|
179
190
|
!html_options[:remote])
|
|
180
|
-
form_tag(url, method: html_options.delete(:method)) do
|
|
191
|
+
form_tag(url, method: html_options.delete(:method), class: 'display-inline') do
|
|
181
192
|
button(text, html_options.delete(:icon), nil, html_options)
|
|
182
193
|
end
|
|
183
194
|
else
|