diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 10949c077..bd1c3c38d 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -224,7 +224,7 @@ class Admin::ProceduresController < AdminController end def procedure_params - editable_params = [:libelle, :description, :organisation, :direction, :lien_site_web, :cadre_juridique, :notice, :web_hook_url, :euro_flag, :logo, :auto_archive_on] + editable_params = [:libelle, :description, :organisation, :direction, :lien_site_web, :cadre_juridique, :deliberation, :notice, :web_hook_url, :euro_flag, :logo, :auto_archive_on] if @procedure&.locked? params.require(:procedure).permit(*editable_params) else diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 176076bcd..dc9d15065 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -24,6 +24,7 @@ class Procedure < ApplicationRecord has_one :without_continuation_mail, class_name: "Mails::WithoutContinuationMail", dependent: :destroy has_one_attached :notice + has_one_attached :deliberation delegate :use_api_carto, to: :module_api_carto @@ -45,7 +46,7 @@ class Procedure < ApplicationRecord validates :libelle, presence: true, allow_blank: false, allow_nil: false validates :description, presence: true, allow_blank: false, allow_nil: false - validates :cadre_juridique, presence: true, allow_blank: false, allow_nil: false + validate :check_juridique include AASM @@ -350,6 +351,12 @@ class Procedure < ApplicationRecord private + def check_juridique + if cadre_juridique.blank? && !deliberation.attached? + errors.add(:cadre_juridique, " : veuillez remplir le texte de loi ou la délibération") + end + end + def field_hash(label, table, column) { 'label' => label, diff --git a/app/views/admin/procedures/_informations.html.haml b/app/views/admin/procedures/_informations.html.haml index 0b5bdbd2f..9270d749f 100644 --- a/app/views/admin/procedures/_informations.html.haml +++ b/app/views/admin/procedures/_informations.html.haml @@ -22,9 +22,24 @@ = f.text_field :web_hook_url, class: 'form-control', placeholder: 'https://callback.exemple.fr/' .form-group - %h4 Cadre juridique : indiquez la référence ou l'URL du texte juridique ou chargez la délibération qui justifie cette procédure * + %h4 Cadre juridique * + %p Indiquez la référence ou l'URL du texte juridique ou chargez la délibération qui justifie cette procédure + = f.label :cadre_juridique, 'Référence ou texte de loi' = f.text_field :cadre_juridique, class: 'form-control', placeholder: 'https://www.legifrance.gouv.fr/' + = f.label :deliberation, 'Délibération' + - deliberation = @procedure.deliberation + - if !deliberation.attached? + = f.file_field :deliberation, + direct_upload: true + - else + %a{ href: url_for(deliberation), target: '_blank' } + = deliberation.filename.to_s + %br + Modifier : + = f.file_field :deliberation, + direct_upload: true + .form-group %h4 Notice explicative de la procédure - notice = @procedure.notice diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index 15efdf5e2..ac091cb6d 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -173,6 +173,26 @@ describe Procedure do context 'organisation' do it { is_expected.to allow_value('URRSAF').for(:organisation) } end + + context 'juridique' do + it { is_expected.not_to allow_value(nil).for(:cadre_juridique) } + it { is_expected.to allow_value('text').for(:cadre_juridique) } + + context 'with deliberation' do + let(:procedure) { build(:procedure, cadre_juridique: nil) } + + it { expect(procedure.valid?).to eq(false) } + + context 'when the deliberation is uploaded ' do + before do + allow(procedure).to receive(:deliberation) + .and_return(double('attached?': true)) + end + + it { expect(procedure.valid?).to eq(true) } + end + end + end end describe '#types_de_champ_ordered' do