From e7866db7b100deef4ba519d53d1f7c6bf11e2f8e Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 28 Jan 2021 00:07:34 +0000 Subject: [PATCH] Improve efficiency in applying enterprise fees in Order#update_distribution_charge! --- app/models/spree/order.rb | 8 +++++--- lib/open_food_network/enterprise_fee_calculator.rb | 5 ----- .../open_food_network/enterprise_fee_calculator_spec.rb | 4 ++-- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 77965c54b4..c8acfae5bb 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -669,17 +669,19 @@ module Spree with_lock do EnterpriseFee.clear_all_adjustments_on_order self + fee_calculator = OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle) + loaded_line_items = - line_items.includes(variant: :product, order: [:distributor, :order_cycle]).all + line_items.includes(variant: :product).all loaded_line_items.each do |line_item| if provided_by_order_cycle? line_item - OpenFoodNetwork::EnterpriseFeeCalculator.new.create_line_item_adjustments_for line_item + fee_calculator.create_line_item_adjustments_for line_item end end if order_cycle - OpenFoodNetwork::EnterpriseFeeCalculator.new.create_order_adjustments_for self + fee_calculator.create_order_adjustments_for self end end end diff --git a/lib/open_food_network/enterprise_fee_calculator.rb b/lib/open_food_network/enterprise_fee_calculator.rb index 08eec58899..47db702182 100644 --- a/lib/open_food_network/enterprise_fee_calculator.rb +++ b/lib/open_food_network/enterprise_fee_calculator.rb @@ -39,8 +39,6 @@ module OpenFoodNetwork def create_line_item_adjustments_for(line_item) variant = line_item.variant - @distributor = line_item.order.distributor - @order_cycle = line_item.order.order_cycle per_item_enterprise_fee_applicators_for(variant).each do |applicator| applicator.create_line_item_adjustment(line_item) @@ -48,9 +46,6 @@ module OpenFoodNetwork end def create_order_adjustments_for(order) - @distributor = order.distributor - @order_cycle = order.order_cycle - per_order_enterprise_fee_applicators_for(order).each do |applicator| applicator.create_order_adjustment(order) end diff --git a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb index 0dc9b121b4..97068516f9 100644 --- a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb +++ b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb @@ -141,7 +141,7 @@ module OpenFoodNetwork it "creates adjustments for a line item" do exchange.enterprise_fees << enterprise_fee_line_item - EnterpriseFeeCalculator.new.create_line_item_adjustments_for line_item + EnterpriseFeeCalculator.new(distributor, order_cycle).create_line_item_adjustments_for line_item a = Spree::Adjustment.last expect(a.metadata.fee_name).to eq(enterprise_fee_line_item.name) @@ -150,7 +150,7 @@ module OpenFoodNetwork it "creates adjustments for an order" do exchange.enterprise_fees << enterprise_fee_order - EnterpriseFeeCalculator.new.create_order_adjustments_for order + EnterpriseFeeCalculator.new(distributor, order_cycle).create_order_adjustments_for order a = Spree::Adjustment.last expect(a.metadata.fee_name).to eq(enterprise_fee_order.name)