Update VAT

#623
This commit is contained in:
Artur Beljajev 2017-11-27 11:11:06 +02:00
parent c47ca77ca6
commit 6a01226138
8 changed files with 126 additions and 20 deletions

View file

@ -29,6 +29,7 @@ class Invoice < ActiveRecord::Base
validates :invoice_type, :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :invoice_items, :vat_rate, presence: true
validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 99 }, allow_nil: true
before_create :set_invoice_number, :check_vat
@ -106,12 +107,12 @@ class Invoice < ActiveRecord::Base
def buyer_country
Country.new(buyer_country_code)
end
# order is used for directo/banklink description
def order
"Order nr. #{number}"
end
def pdf(html)
kit = PDFKit.new(html)
kit.to_pdf

View file

@ -1,3 +1,21 @@
class VATRateType < ActiveRecord::Type::Value
def type_cast_from_user(value)
if value.blank?
nil
else
super
end
end
def type_cast_from_database(value)
BigDecimal.new(value) * 100 if value
end
def type_cast_for_database(value)
BigDecimal.new(value) / 100 if value
end
end
class Registrar < ActiveRecord::Base
include Versions # version/registrar_version.rb
@ -23,16 +41,9 @@ class Registrar < ActiveRecord::Base
validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 99 }, allow_nil: true
validate :forbidden_codes
attribute :vat_rate, VATRateType.new
after_initialize :set_defaults
before_save do
self.vat_rate = vat_rate / 100.0 if vat_rate
end
after_find do |registrar|
registrar.vat_rate = registrar.vat_rate * 100 if registrar.vat_rate
end
def forbidden_codes
return true unless ['CID'].include? code
errors.add(:code, I18n.t(:forbidden_code))
@ -87,6 +98,16 @@ class Registrar < ActiveRecord::Base
# rubocop:disable Metrics/MethodLength
# rubocop:disable Metrics/AbcSize
def issue_prepayment_invoice(amount, description = nil)
vat_rate = if local_vat_payer?
Setting.registry_vat_prc
else
if vat_no.blank?
self.vat_rate
else
nil
end
end
invoices.create(
invoice_type: 'DEB',
due_date: (Time.zone.now.to_date + Setting.days_to_keep_invoices_active.days).end_of_day,
@ -94,6 +115,7 @@ class Registrar < ActiveRecord::Base
description: description,
currency: 'EUR',
vat_rate: Setting.registry_vat_prc,
vat_rate: vat_rate,
seller_name: Setting.registry_juridical_name,
seller_reg_no: Setting.registry_reg_no,
seller_iban: Setting.registry_iban,