diff --git a/app/models/registrar.rb b/app/models/registrar.rb index 1d5c4eba3..87915e4ba 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -1,21 +1,3 @@ -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 @@ -35,13 +17,16 @@ class Registrar < ActiveRecord::Base validates :name, :reg_no, :reference_no, :code, uniqueness: true validates :accounting_customer_code, presence: true validates :language, presence: true - validates :vat_rate, :vat_no, absence: true, if: :local_vat_payer? - validates :vat_rate, presence: true, if: 'foreign_vat_payer? && vat_no.blank?' + + validates :vat_rate, presence: true, if: :vat_rate_required? + validates :vat_rate, absence: true, if: :local_vat_payer? validates :vat_rate, absence: true, if: 'foreign_vat_payer? && vat_no?' - validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 99 }, allow_nil: true + validates :vat_rate, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 99.9 }, + allow_nil: true + validate :forbid_special_code - attribute :vat_rate, VATRateType.new + attribute :vat_rate, ::Type::VATRate.new after_initialize :set_defaults before_validation :generate_iso_11649_reference_no @@ -216,4 +201,8 @@ class Registrar < ActiveRecord::Base def foreign_vat_payer? !local_vat_payer? end + + def vat_rate_required? + foreign_vat_payer? && vat_no.blank? + end end diff --git a/app/models/type/vat_rate.rb b/app/models/type/vat_rate.rb new file mode 100644 index 000000000..466b076f8 --- /dev/null +++ b/app/models/type/vat_rate.rb @@ -0,0 +1,19 @@ +module Type + class VATRate < ActiveRecord::Type::Value + def type_cast_from_user(value) + if value.blank? + nil + else + super + end + end + + def type_cast_from_database(value) + BigDecimal(value) * 100 if value + end + + def type_cast_for_database(value) + BigDecimal(value) / 100.0 if value + end + end +end diff --git a/app/views/admin/registrars/_billing.html.erb b/app/views/admin/registrars/_billing.html.erb index f3960233e..7ba778d08 100644 --- a/app/views/admin/registrars/_billing.html.erb +++ b/app/views/admin/registrars/_billing.html.erb @@ -7,6 +7,9 @@