PageRenderTime 1420ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://github.com/jmbejar/spree
Ruby | 133 lines | 100 code | 24 blank | 9 comment | 13 complexity | b65556d1f20e3da0d198bec3c6563d32 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_order_events
  6. before_filter :load_order, :only => [:edit, :update, :fire, :resend, :open_adjustments, :close_adjustments]
  7. respond_to :html
  8. def index
  9. params[:q] ||= {}
  10. params[:q][:completed_at_not_null] ||= '1' if Spree::Config[:show_only_complete_orders_by_default]
  11. @show_only_completed = params[:q][:completed_at_not_null].present?
  12. params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
  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].blank?
  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].blank?
  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.accessible_by(current_ability, :index).ransack(params[:q])
  30. @orders = @search.result.includes([:user, :shipments, :payments]).
  31. page(params[:page]).
  32. per(params[:per_page] || Spree::Config[:orders_per_page])
  33. # Restore dates
  34. params[:q][:created_at_gt] = created_at_gt
  35. params[:q][:created_at_lt] = created_at_lt
  36. end
  37. def new
  38. @order = Order.create
  39. redirect_to edit_admin_order_url(@order)
  40. end
  41. def edit
  42. @order.shipments.map &:refresh_rates
  43. end
  44. def update
  45. return_path = nil
  46. if @order.update_attributes(params[:order]) && @order.line_items.present?
  47. @order.update!
  48. unless @order.complete?
  49. # Jump to next step if order is not complete.
  50. return_path = admin_order_customer_path(@order)
  51. else
  52. # Otherwise, go back to first page since all necessary information has been filled out.
  53. return_path = admin_order_path(@order)
  54. end
  55. else
  56. @order.errors.add(:line_items, Spree.t('errors.messages.blank')) if @order.line_items.empty?
  57. end
  58. if return_path
  59. redirect_to return_path
  60. else
  61. render :action => :edit
  62. end
  63. end
  64. def fire
  65. # TODO - possible security check here but right now any admin can before any transition (and the state machine
  66. # itself will make sure transitions are not applied in the wrong state)
  67. event = params[:e]
  68. if @order.send("#{event}")
  69. flash[:success] = Spree.t(:order_updated)
  70. else
  71. flash[:error] = Spree.t(:cannot_perform_operation)
  72. end
  73. rescue Spree::Core::GatewayError => ge
  74. flash[:error] = "#{ge.message}"
  75. ensure
  76. redirect_to :back
  77. end
  78. def resend
  79. OrderMailer.confirm_email(@order.id, true).deliver
  80. flash[:success] = Spree.t(:order_email_resent)
  81. redirect_to :back
  82. end
  83. def open_adjustments
  84. adjustments = @order.adjustments.where(:state => 'closed')
  85. adjustments.update_all(:state => 'open')
  86. flash[:success] = Spree.t(:all_adjustments_opened)
  87. respond_with(@order) { |format| format.html { redirect_to :back } }
  88. end
  89. def close_adjustments
  90. adjustments = @order.adjustments.where(:state => 'open')
  91. adjustments.update_all(:state => 'closed')
  92. flash[:success] = Spree.t(:all_adjustments_closed)
  93. respond_with(@order) { |format| format.html { redirect_to :back } }
  94. end
  95. private
  96. def load_order
  97. @order = Order.find_by_number!(params[:id], :include => :adjustments) if params[:id]
  98. authorize! action, @order
  99. end
  100. # Used for extensions which need to provide their own custom event links on the order details view.
  101. def initialize_order_events
  102. @order_events = %w{cancel resume}
  103. end
  104. def model_class
  105. Spree::Order
  106. end
  107. end
  108. end
  109. end