Sha256: 51957b536a5fd6155be9606f19bc45f9f41bfc8fa95abb62990ca1a9d5fda838
Contents?: true
Size: 1.39 KB
Versions: 13
Compression:
Stored size: 1.39 KB
Contents
module Spree module Stock class Prioritizer attr_reader :packages def initialize(packages, adjuster_class=Adjuster) @packages = packages @adjuster_class = adjuster_class @adjusters = Hash.new end def prioritized_packages sort_packages adjust_packages prune_packages packages end private def adjust_packages packages.each do |package| package.contents.each do |item| adjuster = find_adjuster(item) if adjuster.nil? adjuster = build_adjuster(item, package) elsif item.state == :on_hand && adjuster.status == :backordered # Remove item from backordered package adjuster.package.remove(item.inventory_unit) # Reassign adjuster's status package adjuster.reassign(:on_hand, package) end adjuster.adjust(package) end end end def build_adjuster(item, package) @adjusters[item.inventory_unit] = @adjuster_class.new(item.inventory_unit, item.state, package) end def find_adjuster(item) @adjusters[item.inventory_unit] end def sort_packages # order packages by preferred stock_locations end def prune_packages packages.reject! { |pkg| pkg.empty? } end end end end
Version data entries
13 entries across 13 versions & 1 rubygems