app/controllers/spree/admin/orders_controller.rb in spree_backend-2.1.3 vs app/controllers/spree/admin/orders_controller.rb in spree_backend-2.1.4
- old
+ new
@@ -8,11 +8,11 @@
respond_to :html
def index
params[:q] ||= {}
params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
- @show_only_completed = params[:q][:completed_at_not_null].present?
+ @show_only_completed = params[:q][:completed_at_not_null] == '1'
params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
# As date params are deleted if @show_only_completed, store
# the original date so we can restore them into the params
# after the search
@@ -33,11 +33,15 @@
params[:q][:completed_at_gt] = params[:q].delete(:created_at_gt)
params[:q][:completed_at_lt] = params[:q].delete(:created_at_lt)
end
@search = Order.accessible_by(current_ability, :index).ransack(params[:q])
- @orders = @search.result.includes([:user, :shipments, :payments]).
+
+ # lazyoading other models here (via includes) may result in an invalid query
+ # e.g. SELECT DISTINCT DISTINCT "spree_orders".id, "spree_orders"."created_at" AS alias_0 FROM "spree_orders"
+ # see https://github.com/spree/spree/pull/3919
+ @orders = @search.result(distinct: true).
page(params[:page]).
per(params[:per_page] || Spree::Config[:orders_per_page])
# Restore dates
params[:q][:created_at_gt] = created_at_gt
@@ -56,29 +60,21 @@
@order.refresh_shipment_rates
end
end
def update
- return_path = nil
if @order.update_attributes(params[:order]) && @order.line_items.present?
@order.update!
unless @order.complete?
# Jump to next step if order is not complete.
- return_path = admin_order_customer_path(@order)
- else
- # Otherwise, go back to first page since all necessary information has been filled out.
- return_path = admin_order_path(@order)
+ redirect_to admin_order_customer_path(@order) and return
end
else
@order.errors.add(:line_items, Spree.t('errors.messages.blank')) if @order.line_items.empty?
end
- if return_path
- redirect_to return_path
- else
- render :action => :edit
- end
+ render :action => :edit
end
def fire
# TODO - possible security check here but right now any admin can before any transition (and the state machine
# itself will make sure transitions are not applied in the wrong state)
@@ -116,12 +112,11 @@
respond_with(@order) { |format| format.html { redirect_to :back } }
end
private
-
def load_order
- @order = Order.includes(:adjustments).find_by_number!(params[:id]) if params[:id]
+ @order = Order.includes(:adjustments).find_by_number!(params[:id])
authorize! action, @order
end
# Used for extensions which need to provide their own custom event links on the order details view.
def initialize_order_events