Sha256: 7b4d34b44f341887d6be79d866fb7bcb135c2bbeb61aed1c4f7d328d3ec6547f

Contents?: true

Size: 1.19 KB

Versions: 22

Compression:

Stored size: 1.19 KB

Contents

module Spree
  module Stock
    class AvailabilityValidator < ActiveModel::Validator
      def validate(line_item)
        unit_count = line_item.inventory_units.reject(&:pending?).sum(&:quantity)
        return if unit_count >= line_item.quantity

        quantity = line_item.quantity - unit_count
        return if quantity.zero?

        return if item_available?(line_item, quantity)

        variant = line_item.variant
        display_name = variant.name.to_s
        display_name += " (#{variant.options_text})" unless variant.options_text.blank?

        if variant.available?
          line_item.errors.add(:quantity,
                               :selected_quantity_not_available,
                               message: Spree.t(:selected_quantity_not_available, item: display_name.inspect))
        else
          line_item.errors.add(:base,
                               :only_active_products_can_be_added_to_cart,
                               message: Spree.t(:only_active_products_can_be_added_to_cart))
        end
      end

      private

      def item_available?(line_item, quantity)
        Spree::Stock::Quantifier.new(line_item.variant).can_supply?(quantity)
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
spree_core-4.10.1 app/models/spree/stock/availability_validator.rb
spree_core-4.10.0 app/models/spree/stock/availability_validator.rb
spree_core-4.9.0 app/models/spree/stock/availability_validator.rb
spree_core-4.8.3 app/models/spree/stock/availability_validator.rb
spree_core-4.8.2 app/models/spree/stock/availability_validator.rb
spree_core-4.7.3 app/models/spree/stock/availability_validator.rb
spree_core-4.6.6 app/models/spree/stock/availability_validator.rb
spree_core-4.5.5 app/models/spree/stock/availability_validator.rb
spree_core-4.5.4 app/models/spree/stock/availability_validator.rb
spree_core-4.6.5 app/models/spree/stock/availability_validator.rb
spree_core-4.7.2 app/models/spree/stock/availability_validator.rb
spree_core-4.7.1 app/models/spree/stock/availability_validator.rb
spree_core-4.6.4 app/models/spree/stock/availability_validator.rb
spree_core-4.7.0 app/models/spree/stock/availability_validator.rb
spree_core-4.6.3 app/models/spree/stock/availability_validator.rb
spree_core-4.6.2 app/models/spree/stock/availability_validator.rb
spree_core-4.6.1 app/models/spree/stock/availability_validator.rb
spree_core-4.6.0 app/models/spree/stock/availability_validator.rb
spree_core-4.5.3 app/models/spree/stock/availability_validator.rb
spree_core-4.5.2 app/models/spree/stock/availability_validator.rb