Class: Dscf::Marketplace::OrderValidationService
- Inherits:
-
Object
- Object
- Dscf::Marketplace::OrderValidationService
- Defined in:
- app/services/dscf/marketplace/order_validation_service.rb
Class Method Summary collapse
-
.validate(order) ⇒ Object
Validates all items in an order against current listings / availability.
- .validate_item(item) ⇒ Object
Class Method Details
.validate(order) ⇒ Object
Validates all items in an order against current listings / availability. Sets validation_status on each OrderItem per the requirements doc: validated, no_longer_listed, price_changed, low_quantity Also populates resolved_* fields where applicable.
8 9 10 11 12 13 14 15 16 17 |
# File 'app/services/dscf/marketplace/order_validation_service.rb', line 8 def self.validate(order) order.order_items.each do |item| validate_item(item) end # Transition order to splitting ready if all validated if order.order_items.all? { |i| i.validation_status == "validated" } order.update!(status: :splitting) if order.validating? end order.reload end |
.validate_item(item) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'app/services/dscf/marketplace/order_validation_service.rb', line 20 def self.validate_item(item) current_listing = find_current_active_listing(item) return mark_no_longer_listed(item) unless current_listing current_price = current_listing.price current_qty = current_listing.quantity if current_price != item.unit_price item.validation_status = :price_changed item.validation_note = "Price changed (listed: #{current_price})" item.resolved_unit_price = item.unit_price # keep original order price by default (user can choose listed later) elsif item.quantity > current_qty item.validation_status = :low_quantity item.validation_note = "Low quantity available (listed: #{current_qty})" item.resolved_quantity = [ item.quantity, current_qty ].min else item.validation_status = :validated item.validation_note = nil item.resolved_unit_price = nil item.resolved_quantity = nil end item.save! if item.changed? item end |