Sha256: b95b904d0058a483d1c29ba1b75c0fa4ba558c1d950cf0509fc503e97b72a2b9

Contents?: true

Size: 1.08 KB

Versions: 28

Compression:

Stored size: 1.08 KB

Contents

module Spree
  module Stock
    class AvailabilityValidator < ActiveModel::Validator
      def validate(line_item)
        units_by_shipment = line_item.inventory_units.group_by(&:shipment)

        if units_by_shipment.blank?
          ensure_in_stock(line_item, line_item.quantity)
        else
          units_by_shipment.each do |shipment, inventory_units|
            ensure_in_stock(line_item, inventory_units.size, shipment.stock_location)
          end
        end

        line_item.errors[:quantity].empty?
      end

      private

      def ensure_in_stock(line_item, quantity, stock_location = nil)
        quantifier = Stock::Quantifier.new(line_item.variant, stock_location)
        unless quantifier.can_supply?(quantity)
          variant = line_item.variant
          display_name = %Q{#{variant.name}}
          display_name += %Q{ (#{variant.options_text})} unless variant.options_text.blank?

          line_item.errors[:quantity] << Spree.t(
            :selected_quantity_not_available,
            item: display_name.inspect
          )
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
solidus_core-1.2.3 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.4 app/models/spree/stock/availability_validator.rb
solidus_core-1.0.7 app/models/spree/stock/availability_validator.rb
solidus_core-1.0.6 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.2 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.1 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.3 app/models/spree/stock/availability_validator.rb
solidus_core-1.0.5 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.0 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.0.rc2 app/models/spree/stock/availability_validator.rb
solidus_core-1.0.4 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.2 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.0.rc1 app/models/spree/stock/availability_validator.rb
solidus_core-1.2.0.beta1 app/models/spree/stock/availability_validator.rb
solidus_core-1.0.3 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.1 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.0 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.0.pre2 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.0.pre1 app/models/spree/stock/availability_validator.rb
solidus_core-1.1.0.beta1 app/models/spree/stock/availability_validator.rb