Module: Spree::Admin::PaymentsControllerDecorator

Defined in:
app/controllers/spree/admin/payments_controller_decorator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.prepended(base) ⇒ Object



4
5
6
# File 'app/controllers/spree/admin/payments_controller_decorator.rb', line 4

def self.prepended(base)
  base.before_action :set_vpago_payment_source, only: %i[create update]
end

Instance Method Details

#createObject

override For vpago gateways created from the admin backend, we skip immediate processing and keep the payment in checkout state so the admin can open the QR checkout URL and pay on behalf of the customer. The bank webhook (process_payment -> Vpago::PaymentProcessorJob) completes the order once paid.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/controllers/spree/admin/payments_controller_decorator.rb', line 21

def create
  return super unless @payment_method&.vpago_payment?

  invoke_callbacks(:create, :before)

  @payment = @order.payments.build(object_params)

  if @payment.save
    invoke_callbacks(:create, :after)
    flash[:success] = flash_message_for(@payment, :successfully_created)
    redirect_to spree.admin_order_payments_path(@order)
  else
    invoke_callbacks(:create, :fails)
    flash[:error] = Spree.t(:payment_could_not_be_created)
    render :new, status: :unprocessable_entity
  end
rescue Spree::Core::GatewayError => e
  invoke_callbacks(:create, :fails)
  flash[:error] = e.message.to_s
  redirect_to spree.new_admin_order_payment_path(@order)
end

#fireObject

override Before the normal process! re-runs the gateway, reset a stuck vpago payment back to checkout. Admin reprocess only — the automatic webhook path is untouched (it auto-resets failed alone).



47
48
49
50
# File 'app/controllers/spree/admin/payments_controller_decorator.rb', line 47

def fire
  reset_stuck_payment_for_reprocess!
  super
end

#set_vpago_payment_sourceObject



8
9
10
11
12
13
14
# File 'app/controllers/spree/admin/payments_controller_decorator.rb', line 8

def set_vpago_payment_source
  payment_method ||= Spree::PaymentMethod.find(params[:payment][:payment_method_id])
  return unless payment_method.vpago_payment?

  source_params = { payment_option: payment_method.try(:preferred_payment_option) }
  params[:payment][:source_attributes] = source_params
end