Изменение потока оформления заказа в spree-0.10.2

Мне нужен процесс оформления заказа без этапов доставки и оплаты (работаю в магазине, который принимает наложенный платеж, поэтому мне нужен только этап адреса). Я использую Веселье 0.10.2

Вещи, которые я пробовал: В site_extension.rb добавлен следующий конечный автомат

Checkout.state_machines[:state] = StateMachine::Machine.new(Checkout, :initial => 'address') do 
      after_transition :to => 'complete', :do => :complete_order 
      before_transition :to => 'complete', :do => :process_payment 
      event :next do 
        transition :to => 'complete', :from => 'address' 
      end 
    end 

Нежелательные шаги удаляются (по крайней мере, визуально), но когда я отправляю адрес, он выдает следующую ошибку.

IndexError в CheckoutsController#update «платеж» — недопустимое имя

Глядя на трассировку и пару подобных ошибок позже, я решаю вслепую переопределить два метода из checkouts_controller.rb в site_extension.rb, чтобы ничего не делать (поскольку я полагаю, что они имеют дело с оплатой)

 def clear_payments_if_in_payment_state 
 end

 def object_params 
 end

При этом возникают ошибки проверки во всех полях адреса доставки и платежного адреса. У меня смутное представление о том, что мне нужно переопределить пару методов из checkouts_controller.rb. Если это понятие верно, то каковы эти методы.


person Community    schedule 05.04.2010    source источник


Ответы (2)


Тебе следует :

1) Удалите шаг перехода платежа и состояния доставки.

2) Также переопределение метода payment_required.

3) Эти шаги должны быть в order_decorator.rb в каталоге app/models/spree.

checkout_flow do
    go_to_state :address
   # go_to_state :payment
    go_to_state :complete
    remove_transition :from => :delivery, :to => :confirm
    remove_transition :from => :delivery, :to => :confirm
    remove_transition :from => :payment, :to => :confirm
  end
  #Spree::Order.state_machine.before_transition :to => :payment, :do => :set_order

  def set_order
    self.create_proposed_shipments
  end
  def require_email
    return false
  end
  def payment_required?
    false
  end

Я тестировал это на веселье 2-0-стабильный с рельсами 3.2.14.

person Community    schedule 30.08.2013
comment
Хотя это для другой версии, чем то, о чем я просил, я принял ответ, потому что он должен работать для последней версии. - person kgthegreat; 24.09.2013

Извините, я не могу вам помочь: настройка процесса оформления заказа с помощью Spree 0.10.2 — это своего рода кошмар. Но я бы порекомендовал перейти на более новую версию Spree, например 1.3-stable. Если вы переключитесь на него, это будет так же просто, как создать файл order_decorator.rb в your_app_folder/app/models/spree со следующим кодом:

Spree::Order.class_eval do
  remove_checkout_step :delivery 
  remove_checkout_step :payment
end
person Community    schedule 26.08.2013