From 734fce5ce7c6b4a0904006db45589cd9ba478c3a Mon Sep 17 00:00:00 2001 From: Luis Ramos Date: Sat, 25 Jul 2020 20:55:25 +0100 Subject: [PATCH] Add code to persist payments after failed payments. The state machine rollbacks the transactions, with this we keep record of what went wrong. --- app/controllers/checkout_controller.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index dd1a67c702..b79df645c0 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -152,11 +152,23 @@ class CheckoutController < Spree::StoreController checkout_succeeded redirect_to(order_path(@order)) && return else + persist_all_payments if @order.state == "payment" flash[:error] = order_error checkout_failed end end + # When a payment fails, the order state machine rollbacks all transactions + # Here we ensure we always persist all payments + def persist_all_payments + @order.payments.each do |payment| + original_payment_state = payment.state + if original_payment_state != payment.reload.state + payment.update(state: original_payment_state) + end + end + end + def checkout_workflow(shipping_method_id) while @order.state != "complete" if @order.state == "payment"