From 7da65bf08cc21877631d0e56d778da67f518c78c Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 2 Dec 2015 14:07:14 -0800 Subject: [PATCH] Combine stock item queries GROUP BY query --- core/app/models/spree/stock/coordinator.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/app/models/spree/stock/coordinator.rb b/core/app/models/spree/stock/coordinator.rb index d19c7800742..685111d5ece 100644 --- a/core/app/models/spree/stock/coordinator.rb +++ b/core/app/models/spree/stock/coordinator.rb @@ -55,8 +55,9 @@ def build_location_configured_packages(packages = Array.new) # # Returns an array of Package instances def build_packages(packages = Array.new) - stock_locations_with_requested_variants.each do |stock_location| - units_for_location = unallocated_inventory_units.select { |unit| stock_location.stock_item(unit.variant) } + requested_stock_items.group_by(&:stock_location).each do |stock_location, stock_items| + variant_ids_in_stock_location = stock_items.map(&:variant_id) + units_for_location = unallocated_inventory_units.select { |unit| variant_ids_in_stock_location.include?(unit.variant_id) } packer = build_packer(stock_location, units_for_location) packages += packer.packages end @@ -69,9 +70,8 @@ def unallocated_inventory_units inventory_units - @preallocated_inventory_units end - def stock_locations_with_requested_variants - Spree::StockLocation.active.joins(:stock_items). - where(spree_stock_items: { variant_id: unallocated_variant_ids }).uniq + def requested_stock_items + Spree::StockItem.where(variant_id: unallocated_variant_ids).joins(:stock_location).merge(StockLocation.active).includes(:stock_location) end def unallocated_variant_ids