Sha256: 1497d04e94f9aae6324f4c1c2d5a9a2a25c617968a053835ff74d452506e40f7

Contents?: true

Size: 1.07 KB

Versions: 21

Compression:

Stored size: 1.07 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 = variant.name.to_s
          display_name += %{ (#{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

21 entries across 21 versions & 1 rubygems

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