Sha256: 5d2b3ae490046556feed0639af77f731888d5ca5370e677ddefd9c5f7c47f0a7

Contents?: true

Size: 1.05 KB

Versions: 6

Compression:

Stored size: 1.05 KB

Contents

module Spree
  module Stock
    class AvailabilityValidator < ActiveModel::Validator
      def validate(line_item)
        if is_valid?(line_item)
          true
        else
          variant = line_item.variant
          display_name = variant.name.to_s
          display_name += %{ (#{variant.options_text})} unless variant.options_text.blank?

          line_item.errors[:quantity] << I18n.t(
            'spree.selected_quantity_not_available',
            item: display_name.inspect
          )
          false
        end
      end

      private

      def is_valid?(line_item)
        if line_item.inventory_units.empty?
          Stock::Quantifier.new(line_item.variant).can_supply?(line_item.quantity)
        else
          quantity_by_stock_location_id = line_item.inventory_units.pending.joins(:shipment).group(:stock_location_id).count
          quantity_by_stock_location_id.all? do |stock_location_id, quantity|
            Stock::Quantifier.new(line_item.variant, stock_location_id).can_supply?(quantity)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
solidus_core-2.5.2 app/models/spree/stock/availability_validator.rb
solidus_core-2.5.1 app/models/spree/stock/availability_validator.rb
solidus_core-2.5.0 app/models/spree/stock/availability_validator.rb
solidus_core-2.5.0.rc1 app/models/spree/stock/availability_validator.rb
solidus_core-2.5.0.beta2 app/models/spree/stock/availability_validator.rb
solidus_core-2.5.0.beta1 app/models/spree/stock/availability_validator.rb