mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-20 04:59:16 +00:00
38 lines
1.1 KiB
Ruby
38 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module PaymentGateways
|
|
class TalerController < BaseController
|
|
include OrderStockCheck
|
|
include OrderCompletion
|
|
|
|
class StockError < StandardError
|
|
end
|
|
|
|
# The Taler merchant backend has taken the payment.
|
|
# Now we just need to confirm that and update our local database
|
|
# before finalising the order.
|
|
def confirm
|
|
payment = Spree::Payment.find(params[:payment_id])
|
|
|
|
# Process payment early because it's probably paid already.
|
|
# We want to capture that before any validations raise errors.
|
|
unless payment.process!
|
|
return redirect_to order_failed_route(step: "payment")
|
|
end
|
|
|
|
@order = payment.order
|
|
OrderLocker.lock_order_and_variants(@order) do
|
|
raise StockError unless sufficient_stock?
|
|
|
|
process_payment_completion!
|
|
end
|
|
rescue Spree::Core::GatewayError => e
|
|
flash[:notice] = e.message
|
|
redirect_to order_failed_route(step: "payment")
|
|
rescue StockError
|
|
flash[:notice] = t("checkout.payment_cancelled_due_to_stock")
|
|
redirect_to main_app.checkout_step_path(step: "details")
|
|
end
|
|
end
|
|
end
|