Sha256: 0b7d9b031fcbc23d4aaa7217788ae1d1faae10384fb98355490424e7fbedbf48

Contents?: true

Size: 1.33 KB

Versions: 23

Compression:

Stored size: 1.33 KB

Contents

module Spree
  module Stock
    class Packer
      attr_reader :stock_location, :inventory_units, :splitters

      def initialize(stock_location, inventory_units, splitters=[Splitter::Base])
        @stock_location = stock_location
        @inventory_units = inventory_units
        @splitters = splitters
      end

      def packages
        if splitters.empty?
          [default_package]
        else
          build_splitter.split [default_package]
        end
      end

      def default_package
        package = Package.new(stock_location)
        inventory_units.group_by(&:variant).each do |variant, variant_inventory_units|
          units = variant_inventory_units.clone
          if variant.should_track_inventory?
            next unless stock_location.stock_item(variant)

            on_hand, backordered = stock_location.fill_status(variant, units.size)
            package.add_multiple units.slice!(0, on_hand), :on_hand if on_hand > 0
            package.add_multiple units.slice!(0, backordered), :backordered if backordered > 0
          else
            package.add_multiple units
          end

        end
        package
      end

      private
      def build_splitter
        splitter = nil
        splitters.reverse.each do |klass|
          splitter = klass.new(self, splitter)
        end
        splitter
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
goca-spree-core-3.1.14.rails.5.0.1 app/models/spree/stock/packer.rb
goca-spree-core-3.1.14.rails.5.0 app/models/spree/stock/packer.rb
goca-spree-core-3.1.15.rails.5.0 app/models/spree/stock/packer.rb
goca-spree-core-3.1.15.pre.rails.pre.5.0 app/models/spree/stock/packer.rb
spree_core-3.1.14 app/models/spree/stock/packer.rb
spree_core-3.1.13 app/models/spree/stock/packer.rb
spree_core-3.1.12 app/models/spree/stock/packer.rb
spree_core-3.1.11 app/models/spree/stock/packer.rb
spree_core-3.1.10 app/models/spree/stock/packer.rb
spree_core-3.1.9 app/models/spree/stock/packer.rb
spree_core-3.1.8 app/models/spree/stock/packer.rb
spree_core-3.1.7 app/models/spree/stock/packer.rb
spree_core-3.1.6 app/models/spree/stock/packer.rb
spree_core-3.1.5 app/models/spree/stock/packer.rb
spree_core-3.1.4 app/models/spree/stock/packer.rb
spree_core-3.1.3 app/models/spree/stock/packer.rb
spree_core-3.1.2 app/models/spree/stock/packer.rb
spree_core-3.1.1 app/models/spree/stock/packer.rb
spree_core-3.1.0 app/models/spree/stock/packer.rb
spree_core-3.1.0.rc4 app/models/spree/stock/packer.rb