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

https://github.com/eraserx99/spree · Ruby · 116 lines · 90 code · 20 blank · 6 comment · 10 complexity · b9e2d76d68e1edc89e7d9888a9e31f61 MD5 · raw file

  1. module Spree
  2. module Admin
  3. class OrdersController < Spree::Admin::BaseController
  4. require 'spree/core/gateway_error'
  5. before_filter :initialize_txn_partials
  6. before_filter :initialize_order_events
  7. before_filter :load_order, :only => [:show, :edit, :update, :fire, :resend, :history, :user]
  8. respond_to :html
  9. def index
  10. params[:q] ||= {}
  11. params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
  12. @show_only_completed = params[:q][:completed_at_not_null].present?
  13. params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
  14. if !params[:q][:created_at_gt].blank?
  15. params[:q][:created_at_gt] = Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day rescue ""
  16. end
  17. if !params[:q][:created_at_lt].blank?
  18. params[:q][:created_at_lt] = Time.zone.parse(params[:q][:created_at_lt]).end_of_day rescue ""
  19. end
  20. if @show_only_completed
  21. params[:q][:completed_at_gt] = params[:q].delete(:created_at_gt)
  22. params[:q][:completed_at_lt] = params[:q].delete(:created_at_lt)
  23. end
  24. @search = Order.ransack(params[:q])
  25. @orders = @search.result.includes([:user, :shipments, :payments]).page(params[:page]).per(Spree::Config[:orders_per_page])
  26. respond_with(@orders)
  27. end
  28. def show
  29. respond_with(@order)
  30. end
  31. def new
  32. @order = Order.create
  33. respond_with(@order)
  34. end
  35. def edit
  36. respond_with(@order)
  37. end
  38. def update
  39. return_path = nil
  40. if @order.update_attributes(params[:order]) && @order.line_items.present?
  41. @order.update!
  42. unless @order.complete?
  43. # Jump to next step if order is not complete.
  44. return_path = admin_order_customer_path(@order)
  45. else
  46. # Otherwise, go back to first page since all necessary information has been filled out.
  47. return_path = admin_order_path(@order)
  48. end
  49. else
  50. @order.errors.add(:line_items, t('errors.messages.blank')) if @order.line_items.empty?
  51. end
  52. respond_with(@order) do |format|
  53. format.html do
  54. if return_path
  55. redirect_to return_path
  56. else
  57. render :action => :edit
  58. end
  59. end
  60. end
  61. end
  62. def fire
  63. # TODO - possible security check here but right now any admin can before any transition (and the state machine
  64. # itself will make sure transitions are not applied in the wrong state)
  65. event = params[:e]
  66. if @order.send("#{event}")
  67. flash.notice = t(:order_updated)
  68. else
  69. flash[:error] = t(:cannot_perform_operation)
  70. end
  71. rescue Spree::Core::GatewayError => ge
  72. flash[:error] = "#{ge.message}"
  73. ensure
  74. respond_with(@order) { |format| format.html { redirect_to :back } }
  75. end
  76. def resend
  77. OrderMailer.confirm_email(@order, true).deliver
  78. flash.notice = t(:order_email_resent)
  79. respond_with(@order) { |format| format.html { redirect_to :back } }
  80. end
  81. private
  82. def load_order
  83. @order ||= Order.find_by_number(params[:id], :include => :adjustments) if params[:id]
  84. @order
  85. end
  86. # Allows extensions to add new forms of payment to provide their own display of transactions
  87. def initialize_txn_partials
  88. @txn_partials = []
  89. end
  90. # Used for extensions which need to provide their own custom event links on the order details view.
  91. def initialize_order_events
  92. @order_events = %w{cancel resume}
  93. end
  94. end
  95. end
  96. end