diff --git a/lib/reporting/reports/suppliers/helpers/columns_helper.rb b/lib/reporting/reports/suppliers/helpers/columns_helper.rb index d91bd40f9a..8a0d5c19d0 100644 --- a/lib/reporting/reports/suppliers/helpers/columns_helper.rb +++ b/lib/reporting/reports/suppliers/helpers/columns_helper.rb @@ -109,9 +109,10 @@ module Reporting proc do |line_item| total_price = total_excl_vat_and_fees.call(line_item) total_fees = total_fees_excl_vat.call(line_item) + total_fees_tax = total_vat_on_fees.call(line_item) tax = total_tax.call(line_item) - total_price + total_fees + tax + total_price + total_fees + total_fees_tax + tax end end end diff --git a/lib/reporting/reports/suppliers/helpers/line_items_access_helper.rb b/lib/reporting/reports/suppliers/helpers/line_items_access_helper.rb index 26318f1716..937f6cb7a1 100644 --- a/lib/reporting/reports/suppliers/helpers/line_items_access_helper.rb +++ b/lib/reporting/reports/suppliers/helpers/line_items_access_helper.rb @@ -25,11 +25,22 @@ module Reporting line_item.order_cycle end + def suppliers_adjustments(line_item, adjustment_type = 'EnterpriseFee') + adjustments = line_item.adjustments + return adjustments if adjustment_type == 'Spree::TaxRate' + + supplier_name = supplier(line_item).name + adjustments.select do |adjustment| + label = adjustment.label + + label.include?('supplier') && label.include?(supplier_name) + end + end + def adjustments_by_type(line_item, type, included: false) total_amount = 0.0 adjustment_type = type == :tax ? 'Spree::TaxRate' : 'EnterpriseFee' - adjustments = line_item.adjustments - adjustments.each do |adjustment| + suppliers_adjustments(line_item, adjustment_type).each do |adjustment| if adjustment.originator_type == adjustment_type amount = included == adjustment.included ? adjustment.amount : 0.0 total_amount += amount @@ -41,13 +52,11 @@ module Reporting def tax_on_fees(line_item, included: false) total_amount = 0.0 - adjustments = line_item.adjustments - - adjustments.each do |adjustment| + suppliers_adjustments(line_item).each do |adjustment| next unless adjustment.originator_type == 'EnterpriseFee' adjustment.adjustments.each do |fee_adjustment| - next unless adjustment.originator_type == 'Spree::TaxRate' + next unless fee_adjustment.originator_type == 'Spree::TaxRate' amount = included == fee_adjustment.included ? fee_adjustment.amount : 0.0 total_amount += amount diff --git a/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb b/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb index fc0370ff00..81b80fe44b 100644 --- a/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb +++ b/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb @@ -49,12 +49,29 @@ RSpec.describe "Pay Your Suppliers Report" do context "with taxes and fees" do let(:line_item) { order.line_items.first } + let!(:enterprise_fee) do + create(:enterprise_fee, enterprise: supplier, inherits_tax_category: true, fee_type: 'sales') + end let!(:fees_adjustment) do - create(:adjustment, originator_type: "EnterpriseFee", adjustable: line_item, amount: 0.1) + create( + :adjustment, + originator: enterprise_fee, + adjustable: line_item, + amount: 0.1, + label: "#{enterprise_fee.name} fee by supplier #{supplier.name}", + ) end let!(:tax_adjustment) do create(:adjustment, originator_type: "Spree::TaxRate", adjustable: line_item, amount: 0.1) end + let!(:tax_on_fee) do + create( + :adjustment, + originator_type: "Spree::TaxRate", + adjustable: fees_adjustment, + amount: 0.01 + ) + end it "Generates the report" do expect(report_table_rows.length).to eq(1) @@ -63,9 +80,9 @@ RSpec.describe "Pay Your Suppliers Report" do expect(table_row.total_excl_vat_and_fees.to_f).to eq(10.0) expect(table_row.total_excl_vat.to_f).to eq(10.1) expect(table_row.total_fees_excl_vat.to_f).to eq(0.1) - expect(table_row.total_vat_on_fees.to_f).to eq(0.0) + expect(table_row.total_vat_on_fees.to_f).to eq(0.01) expect(table_row.total_tax.to_f).to eq(0.1) - expect(table_row.total.to_f).to eq(10.2) + expect(table_row.total.to_f).to eq(10.21) end end end