Merge controller_helpers/order with decorator

This commit is contained in:
Luis Ramos
2020-06-27 12:46:03 +01:00
parent d5744572f7
commit 20f610fbee
2 changed files with 20 additions and 34 deletions

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'open_food_network/scope_variant_to_hub'
module Spree
module Core
module ControllerHelpers
@@ -12,8 +14,21 @@ module Spree
end
end
# The current incomplete session order used in cart and checkout
def current_order(create_order_if_necessary = false)
order = spree_current_order(create_order_if_necessary)
if order
scoper = OpenFoodNetwork::ScopeVariantToHub.new(order.distributor)
order.line_items.each do |li|
scoper.scope(li.variant)
end
end
order
end
# The current incomplete session order used in cart and checkout
def spree_current_order(create_order_if_necessary = false)
return @current_order if @current_order
if session[:order_id]
@@ -62,16 +77,19 @@ module Spree
session[:guest_token] = nil
end
# Do not attempt to merge incomplete and current orders.
# Instead, destroy the incomplete orders.
def set_current_order
return unless (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)
last_incomplete_order.destroy
end
end

View File

@@ -1,32 +0,0 @@
require 'open_food_network/scope_variant_to_hub'
Spree::Core::ControllerHelpers::Order.class_eval do
def current_order_with_scoped_variants(create_order_if_necessary = false)
order = current_order_without_scoped_variants(create_order_if_necessary)
if order
scoper = OpenFoodNetwork::ScopeVariantToHub.new(order.distributor)
order.line_items.each do |li|
scoper.scope(li.variant)
end
end
order
end
alias_method_chain :current_order, :scoped_variants
# Override definition in Spree::Core::ControllerHelpers::Order
# Do not attempt to merge incomplete and current orders. Instead, destroy the incomplete orders.
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 && last_incomplete_order && current_order != last_incomplete_order
last_incomplete_order.destroy
end
end
end
end