From 85608f18abd6ef16da8cd89d62d9520a59dab058 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Tue, 14 Feb 2017 18:13:19 +0100 Subject: [PATCH 1/6] Description page is accessible, some field are disabled if procedure is locked --- .../admin/procedures_controller.rb | 8 ++++---- .../admin/procedures/_informations.html.haml | 20 ++++++++++--------- ...dmin_procedurescontroller_navbar.html.haml | 7 +++---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 2f7f11d1b..febf858fd 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -3,7 +3,6 @@ class Admin::ProceduresController < AdminController helper SmartListing::Helper before_action :retrieve_procedure, only: [:show, :edit] - before_action :procedure_locked?, only: [:edit] def index @procedures = smart_listing_create :procedures, @@ -61,7 +60,7 @@ class Admin::ProceduresController < AdminController end def create - @procedure = Procedure.new(create_procedure_params) + @procedure = Procedure.new(procedure_params) @procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params) if @procedure.valid? unless @procedure.save @@ -76,7 +75,7 @@ class Admin::ProceduresController < AdminController def update @procedure = current_administrateur.procedures.find(params[:id]) - unless @procedure.update_attributes(create_procedure_params) + unless @procedure.update_attributes(procedure_params) flash.now.alert = @procedure.errors.full_messages.join('
').html_safe return render 'edit' end @@ -192,8 +191,9 @@ class Admin::ProceduresController < AdminController private - def create_procedure_params + def procedure_params params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_demarche, :lien_site_web, :lien_notice, :euro_flag, :logo, :cerfa_flag, :for_individual, :individual_with_siret, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id) + end def create_module_api_carto_params diff --git a/app/views/admin/procedures/_informations.html.haml b/app/views/admin/procedures/_informations.html.haml index d34f1c07f..035381d5b 100644 --- a/app/views/admin/procedures/_informations.html.haml +++ b/app/views/admin/procedures/_informations.html.haml @@ -1,5 +1,7 @@ -%br +- if @procedure.locked? + .alert.alert-info + Cette procédure est publiée, certaines informations ne sont plus modifiables -{libelle: 'Libellé*', description: 'Description*', organisation: 'Organisation', direction: 'Direction', lien_site_web: 'Lien site internet', lien_notice: 'Lien notice'}.each do |key, value| .form-group @@ -16,7 +18,7 @@ %h4 Logo de la procédure - unless @procedure.logo.blank? = image_tag @procedure.decorate.logo_img, {style: 'height: 40px; display: inline; margin-right: 6px', id: 'preview_procedure_logo'} - = f.file_field(:logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display:inline') + = f.file_field :logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display:inline', disabled: @procedure.locked? %div{style:'margin-top:5px'} %i @@ -35,27 +37,27 @@ = f.fields_for :module_api_carto, @procedure.module_api_carto do |ff| %label - =ff.check_box :use_api_carto, {id: :procedure_module_api_carto_use_api_carto} + =ff.check_box :use_api_carto, disabled: @procedure.locked?, id: :procedure_module_api_carto_use_api_carto Utilisation de la cartographie %ul#modules_api_carto %li %label - = ff.check_box :quartiers_prioritaires + = ff.check_box :quartiers_prioritaires, disabled: @procedure.locked? Quartiers Prioritaires %li %label - = ff.check_box :cadastre + = ff.check_box :cadastre, disabled: @procedure.locked? Cadastre .col-xs-6 - if @procedure.cerfa_flag %h4 Formulaire de demande ou CERFA %label - =f.check_box :cerfa_flag + =f.check_box :cerfa_flag, disabled: @procedure.locked? Activer l'envoi de formulaire de demande ou CERFA %br - =f.text_field :lien_demarche, class: 'form-control', placeholder: 'URL vers le formulaire vierge (facultatif)' + =f.text_field :lien_demarche, class: 'form-control', placeholder: 'URL vers le formulaire vierge (facultatif)', disabled: @procedure.locked? %br .row @@ -63,7 +65,7 @@ %h4 Particuliers %div %label - =f.check_box :for_individual + =f.check_box :for_individual, disabled: @procedure.locked? Cette procédure s'adresse à un public qui %b ne possède pas (ou pas encore) de numéro SIRET, @@ -72,5 +74,5 @@ %ul#individual_with_siret{style:'margin-top: 8px'} %li %label - =f.check_box :individual_with_siret + =f.check_box :individual_with_siret, disabled: @procedure.locked? Donner la possibilité de renseigner un SIRET au cours de la construction du dossier. diff --git a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_navbar.html.haml b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_navbar.html.haml index 66ab55a3f..a78879adc 100644 --- a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_navbar.html.haml +++ b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_navbar.html.haml @@ -19,10 +19,9 @@ %div.procedure_list_element{class: ('active' if active == 'Accompagnateurs')} =t('dynamics.admin.procedure.onglets.accompagnateurs') - - unless @procedure.locked? - %a{:href => "#{url_for edit_admin_procedure_path(@procedure)}", id: 'onglet-description'} - %div.procedure_list_element{class: ('active' if active == 'Description')} - Description + %a{:href => "#{url_for edit_admin_procedure_path(@procedure)}", id: 'onglet-description'} + %div.procedure_list_element{class: ('active' if active == 'Description')} + Description - unless @procedure.locked? %a{:href => "#{url_for admin_procedure_types_de_champ_path(@procedure)}", id: 'onglet-champs'} From a636d4f98d447ed0e1a11449f9da4861edb8290f Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Wed, 15 Feb 2017 14:13:02 +0100 Subject: [PATCH 2/6] Filter procedure update parms if procedure is locked --- .../admin/procedures_controller.rb | 7 +- .../admin/procedures/_informations.html.haml | 90 +++++++++---------- app/views/admin/procedures/edit.html.haml | 5 +- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index febf858fd..dd9b3d3bb 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -192,8 +192,11 @@ class Admin::ProceduresController < AdminController private def procedure_params - params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_demarche, :lien_site_web, :lien_notice, :euro_flag, :logo, :cerfa_flag, :for_individual, :individual_with_siret, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id) - + if @procedure.try(:locked?) + params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_site_web, :lien_notice, :euro_flag, :logo) + else + params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_demarche, :lien_site_web, :lien_notice, :euro_flag, :logo, :cerfa_flag, :for_individual, :individual_with_siret, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id) + end end def create_module_api_carto_params diff --git a/app/views/admin/procedures/_informations.html.haml b/app/views/admin/procedures/_informations.html.haml index 035381d5b..adcd48895 100644 --- a/app/views/admin/procedures/_informations.html.haml +++ b/app/views/admin/procedures/_informations.html.haml @@ -1,7 +1,7 @@ - if @procedure.locked? .alert.alert-info - Cette procédure est publiée, certaines informations ne sont plus modifiables + Cette procédure est publiée, certains éléments de la description ne sont plus modifiables -{libelle: 'Libellé*', description: 'Description*', organisation: 'Organisation', direction: 'Direction', lien_site_web: 'Lien site internet', lien_notice: 'Lien notice'}.each do |key, value| .form-group @@ -14,65 +14,63 @@ = f.text_field key, class: 'form-control', placeholder: value .row - .col-xs-6 + .col-md-6 %h4 Logo de la procédure - unless @procedure.logo.blank? = image_tag @procedure.decorate.logo_img, {style: 'height: 40px; display: inline; margin-right: 6px', id: 'preview_procedure_logo'} - = f.file_field :logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display:inline', disabled: @procedure.locked? + = f.file_field :logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display:inline' %div{style:'margin-top:5px'} %i Fichier accepté : JPG / JPEG / PNG - .col-xs-6 + .col-md-6 %h4 Drapeau européen %label =f.check_box :euro_flag Afficher le drapeau européen -%br +- unless @procedure.locked? + .row + .col-md-6 + %h4 Cartographie -.row - .col-xs-6 - %h4 Cartographie + = f.fields_for :module_api_carto, @procedure.module_api_carto do |ff| + %label + =ff.check_box :use_api_carto, id: :procedure_module_api_carto_use_api_carto + Utilisation de la cartographie - = f.fields_for :module_api_carto, @procedure.module_api_carto do |ff| - %label - =ff.check_box :use_api_carto, disabled: @procedure.locked?, id: :procedure_module_api_carto_use_api_carto - Utilisation de la cartographie + %ul#modules_api_carto + %li + %label + = ff.check_box :quartiers_prioritaires + Quartiers Prioritaires + %li + %label + = ff.check_box :cadastre + Cadastre - %ul#modules_api_carto - %li - %label - = ff.check_box :quartiers_prioritaires, disabled: @procedure.locked? - Quartiers Prioritaires - %li - %label - = ff.check_box :cadastre, disabled: @procedure.locked? - Cadastre + .col-md-6 + - if @procedure.cerfa_flag + %h4 Formulaire de demande ou CERFA + %label + =f.check_box :cerfa_flag + Activer l'envoi de formulaire de demande ou CERFA + %br + =f.text_field :lien_demarche, class: 'form-control', placeholder: 'URL vers le formulaire vierge (facultatif)' - .col-xs-6 - - if @procedure.cerfa_flag - %h4 Formulaire de demande ou CERFA - %label - =f.check_box :cerfa_flag, disabled: @procedure.locked? - Activer l'envoi de formulaire de demande ou CERFA - %br - =f.text_field :lien_demarche, class: 'form-control', placeholder: 'URL vers le formulaire vierge (facultatif)', disabled: @procedure.locked? + .row + .col-md-6 + %h4 Particuliers + %div + %label + =f.check_box :for_individual + Cette procédure s'adresse à un public qui + %b + ne possède pas (ou pas encore) de numéro SIRET, + qui doivent donc s'identifier en tant que personne physique. -%br -.row - .col-xs-6 - %h4 Particuliers - %div - %label - =f.check_box :for_individual, disabled: @procedure.locked? - Cette procédure s'adresse à un public qui - %b - ne possède pas (ou pas encore) de numéro SIRET, - qui doivent donc s'identifier en tant que personne physique. - - %ul#individual_with_siret{style:'margin-top: 8px'} - %li - %label - =f.check_box :individual_with_siret, disabled: @procedure.locked? - Donner la possibilité de renseigner un SIRET au cours de la construction du dossier. + %ul#individual_with_siret{style:'margin-top: 8px'} + %li + %label + =f.check_box :individual_with_siret + Donner la possibilité de renseigner un SIRET au cours de la construction du dossier. diff --git a/app/views/admin/procedures/edit.html.haml b/app/views/admin/procedures/edit.html.haml index c1a2c7dbe..de42e8835 100644 --- a/app/views/admin/procedures/edit.html.haml +++ b/app/views/admin/procedures/edit.html.haml @@ -2,6 +2,5 @@ #procedure_new.section.section-label = form_for @procedure, url: url_for({controller: 'admin/procedures', action: :update, id: @procedure.id}), multipart: true do |f| = render partial: 'informations', locals: {f: f} - = f.submit 'Editer', class: 'btn btn-success', style: 'float:right' - %br - %br + .text-right + = f.submit 'Enregistrer', class: 'btn btn-success' From a0d84eda5cc81d8d7e9ff6bd59bd09c050f64b86 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Wed, 15 Feb 2017 15:13:49 +0100 Subject: [PATCH 3/6] Fix logo display in development --- app/decorators/procedure_decorator.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/decorators/procedure_decorator.rb b/app/decorators/procedure_decorator.rb index f78a02d88..561e6754b 100644 --- a/app/decorators/procedure_decorator.rb +++ b/app/decorators/procedure_decorator.rb @@ -11,9 +11,17 @@ class ProcedureDecorator < Draper::Decorator end def logo_img - return h.image_url(LOGO_NAME) if logo.blank? - File.join(STORAGE_URL, File.basename(logo.path)) + if logo.blank? + h.image_url(LOGO_NAME) + else + if Features.remote_storage + (RemoteDownloader.new logo.filename).url + else + (LocalDownloader.new logo.path, 'logo').url + end + end end + def geographic_information module_api_carto end From 1d0a2368134c0dddee6d735bb583f113d0ad38d5 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Wed, 15 Feb 2017 15:21:34 +0100 Subject: [PATCH 4/6] Typo --- app/controllers/admin/procedures_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index dd9b3d3bb..bbe4c3362 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -80,7 +80,7 @@ class Admin::ProceduresController < AdminController return render 'edit' end - flash.notice = 'Préocédure modifiée' + flash.notice = 'Procédure modifiée' redirect_to edit_admin_procedure_path(id: @procedure.id) end From 6979f6b5f64943b25dff12840688908097b06cfb Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Wed, 15 Feb 2017 17:09:25 +0100 Subject: [PATCH 5/6] Add some tests --- .../admin/procedures_controller.rb | 2 +- .../admin/procedures_controller_spec.rb | 39 +++++++++++++++---- spec/factories/procedure.rb | 1 + 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index bbe4c3362..f67d739d7 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -195,7 +195,7 @@ class Admin::ProceduresController < AdminController if @procedure.try(:locked?) params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_site_web, :lien_notice, :euro_flag, :logo) else - params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_demarche, :lien_site_web, :lien_notice, :euro_flag, :logo, :cerfa_flag, :for_individual, :individual_with_siret, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id) + params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_site_web, :lien_notice, :euro_flag, :logo, :lien_demarche, :cerfa_flag, :for_individual, :individual_with_siret, module_api_carto_attributes: [:id, :use_api_carto, :quartiers_prioritaires, :cadastre]).merge(administrateur_id: current_administrateur.id) end end diff --git a/spec/controllers/admin/procedures_controller_spec.rb b/spec/controllers/admin/procedures_controller_spec.rb index 7d3379723..9ba3e76e4 100644 --- a/spec/controllers/admin/procedures_controller_spec.rb +++ b/spec/controllers/admin/procedures_controller_spec.rb @@ -1,4 +1,5 @@ require 'spec_helper' +require 'spec_helper' describe Admin::ProceduresController, type: :controller do let(:admin) { create(:administrateur) } @@ -13,6 +14,7 @@ describe Admin::ProceduresController, type: :controller do let(:use_api_carto) { '0' } let(:quartiers_prioritaires) { '0' } let(:cadastre) { '0' } + let(:cerfa_flag) { true } let(:procedure_params) { { @@ -21,6 +23,7 @@ describe Admin::ProceduresController, type: :controller do organisation: organisation, direction: direction, lien_demarche: lien_demarche, + cerfa_flag: cerfa_flag, module_api_carto_attributes: { use_api_carto: use_api_carto, quartiers_prioritaires: quartiers_prioritaires, @@ -105,24 +108,24 @@ describe Admin::ProceduresController, type: :controller do sign_out admin end - it { expect(subject).to redirect_to new_user_session_path } + it { is_expected.to redirect_to new_user_session_path } end context 'when user is connected' do context 'when procedure exist' do let(:procedure_id) { procedure.id } - it { expect(subject).to have_http_status(:success) } + it { is_expected.to have_http_status(:success) } end context 'when procedure is published' do let(:published) { true } - it { is_expected.to redirect_to admin_procedure_path id: procedure_id } + it { is_expected.to have_http_status(:success) } end context "when procedure doesn't exist" do let(:procedure_id) { bad_procedure_id } - it { expect(subject).to have_http_status(404) } + it { is_expected.to have_http_status(404) } end end end @@ -164,7 +167,7 @@ describe Admin::ProceduresController, type: :controller do it { expect(subject.quartiers_prioritaires).to be_truthy } end - it { expect(subject).to redirect_to(admin_procedure_types_de_champ_path(procedure_id: Procedure.last.id)) } + it { is_expected.to redirect_to(admin_procedure_types_de_champ_path(procedure_id: Procedure.last.id)) } it { expect(flash[:notice]).to be_present } end @@ -204,7 +207,7 @@ describe Admin::ProceduresController, type: :controller do subject { put :update, params: {id: procedure.id} } - it { expect(subject).to redirect_to new_user_session_path } + it { is_expected.to redirect_to new_user_session_path } end context 'when administrateur is connected' do @@ -213,7 +216,7 @@ describe Admin::ProceduresController, type: :controller do procedure.reload end - context 'when all attributs are informated' do + context 'when all attributs are present' do let(:libelle) { 'Blable' } let(:description) { 'blabla' } let(:organisation) { 'plop' } @@ -240,7 +243,7 @@ describe Admin::ProceduresController, type: :controller do it { expect(subject.cadastre).to be_truthy } end - it { expect(subject).to redirect_to(edit_admin_procedure_path id: procedure.id) } + it { is_expected.to redirect_to(edit_admin_procedure_path id: procedure.id) } it { expect(flash[:notice]).to be_present } end @@ -260,6 +263,26 @@ describe Admin::ProceduresController, type: :controller do it { expect(subject.cadastre).to be_falsey } end end + + context 'when procedure is published' do + let!(:procedure) { create(:procedure, :with_type_de_champ, :with_two_type_de_piece_justificative, :published, administrateur: admin) } + + describe 'only some properties can be updated' do + subject { procedure } + + it { expect(subject.libelle).to eq procedure_params[:libelle] } + it { expect(subject.description).to eq procedure_params[:description] } + it { expect(subject.organisation).to eq procedure_params[:organisation] } + it { expect(subject.direction).to eq procedure_params[:direction] } + + it { expect(subject.cerfa_flag).not_to eq procedure_params[:cerfa_flag] } + it { expect(subject.lien_demarche).not_to eq procedure_params[:lien_demarche] } + it { expect(subject.for_individual).not_to eq procedure_params[:for_individual] } + it { expect(subject.individual_with_siret).not_to eq procedure_params[:individual_with_siret] } + it { expect(subject.use_api_carto).not_to eq procedure_params[:module_api_carto_attributes][:use_api_carto] } + + end + end end end diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index c92a8ee5b..d3b7cc066 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -7,6 +7,7 @@ FactoryGirl.define do organisation "Orga SGMAP" direction "direction SGMAP" published false + cerfa_flag false administrateur { create(:administrateur) } mail_templates { [create(:mail_template, :dossier_received)]} From 702a1456f19127a1269fdbea28762830257c1330 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Mon, 20 Feb 2017 14:46:06 +0100 Subject: [PATCH 6/6] Remove duplicate line --- spec/controllers/admin/procedures_controller_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/controllers/admin/procedures_controller_spec.rb b/spec/controllers/admin/procedures_controller_spec.rb index 9ba3e76e4..0efacba6e 100644 --- a/spec/controllers/admin/procedures_controller_spec.rb +++ b/spec/controllers/admin/procedures_controller_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' -require 'spec_helper' describe Admin::ProceduresController, type: :controller do let(:admin) { create(:administrateur) }