From 23ff9d6fbb7c51b8bd418aba5fc53010f03aa6fb Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 27 Jun 2020 12:32:12 +0100 Subject: [PATCH] Bring controller_helpers/order to OFN --- lib/spree/core/controller_helpers/order.rb | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 lib/spree/core/controller_helpers/order.rb diff --git a/lib/spree/core/controller_helpers/order.rb b/lib/spree/core/controller_helpers/order.rb new file mode 100644 index 0000000000..1501aa9c93 --- /dev/null +++ b/lib/spree/core/controller_helpers/order.rb @@ -0,0 +1,77 @@ +module Spree + module Core + module ControllerHelpers + module Order + def self.included(base) + base.class_eval do + helper_method :current_order + helper_method :current_currency + before_filter :set_current_order + end + end + + # The current incomplete order from the session for use in cart and during checkout + def current_order(create_order_if_necessary = false) + return @current_order if @current_order + if session[:order_id] + current_order = Spree::Order.includes(:adjustments).find_by(id: session[:order_id], currency: current_currency) + @current_order = current_order unless current_order.try(:completed?) + end + if create_order_if_necessary and (@current_order.nil? or @current_order.completed?) + @current_order = Spree::Order.new(currency: current_currency) + @current_order.user ||= try_spree_current_user + # See issue #3346 for reasons why this line is here + @current_order.created_by ||= try_spree_current_user + @current_order.save! + + # make sure the user has permission to access the order (if they are a guest) + if try_spree_current_user.nil? + session[:access_token] = @current_order.token + end + end + if @current_order + @current_order.last_ip_address = ip_address + session[:order_id] = @current_order.id + return @current_order + end + end + + 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 + + # This will trigger any "first order" promotions to be triggered + # Assuming of course that this session variable was set correctly in + # the authentication provider's registrations controller + if session[:spree_user_signup] && @order + fire_event('spree.user.signup', user: try_spree_current_user, order: @order) + session[:spree_user_signup] = nil + end + + session[:guest_token] = nil + end + + def set_current_order + if user = try_spree_current_user + last_incomplete_order = user.last_incomplete_spree_order + if session[:order_id].nil? && last_incomplete_order + session[:order_id] = last_incomplete_order.id + elsif current_order(true) && last_incomplete_order && current_order != last_incomplete_order + current_order.merge!(last_incomplete_order) + end + end + end + + def current_currency + Spree::Config[:currency] + end + + def ip_address + request.env['HTTP_X_REAL_IP'] || request.env['REMOTE_ADDR'] + end + end + end + end +end