Class: Spree::Cart::RemoveLineItem

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

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:, line_item:, options: nil) ⇒ Object



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

def call(order:, line_item:, options: nil)
  options ||= {}
  ActiveRecord::Base.transaction do
    order.line_items.destroy(line_item)

    # LineItem dependent: :destroy removes its own reservation row;
    # remaining items may need a fresh reservation pass when in checkout.
    if order.in_checkout? && order.line_items.any?
      result = Spree::StockReservations::Reserve.call(order: order)
      raise Spree::StockReservations::InsufficientStockError.new(nil, result.error.to_s) if result.failure?
    end

    Spree.cart_recalculate_service.new.call(order: order,
                                            line_item: line_item,
                                            options: options)
  end
  success(line_item)
rescue Spree::StockReservations::InsufficientStockError => e
  failure(line_item, e.message)
end