diff --git a/app/models/protocol.rb b/app/models/protocol.rb index c2b56a74a4..98b4dbd924 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -62,7 +62,7 @@ class Protocol < ApplicationRecord validates :research_master_id, numericality: { only_integer: true }, allow_blank: true validates :research_master_id, presence: true, if: :rmid_requires_validation? - validates :indirect_cost_rate, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 1000 }, allow_blank: true + validates :indirect_cost_rate, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 1000 }, allow_blank: true, if: :indirect_cost_enabled attr_accessor :requester_id attr_accessor :validate_nct @@ -552,6 +552,10 @@ def has_incomplete_additional_details? private + def indirect_cost_enabled + Setting.find_by_key('use_indirect_cost').value + end + def notify_remote_around_update? true end diff --git a/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb new file mode 100644 index 0000000000..0d5415a811 --- /dev/null +++ b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb @@ -0,0 +1,9 @@ +class CorrectBadIndirectCostData < ActiveRecord::Migration[5.1] + def change + protocols = Protocol.where(indirect_cost_rate: 0.0) + protocols.each do |protocol| + protocol.indirect_cost_rate = nil + protocol.save(validate: false) + end + end +end diff --git a/spec/models/protocol/valid?_spec.rb b/spec/models/protocol/valid?_spec.rb index a9ca538a0c..94d962d616 100644 --- a/spec/models/protocol/valid?_spec.rb +++ b/spec/models/protocol/valid?_spec.rb @@ -38,6 +38,19 @@ end end - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } + context 'indirect cost is turned off' do + it 'should not validate indirect cost' do + is_expected.not_to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) + is_expected.not_to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) + end + end + + context 'indirect cost is turned on' do + stub_config("use_indirect_cost", true) + + it 'should validate indirect cost' do + is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) + is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) + end + end end