diff --git a/app/controllers/admin/bulk_line_items_controller.rb b/app/controllers/admin/bulk_line_items_controller.rb index aca34f988f..f8667f69ec 100644 --- a/app/controllers/admin/bulk_line_items_controller.rb +++ b/app/controllers/admin/bulk_line_items_controller.rb @@ -33,7 +33,9 @@ module Admin # and https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE order.with_lock do if @line_item.update(line_item_params) - order.recreate_all_fees! + order.update_line_item_fees! @line_item + order.update_order_fees! + order.update! render nothing: true, status: :no_content # No Content, does not trigger ng resource auto-update else render json: { errors: @line_item.errors }, status: :precondition_failed diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 044220759d..c83023801a 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -68,7 +68,8 @@ 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!, to: :fee_handler + delegate :create_line_item_fees!, :create_order_fees!, :update_order_fees!, + :update_line_item_fees!, to: :fee_handler # Needs to happen before save_permalink is called before_validation :set_currency diff --git a/app/services/order_fees_handler.rb b/app/services/order_fees_handler.rb index abd07bdeae..ab176c4eee 100644 --- a/app/services/order_fees_handler.rb +++ b/app/services/order_fees_handler.rb @@ -23,6 +23,12 @@ class OrderFeesHandler calculator.create_order_adjustments_for order end + def update_line_item_fees!(line_item) + line_item.adjustments.enterprise_fee.each do |fee| + fee.update!(line_item, force: true) + end + end + def update_order_fees! order.adjustments.enterprise_fee.where(source_type: 'Spree::Order').each do |fee| fee.update!(order, force: true) diff --git a/spec/controllers/admin/bulk_line_items_controller_spec.rb b/spec/controllers/admin/bulk_line_items_controller_spec.rb index 378c83c5fd..4d94591a0e 100644 --- a/spec/controllers/admin/bulk_line_items_controller_spec.rb +++ b/spec/controllers/admin/bulk_line_items_controller_spec.rb @@ -210,7 +210,9 @@ describe Admin::BulkLineItemsController, type: :controller do .to receive(:find).with(line_item1.id.to_s).and_return(line_item1) expect(line_item1.order).to receive(:reload).with(lock: true) - expect(line_item1.order).to receive(:recreate_all_fees!) + expect(line_item1.order).to receive(:update_line_item_fees!) + expect(line_item1.order).to receive(:update_order_fees!) + expect(line_item1.order).to receive(:update!).twice spree_put :update, params end