diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index b52136391e05..ca255d8ef582 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -32,19 +32,9 @@ def ship end def bulk_invoice(params) - visible_orders = editable_orders.invoiceable.where(id: params[:bulk_ids]) + visible_orders = bulk_load_orders - if Spree::Config.enterprise_number_required_on_invoices? - distributors_without_abn = Enterprise.where( - id: visible_orders.select(:distributor_id), - abn: nil, - ) - - if distributors_without_abn.exists? - render_business_number_required_error(distributors_without_abn) - return - end - end + return if notify_if_abn_related_issue(visible_orders) cable_ready.append( selector: "#orders-index", @@ -92,16 +82,16 @@ def resend_confirmation_emails(params) success("admin.resend_confirmation_emails_feedback", params[:bulk_ids].count) end - def send_invoices(params) - count = 0 - editable_orders.invoiceable.where(id: params[:bulk_ids]).find_each do |o| - next unless o.distributor.can_invoice? + def send_invoices(_params) + orders = bulk_load_orders + + return if notify_if_abn_related_issue(orders) + orders.each do |o| Spree::OrderMailer.invoice_email(o.id, current_user_id: current_user.id).deliver_later - count += 1 end - success("admin.send_invoice_feedback", count) + success("admin.send_invoice_feedback", orders.size) end private @@ -133,5 +123,30 @@ def render_business_number_required_error(distributors) enterprise_name: distributor_names.join(", ")) morph_admin_flashes end + + def bulk_load_orders + editable_orders.invoiceable.where(id: params[:bulk_ids]) + end + + def notify_if_abn_related_issue(orders) + return false unless abn_required? + + distributors = distributors_without_abn(orders) + return false if distributors.empty? + + render_business_number_required_error(distributors_without_abn) + true + end + + def abn_required? + Spree::Config.enterprise_number_required_on_invoices? + end + + def distributors_without_abn(orders) + Enterprise.where( + id: orders.select(:distributor_id), + abn: nil, + ) + end end end