Guest User

Untitled

a guest
Nov 21st, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. module Spree
  2. class Order < ActiveRecord::Base
  3. module DefaultCheckout
  4.  
  5. def self.included(klass)
  6. klass.class_eval do
  7. delegate :next, :next!, :to => :machine
  8. end
  9. end
  10.  
  11. def machine
  12. order = self
  13. @machine ||= Spree::Order::Checkout::Machine.new(order, :initial => "cart") do
  14. order.transitions.each { |attrs| transition(attrs) }
  15.  
  16. event :cancel do
  17. transition :to => 'canceled', :if => :allow_cancel?
  18. end
  19. event :return do
  20. transition :to => 'returned', :from => 'awaiting_return'
  21. end
  22. event :resume do
  23. transition :to => 'resumed', :from => 'canceled', :if => :allow_resume?
  24. end
  25. event :authorize_return do
  26. transition :to => 'awaiting_return'
  27. end
  28.  
  29. before_transition :to => 'complete' do |order|
  30. begin
  31. order.process_payments!
  32. rescue Core::GatewayError
  33. !!Spree::Config[:allow_checkout_on_gateway_error]
  34. end
  35. end
  36.  
  37. before_transition :to => 'delivery' do
  38. order.remove_invalid_shipments!
  39. end
  40.  
  41. # after_transition :to => 'complete', :do => :finalize!
  42. # after_transition :to => 'delivery', :do => :create_tax_charge!
  43. # after_transition :to => 'payment', :do => :create_shipment!
  44. # after_transition :to => 'resumed', :do => :after_resume
  45. # after_transition :to => 'canceled', :do => :after_cancel
  46.  
  47. # Persist the state on the order
  48. after_transition do
  49. order.state = order.machine.state
  50. order.save
  51. end
  52. end
  53. end
  54.  
  55. def transitions
  56. [
  57. { "cart" => "address", :on => :next },
  58. { "address" => "delivery", :on => :next },
  59. { "delivery" => "payment", :on => :next, :if => :payment_required? },
  60. { "payment" => "confirm", :on => :next, :if => :confirmation_required? },
  61. { "payment" => "complete", :on => :next },
  62. { "delivery" => "complete", :on => :next },
  63. { "confirm" => "complete", :on => :next }
  64. ]
  65. end
  66. end
  67. end
  68. end
Add Comment
Please, Sign In to add comment