Skip to content

Instantly share code, notes, and snippets.

@r3ap3r2004
Created November 10, 2011 12:24
Show Gist options
  • Save r3ap3r2004/1354740 to your computer and use it in GitHub Desktop.
Save r3ap3r2004/1354740 to your computer and use it in GitHub Desktop.
Add a step to the order process
Order.class_eval do
state_machine :initial => :cart, :use_transactions => false do
event :next do
transition :from => 'cart', :to => 'orderdetails'
transition :from => 'orderdetails', :to => 'address'
transition :from => 'address', :to => 'delivery'
transition :from => 'delivery', :to => 'payment', :if => :payment_required?
transition :from => 'delivery', :to => 'complete'
transition :from => 'confirm', :to => 'complete'
# note: some payment methods will not support a confirm step
transition :from => 'payment', :to => 'confirm',
:if => Proc.new { Gateway.current && Gateway.current.payment_profiles_supported? }
transition :from => 'payment', :to => 'complete'
end
event :cancel do
transition :to => 'canceled', :if => :allow_cancel?
end
event :return do
transition :to => 'returned', :from => 'awaiting_return'
end
event :resume do
transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?
end
event :authorize_return do
transition :to => 'awaiting_return'
end
before_transition :to => 'complete' do |order|
begin
order.process_payments!
rescue Spree::GatewayError
if Spree::Config[:allow_checkout_on_gateway_error]
true
else
false
end
end
end
after_transition :to => 'complete', :do => :finalize!
after_transition :to => 'delivery', :do => :create_tax_charge!
after_transition :to => 'payment', :do => :create_shipment!
after_transition :to => 'canceled', :do => :after_cancel
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment