Sha256: 12b1b2434dfd5f1510ee521ebb7ab7cabf43e4e9598879f9352aed76171218c1

Contents?: true

Size: 1.42 KB

Versions: 21

Compression:

Stored size: 1.42 KB

Contents

module Spree
  module Stock
    class Quantifier
      attr_reader :stock_items

      def initialize(variant, stock_location = nil)
        @variant = variant
        where_args = { variant_id: @variant }
        if stock_location
          where_args[:stock_location] = stock_location
        else
          where_args[Spree::StockLocation.table_name] = { active: true }
        end
        @stock_items = Spree::StockItem.joins(:stock_location).where(where_args)
      end

      # Returns the total number of inventory units on hand for the variant.
      #
      # @return [Fixnum] number of inventory units on hand, or infinity if
      #   inventory is not tracked on the variant.
      def total_on_hand
        if @variant.should_track_inventory?
          stock_items.sum(:count_on_hand)
        else
          Float::INFINITY
        end
      end

      # Checks if any of its stock items are backorderable.
      #
      # @return [Boolean] true if any stock items are backorderable
      def backorderable?
        stock_items.any?(&:backorderable)
      end

      # Checks if it is possible to supply a given number of units.
      #
      # @param required [Fixnum] the number of required stock units
      # @return [Boolean] true if we have the required amount on hand or the
      #   variant is backorderable, otherwise false
      def can_supply?(required)
        total_on_hand >= required || backorderable?
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
solidus_core-2.1.1 app/models/spree/stock/quantifier.rb
solidus_core-2.0.3 app/models/spree/stock/quantifier.rb
solidus_core-1.4.2 app/models/spree/stock/quantifier.rb
solidus_core-1.3.2 app/models/spree/stock/quantifier.rb
solidus_core-2.0.2 app/models/spree/stock/quantifier.rb
solidus_core-1.4.1 app/models/spree/stock/quantifier.rb
solidus_core-2.1.0 app/models/spree/stock/quantifier.rb
solidus_core-2.1.0.rc1 app/models/spree/stock/quantifier.rb
solidus_core-2.0.1 app/models/spree/stock/quantifier.rb
solidus_core-2.1.0.beta1 app/models/spree/stock/quantifier.rb
solidus_core-2.0.0 app/models/spree/stock/quantifier.rb
solidus_core-1.4.0 app/models/spree/stock/quantifier.rb
solidus_core-2.0.0.rc1 app/models/spree/stock/quantifier.rb
solidus_core-1.4.0.rc1 app/models/spree/stock/quantifier.rb
solidus_core-2.0.0.beta1 app/models/spree/stock/quantifier.rb
solidus_core-1.4.0.beta1 app/models/spree/stock/quantifier.rb
solidus_core-1.3.1 app/models/spree/stock/quantifier.rb
solidus_core-1.3.0 app/models/spree/stock/quantifier.rb
solidus_core-1.3.0.rc2 app/models/spree/stock/quantifier.rb
solidus_core-1.3.0.rc1 app/models/spree/stock/quantifier.rb