Class: Spree::Orders::Complete

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

Overview

Admin-side order completion.

Distinct from Spree::Carts::Complete (storefront checkout). Callers must wrap invocation in Spree::Api::V3::OrderLock#with_order_lock — this service does not lock the row itself.

Instance Method Summary collapse

Methods included from ServiceModule::Base

prepended

Instance Method Details

#call(order:, payment_pending: false, notify_customer: false) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/services/spree/orders/complete.rb', line 20

def call(order:, payment_pending: false, notify_customer: false)
  order.notify_customer = notify_customer

  return success(order) if order.completed?
  return failure(order, 'Order is canceled') if order.canceled?

  process_payments!(order) if order.payment_required? && !payment_pending

  return failure(order, order.errors.full_messages.to_sentence) if order.errors.any?

  advance_to_complete!(order)

  if order.reload.complete?
    success(order)
  else
    failure(order, order.errors.full_messages.to_sentence.presence || 'Could not complete order')
  end
end