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:
Maikel Linke
2016-12-16 15:33:49 +11:00
committed by Rob Harrington
parent 1f08729df3
commit 479c7ba24b
5 changed files with 41 additions and 11 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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