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)