2


1

spree-0.10.2でのチェックアウトフローの変更

配送と支払いのステップのないチェックアウトプロセスが必要です(代金引換を受け入れる店舗で働いているため、住所のステップのみが必要です)。http://spreecommerce.com/ [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

不要な手順は(少なくとも視覚的に)削除されますが、アドレスを送信すると、次のエラーがスローされます。

_ CheckoutsController#updateのIndexError "payment"は無効な名前です _

トレースといくつかの同様のエラーを後で見て、私は盲目的にsite_extension.rbのcheckouts_controller.rbの2つのメソッドをオーバーライドして、何もしないことを決定します(支払いを処理するため)

 def clear_payments_if_in_payment_state
 end

 def object_params
 end

これを行うと、配達および請求先住所のすべてのフィールドで検証エラーがスローされます。 私は漠然と、checkouts_controller.rbのいくつかのメソッドをオーバーライドする必要があるという考えを持っています。 この概念が正しい場合、それらの方法は何ですか。

2 Answer


1


申し訳ありませんが、私は本当にあなたを助けることはできません:Spree 0.10.2でチェックアウトプロセスをカスタマイズすることは一種の悪夢です。 しかし、* 1.3-stable *のような、より新しいバージョンのSpreeに切り替えることをお勧めします。 それに切り替えた場合、次のコードで your_app_folder / app / models / spree`に order_decorator.rb`ファイルを作成するのと同じくらい簡単です:

Spree::Order.class_eval do
  remove_checkout_step :delivery
  remove_checkout_step :payment
end


1


必要がある :

1)paymenttransitionおよびdelivery state transitionステップを削除します。

2)payment_requiredメソッドもオーバーライドします。

3)これらの手順は、app / models / spreeディレクトリの下のorder_decorator.rbにある必要があります。

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

これをレール3.2.14で2-0安定状態でテストしました。