mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-29 18:52:22 +01:00
WIP: improve VatHistoryService
This commit is contained in:
parent
66cae9fb07
commit
44853930ed
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user