diff --git a/app/models/accounting_period.rb b/app/models/accounting_period.rb index 1126b58df..a0377c1d7 100644 --- a/app/models/accounting_period.rb +++ b/app/models/accounting_period.rb @@ -37,7 +37,7 @@ class AccountingPeriod < ApplicationRecord vat_rate_group = {} i.invoice_items.each do |item| vat_type = item.invoice_item_type - vat_rate_group[vat_type] = vat_service.invoice_vat(item) / 100.0 unless vat_rate_group[vat_type] + vat_rate_group[vat_type] = vat_service.invoice_item_vat(item) / 100.0 unless vat_rate_group[vat_type] end { invoice: i, vat_rate: vat_rate_group } end diff --git a/app/models/invoice_item.rb b/app/models/invoice_item.rb index 4c5536fa4..7212a91f5 100644 --- a/app/models/invoice_item.rb +++ b/app/models/invoice_item.rb @@ -27,7 +27,7 @@ class InvoiceItem < Footprintable def net_amount # deduct VAT vat_service = VatHistoryService.new - vat_rate = vat_service.invoice_vat(self) + vat_rate = vat_service.invoice_item_vat(self) Rational(amount_after_coupon / (vat_rate / 100.00 + 1)).round.to_f end @@ -36,19 +36,15 @@ class InvoiceItem < Footprintable amount_after_coupon - net_amount end - # return invoice item type (Matchine/Training/Space/Event/Subscription) + # return invoice item type (Machine/Training/Space/Event/Subscription) used to determine the VAT rate def invoice_item_type if object_type == Reservation.name - reservable_type = object.try(:reservable_type) - if reservable_type - return reservable_type - else - return '' - end + object.try(:reservable_type) || '' elsif object_type == Subscription.name - return Subscription.name + Subscription.name + else + '' end - '' end private diff --git a/app/pdfs/pdf/invoice.rb b/app/pdfs/pdf/invoice.rb index a4612ab3e..c96f5556c 100644 --- a/app/pdfs/pdf/invoice.rb +++ b/app/pdfs/pdf/invoice.rb @@ -233,7 +233,7 @@ class PDF::Invoice < Prawn::Document vat_rate_group = {} invoice.invoice_items.each do |item| vat_type = item.invoice_item_type - vat_rate_group[vat_type] = { vat_rate: vat_service.invoice_vat(item), total_vat: 0, amount: 0 } unless vat_rate_group[vat_type] + vat_rate_group[vat_type] = { vat_rate: vat_service.invoice_item_vat(item), total_vat: 0, amount: 0 } unless vat_rate_group[vat_type] vat_rate_group[vat_type][:total_vat] += item.vat vat_rate_group[vat_type][:amount] += item.amount.to_i end diff --git a/app/services/vat_history_service.rb b/app/services/vat_history_service.rb index 1beb048cf..9299a0172 100644 --- a/app/services/vat_history_service.rb +++ b/app/services/vat_history_service.rb @@ -2,8 +2,20 @@ # Provides the VAT rate in use at the given date class VatHistoryService + # @return the VAT rate for the given Invoice + def invoice_vat(invoice) + vat_rate_group = {} + invoice.invoice_items.each do |item| + vat_type = item.invoice_item_type + vat_rate_group[vat_type] = { vat_rate: invoice_item_vat(item), total_vat: 0, amount: 0 } unless vat_rate_group[vat_type] + vat_rate_group[vat_type][:total_vat] += item.vat + vat_rate_group[vat_type][:amount] += item.amount.to_i + end + vat_rate_group + end + # return the VAT rate for the given InvoiceItem - def invoice_vat(invoice_item) + def invoice_item_vat(invoice_item) if invoice_item.invoice.is_a?(Avoir) vat_rate(invoice_item.invoice.avoir_date, invoice_item.invoice_item_type) else diff --git a/test/test_helper.rb b/test/test_helper.rb index 0b13ecc09..c6930d66d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -105,7 +105,7 @@ class ActiveSupport::TestCase vat_service = VatHistoryService.new invoice.invoice_items.each do |item| - vat_rate = vat_service.invoice_vat(item) + vat_rate = vat_service.invoice_item_vat(item) if vat_rate.positive? computed_ht = sprintf('%.2f', (item.amount_after_coupon / (vat_rate / 100.00 + 1)) / 100.00).to_f