From baaee1baab4aaddc8db8419c0bb05f81c34bec5a Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 28 Feb 2021 16:04:01 +0000 Subject: [PATCH] Update OrderAdjustmentsFetcher --- app/services/order_tax_adjustments_fetcher.rb | 19 +++++++++++++++++-- .../order_tax_adjustments_fetcher_spec.rb | 12 +++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/services/order_tax_adjustments_fetcher.rb b/app/services/order_tax_adjustments_fetcher.rb index 23b5dde065..686efff9a4 100644 --- a/app/services/order_tax_adjustments_fetcher.rb +++ b/app/services/order_tax_adjustments_fetcher.rb @@ -21,7 +21,6 @@ class OrderTaxAdjustmentsFetcher def all Spree::Adjustment - .with_tax .where(order_adjustments.or(line_item_adjustments).or(shipment_adjustments)) .order('created_at ASC') end @@ -50,11 +49,27 @@ class OrderTaxAdjustmentsFetcher Hash[tax_rates.collect do |tax_rate| tax_amount = if tax_rates.one? - adjustment.included_tax + adjustment_tax_amount(adjustment) else tax_rate.compute_tax(adjustment.amount) end [tax_rate, tax_amount] end] end + + def adjustment_tax_amount(adjustment) + if no_tax_adjustments?(adjustment) + adjustment.included_tax + else + adjustment.amount + end + end + + def no_tax_adjustments?(adjustment) + # Enterprise Fees, Admin Adjustments, and Shipping Fees currently do not have tax adjustments. + # The tax amount is stored in the included_tax attribute. + adjustment.originator_type == "EnterpriseFee" || + adjustment.originator_type == "Spree::ShippingMethod" || + (adjustment.source_type.nil? && adjustment.originator_type.nil?) + end end diff --git a/spec/services/order_tax_adjustments_fetcher_spec.rb b/spec/services/order_tax_adjustments_fetcher_spec.rb index de7f788230..f5edd0d848 100644 --- a/spec/services/order_tax_adjustments_fetcher_spec.rb +++ b/spec/services/order_tax_adjustments_fetcher_spec.rb @@ -44,8 +44,9 @@ describe OrderTaxAdjustmentsFetcher do tax_category: tax_category20, calculator: Calculator::FlatRate.new(preferred_amount: 48.0)) end - let(:additional_adjustment) do - create(:adjustment, amount: 50.0, included_tax: tax_rate25.compute_tax(50.0)) + let(:admin_adjustment) do + create(:adjustment, order: order, amount: 50.0, included_tax: tax_rate25.compute_tax(50.0), + source: nil, label: "Admin Adjustment") end let(:order_cycle) do @@ -62,8 +63,7 @@ describe OrderTaxAdjustmentsFetcher do line_items: [line_item1, line_item2], bill_address: create(:address), order_cycle: order_cycle, - distributor: coordinator, - adjustments: [additional_adjustment] + distributor: coordinator ) end @@ -80,6 +80,8 @@ describe OrderTaxAdjustmentsFetcher do end before do + order.reload + order.adjustments << admin_adjustment order.create_tax_charge! order.recreate_all_fees! end @@ -102,7 +104,7 @@ describe OrderTaxAdjustmentsFetcher do expect(subject[tax_rate20]).to eq(8.0) end - it "contains tax on order adjustment" do + it "contains tax on admin adjustment" do expect(subject[tax_rate25]).to eq(10.0) end end