diff --git a/app/models/spree/stock/availability_validator.rb b/app/models/spree/stock/availability_validator.rb new file mode 100644 index 0000000000..fe9bc19442 --- /dev/null +++ b/app/models/spree/stock/availability_validator.rb @@ -0,0 +1,25 @@ +module Spree + module Stock + class AvailabilityValidator < ActiveModel::Validator + def validate(line_item) + if shipment = line_item.target_shipment + units = shipment.inventory_units_for(line_item.variant) + return if units.count > line_item.quantity + quantity = line_item.quantity - units.count + else + quantity = line_item.quantity + end + + quantifier = Stock::Quantifier.new(line_item.variant_id) + + 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(:out_of_stock, :scope => :order_populator, :item => display_name.inspect) + end + end + end + end +end