PageRenderTime 1372ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/backend/app/controllers/spree/admin/orders_controller.rb

https://gitlab.com/shinvdu/spree
Ruby | 149 lines | 111 code | 29 blank | 9 comment | 12 complexity | ab0d0e35211cf4ab9f9f0f2660f65f11 MD5 | raw file
  1. module Spree
  2. module Admin
  3. class OrdersController < Spree::Admin::BaseController
  4. before_action :initialize_order_events
  5. before_action :load_order, only: [:edit, :update, :cancel, :resume, :approve, :resend, :open_adjustments, :close_adjustments, :cart]
  6. respond_to :html
  7. def index
  8. params[:q] ||= {}
  9. params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
  10. @show_only_completed = params[:q][:completed_at_not_null] == '1'
  11. params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
  12. params[:q][:completed_at_not_null] = '' unless @show_only_completed
  13. # As date params are deleted if @show_only_completed, store
  14. # the original date so we can restore them into the params
  15. # after the search
  16. created_at_gt = params[:q][:created_at_gt]
  17. created_at_lt = params[:q][:created_at_lt]
  18. params[:q].delete(:inventory_units_shipment_id_null) if params[:q][:inventory_units_shipment_id_null] == "0"
  19. if params[:q][:created_at_gt].present?
  20. params[:q][:created_at_gt] = Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day rescue ""
  21. end
  22. if params[:q][:created_at_lt].present?
  23. params[:q][:created_at_lt] = Time.zone.parse(params[:q][:created_at_lt]).end_of_day rescue ""
  24. end
  25. if @show_only_completed
  26. params[:q][:completed_at_gt] = params[:q].delete(:created_at_gt)
  27. params[:q][:completed_at_lt] = params[:q].delete(:created_at_lt)
  28. end
  29. @search = Order.preload(:user).accessible_by(current_ability, :index).ransack(params[:q])
  30. # lazy loading other models here (via includes) may result in an invalid query
  31. # e.g. SELECT DISTINCT DISTINCT "spree_orders".id, "spree_orders"."created_at" AS alias_0 FROM "spree_orders"
  32. # see https://github.com/spree/spree/pull/3919
  33. @orders = @search.result(distinct: true).
  34. page(params[:page]).
  35. per(params[:per_page] || Spree::Config[:orders_per_page])
  36. # Restore dates
  37. params[:q][:created_at_gt] = created_at_gt
  38. params[:q][:created_at_lt] = created_at_lt
  39. end
  40. def new
  41. @order = Order.create(order_params)
  42. redirect_to cart_admin_order_url(@order)
  43. end
  44. def edit
  45. can_not_transition_without_customer_info
  46. unless @order.completed?
  47. @order.refresh_shipment_rates(ShippingMethod::DISPLAY_ON_FRONT_AND_BACK_END)
  48. end
  49. end
  50. def cart
  51. unless @order.completed?
  52. @order.refresh_shipment_rates
  53. end
  54. if @order.shipments.shipped.count > 0
  55. redirect_to edit_admin_order_url(@order)
  56. end
  57. end
  58. def update
  59. if @order.update_attributes(params[:order]) && @order.line_items.present?
  60. @order.update_with_updater!
  61. unless @order.completed?
  62. # Jump to next step if order is not completed.
  63. redirect_to admin_order_customer_path(@order) and return
  64. end
  65. else
  66. @order.errors.add(:line_items, Spree.t('errors.messages.blank')) if @order.line_items.empty?
  67. end
  68. render action: :edit
  69. end
  70. def cancel
  71. @order.canceled_by(try_spree_current_user)
  72. flash[:success] = Spree.t(:order_canceled)
  73. redirect_to :back
  74. end
  75. def resume
  76. @order.resume!
  77. flash[:success] = Spree.t(:order_resumed)
  78. redirect_to :back
  79. end
  80. def approve
  81. @order.approved_by(try_spree_current_user)
  82. flash[:success] = Spree.t(:order_approved)
  83. redirect_to :back
  84. end
  85. def resend
  86. OrderMailer.confirm_email(@order.id, true).deliver_later
  87. flash[:success] = Spree.t(:order_email_resent)
  88. redirect_to :back
  89. end
  90. def open_adjustments
  91. adjustments = @order.all_adjustments.closed
  92. adjustments.update_all(state: 'open')
  93. flash[:success] = Spree.t(:all_adjustments_opened)
  94. respond_with(@order) { |format| format.html { redirect_to :back } }
  95. end
  96. def close_adjustments
  97. adjustments = @order.all_adjustments.open
  98. adjustments.update_all(state: 'closed')
  99. flash[:success] = Spree.t(:all_adjustments_closed)
  100. respond_with(@order) { |format| format.html { redirect_to :back } }
  101. end
  102. private
  103. def order_params
  104. params[:created_by_id] = try_spree_current_user.try(:id)
  105. params.permit(:created_by_id, :user_id)
  106. end
  107. def load_order
  108. @order = Order.includes(:adjustments).friendly.find(params[:id])
  109. authorize! action, @order
  110. end
  111. # Used for extensions which need to provide their own custom event links on the order details view.
  112. def initialize_order_events
  113. @order_events = %w{approve cancel resume}
  114. end
  115. def model_class
  116. Spree::Order
  117. end
  118. end
  119. end
  120. end