diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index 615ee63ca..6a0c5c033 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -61,7 +61,7 @@ class Admin::SettingsController < AdminController :expire_pending_confirmation ] - floats = [:registry_vat_prc] + floats = [:registry_vat_prc, :minimum_deposit] booleans = [ :ds_data_allowed, diff --git a/app/models/deposit.rb b/app/models/deposit.rb index fae4336cf..f9f887af1 100644 --- a/app/models/deposit.rb +++ b/app/models/deposit.rb @@ -7,6 +7,11 @@ class Deposit attr_accessor :amount, :description, :registrar, :registrar_id validates :amount, :registrar, presence: true + validate :validate_amount + def validate_amount + return if BigDecimal.new(amount) >= Setting.minimum_deposit + errors.add(:amount, I18n.t(:is_too_small_minimum_deposit_is, amount: Setting.minimum_deposit, currency: 'EUR')) + end def initialize(attributes = {}) attributes.each do |name, value| diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml index 2c46c1f2e..94b87fff4 100644 --- a/app/views/admin/settings/index.haml +++ b/app/views/admin/settings/index.haml @@ -69,6 +69,7 @@ = render 'setting_row', var: :invoice_number_max = render 'setting_row', var: :days_to_keep_invoices_active = render 'setting_row', var: :days_to_keep_overdue_invoices_active + = render 'setting_row', var: :minimum_deposit = render 'setting_row', var: :registry_billing_email = render 'setting_row', var: :registry_invoice_contact = render 'setting_row', var: :registry_vat_no diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb index c2d867c26..1325831da 100644 --- a/config/initializers/initial_settings.rb +++ b/config/initializers/initial_settings.rb @@ -31,6 +31,8 @@ if con.present? && con.table_exists?('settings') Setting.save_default(:invoice_number_max, 149999) Setting.save_default(:days_to_keep_invoices_active, 30) Setting.save_default(:days_to_keep_overdue_invoices_active, 30) + Setting.save_default(:minimum_deposit, 0.0) + Setting.save_default(:days_to_renew_domain_before_expire, 90) Setting.save_default(:expire_warning_period, 15) Setting.save_default(:redemption_grace_period, 30) diff --git a/config/locales/en.yml b/config/locales/en.yml index 5d2f0dfff..5dce96914 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -894,3 +894,4 @@ en: nameserver_hostname: 'Nameserver hostname' result_count: '%{count} results' failed_to_generate_invoice_invoice_number_limit_reached: 'Failed to generate invoice - invoice number limit reached' + is_too_small_minimum_deposit_is: 'is too small. Minimum deposit is %{amount} %{currency}' diff --git a/spec/features/admin/invoice_spec.rb b/spec/features/admin/invoice_spec.rb index 9c787eeb8..e036b5f1c 100644 --- a/spec/features/admin/invoice_spec.rb +++ b/spec/features/admin/invoice_spec.rb @@ -41,6 +41,27 @@ feature 'Invoice', type: :feature do page.should have_content(r.name) end + it 'should not issue and invoice with deposit amount too small' do + Setting.minimum_deposit = 0.0 + r = Fabricate(:registrar) + visit admin_invoices_url + click_link('Add') + select r.name, from: 'Registrar' + fill_in 'Amount', with: '-2.11' + fill_in 'Description', with: 'test issue' + click_button 'Save' + page.should have_content('Amount is too small. Minimum deposit is 0.0 EUR') + Setting.minimum_deposit = 12.43 + fill_in 'Amount', with: '12.42' + click_button 'Save' + + page.should have_content('Amount is too small. Minimum deposit is 12.43 EUR') + fill_in 'Amount', with: '12.44' + click_button 'Save' + page.should have_content('Record created') + Setting.minimum_deposit = 0.0 + end + it 'should forward invoice' do visit '/admin/invoices' click_link @invoice.to_s