Class: Spree::Admin::OrdersController

Inherits:
BaseController show all
Defined in:
app/controllers/spree/admin/orders_controller.rb

Instance Method Summary collapse

Instance Method Details

#approveObject



108
109
110
111
112
# File 'app/controllers/spree/admin/orders_controller.rb', line 108

def approve
  @order.approved_by(try_spree_current_user)
  flash[:success] = Spree.t(:order_approved)
  redirect_back fallback_location: spree.edit_admin_order_url(@order)
end

#cancelObject



96
97
98
99
100
# File 'app/controllers/spree/admin/orders_controller.rb', line 96

def cancel
  @order.canceled_by(try_spree_current_user)
  flash[:success] = Spree.t(:order_canceled)
  redirect_back fallback_location: spree.edit_admin_order_url(@order)
end

#cartObject



70
71
72
73
74
75
76
# File 'app/controllers/spree/admin/orders_controller.rb', line 70

def cart
  @order.refresh_shipment_rates(ShippingMethod::DISPLAY_ON_BACK_END) unless @order.completed?

  if @order.shipments.shipped.exists?
    redirect_to edit_admin_order_url(@order)
  end
end

#close_adjustmentsObject



129
130
131
132
133
134
135
# File 'app/controllers/spree/admin/orders_controller.rb', line 129

def close_adjustments
  adjustments = @order.all_adjustments.not_finalized
  adjustments.update_all(state: 'closed')
  flash[:success] = Spree.t(:all_adjustments_closed)

  respond_with(@order) { |format| format.html { redirect_back fallback_location: spree.admin_order_adjustments_url(@order) } }
end

#editObject



64
65
66
67
68
# File 'app/controllers/spree/admin/orders_controller.rb', line 64

def edit
  can_not_transition_without_customer_info

  @order.refresh_shipment_rates(ShippingMethod::DISPLAY_ON_BACK_END) unless @order.completed?
end

#indexObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'app/controllers/spree/admin/orders_controller.rb', line 9

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] == '1'
  params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
  params[:q][:completed_at_not_null] = '' unless @show_only_completed

  # As date params are deleted if @show_only_completed, store
  # the original date so we can restore them into the params
  # after the search
  created_at_gt = params[:q][:created_at_gt]
  created_at_lt = params[:q][:created_at_lt]

  params[:q].delete(:inventory_units_shipment_id_null) if params[:q][:inventory_units_shipment_id_null] == '0'

  if params[:q][:created_at_gt].present?
    params[:q][:created_at_gt] = begin
                                   Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day
                                 rescue StandardError
                                   ''
                                 end
  end

  if params[:q][:created_at_lt].present?
    params[:q][:created_at_lt] = begin
                                   Time.zone.parse(params[:q][:created_at_lt]).end_of_day
                                 rescue StandardError
                                   ''
                                 end
  end

  if @show_only_completed
    params[:q][:completed_at_gt] = params[:q].delete(:created_at_gt)
    params[:q][:completed_at_lt] = params[:q].delete(:created_at_lt)
  end

  @search = Spree::Order.preload(:user).accessible_by(current_ability, :index).ransack(params[:q])

  # lazy loading 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[:admin_orders_per_page])

  # Restore dates
  params[:q][:created_at_gt] = created_at_gt
  params[:q][:created_at_lt] = created_at_lt
end

#newObject



59
60
61
62
# File 'app/controllers/spree/admin/orders_controller.rb', line 59

def new
  @order = Spree::Order.create(order_params)
  redirect_to cart_admin_order_url(@order)
end

#open_adjustmentsObject



121
122
123
124
125
126
127
# File 'app/controllers/spree/admin/orders_controller.rb', line 121

def open_adjustments
  adjustments = @order.all_adjustments.finalized
  adjustments.update_all(state: 'open')
  flash[:success] = Spree.t(:all_adjustments_opened)

  respond_with(@order) { |format| format.html { redirect_back fallback_location: spree.admin_order_adjustments_url(@order) } }
end

#resendObject



114
115
116
117
118
119
# File 'app/controllers/spree/admin/orders_controller.rb', line 114

def resend
  OrderMailer.confirm_email(@order.id, true).deliver_later
  flash[:success] = Spree.t(:order_email_resent)

  redirect_back fallback_location: spree.edit_admin_order_url(@order)
end

#resumeObject



102
103
104
105
106
# File 'app/controllers/spree/admin/orders_controller.rb', line 102

def resume
  @order.resume!
  flash[:success] = Spree.t(:order_resumed)
  redirect_back fallback_location: spree.edit_admin_order_url(@order)
end

#set_storeObject



137
138
139
140
141
142
143
144
145
# File 'app/controllers/spree/admin/orders_controller.rb', line 137

def set_store
  if @order.update(store_id: params[:order][:store_id])
    flash[:success] = flash_message_for(@order, :successfully_updated)
  else
    flash[:error] = @order.errors.full_messages.join(', ')
  end

  redirect_to store_admin_order_url(@order)
end

#storeObject



78
79
80
# File 'app/controllers/spree/admin/orders_controller.rb', line 78

def store
  @stores = Spree::Store.all
end

#updateObject



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/controllers/spree/admin/orders_controller.rb', line 82

def update
  if @order.update(params[:order]) && @order.line_items.present?
    @order.update_with_updater!
    unless @order.completed?
      # Jump to next step if order is not completed.
      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

  render action: :edit
end