diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 62f7707fc..5d153ab9f 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -1,4 +1,6 @@ class Procedure < ApplicationRecord + MAX_DUREE_CONSERVATION = 36 + has_many :types_de_piece_justificative, -> { order "order_place ASC" }, dependent: :destroy has_many :types_de_champ, -> { public_only }, dependent: :destroy has_many :types_de_champ_private, -> { private_only }, class_name: 'TypeDeChamp', dependent: :destroy @@ -47,6 +49,11 @@ class Procedure < ApplicationRecord validates :libelle, presence: true, allow_blank: false, allow_nil: false validates :description, presence: true, allow_blank: false, allow_nil: false validate :check_juridique + # FIXME: remove duree_conservation_required flag once all procedures are converted to the new style + validates :duree_conservation_dossiers_dans_ds, allow_nil: false, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: MAX_DUREE_CONSERVATION }, if: :durees_conservation_required + validates :duree_conservation_dossiers_hors_ds, allow_nil: false, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, if: :durees_conservation_required + validates :duree_conservation_dossiers_dans_ds, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: MAX_DUREE_CONSERVATION }, unless: :durees_conservation_required + validates :duree_conservation_dossiers_hors_ds, allow_nil: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, unless: :durees_conservation_required before_save :update_juridique_required diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a78529b1e..5dede0967 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -88,6 +88,7 @@ fr: errors: messages: blank: "doit être rempli" + not_a_number: 'doit être un nombre' models: attestation_template: attributes: diff --git a/config/locales/models/procedure/fr.yml b/config/locales/models/procedure/fr.yml index 1066ffc86..9f6898e1d 100644 --- a/config/locales/models/procedure/fr.yml +++ b/config/locales/models/procedure/fr.yml @@ -3,3 +3,5 @@ fr: attributes: procedure: organisation: Organisme + duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers sur demarches-simplifiees.fr + duree_conservation_dossiers_hors_ds: Durée de conservation des dossiers hors demarches-simplifiees.fr diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index 2ef30a635..b24fb1563 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -10,6 +10,8 @@ FactoryBot.define do published_at nil cerfa_flag false administrateur { create(:administrateur) } + duree_conservation_dossiers_dans_ds 3 + duree_conservation_dossiers_hors_ds 6 after(:build) do |procedure, _evaluator| if procedure.module_api_carto.nil? diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index c09e823c1..38c36fb2b 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -199,6 +199,38 @@ describe Procedure do it { expect(procedure.valid?).to eq(true) } end + + shared_examples 'duree de conservation' do + context 'duree_conservation_required it true, the field gets validated' do + before { subject.durees_conservation_required = true } + + it { is_expected.not_to allow_value(nil).for(field_name) } + it { is_expected.not_to allow_value('').for(field_name) } + it { is_expected.not_to allow_value('trois').for(field_name) } + it { is_expected.to allow_value(3).for(field_name) } + end + + context 'duree_conservation_required is false, the field doesn’t get validated' do + before { subject.durees_conservation_required = false } + + it { is_expected.to allow_value(nil).for(field_name) } + it { is_expected.to allow_value('').for(field_name) } + it { is_expected.not_to allow_value('trois').for(field_name) } + it { is_expected.to allow_value(3).for(field_name) } + end + end + + describe 'duree de conservation dans ds' do + let(:field_name) { :duree_conservation_dossiers_dans_ds } + + it_behaves_like 'duree de conservation' + end + + describe 'duree de conservation hors ds' do + let(:field_name) { :duree_conservation_dossiers_hors_ds } + + it_behaves_like 'duree de conservation' + end end describe '#types_de_champ_ordered' do