Промяна на потока на плащане в spree-0.10.2

Имам нужда от процес на плащане, лишен от стъпка за доставка и плащане (работя в магазин, който приема наложен платеж, така че имам нужда само от стъпката за адрес.) Използвам Spree 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

Тествах това на spree 2-0-stable с rails 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