From 95f1643cec7940faed893203b81a7390fa46fc1c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 9 May 2023 23:42:44 +0100 Subject: [PATCH] Combine related reflex actions --- app/reflexes/admin/orders_reflex.rb | 48 +++++++++++++++++++ .../bulk_actions_in_orders_list_reflex.rb | 35 -------------- app/reflexes/cancel_orders_reflex.rb | 19 -------- app/views/spree/admin/orders/index.html.haml | 6 +-- 4 files changed, 51 insertions(+), 57 deletions(-) delete mode 100644 app/reflexes/bulk_actions_in_orders_list_reflex.rb delete mode 100644 app/reflexes/cancel_orders_reflex.rb diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index db23c56a03..464a1b3c3e 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -40,10 +40,58 @@ class Admin::OrdersReflex < ApplicationReflex morph :nothing end + def cancel_orders(params) + cancelled_orders = OrdersBulkCancelService.new(params, current_user).call + + cable_ready.dispatch_event(name: "modal:close") + + cancelled_orders.each do |order| + cable_ready.replace( + selector: dom_id(order), + html: render(partial: "spree/admin/orders/table_row", locals: { order: order }) + ) + end + + cable_ready.broadcast + morph :nothing + end + + def resend_confirmation_emails(params) + editable_orders.where(id: params[:bulk_ids]).find_each do |order| + next unless can? :resend, order + + Spree::OrderMailer.confirm_email_for_customer(order.id, true).deliver_later + end + + success("admin.resend_confirmation_emails_feedback", params[:bulk_ids].count) + end + + def send_invoices(params) + count = 0 + editable_orders.where(id: params[:bulk_ids]).find_each do |o| + next unless o.distributor.can_invoice? && (o.resumed? || o.complete?) + + Spree::OrderMailer.invoice_email(o.id).deliver_later + count += 1 + end + + success("admin.send_invoice_feedback", count) + end + private def authorize_order @order = Spree::Order.find_by(id: element.dataset[:id]) authorize! :admin, @order end + + def success(i18n_key, count) + flash[:success] = with_locale { I18n.t(i18n_key, count: count) } + cable_ready.dispatch_event(name: "modal:close") + morph_admin_flashes + end + + def editable_orders + Permissions::Order.new(current_user).editable_orders + end end diff --git a/app/reflexes/bulk_actions_in_orders_list_reflex.rb b/app/reflexes/bulk_actions_in_orders_list_reflex.rb deleted file mode 100644 index 03cff66633..0000000000 --- a/app/reflexes/bulk_actions_in_orders_list_reflex.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -class BulkActionsInOrdersListReflex < ApplicationReflex - def resend_confirmation_email(order_ids) - editable_orders.where(id: order_ids).find_each do |o| - Spree::OrderMailer.confirm_email_for_customer(o.id, true).deliver_later if can? :resend, o - end - - success("admin.resend_confirmation_emails_feedback", order_ids.count) - end - - def send_invoice(order_ids) - count = 0 - editable_orders.where(id: order_ids).find_each do |o| - next unless o.distributor.can_invoice? && (o.resumed? || o.complete?) - - Spree::OrderMailer.invoice_email(o.id).deliver_later - count += 1 - end - - success("admin.send_invoice_feedback", count) - end - - private - - def success(i18n_key, count) - flash[:success] = I18n.t(i18n_key, count: count) - cable_ready.dispatch_event(name: "modal:close") - morph "#flashes", render(partial: "shared/flashes", locals: { flashes: flash }) - end - - def editable_orders - Permissions::Order.new(current_user).editable_orders - end -end diff --git a/app/reflexes/cancel_orders_reflex.rb b/app/reflexes/cancel_orders_reflex.rb deleted file mode 100644 index 472a87bf39..0000000000 --- a/app/reflexes/cancel_orders_reflex.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class CancelOrdersReflex < ApplicationReflex - def confirm(params) - cancelled_orders = OrdersBulkCancelService.new(params, current_user).call - - cable_ready.dispatch_event(name: "modal:close") - - cancelled_orders.each do |order| - cable_ready.replace( - selector: dom_id(order), - html: render(partial: "spree/admin/orders/table_row", locals: { order: order }) - ) - end - - cable_ready.broadcast - morph :nothing - end -end diff --git a/app/views/spree/admin/orders/index.html.haml b/app/views/spree/admin/orders/index.html.haml index a7d64de200..26a7965a69 100644 --- a/app/views/spree/admin/orders/index.html.haml +++ b/app/views/spree/admin/orders/index.html.haml @@ -20,14 +20,14 @@ = render 'spree/admin/shared/custom-confirm' -= render ConfirmModalComponent.new(id: "resend_confirmation", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "BulkActionsInOrdersList#resend_confirmation_email") do += render ConfirmModalComponent.new(id: "resend_confirmation", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "Admin::Orders#resend_confirmation_emails") do .margin-bottom-30 = t('.resend_confirmation_confirm_html') -= render ConfirmModalComponent.new(id: "send_invoice", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "BulkActionsInOrdersList#send_invoice") do += render ConfirmModalComponent.new(id: "send_invoice", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "Admin::Orders#send_invoices") do .margin-bottom-30 = t('.send_invoice_confirm_html') -= render ConfirmModalComponent.new(id: "cancel_orders", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "CancelOrders#confirm", message: "spree/admin/orders/messages/cancel_orders") do += render ConfirmModalComponent.new(id: "cancel_orders", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "Admin::Orders#cancel_orders", message: "spree/admin/orders/messages/cancel_orders") do .margin-bottom-30 = t("js.admin.orders.cancel_the_order_html")