diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb new file mode 100644 index 0000000000..4a88592493 --- /dev/null +++ b/app/reflexes/admin/orders_reflex.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class Admin::OrdersReflex < ApplicationReflex + def capture + order = Spree::Order.find_by(id: element.dataset[:id]) + authorize! :admin, order + + payment_capture = OrderCaptureService.new(order) + + if payment_capture.call + morph dom_id(order), render(partial: "spree/admin/orders/table_row", + locals: { order: order.reload, success: true }) + else + flash[:error] = with_locale{ payment_capture.gateway_error || I18n.t(:payment_processing_failed) } + morph_admin_flashes + end + end +end diff --git a/app/views/spree/admin/orders/_table_row.html.haml b/app/views/spree/admin/orders/_table_row.html.haml index 58c09d4bed..d264d2b379 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -45,4 +45,4 @@ - if order.ready_to_ship? %button.icon-road.icon_link.with-tip.no-text{rel: 'nofollow', 'ofn-with-tip' => t('spree.admin.orders.index.ship')} - if order.payment_required? && order.pending_payments.reject(&:requires_authorization?).any? - %button.icon-capture.icon_link.no-text{rel: 'nofollow', 'ofn-with-tip' => t('spree.admin.orders.index.capture')} + %button.icon-capture.icon_link.no-text{"data-reflex": "click->Admin::OrdersReflex#capture", "data-id": order.id.to_s, 'ofn-with-tip' => t('spree.admin.orders.index.capture')}