From c949158b23912f660f7a36f56133642469039727 Mon Sep 17 00:00:00 2001
From: Maikel Linke <maikel@email.org.au>
Date: Wed, 11 Sep 2024 13:30:02 +1000
Subject: [PATCH] Reduce complexity of BackorderJob

---
 app/jobs/backorder_job.rb | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/app/jobs/backorder_job.rb b/app/jobs/backorder_job.rb
index 48b722ff14c..b7ba5a2f464 100644
--- a/app/jobs/backorder_job.rb
+++ b/app/jobs/backorder_job.rb
@@ -39,27 +39,30 @@ def self.place_backorder(order, linked_variants)
     ordered_quantities = {}
 
     linked_variants.each do |variant|
-      needed_quantity = -1 * variant.on_hand
-      solution = broker.best_offer(variant.semantic_links[0].semantic_id)
-
-      wholesale_quantity = (needed_quantity.to_f / solution.factor).ceil
-      retail_quantity = wholesale_quantity * solution.factor
-
-      line = orderer.find_or_build_order_line(backorder, solution.offer)
-      line.quantity = line.quantity.to_i + wholesale_quantity
-
+      retail_quantity = add_item_to_backorder(variant, broker, backorder, orderer)
       ordered_quantities[variant] = retail_quantity
     end
 
-    placed_order = orderer.send_order(backorder)
-
-    schedule_order_completion(user, order, placed_order) if orderer.new?(backorder)
+    place_order(user, order, orderer, backorder)
 
     linked_variants.each do |variant|
       variant.on_hand += ordered_quantities[variant]
     end
   end
 
+  def self.add_item_to_backorder(variant, broker, backorder, orderer)
+    needed_quantity = -1 * variant.on_hand
+    solution = broker.best_offer(variant.semantic_links[0].semantic_id)
+
+    wholesale_quantity = (needed_quantity.to_f / solution.factor).ceil
+    retail_quantity = wholesale_quantity * solution.factor
+
+    line = orderer.find_or_build_order_line(backorder, solution.offer)
+    line.quantity = line.quantity.to_i + wholesale_quantity
+
+    retail_quantity
+  end
+
   def self.load_broker(user)
     FdcOfferBroker.new(load_catalog(user))
   end
@@ -70,7 +73,11 @@ def self.load_catalog(user)
     DfcIo.import(catalog_json)
   end
 
-  def self.schedule_order_completion(user, order, placed_order)
+  def self.place_order(user, order, orderer, backorder)
+    placed_order = orderer.send_order(backorder)
+
+    return unless orderer.new?(backorder)
+
     wait_until = order.order_cycle.orders_close_at + SALE_SESSION_DELAY
     CompleteBackorderJob.set(wait_until:)
       .perform_later(user, placed_order.semanticId)