Skip to content

Commit

Permalink
Perf improvements for Stock::Coordinator#build_packages
Browse files Browse the repository at this point in the history
  • Loading branch information
jordan-brough committed Dec 21, 2015
1 parent ca34c66 commit 290c03b
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions core/app/models/spree/stock/coordinator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,8 @@ def build_location_configured_packages(packages = Array.new)
#
# Returns an array of Package instances
def build_packages(packages = Array.new)
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) }
stock_location_variant_ids.each do |stock_location, variant_ids|
units_for_location = unallocated_inventory_units.select { |unit| variant_ids.include?(unit.variant_id) }
packer = build_packer(stock_location, units_for_location)
packages += packer.packages
end
Expand All @@ -66,12 +65,19 @@ def build_packages(packages = Array.new)

private

def unallocated_inventory_units
inventory_units - @preallocated_inventory_units
def stock_location_variant_ids
location_variant_ids = StockItem.where(variant_id: unallocated_variant_ids).joins(:stock_location).merge(StockLocation.active).pluck(:stock_location_id, :variant_id)

location_lookup = StockLocation.where(id: location_variant_ids.map(&:first).uniq).map { |l| [l.id, l] }.to_h

location_variant_ids.each_with_object({}) do |(location_id, variant_id), hash|
hash[location_lookup[location_id]] ||= Set.new
hash[location_lookup[location_id]] << variant_id
end
end

def requested_stock_items
Spree::StockItem.where(variant_id: unallocated_variant_ids).joins(:stock_location).merge(StockLocation.active).includes(:stock_location)
def unallocated_inventory_units
inventory_units - @preallocated_inventory_units
end

def unallocated_variant_ids
Expand Down

0 comments on commit 290c03b

Please sign in to comment.