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 zcmV-68Oi2}P)MNklMBMkiI`7A-R+6aMx-o?oyJ zW-)COfLhPB?)94h0>I2d4+wjF<3^{IVPUG94fQS1wnnlhvS#hJ0os-r6<_PI)6wQ- z#>VK>Lv9Fb>tC&VnOR$h_L9H;-0Ikeey1<13kxftZB2r;w6vhL6}r|+FUVTj05#V( zLKPg5ebQ>zS~^c}JwOEhR|CY=)wQQQj=Z+$(7fZ$VQ15>Wb67))+hk!tZDz=q%~CJ z7bC(wFz)DrZ~vvIO5yY9bN{E~hybPS^`wP%<8~bhIvS-)Yk<@m1T~N-Om5nDH$vO8 zlCR+W0q4MD^Onw$#~)Yv{Qs>0&4EA%gw5Rf_y*fE>w_*N7S&2|gvStqg045oy>x(R zFXf`5A$Y5u-7)swNTzMV592z2e$TrdSA8YGg)^{U7PiYtU7HsjGYwr^kq{%GQ^;4@5 zqfA;wAad6c{$4MUIEiTm?2jWeku17 z)S(B29e#Z6vG8xtTu#lal0s{v@Z*~Tg!e|Kl7gZ#Z1Ycmqg?>1lagfWX@Mzi2Q`_?+y8@f5@4~#w@hX;+E0-$AG??ye!WCTq(!VpV5&&;fHYCg zxLjLGI%4>y(_o|&Gcp0pJ+?9U-JWPtO)P9bw?QK72h~%vpkNFt zHX2#Z?r5y4l4Y(I7^fqGl&5#(q~^eSgOWT)V2F(W8UFapzOPZX&}g=s%u zLdc6BBZ2jXYV14$Ggeg3l5bF+oMJ>hrlt1^RV;FL>^Y=lY)D)7)xoj0)=b=7T{h6`(zvFzo$F-fmtyaVAGU@8&A>b0>EAyFxKeZ8AbCDX`tMz1)5v4T=)D_9>f;Oax6 zeJvOQqCo$>QKT9*7H$qi)QDFQ&xSzxyBS

Oll)#0$FEbK`_F>gDR;{WXzK6OYTa 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 QqyPW_07*qoM6N<$g4e)Rpa1{>