module Spree::Core::ControllerHelpers::Order

Public Instance Methods

associate_user() click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 47
def associate_user
  @order ||= current_order
  if try_spree_current_user && @order
    @order.associate_user!(try_spree_current_user) if @order.user.blank? || @order.email.blank?
  end
end
current_order(options = {}) click to toggle source

The current incomplete order from the token for use in cart and during checkout

# File lib/spree/core/controller_helpers/order.rb, line 27
def current_order(options = {})
  options[:create_order_if_necessary] ||= false
  options[:includes] ||= true

  if @current_order
    @current_order.last_ip_address = ip_address
    return @current_order
  end

  @current_order = find_order_by_token_or_user(options, true)

  if options[:create_order_if_necessary] && (@current_order.nil? || @current_order.completed?)
    @current_order = Spree::Order.create!(current_order_params)
    @current_order.associate_user! try_spree_current_user if try_spree_current_user
    @current_order.last_ip_address = ip_address
  end

  @current_order
end
ip_address() click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 67
def ip_address
  request.remote_ip
end
set_current_order() click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 54
def set_current_order
  return unless try_spree_current_user && current_order

  orders_scope = try_spree_current_user.orders.
                 incomplete.
                 where.not(id: current_order.id).
                 where(store_id: current_store.id)

  orders_scope.each do |order|
    current_order.merge!(order, try_spree_current_user)
  end
end
simple_current_order() click to toggle source

Used in the link_to_cart helper.

# File lib/spree/core/controller_helpers/order.rb, line 13
def simple_current_order
  return @simple_current_order if @simple_current_order

  @simple_current_order = find_order_by_token_or_user

  if @simple_current_order
    @simple_current_order.last_ip_address = ip_address
    return @simple_current_order
  else
    @simple_current_order = Spree::Order.new
  end
end

Private Instance Methods

current_order_params() click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 77
def current_order_params
  { currency: current_currency, token: cookies.signed[:token], store_id: current_store.id, user_id: try_spree_current_user.try(:id) }
end
find_order_by_token_or_user(options = {}, with_adjustments = false) click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 81
def find_order_by_token_or_user(options = {}, with_adjustments = false)
  options[:lock] ||= false

  includes = if options[:includes]
               { line_items: [variant: [:images, :option_values, :product]] }
             else
               {}
             end

  # Find any incomplete orders for the token
  incomplete_orders = Spree::Order.incomplete.includes(includes)

  token_order_params = current_order_params.except(:user_id)
  order = if with_adjustments
            incomplete_orders.includes(:adjustments).lock(options[:lock]).find_by(token_order_params)
          else
            incomplete_orders.lock(options[:lock]).find_by(token_order_params)
          end

  # Find any incomplete orders for the current user
  order = last_incomplete_order(includes) if order.nil? && try_spree_current_user

  order
end
last_incomplete_order(includes = {}) click to toggle source
# File lib/spree/core/controller_helpers/order.rb, line 73
def last_incomplete_order(includes = {})
  @last_incomplete_order ||= try_spree_current_user.last_incomplete_spree_order(current_store, includes: includes)
end