Class: Spree::Cart::RemoveOutOfStockItems

Inherits:
Object
  • Object
show all
Includes:
ServiceModule::Base
Defined in:
app/services/spree/cart/remove_out_of_stock_items.rb

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/services/spree/cart/remove_out_of_stock_items.rb', line 6

def call(order:)
  @messages = []

  return success([order, @messages]) if order.item_count.zero? || order.line_items.none?

  line_items = order.line_items.includes(variant: [:product, :stock_items, :stock_locations, { stock_items: :stock_location }])

  ActiveRecord::Base.transaction do
    line_items.each do |line_item|
      cart_remove_line_item_service.call(order: order, line_item: line_item) if !valid_status?(line_item) || !stock_available?(line_item)
    end
  end

  if @messages.any? # If any line item was removed, reload the order
    success([order.reload, @messages])
  else
    success([order, @messages])
  end
end