mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +00:00
43 lines
854 B
Ruby
43 lines
854 B
Ruby
class AdvanceOrderService
|
|
attr_reader :order
|
|
|
|
def initialize(order)
|
|
@order = order
|
|
end
|
|
|
|
def call
|
|
advance_order(advance_order_options)
|
|
end
|
|
|
|
def call!
|
|
advance_order!(advance_order_options)
|
|
end
|
|
|
|
private
|
|
|
|
def advance_order_options
|
|
shipping_method_id = order.shipping_method.id if order.shipping_method.present?
|
|
{ shipping_method_id: shipping_method_id }
|
|
end
|
|
|
|
def advance_order(options)
|
|
until order.state == "complete"
|
|
break unless order.next
|
|
after_transition_hook(options)
|
|
end
|
|
end
|
|
|
|
def advance_order!(options)
|
|
until order.completed?
|
|
order.next!
|
|
after_transition_hook(options)
|
|
end
|
|
end
|
|
|
|
def after_transition_hook(options)
|
|
if order.state == "delivery"
|
|
order.select_shipping_method(options[:shipping_method_id]) if options[:shipping_method_id]
|
|
end
|
|
end
|
|
end
|