Skip to content

Commit a27491b

Browse files
authored
Merge pull request #13218 from openfoodfoundation/revert-13144-13100-removed-fee-when-product-removed
Revert "Update line items enterprise fee instead of deleting and recreating "
2 parents e524b3d + 11e08dc commit a27491b

File tree

8 files changed

+394
-591
lines changed

8 files changed

+394
-591
lines changed

app/models/enterprise_fee.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class EnterpriseFee < ApplicationRecord
4242
joins(:calculator).where(spree_calculators: { type: PER_ORDER_CALCULATORS })
4343
}
4444

45-
def self.clear_order_adjustments(order)
46-
order.all_adjustments.enterprise_fee.where.not(adjustable_type: "Spree::LineItem").destroy_all
45+
def self.clear_all_adjustments(order)
46+
order.all_adjustments.enterprise_fee.destroy_all
4747
end
4848

4949
private

app/models/spree/order.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def states
8686

8787
delegate :admin_and_handling_total, :payment_fee, :ship_total, to: :adjustments_fetcher
8888
delegate :update_totals, :update_totals_and_states, to: :updater
89-
delegate :create_order_fees!, :update_order_fees!,
89+
delegate :create_line_item_fees!, :create_order_fees!, :update_order_fees!,
9090
:update_line_item_fees!, :recreate_all_fees!, to: :fee_handler
9191

9292
validates :customer, presence: true, if: :require_customer?

app/services/orders/handle_fees_service.rb

+6-44
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,21 @@ def recreate_all_fees!
1616
# See https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/locking/pessimistic.rb#L69
1717
# and https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE
1818
order.with_lock do
19-
EnterpriseFee.clear_order_adjustments order
19+
EnterpriseFee.clear_all_adjustments order
2020

21-
# To prevent issue with fee being removed when a product is not linked to the order cycle
22-
# anymore, we now create or update line item fees.
23-
# Previously fees were deleted and recreated, like we still do for order fees.
24-
create_or_update_line_item_fees!
21+
create_line_item_fees!
2522
create_order_fees!
2623
end
2724

2825
tax_enterprise_fees! unless order.before_payment_state?
2926
order.update_order!
3027
end
3128

32-
def create_or_update_line_item_fees!
33-
order.line_items.includes(:variant).each do |line_item|
34-
# No fee associated with the line item so we just create them
35-
if line_item.enterprise_fee_adjustments.blank?
36-
create_line_item_fees!(line_item)
37-
next
29+
def create_line_item_fees!
30+
order.line_items.includes(variant: :product).each do |line_item|
31+
if provided_by_order_cycle? line_item
32+
calculator.create_line_item_adjustments_for line_item
3833
end
39-
40-
create_or_update_line_item_fee!(line_item)
41-
42-
delete_removed_fees!(line_item)
4334
end
4435
end
4536

@@ -75,34 +66,5 @@ def provided_by_order_cycle?(line_item)
7566
@order_cycle_variant_ids ||= order_cycle&.variants&.map(&:id) || []
7667
@order_cycle_variant_ids.include? line_item.variant_id
7768
end
78-
79-
def create_line_item_fees!(line_item)
80-
return unless provided_by_order_cycle? line_item
81-
82-
calculator.create_line_item_adjustments_for(line_item)
83-
end
84-
85-
def create_or_update_line_item_fee!(line_item)
86-
fee_applicators(line_item.variant).each do |fee_applicator|
87-
fee_adjustment = line_item.adjustments.find_by(originator: fee_applicator.enterprise_fee)
88-
89-
if fee_adjustment
90-
fee_adjustment.update_adjustment!(line_item, force: true)
91-
elsif provided_by_order_cycle? line_item
92-
fee_applicator.create_line_item_adjustment(line_item)
93-
end
94-
end
95-
end
96-
97-
def delete_removed_fees!(line_item)
98-
order_cycle_fees = fee_applicators(line_item.variant).map(&:enterprise_fee)
99-
removed_fees = line_item.enterprise_fee_adjustments.where.not(originator: order_cycle_fees)
100-
101-
removed_fees.each(&:destroy)
102-
end
103-
104-
def fee_applicators(variant)
105-
calculator.order_cycle_per_item_enterprise_fee_applicators_for(variant)
106-
end
10769
end
10870
end

lib/open_food_network/enterprise_fee_calculator.rb

+5-22
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,13 @@ def per_item_enterprise_fee_applicators_for(variant)
6767

6868
@order_cycle.exchanges_carrying(variant, @distributor).each do |exchange|
6969
exchange.enterprise_fees.per_item.each do |enterprise_fee|
70-
fees << EnterpriseFeeApplicator.new(enterprise_fee, variant, exchange.role)
70+
fees << OpenFoodNetwork::EnterpriseFeeApplicator.new(enterprise_fee, variant,
71+
exchange.role)
7172
end
7273
end
7374

7475
@order_cycle.coordinator_fees.per_item.each do |enterprise_fee|
75-
fees << EnterpriseFeeApplicator.new(enterprise_fee, variant, 'coordinator')
76+
fees << OpenFoodNetwork::EnterpriseFeeApplicator.new(enterprise_fee, variant, 'coordinator')
7677
end
7778

7879
fees
@@ -85,30 +86,12 @@ def per_order_enterprise_fee_applicators_for(order)
8586

8687
@order_cycle.exchanges_supplying(order).each do |exchange|
8788
exchange.enterprise_fees.per_order.each do |enterprise_fee|
88-
fees << EnterpriseFeeApplicator.new(enterprise_fee, nil, exchange.role)
89+
fees << OpenFoodNetwork::EnterpriseFeeApplicator.new(enterprise_fee, nil, exchange.role)
8990
end
9091
end
9192

9293
@order_cycle.coordinator_fees.per_order.each do |enterprise_fee|
93-
fees << EnterpriseFeeApplicator.new(enterprise_fee, nil, 'coordinator')
94-
end
95-
96-
fees
97-
end
98-
99-
def order_cycle_per_item_enterprise_fee_applicators_for(variant)
100-
fees = []
101-
102-
return fees unless @order_cycle && @distributor
103-
104-
@order_cycle.exchanges.supplying_to(@distributor).each do |exchange|
105-
exchange.enterprise_fees.per_item.each do |enterprise_fee|
106-
fees << EnterpriseFeeApplicator.new(enterprise_fee, variant, exchange.role)
107-
end
108-
end
109-
110-
@order_cycle.coordinator_fees.per_item.each do |enterprise_fee|
111-
fees << EnterpriseFeeApplicator.new(enterprise_fee, variant, 'coordinator')
94+
fees << OpenFoodNetwork::EnterpriseFeeApplicator.new(enterprise_fee, nil, 'coordinator')
11295
end
11396

11497
fees

0 commit comments

Comments
 (0)