From ec3a1bd132af8aa2964b2e990c8c26f21c329aef Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Fri, 16 Mar 2018 15:42:27 +0100 Subject: [PATCH 1/5] [Fix #1535] Remove super_admin.rb from Mina --- config/deploy.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/config/deploy.rb b/config/deploy.rb index fdd424f79..63920ad5b 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -61,7 +61,6 @@ set :shared_paths, [ 'config/initializers/features.yml', "config/environments/#{rails_env}.rb", "config/initializers/token.rb", - "config/initializers/super_admin.rb", "config/unicorn.rb", "config/initializers/raven.rb", 'config/france_connect.yml', From 4e2af06423ca555ad0ece34076e65d937e0876e6 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Fri, 16 Mar 2018 11:20:45 +0100 Subject: [PATCH 2/5] Use root_url in admin creation mail --- app/views/administration_mailer/new_admin_email.text.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/administration_mailer/new_admin_email.text.erb b/app/views/administration_mailer/new_admin_email.text.erb index fc244079a..0cac8ecfd 100644 --- a/app/views/administration_mailer/new_admin_email.text.erb +++ b/app/views/administration_mailer/new_admin_email.text.erb @@ -1,6 +1,6 @@ Un nouvel administrateur a été créé sur demarches-simplifiees.fr. -Plateforme : <%= TPS::Application::URL %> +Plateforme : <%= root_url %> Login : <%= @admin.email %> From 19a23985938d566b3c70761356221bc346f937ff Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Thu, 15 Mar 2018 18:07:20 +0100 Subject: [PATCH 3/5] [Fix #1644] In API, current_administrateur -> administrateur --- app/controllers/api/v1/dossiers_controller.rb | 4 ++-- app/controllers/api/v1/procedures_controller.rb | 2 +- app/controllers/api_controller.rb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/dossiers_controller.rb b/app/controllers/api/v1/dossiers_controller.rb index b275f41b2..a446570da 100644 --- a/app/controllers/api/v1/dossiers_controller.rb +++ b/app/controllers/api/v1/dossiers_controller.rb @@ -13,7 +13,7 @@ class API::V1::DossiersController < APIController error code: 404, desc: "Procédure inconnue" def index - procedure = current_administrateur.procedures.find(params[:procedure_id]) + procedure = administrateur.procedures.find(params[:procedure_id]) dossiers = procedure.dossiers.state_not_brouillon.page(params[:page]).per(per_page) render json: { dossiers: dossiers.map{ |dossier| DossiersSerializer.new(dossier) }, pagination: pagination(dossiers) }, status: 200 @@ -28,7 +28,7 @@ class API::V1::DossiersController < APIController error code: 404, desc: "Procédure ou dossier inconnu" def show - procedure = current_administrateur.procedures.find(params[:procedure_id]) + procedure = administrateur.procedures.find(params[:procedure_id]) dossier = procedure.dossiers.find(params[:id]) respond_to do |format| diff --git a/app/controllers/api/v1/procedures_controller.rb b/app/controllers/api/v1/procedures_controller.rb index f983b9d21..54cf5c94c 100644 --- a/app/controllers/api/v1/procedures_controller.rb +++ b/app/controllers/api/v1/procedures_controller.rb @@ -9,7 +9,7 @@ class API::V1::ProceduresController < APIController error code: 404, desc: "Procédure inconnue" def show - procedure = current_administrateur.procedures.find(params[:id]).decorate + procedure = administrateur.procedures.find(params[:id]).decorate render json: { procedure: ProcedureSerializer.new(procedure).as_json } rescue ActiveRecord::RecordNotFound => e diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index d1ab966a5..e387c3b69 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -19,10 +19,10 @@ class APIController < ApplicationController protected def valid_token? - current_administrateur.present? + administrateur.present? end - def current_administrateur + def administrateur @administrateur ||= (authenticate_with_bearer_token || authenticate_with_param_token) end From 621f8143bda9d81b6e5f200916917d9e29904350 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Fri, 16 Mar 2018 12:00:01 +0100 Subject: [PATCH 4/5] [Fix #1654] Generate procedure export filename with libelle --- .../new_gestionnaire/procedures_controller.rb | 2 +- app/models/procedure.rb | 5 +++++ spec/models/procedure_spec.rb | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/controllers/new_gestionnaire/procedures_controller.rb b/app/controllers/new_gestionnaire/procedures_controller.rb index aefe3fa26..dad304e23 100644 --- a/app/controllers/new_gestionnaire/procedures_controller.rb +++ b/app/controllers/new_gestionnaire/procedures_controller.rb @@ -175,7 +175,7 @@ module NewGestionnaire def download_dossiers export = procedure.generate_export - filename = "dossiers_#{procedure.procedure_path.path}_#{Time.now.strftime('%Y-%m-%d_%H-%M')}" + filename = procedure.export_filename respond_to do |format| format.csv { send_data(SpreadsheetArchitect.to_csv(data: export[:data], headers: export[:headers]), filename: "#{filename}.csv") } diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 436a43a7c..daddb0ab7 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -157,6 +157,11 @@ class Procedure < ApplicationRecord self.dossiers.state_not_brouillon.size end + def export_filename + procedure_identifier = procedure_path&.path || "procedure-#{id}" + "dossiers_#{procedure_identifier}_#{Time.now.strftime('%Y-%m-%d_%H-%M')}" + end + def generate_export exportable_dossiers = dossiers.downloadable_sorted diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index 72bfbe1c7..26605cdda 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -494,4 +494,22 @@ describe Procedure do describe ".default_sort" do it { expect(Procedure.default_sort).to eq("{\"table\":\"self\",\"column\":\"id\",\"order\":\"desc\"}") } end + + describe ".export_filename" do + before { Timecop.freeze(Time.new(2018, 1, 2, 23, 11, 14)) } + + subject { procedure.export_filename } + + context "with a path" do + let(:procedure) { create(:procedure, :published) } + + it { is_expected.to eq("dossiers_#{procedure.procedure_path.path}_2018-01-02_23-11") } + end + + context "without a path" do + let(:procedure) { create(:procedure) } + + it { is_expected.to eq("dossiers_procedure-#{procedure.id}_2018-01-02_23-11") } + end + end end From df06850d5d26afbbd3e335b3c825816956598a1d Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 19 Mar 2018 10:30:26 +0100 Subject: [PATCH 5/5] Remove unused images --- app/assets/images/franceconnect_logo.png | Bin 7285 -> 0 bytes app/assets/images/logo_FC_02_small.png | Bin 6454 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/assets/images/franceconnect_logo.png delete mode 100644 app/assets/images/logo_FC_02_small.png diff --git a/app/assets/images/franceconnect_logo.png b/app/assets/images/franceconnect_logo.png deleted file mode 100644 index c1a8ce071cfec338e635517ceca974bd20d3d01e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7285 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 diff --git a/app/assets/images/logo_FC_02_small.png b/app/assets/images/logo_FC_02_small.png deleted file mode 100644 index 944de73ce9c3749201316a18b6c68901fc9ee875..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6454 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