diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index 4a88592493..5e03440c72 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -1,18 +1,34 @@ # frozen_string_literal: true class Admin::OrdersReflex < ApplicationReflex - def capture - order = Spree::Order.find_by(id: element.dataset[:id]) - authorize! :admin, order + before_reflex :authorize_order, only: [:capture, :ship] - payment_capture = OrderCaptureService.new(order) + def capture + 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 }) + 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 + + def ship + if @order.ship + morph dom_id(@order), render(partial: "spree/admin/orders/table_row", + locals: { order: @order.reload, success: true }) + else + flash[:error] = with_locale{ I18n.t("api.orders.failed_to_update") } + morph_admin_flashes + end + end + + private + + def authorize_order + @order = Spree::Order.find_by(id: element.dataset[:id]) + authorize! :admin, @order + 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 d264d2b379..c91ef83936 100644 --- a/app/views/spree/admin/orders/_table_row.html.haml +++ b/app/views/spree/admin/orders/_table_row.html.haml @@ -43,6 +43,6 @@ %i.success.icon-ok-sign{"data-controller": "ephemeral"} %a.icon_link.with-tip.icon-edit.no-text{href: edit_admin_order_path(order), 'ofn-with-tip' => t('spree.admin.orders.index.edit')} - 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')} + %button.icon-road.icon_link.with-tip.no-text{"data-reflex": "click->Admin::OrdersReflex#ship", "data-id": order.id.to_s, '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{"data-reflex": "click->Admin::OrdersReflex#capture", "data-id": order.id.to_s, 'ofn-with-tip' => t('spree.admin.orders.index.capture')}