diff --git a/app/reflexes/admin/orders_reflex.rb b/app/reflexes/admin/orders_reflex.rb index 160877bb51..dedf46cdf2 100644 --- a/app/reflexes/admin/orders_reflex.rb +++ b/app/reflexes/admin/orders_reflex.rb @@ -33,9 +33,19 @@ module Admin end def bulk_invoice(params) - visible_orders = bulk_load_orders(params) + visible_orders = editable_orders.invoiceable.where(id: params[:bulk_ids]) - return if notify_if_abn_related_issue(visible_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 cable_ready.append( selector: "#orders-index", @@ -84,15 +94,15 @@ module Admin end def send_invoices(params) - orders = bulk_load_orders(params) + count = 0 + editable_orders.invoiceable.where(id: params[:bulk_ids]).find_each do |o| + next unless o.distributor.can_invoice? - 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", orders.size) + success("admin.send_invoice_feedback", count) end private @@ -124,30 +134,5 @@ module Admin enterprise_name: distributor_names.join(", ")) morph_admin_flashes end - - def bulk_load_orders(params) - 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) - 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 diff --git a/spec/system/admin/orders/bulk_actions_spec.rb b/spec/system/admin/orders/bulk_actions_spec.rb index 72ccc44d95..e93cfe4b5f 100644 --- a/spec/system/admin/orders/bulk_actions_spec.rb +++ b/spec/system/admin/orders/bulk_actions_spec.rb @@ -363,22 +363,9 @@ RSpec.describe ' } must have a valid ABN before invoices can be used." end end - context "ABN is null" do + it_behaves_like "should not print the invoice" + context "with legal invoices feature", feature: :invoices do it_behaves_like "should not print the invoice" - context "with legal invoices feature", feature: :invoices do - it_behaves_like "should not print the invoice" - end - end - context "ABN is empty string" do - before do - order4.distributor.update(abn: "123456789") - order5.distributor.update(abn: "") - end - - it_behaves_like "should not print the invoice" - context "with legal invoices feature", feature: :invoices do - it_behaves_like "should not print the invoice" - end end end end