mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-05 02:41:33 +00:00
Update transaction fees of completed orders
The adjustments associated to incomplete payments are re-calculated when a line item is removed from a completed order.
This commit is contained in:
committed by
Rob Harrington
parent
1f08729df3
commit
479c7ba24b
@@ -31,6 +31,7 @@ class LineItemsController < BaseController
|
||||
order.with_lock do
|
||||
item.destroy
|
||||
order.update_shipping_fees!
|
||||
order.update_payment_fees!
|
||||
order.update_distribution_charge!
|
||||
end
|
||||
end
|
||||
|
||||
@@ -144,14 +144,22 @@ Spree::Order.class_eval do
|
||||
line_items(:reload)
|
||||
shipments.each do |shipment|
|
||||
next if shipment.shipped?
|
||||
adjustment = shipment.adjustment
|
||||
locked = adjustment.locked
|
||||
adjustment.locked = false
|
||||
adjustment.update!
|
||||
adjustment.locked = locked
|
||||
update_totals
|
||||
save
|
||||
update_adjustment! shipment.adjustment
|
||||
end
|
||||
update_totals
|
||||
save
|
||||
end
|
||||
|
||||
# After changing line items of a completed order
|
||||
def update_payment_fees!
|
||||
payments(:reload)
|
||||
line_items(:reload)
|
||||
payments.each do |payment|
|
||||
next if payment.completed?
|
||||
update_adjustment! payment.adjustment
|
||||
end
|
||||
update_totals
|
||||
save
|
||||
end
|
||||
|
||||
def cap_quantity_at_stock!
|
||||
@@ -333,4 +341,11 @@ Spree::Order.class_eval do
|
||||
self.customer = Customer.create(enterprise: distributor, email: email_for_customer, user: user, name: customer_name, bill_address: bill_address.andand.clone, ship_address: ship_address.andand.clone)
|
||||
end
|
||||
end
|
||||
|
||||
def update_adjustment!(adjustment)
|
||||
locked = adjustment.locked
|
||||
adjustment.locked = false
|
||||
adjustment.update!
|
||||
adjustment.locked = locked
|
||||
end
|
||||
end
|
||||
|
||||
@@ -68,8 +68,8 @@ describe LineItemsController do
|
||||
|
||||
# Sanity check fees
|
||||
item_num = order.line_items.length
|
||||
expected_fees = item_num * (shipping_fee + payment_fee)
|
||||
expect(order.adjustment_total).to eq expected_fees
|
||||
initial_fees = item_num * (shipping_fee + payment_fee)
|
||||
expect(order.adjustment_total).to eq initial_fees
|
||||
|
||||
# Delete the item
|
||||
item = order.line_items.first
|
||||
@@ -80,6 +80,6 @@ describe LineItemsController do
|
||||
|
||||
# Check the fees again
|
||||
order.reload
|
||||
expect(order.adjustment_total).to eq expected_fees - shipping_fee
|
||||
expect(order.adjustment_total).to eq initial_fees - shipping_fee - payment_fee
|
||||
end
|
||||
end
|
||||
|
||||
@@ -271,7 +271,7 @@ FactoryGirl.define do
|
||||
order.create_shipment!
|
||||
payment_calculator = build(:calculator_per_item, preferred_amount: evaluator.payment_fee)
|
||||
payment_method = create(:payment_method, calculator: payment_calculator)
|
||||
create(:payment, order: order, amount: order.total, payment_method: payment_method, state: 'completed')
|
||||
create(:payment, order: order, amount: order.total, payment_method: payment_method, state: 'checkout')
|
||||
order.finalize!
|
||||
end
|
||||
end
|
||||
|
||||
@@ -674,6 +674,20 @@ describe Spree::Order do
|
||||
expect(order.line_items.length).to eq item_num - 1
|
||||
expect(order.adjustment_total).to eq expected_fees - shipping_fee
|
||||
end
|
||||
|
||||
it "updates transaction fees" do
|
||||
item_num = order.line_items.length
|
||||
initial_fees = item_num * (shipping_fee + payment_fee)
|
||||
|
||||
# Delete the item
|
||||
order.line_items.first.destroy
|
||||
order.update_payment_fees!
|
||||
|
||||
# Check if fees got updated
|
||||
expect(order.adjustments.length).to eq 2
|
||||
expect(order.line_items.length).to eq item_num - 1
|
||||
expect(order.adjustment_total).to eq initial_fees - payment_fee
|
||||
end
|
||||
end
|
||||
|
||||
describe "retrieving previously ordered items" do
|
||||
|
||||
Reference in New Issue
Block a user