From 8466ab5675f1b41e939fa46eca84c34a5bcba72a Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Fri, 29 Jan 2021 21:42:55 +0000 Subject: [PATCH] Extract more OFN fee-handling code from Spree::Order class --- app/models/spree/order.rb | 15 +-------------- app/services/order_fees_handler.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index c83023801a..93355035a5 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -69,7 +69,7 @@ module Spree delegate :admin_and_handling_total, :payment_fee, :ship_total, to: :adjustments_fetcher delegate :update_totals, to: :updater delegate :create_line_item_fees!, :create_order_fees!, :update_order_fees!, - :update_line_item_fees!, to: :fee_handler + :update_line_item_fees!, :recreate_all_fees!, to: :fee_handler # Needs to happen before save_permalink is called before_validation :set_currency @@ -662,19 +662,6 @@ module Spree end end - def recreate_all_fees! - # `with_lock` acquires an exclusive row lock on order so no other - # requests can update it until the transaction is commited. - # See https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/locking/pessimistic.rb#L69 - # and https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE - with_lock do - EnterpriseFee.clear_all_adjustments self - - create_line_item_fees! - create_order_fees! - end - end - def set_order_cycle!(order_cycle) return if self.order_cycle == order_cycle diff --git a/app/services/order_fees_handler.rb b/app/services/order_fees_handler.rb index ab176c4eee..3fd09bdb39 100644 --- a/app/services/order_fees_handler.rb +++ b/app/services/order_fees_handler.rb @@ -9,6 +9,19 @@ class OrderFeesHandler @order_cycle = order.order_cycle end + def recreate_all_fees! + # `with_lock` acquires an exclusive row lock on order so no other + # requests can update it until the transaction is commited. + # See https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/locking/pessimistic.rb#L69 + # and https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE + order.with_lock do + EnterpriseFee.clear_all_adjustments order + + create_line_item_fees! + create_order_fees! + end + end + def create_line_item_fees! order.line_items.includes(variant: :product).each do |line_item| if provided_by_order_cycle? line_item