From 68951c3a5357c12768a4602a30fb9189789f4a0f Mon Sep 17 00:00:00 2001 From: Xavier J Date: Thu, 3 Nov 2016 16:46:26 +0100 Subject: [PATCH 1/7] Add locales dynamics (opensimplif) --- app/models/preference_list_dossier.rb | 4 +- .../admin/accompagnateurs/show.html.haml | 3 +- app/views/admin/procedures/_navbar.html.haml | 2 +- app/views/admin/procedures/index.html.haml | 5 ++- app/views/admin/procedures/new.html.haml | 3 +- app/views/admin/procedures/show.html.haml | 3 +- .../administrateurs/_login_banner.html.haml | 6 ++- .../administrateurs/sessions/new.html.haml | 5 ++- .../dossiers/_follow_action.html.haml | 4 +- .../backoffice/dossiers/_followers.html.haml | 3 +- .../backoffice/dossiers/_onglets.html.haml | 7 ++- .../backoffice/dossiers/_pref_list.html.haml | 5 ++- app/views/backoffice/dossiers/index.html.haml | 5 ++- app/views/backoffice/dossiers/show.html.haml | 2 +- app/views/dossiers/_infos_dossier.html.haml | 14 +++--- app/views/dossiers/_invites.html.haml | 2 +- .../dossiers/_tab_objects_dossier.html.haml | 6 +-- app/views/layouts/_navbar.html.haml | 10 ++--- app/views/layouts/application.html.haml | 2 +- app/views/users/description/_show.html.haml | 23 +++++----- app/views/users/dossiers/index.html.haml | 3 +- app/views/users/recapitulatif/show.html.haml | 2 +- app/views/users/sessions/new.html.haml | 5 ++- config/deploy.rb | 4 ++ config/locales/dynamics/fr.yml | 44 +++++++++++++++++++ config/locales/dynamics/fr_opensimplif.yml | 44 +++++++++++++++++++ spec/models/preference_list_dossier_spec.rb | 4 +- spec/views/layouts/_navbar_spec.rb | 8 ++-- 28 files changed, 169 insertions(+), 59 deletions(-) create mode 100644 config/locales/dynamics/fr.yml create mode 100644 config/locales/dynamics/fr_opensimplif.yml diff --git a/app/models/preference_list_dossier.rb b/app/models/preference_list_dossier.rb index c09ed6682..0fa14f24e 100644 --- a/app/models/preference_list_dossier.rb +++ b/app/models/preference_list_dossier.rb @@ -36,10 +36,10 @@ class PreferenceListDossier < ActiveRecord::Base table = nil { - dossier_id: create_column('ID', table, 'id', 'id', 1), + dossier_id: create_column('N°', table, 'id', 'id', 1), created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2), updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2), - state: create_column('Statut', table, 'state', 'display_state', 1) + state: create_column('État', table, 'state', 'display_state', 1) } end diff --git a/app/views/admin/accompagnateurs/show.html.haml b/app/views/admin/accompagnateurs/show.html.haml index edcac3188..e12a5e379 100644 --- a/app/views/admin/accompagnateurs/show.html.haml +++ b/app/views/admin/accompagnateurs/show.html.haml @@ -7,7 +7,8 @@ = smart_listing_render :accompagnateurs_not_assign %br - %h3 Ajouter un accompagnateur + %h3 + =t('dynamics.admin.procedure.onglet_accompagnateurs.add.title') #procedure_new.section.section-label = form_for @gestionnaire, url: {controller: 'admin/gestionnaires', action: :create} do |f| .row diff --git a/app/views/admin/procedures/_navbar.html.haml b/app/views/admin/procedures/_navbar.html.haml index f2d67d181..b9a736f4f 100644 --- a/app/views/admin/procedures/_navbar.html.haml +++ b/app/views/admin/procedures/_navbar.html.haml @@ -2,7 +2,7 @@ = link_to('Informations', admin_procedure_path(@procedure)) %li{ class: ('active' if active == 'Accompagnateurs') } - = link_to('Accompagnateurs', admin_procedure_accompagnateurs_path(@procedure)) + = link_to(t('dynamics.admin.procedure.onglets.accompagnateurs'), admin_procedure_accompagnateurs_path(@procedure)) %li{ class: ('disabled' if @procedure.locked?) || ('active' if active == 'Description') } = link_to_unless(@procedure.locked?, 'Description', edit_admin_procedure_path(@procedure)) do diff --git a/app/views/admin/procedures/index.html.haml b/app/views/admin/procedures/index.html.haml index f79272923..825ad5f5e 100644 --- a/app/views/admin/procedures/index.html.haml +++ b/app/views/admin/procedures/index.html.haml @@ -1,5 +1,6 @@ -= link_to("Nouvelle procédure", "/admin/procedures/new", class: 'btn btn-success', style: 'float:right; margin-top:2%;') -%h1 Gestion des procédures += link_to(t('dynamics.admin.dossiers.tableau_de_bord.nouvelle_procedure'), "/admin/procedures/new", class: 'btn btn-success', style: 'float:right; margin-top:2%;') +%h1 + =t('dynamics.admin.dossiers.tableau_de_bord.title') %br = render partial: 'onglets' diff --git a/app/views/admin/procedures/new.html.haml b/app/views/admin/procedures/new.html.haml index d72bed14b..391adde06 100644 --- a/app/views/admin/procedures/new.html.haml +++ b/app/views/admin/procedures/new.html.haml @@ -1,4 +1,5 @@ -%h2 Nouvelle procédure +%h2 + =t('dynamics.admin.dossiers.tableau_de_bord.nouvelle_procedure') #procedure_new.section.section-label = form_for @procedure, url: {controller: 'admin/procedures', action: :create}, multipart: true do |f| diff --git a/app/views/admin/procedures/show.html.haml b/app/views/admin/procedures/show.html.haml index d14ff8065..b250fbda5 100644 --- a/app/views/admin/procedures/show.html.haml +++ b/app/views/admin/procedures/show.html.haml @@ -83,7 +83,8 @@ = piece_justificative.libelle %br %br - %h3 Dossiers + %h3 + =t('dynamics.admin.procedure.stats.title') .row .col-md-6.col-lg-6{style:'margin-left:3%'} diff --git a/app/views/administrateurs/_login_banner.html.haml b/app/views/administrateurs/_login_banner.html.haml index 0d6c464da..90353b334 100644 --- a/app/views/administrateurs/_login_banner.html.haml +++ b/app/views/administrateurs/_login_banner.html.haml @@ -9,11 +9,13 @@ %li = link_to(admin_procedures_path, id: :menu_item_procedure) do %i.fa.fa-list{ style: "background-size: 10px;"} -  Procédures +   + =t('dynamics.admin.menu.procedures') %li = link_to(admin_gestionnaires_path) do %i.fa.fa-user -  Accompagnateur +   + =t('dynamics.admin.menu.accompagnateurs') %li.divider{ role: :separator} %li = link_to(admin_profile_path, id: :profile) do diff --git a/app/views/administrateurs/sessions/new.html.haml b/app/views/administrateurs/sessions/new.html.haml index b560b422d..863389b43 100644 --- a/app/views/administrateurs/sessions/new.html.haml +++ b/app/views/administrateurs/sessions/new.html.haml @@ -2,7 +2,8 @@ %br = image_tag('logo-tps.png') %br - %h2#login_admin Administration + %h2#login_admin + =t('dynamics.admin.connexion_title') %br %br @@ -16,7 +17,7 @@ = f.email_field :email, class: 'form-control' %br %h4 - = f.label :password + = f.label 'Mot de passe' .input-group .input-group-addon %span.glyphicon.glyphicon-asterisk diff --git a/app/views/backoffice/dossiers/_follow_action.html.haml b/app/views/backoffice/dossiers/_follow_action.html.haml index 2a87b49eb..c695c9942 100644 --- a/app/views/backoffice/dossiers/_follow_action.html.haml +++ b/app/views/backoffice/dossiers/_follow_action.html.haml @@ -1,4 +1,4 @@ - if current_gestionnaire.follow?(@facade.dossier.id) - = link_to('Quitter'.html_safe, backoffice_dossier_follow_path(dossier_id: @facade.dossier.id), 'data-method' => :put, class: 'btn btn-md btn-danger', id: "suivre_dossier_#{@facade.dossier.id}") + = link_to('Se désabonner'.html_safe, backoffice_dossier_follow_path(dossier_id: @facade.dossier.id), 'data-method' => :put, class: 'btn btn-md btn-danger', id: "suivre_dossier_#{@facade.dossier.id}") -else - = link_to('Suivre', backoffice_dossier_follow_path(dossier_id: @facade.dossier.id), 'data-method' => :put, class: 'btn btn-md btn-primary', id: "suivre_dossier_#{@facade.dossier.id}") + = link_to("S'abonner", backoffice_dossier_follow_path(dossier_id: @facade.dossier.id), 'data-method' => :put, class: 'btn btn-md btn-primary', id: "suivre_dossier_#{@facade.dossier.id}") diff --git a/app/views/backoffice/dossiers/_followers.html.haml b/app/views/backoffice/dossiers/_followers.html.haml index 8274055d4..be87860b8 100644 --- a/app/views/backoffice/dossiers/_followers.html.haml +++ b/app/views/backoffice/dossiers/_followers.html.haml @@ -1,4 +1,5 @@ -%h3 Personnes suivant l'activité de ce dossier +%h3 + =t('dynamics.dossiers.followers.title') %br .row diff --git a/app/views/backoffice/dossiers/_onglets.html.haml b/app/views/backoffice/dossiers/_onglets.html.haml index c19dcf170..fa32c51b0 100644 --- a/app/views/backoffice/dossiers/_onglets.html.haml +++ b/app/views/backoffice/dossiers/_onglets.html.haml @@ -1,6 +1,9 @@ -#filter_by_procedure{style:'margin-left: 5%'} +#filter_by_procedure{style:'margin-left: 2%'} + %b.text-info + = t('dynamics.backoffice.filter_procedure.title') %select{onchange: 'location = this.value', style:'margin-top: 10px; margin-bottom: 10px', id: 'filter_by_procedure_select'} %option{value: backoffice_dossiers_path} + = t('dynamics.backoffice.filter_procedure.first') - @dossiers_list_facade.gestionnaire_procedures_name_and_id_list.each do |procedure| %option{value: backoffice_dossiers_procedure_path(procedure[:id]), ('selected' if procedure[:id] == params[:id].to_i) => '' } = truncate(procedure[:libelle], {length: 50}) @@ -55,7 +58,7 @@ %a = form_tag(backoffice_dossiers_search_url, method: :get) do .input-group{style:'width: 300px'} - = text_field_tag('q', "#{@search_terms unless @search_terms.nil? }", id: 'q', placeholder: "Rechercher un dossier ...", class:'form-control') + = text_field_tag('q', "#{@search_terms unless @search_terms.nil? }", id: 'q', placeholder: t('dynamics.backoffice.research.placeholder'), class:'form-control') %span.input-group-btn %button.btn.btn-default{ id:'search_button' } %i.fa.fa-search diff --git a/app/views/backoffice/dossiers/_pref_list.html.haml b/app/views/backoffice/dossiers/_pref_list.html.haml index b45576213..310852807 100644 --- a/app/views/backoffice/dossiers/_pref_list.html.haml +++ b/app/views/backoffice/dossiers/_pref_list.html.haml @@ -1,9 +1,10 @@ %button#pref_list_dossier_close_action.btn.btn-danger.btn-xs{style:'float:right'} %i.fa.fa-close -%h3 Gestion de colonnes affichées +%h3 + =t('dynamics.backoffice.pref_list.title') %p{style:'margin-top: 15px; margin-bottom: 20px'} - Ce menu vous permet de choisir les différentes colonnes que vous souhaitez voir apparaitrent dans votre interface de suivi des dossiers. + =t('dynamics.backoffice.pref_list.description') %h4.text-primary Actuelles diff --git a/app/views/backoffice/dossiers/index.html.haml b/app/views/backoffice/dossiers/index.html.haml index 7a9a68328..2f1f62703 100644 --- a/app/views/backoffice/dossiers/index.html.haml +++ b/app/views/backoffice/dossiers/index.html.haml @@ -2,8 +2,9 @@ #pref_list_menu = render partial: 'backoffice/dossiers/pref_list' - =link_to 'Tous mes dossiers en CSV', backoffice_download_dossiers_tps_path, {class: 'btn btn-success btn-sm', style: 'float: right; margin-right: 4%; margin-top: 7px'} - %h1 Gestion des dossiers + =link_to t('dynamics.backoffice.download_all_dossiers'), backoffice_download_dossiers_tps_path, {class: 'btn btn-success btn-sm', style: 'float: right; margin-right: 4%; margin-top: 7px'} + %h1 + =t('dynamics.backoffice.title') = render partial: 'backoffice/dossiers/onglets' diff --git a/app/views/backoffice/dossiers/show.html.haml b/app/views/backoffice/dossiers/show.html.haml index 9d0288dd9..223c49508 100644 --- a/app/views/backoffice/dossiers/show.html.haml +++ b/app/views/backoffice/dossiers/show.html.haml @@ -1,6 +1,6 @@ #backoffice_dossier_show %h1#dossier_id.text-info{ :style => 'text-align:right'} - = "Dossier n°#{@facade.dossier.id}" + = t('dynamics.dossiers.numéro') + @facade.dossier.id.to_s %div{:style => 'text-align:right'} %h3{:class => 'text-success'} diff --git a/app/views/dossiers/_infos_dossier.html.haml b/app/views/dossiers/_infos_dossier.html.haml index 2a18e98fa..c34efe26c 100644 --- a/app/views/dossiers/_infos_dossier.html.haml +++ b/app/views/dossiers/_infos_dossier.html.haml @@ -7,7 +7,8 @@ - if @facade.procedure.for_individual? %br .individual.text-info - %h4 Dépositaire + %h4 + =t('dynamics.dossiers.depositaite') %table.table{style:'width: 60%'} %tr @@ -25,11 +26,12 @@ Prénom %td.col-md-5.col-lg-5 = @facade.individual.prenom - %tr - %th.col-md-3.col-lg-3 - Date de naissance - %td.col-md-5.col-lg-5 - = @facade.individual.birthdate + - unless Features.opensimplif + %tr + %th.col-md-3.col-lg-3 + Date de naissance + %td.col-md-5.col-lg-5 + = @facade.individual.birthdate - if @facade.dossier.mandataire_social && gestionnaire_signed_in? .mandataire_social.text-success.center diff --git a/app/views/dossiers/_invites.html.haml b/app/views/dossiers/_invites.html.haml index 8328ef5c4..d2fa82d4e 100644 --- a/app/views/dossiers/_invites.html.haml +++ b/app/views/dossiers/_invites.html.haml @@ -9,7 +9,7 @@ %li = invite.email - else - Aucune personne invité + Aucune personne invitée .col-md-3.col-lg-3 =form_tag invites_dossier_path(dossier_id: @facade.dossier.id), method: :post, class: 'form-inline' do diff --git a/app/views/dossiers/_tab_objects_dossier.html.haml b/app/views/dossiers/_tab_objects_dossier.html.haml index 3384c2e26..6e0c684fe 100644 --- a/app/views/dossiers/_tab_objects_dossier.html.haml +++ b/app/views/dossiers/_tab_objects_dossier.html.haml @@ -17,7 +17,7 @@ Abonnés %li{role: "presentation"} %a{href: "#champs_private", 'aria-controls' => "champs_private", role: "tab", 'data-toggle' => "tab"} - Formulaire + Champs privés %div{class: "tab-content"} %div{role: "tabpanel", class: "tab-pane fade in active", id:"commentaires"} @@ -34,11 +34,11 @@ %div{role: "tabpanel", class: "tab-pane fade", id:"followers"} = render partial: 'followers' %div{role: "tabpanel", class: "tab-pane fade", id:"champs_private"} - %h3 Formulaire privé + %h3 Champs privés - if @champs.nil? || @champs.empty? %br %h4.text-primary - Pas de formulaire privé pour ce dossier + Pas de champ privé pour ce dossier - else = form_for @facade.dossier, url: {controller: 'backoffice/private_formulaires', action: :update, dossier_id: @facade.dossier.id}, remote: true do = render partial: '/users/description/champs' diff --git a/app/views/layouts/_navbar.html.haml b/app/views/layouts/_navbar.html.haml index 47dd43354..4f297d196 100644 --- a/app/views/layouts/_navbar.html.haml +++ b/app/views/layouts/_navbar.html.haml @@ -9,18 +9,18 @@ - if gestionnaire_signed_in? && user_signed_in? %a{href: (current_gestionnaire.procedure_filter.blank? ? backoffice_dossiers_path : backoffice_dossiers_procedure_path(current_gestionnaire.procedure_filter)), class: 'btn btn-md'} - Dossiers + =t('dynamics.backoffice.dossiers') %a{href: users_dossiers_path, class: 'btn btn-md'} - Mes Dossiers + =t('dynamics.users.mes_dossiers') - elsif gestionnaire_signed_in? %a{href: (current_gestionnaire.procedure_filter.blank? ? backoffice_dossiers_path : backoffice_dossiers_procedure_path(current_gestionnaire.procedure_filter)), class: 'btn btn-md'} - Mes Dossiers + =t('dynamics.users.mes_dossiers') - elsif user_signed_in? %a{href: users_dossiers_path, class: 'btn btn-md'} - Mes Dossiers + =t('dynamics.users.mes_dossiers') - elsif administrateur_signed_in? %a{href: admin_procedures_path, class: 'btn btn-md'} - Mes Procédures + =t('dynamics.admin.menu.title') #sign_out -if user_signed_in? diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index aab4cbe64..d1bda0bb0 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -51,7 +51,7 @@ \- - =link_to 'Contact', "mailto:contact@tps.apientreprise.fr" + =link_to 'Contact', "mailto:"+t('dynamics.contact_email') diff --git a/app/views/users/description/_show.html.haml b/app/views/users/description/_show.html.haml index 7c49b634d..03217cb0e 100644 --- a/app/views/users/description/_show.html.haml +++ b/app/views/users/description/_show.html.haml @@ -14,7 +14,8 @@ %h2.text-info = @dossier.procedure.libelle - %h3 Votre dossier + - unless Features.opensimplif + %h3 Votre dossier -#TODO use form_for = form_tag(url_for({controller: 'users/description', action: :create, dossier_id: @dossier.id}), class: 'form-inline', method: 'POST', multipart: true) do @@ -37,19 +38,19 @@ //TODO a refactorer = render partial: 'users/description/pieces_justificatives' - #state_description.row{style:'width: 50%; margin-left:20px'} - .panel.panel-info - .panel-body.center - .row - .col-md-1.col-lg-1 - .fa.fa-info-circle.text-info{style:'font-size: 2em; margin-top: 20%'} - .col-md-11.col-lg-11 - Les documents administratifs ne sont pas indispensables afin d'initier votre dossier. - Vous pourrez dans tous les cas les compléter plus tard si vous ne les possédez pas de suite. + - unless Features.opensimplif + #state_description.row{style:'width: 50%; margin-left:20px'} + .panel.panel-info + .panel-body.center + .row + .col-md-1.col-lg-1 + .fa.fa-info-circle.text-info{style:'font-size: 2em; margin-top: 20%'} + .col-md-11.col-lg-11 + Les documents administratifs ne sont pas indispensables afin d'initier votre dossier. + Vous pourrez dans tous les cas les compléter plus tard si vous ne les possédez pas de suite. - if user_signed_in? - %div{style: 'text-align:right'} %h6 Tous les champs portant un * sont obligatoires. diff --git a/app/views/users/dossiers/index.html.haml b/app/views/users/dossiers/index.html.haml index 46774910d..229fc6008 100644 --- a/app/views/users/dossiers/index.html.haml +++ b/app/views/users/dossiers/index.html.haml @@ -1,5 +1,6 @@ #users_index - %h1 Mes dossiers + %h1 + =t('dynamics.users.mes_dossiers') -unless Features.opensimplif = render partial: 'onglets' diff --git a/app/views/users/recapitulatif/show.html.haml b/app/views/users/recapitulatif/show.html.haml index 253c4f865..355c92446 100644 --- a/app/views/users/recapitulatif/show.html.haml +++ b/app/views/users/recapitulatif/show.html.haml @@ -8,7 +8,7 @@ .col-md-3.col-lg-3 %h2#dossier_id{:class => 'text-info', :style => 'text-align:right; margin-bottom:15px'} - = "Dossier n°#{@facade.dossier.id}" + = t('dynamics.dossiers.numéro') + @facade.dossier.id.to_s - if user_signed_in? && current_user.email == @facade.dossier.user.email -if @facade.dossier.validated? diff --git a/app/views/users/sessions/new.html.haml b/app/views/users/sessions/new.html.haml index 0cade0fe2..9a0ce150f 100644 --- a/app/views/users/sessions/new.html.haml +++ b/app/views/users/sessions/new.html.haml @@ -20,7 +20,8 @@ = image_tag('logo-tps.png', {id: 'logo_tps'}) %br - %h2#login_user Connexion + %h2#login_user + =t('dynamics.users.connexion_title') %a.btn_fc#btn_fcp{href: '/france_connect/particulier'} = image_tag 'franceconnect_logo.png' @@ -39,7 +40,7 @@ = f.email_field :email, class: 'form-control' %br %h4 - = f.label :password + = f.label 'Mot de passe' .input-group .input-group-addon %span.fa.fa-asterisk diff --git a/config/deploy.rb b/config/deploy.rb index 14abbcaa5..cf3617318 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -94,6 +94,7 @@ set :shared_paths, [ "config/initializers/super_admin.rb", "config/unicorn.rb", "config/initializers/raven.rb", + "config/locales/dynamics/fr.yml", 'config/france_connect.yml', 'config/initializers/mailjet.rb', 'config/initializers/storage_url.rb', @@ -138,6 +139,9 @@ task :setup => :environment do queue! %[mkdir -p "#{deploy_to}/shared/app"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/app"] + queue! %[mkdir -p "#{deploy_to}/shared/config/locales/dynamics"] + queue! %[chmod g+rx,u+rwx "#{deploy_to}/shared/config/locales/dynamics"] + queue! %[touch "#{deploy_to}/shared/config/database.yml"] queue %[echo "-----> Be sure to edit 'shared/config/database.yml'."] diff --git a/config/locales/dynamics/fr.yml b/config/locales/dynamics/fr.yml new file mode 100644 index 000000000..0d8e42293 --- /dev/null +++ b/config/locales/dynamics/fr.yml @@ -0,0 +1,44 @@ +fr: + dynamics: + contact_email: contact@tps.apientreprise.fr + users: + connexion_title: Connexion + mes_dossiers: 'Mes dossiers' + + backoffice: + title: Gestion des dossiers + dossiers: Dossiers + pref_list: + title: 'Gestion de colonnes affichées' + description: 'Ce menu vous permet de choisir les différentes colonnes que vous souhaitez voir apparaître dans votre interface de suivi des dossiers.' + download_all_dossiers: 'Tous mes dossiers en CSV' + research: + placeholder: 'Rechercher un dossier ...' + filter_procedure: + title: "Voir qu'une procédure :" + first: '' + + dossiers: + depositaite: "Dépositaire" + numéro: 'Dossier n°' + followers: + title: "Personnes suivant l'activité de ce dossier" + + admin: + connexion_title: Administration + dossiers: + tableau_de_bord: + title: 'Gestion des procédures' + nouvelle_procedure: 'Nouvelle procédure' + menu: + title: Mes procédures + accompagnateurs: Accompagnateurs + procedures: Procédures + procedure: + onglets: + accompagnateurs: Accompagnateurs + stats: + title: Dossiers + onglet_accompagnateurs: + add: + title: 'Ajouter un accompagnateur' \ No newline at end of file diff --git a/config/locales/dynamics/fr_opensimplif.yml b/config/locales/dynamics/fr_opensimplif.yml new file mode 100644 index 000000000..ed8b4c7e0 --- /dev/null +++ b/config/locales/dynamics/fr_opensimplif.yml @@ -0,0 +1,44 @@ +fr_opensimplif: + dynamics: + contact_email: simplification.sgmap@modernisation.gouv.fr + users: + connexion_title: "Connectez-vous en tant qu'utilisateur" + mes_dossiers: 'Mon tableau de bord' + + backoffice: + title: Tableau de bord + dossiers: Tableau de bord + pref_list: + title: 'Affichage du tableau de bord' + description: 'Ce menu vous permet de choisir les différentes colonnes que vous souhaitez voir apparaître dans le tableau de bord.' + download_all_dossiers: 'Exporter' + research: + placeholder: 'Rechercher une simplification ...' + filter_procedure: + title: "Statut des simplifications :" + first: 'Tous' + + dossiers: + depositaite: "Emetteur de la simplification" + numéro: 'Simplification n°' + followers: + title: "Personnes suivant l'activité de cette simplification" + + admin: + connexion_title: Connectez-vous en tant qu'administrateur + dossiers: + tableau_de_bord: + title: 'Tableau de bord' + nouvelle_procedure: 'Nouveau format de fiche' + menu: + title: Tableau de bord + accompagnateurs: Utilisateurs + procedures: Tableau de bord + procedure: + onglets: + accompagnateurs: Utilisateurs + stats: + title: Simplification + onglet_accompagnateurs: + add: + title: 'Ajouter un utilisateur' \ No newline at end of file diff --git a/spec/models/preference_list_dossier_spec.rb b/spec/models/preference_list_dossier_spec.rb index 3558dd699..76abc8441 100644 --- a/spec/models/preference_list_dossier_spec.rb +++ b/spec/models/preference_list_dossier_spec.rb @@ -26,7 +26,7 @@ describe PreferenceListDossier do describe 'dossier_id' do subject { super()[:dossier_id] } - it { expect(subject[:libelle]).to eq 'ID' } + it { expect(subject[:libelle]).to eq 'N°' } it { expect(subject[:table]).to be_nil } it { expect(subject[:attr]).to eq 'id' } it { expect(subject[:attr_decorate]).to eq 'id' } @@ -62,7 +62,7 @@ describe PreferenceListDossier do describe 'state' do subject { super()[:state] } - it { expect(subject[:libelle]).to eq 'Statut' } + it { expect(subject[:libelle]).to eq 'État' } it { expect(subject[:table]).to be_nil } it { expect(subject[:attr]).to eq 'state' } it { expect(subject[:attr_decorate]).to eq 'display_state' } diff --git a/spec/views/layouts/_navbar_spec.rb b/spec/views/layouts/_navbar_spec.rb index dab6e8493..c9e9b887e 100644 --- a/spec/views/layouts/_navbar_spec.rb +++ b/spec/views/layouts/_navbar_spec.rb @@ -33,8 +33,8 @@ describe 'layouts/_navbar.html.haml', type: :view do it { is_expected.not_to match(/href="\/users\/sign_in">Utilisateur/) } it { is_expected.not_to match(/href="\/gestionnaires\/sign_in">Accompagnateur/) } it { is_expected.not_to match(/href="\/administrateurs\/sign_in">Administrateur/) } - it { is_expected.not_to match(/Mes Dossiers/) } - it { is_expected.to match(/Mes Procédures/) } + it { is_expected.not_to match(/Mes dossiers/) } + it { is_expected.to match(/Mes procédures/) } it { is_expected.to match(/Se déconnecter/) } end @@ -50,8 +50,8 @@ describe 'layouts/_navbar.html.haml', type: :view do it { is_expected.not_to match(/href="\/users\/sign_in">Utilisateur/) } it { is_expected.not_to match(/href="\/gestionnaires\/sign_in">Accompagnateur/) } it { is_expected.not_to match(/href="\/administrateurs\/sign_in">Administrateur/) } - it { is_expected.not_to match(/Mes Procédures/) } - it { is_expected.to match(/Mes Dossiers/) } + it { is_expected.not_to match(/Mes procédures/) } + it { is_expected.to match(/Mes dossiers/) } it { is_expected.to match(/Déconnexion/) } end From e10c218d3a20e7e86afd3a4da5e1176772365c3d Mon Sep 17 00:00:00 2001 From: Xavier J Date: Thu, 3 Nov 2016 17:20:56 +0100 Subject: [PATCH 2/7] Add dynamic logo (opensimplif) --- app/assets/images/{ => logos}/logo-tps.png | Bin app/decorators/procedure_decorator.rb | 2 +- app/views/administrateurs/sessions/new.html.haml | 2 +- app/views/gestionnaires/passwords/edit.html.haml | 2 +- app/views/gestionnaires/passwords/new.html.haml | 2 +- app/views/gestionnaires/sessions/new.html.haml | 2 +- app/views/layouts/_navbar.html.haml | 2 +- app/views/users/passwords/edit.html.haml | 2 +- app/views/users/passwords/new.html.haml | 2 +- app/views/users/registrations/new.html.haml | 2 +- app/views/users/sessions/new.html.haml | 2 +- app/views/users/siret/_pro.html.haml | 2 +- config/initializers/logos.rb | 2 ++ spec/decorators/procedure_decorator_spec.rb | 2 +- 14 files changed, 14 insertions(+), 12 deletions(-) rename app/assets/images/{ => logos}/logo-tps.png (100%) create mode 100644 config/initializers/logos.rb diff --git a/app/assets/images/logo-tps.png b/app/assets/images/logos/logo-tps.png similarity index 100% rename from app/assets/images/logo-tps.png rename to app/assets/images/logos/logo-tps.png diff --git a/app/decorators/procedure_decorator.rb b/app/decorators/procedure_decorator.rb index df848570d..05577587b 100644 --- a/app/decorators/procedure_decorator.rb +++ b/app/decorators/procedure_decorator.rb @@ -10,7 +10,7 @@ class ProcedureDecorator < Draper::Decorator end def logo_img - return 'logo-tps.png' if logo.blank? + return LOGO_NAME if logo.blank? File.join(STORAGE_URL, File.basename(logo.path)) end def geographic_information diff --git a/app/views/administrateurs/sessions/new.html.haml b/app/views/administrateurs/sessions/new.html.haml index 863389b43..93a5e0b38 100644 --- a/app/views/administrateurs/sessions/new.html.haml +++ b/app/views/administrateurs/sessions/new.html.haml @@ -1,6 +1,6 @@ #form_login %br - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#login_admin =t('dynamics.admin.connexion_title') diff --git a/app/views/gestionnaires/passwords/edit.html.haml b/app/views/gestionnaires/passwords/edit.html.haml index ff4027fe4..7de92bf83 100644 --- a/app/views/gestionnaires/passwords/edit.html.haml +++ b/app/views/gestionnaires/passwords/edit.html.haml @@ -1,7 +1,7 @@ = devise_error_messages! #form_login - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Changement de mot de passe diff --git a/app/views/gestionnaires/passwords/new.html.haml b/app/views/gestionnaires/passwords/new.html.haml index eed941e40..4fdf9c3a2 100644 --- a/app/views/gestionnaires/passwords/new.html.haml +++ b/app/views/gestionnaires/passwords/new.html.haml @@ -2,7 +2,7 @@ %br #form_login - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Mot de passe oublié diff --git a/app/views/gestionnaires/sessions/new.html.haml b/app/views/gestionnaires/sessions/new.html.haml index a3de3cd1e..18e7a5c65 100644 --- a/app/views/gestionnaires/sessions/new.html.haml +++ b/app/views/gestionnaires/sessions/new.html.haml @@ -1,6 +1,6 @@ #form_login %br - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Accompagnateur diff --git a/app/views/layouts/_navbar.html.haml b/app/views/layouts/_navbar.html.haml index 4f297d196..38c449b0a 100644 --- a/app/views/layouts/_navbar.html.haml +++ b/app/views/layouts/_navbar.html.haml @@ -5,7 +5,7 @@ Env Test = image_tag('marianne_small.png', class: 'logo') %a{href: '/'} - = image_tag('logo-tps.png', class: 'logo') + = image_tag(LOGO_NAME, class: 'logo') - if gestionnaire_signed_in? && user_signed_in? %a{href: (current_gestionnaire.procedure_filter.blank? ? backoffice_dossiers_path : backoffice_dossiers_procedure_path(current_gestionnaire.procedure_filter)), class: 'btn btn-md'} diff --git a/app/views/users/passwords/edit.html.haml b/app/views/users/passwords/edit.html.haml index 60c694678..c13b95e1d 100644 --- a/app/views/users/passwords/edit.html.haml +++ b/app/views/users/passwords/edit.html.haml @@ -29,7 +29,7 @@ = devise_error_messages! #form_login - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Changement de mot de passe diff --git a/app/views/users/passwords/new.html.haml b/app/views/users/passwords/new.html.haml index 6504a7295..2c98c5514 100644 --- a/app/views/users/passwords/new.html.haml +++ b/app/views/users/passwords/new.html.haml @@ -30,7 +30,7 @@ %br #form_login - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Mot de passe oublié diff --git a/app/views/users/registrations/new.html.haml b/app/views/users/registrations/new.html.haml index 17054c523..01d7d7c81 100644 --- a/app/views/users/registrations/new.html.haml +++ b/app/views/users/registrations/new.html.haml @@ -30,7 +30,7 @@ #form_login %br - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#gestionnaire_login Inscription diff --git a/app/views/users/sessions/new.html.haml b/app/views/users/sessions/new.html.haml index 9a0ce150f..3ea216422 100644 --- a/app/views/users/sessions/new.html.haml +++ b/app/views/users/sessions/new.html.haml @@ -17,7 +17,7 @@ - else - = image_tag('logo-tps.png', {id: 'logo_tps'}) + = image_tag(LOGO_NAME, {id: 'logo_tps'}) %br %h2#login_user diff --git a/app/views/users/siret/_pro.html.haml b/app/views/users/siret/_pro.html.haml index 34e119cb8..fb4899a99 100644 --- a/app/views/users/siret/_pro.html.haml +++ b/app/views/users/siret/_pro.html.haml @@ -1,6 +1,6 @@ %p.lead{id: 'pro_section'} - = image_tag('logo-tps.png') + = image_tag(LOGO_NAME) %br %h2#titre_procedure.text-info = @procedure.libelle diff --git a/config/initializers/logos.rb b/config/initializers/logos.rb new file mode 100644 index 000000000..ad429846b --- /dev/null +++ b/config/initializers/logos.rb @@ -0,0 +1,2 @@ +LOGO_NAME = 'logos/logo-tps.png' unless Features.opensimplif +LOGO_NAME = 'logos/logo-opensimplif.jpg' if Features.opensimplif diff --git a/spec/decorators/procedure_decorator_spec.rb b/spec/decorators/procedure_decorator_spec.rb index c730f7c84..45d8e4608 100644 --- a/spec/decorators/procedure_decorator_spec.rb +++ b/spec/decorators/procedure_decorator_spec.rb @@ -16,7 +16,7 @@ describe ProcedureDecorator do describe 'logo_img' do subject { super().logo_img } - it { is_expected.to eq('logo-tps.png') } + it { is_expected.to eq(LOGO_NAME) } end describe 'geographic_information' do From a08ded5322613d00dde69b6baa03aec79fdf797d Mon Sep 17 00:00:00 2001 From: Xavier J Date: Thu, 3 Nov 2016 17:29:59 +0100 Subject: [PATCH 3/7] Fix logo image_url --- app/assets/images/logos/logo-opensimplif.jpg | Bin 0 -> 31009 bytes app/decorators/procedure_decorator.rb | 2 +- .../administrateurs/sessions/new.html.haml | 2 +- .../gestionnaires/passwords/edit.html.haml | 2 +- app/views/gestionnaires/passwords/new.html.haml | 2 +- app/views/gestionnaires/sessions/new.html.haml | 2 +- app/views/layouts/_navbar.html.haml | 2 +- app/views/users/passwords/edit.html.haml | 2 +- app/views/users/passwords/new.html.haml | 2 +- app/views/users/registrations/new.html.haml | 2 +- app/views/users/sessions/new.html.haml | 2 +- app/views/users/siret/_pro.html.haml | 2 +- spec/decorators/procedure_decorator_spec.rb | 2 +- 13 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 app/assets/images/logos/logo-opensimplif.jpg diff --git a/app/assets/images/logos/logo-opensimplif.jpg b/app/assets/images/logos/logo-opensimplif.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d87c8b015236fc84d570fc42bb5dd4cae6428273 GIT binary patch literal 31009 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 Date: Mon, 7 Nov 2016 10:30:45 +0100 Subject: [PATCH 4/7] Added js and button, only flushing input value from parent form --- app/assets/javascripts/dossiers_list_filter.js | 5 ++++- app/assets/javascripts/pref_list_dossier.js | 2 +- app/views/backoffice/dossiers/_filter_framed.html.haml | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/dossiers_list_filter.js b/app/assets/javascripts/dossiers_list_filter.js index dee999526..f69d28d97 100644 --- a/app/assets/javascripts/dossiers_list_filter.js +++ b/app/assets/javascripts/dossiers_list_filter.js @@ -7,6 +7,9 @@ function filters_init() { filter_framed_show(event); filter_framed_close_all_excepted(framed_id(event)); }); + $(".erase-filter").on('click', function (event) { + $(this).parent().find(".filter_input").val(""); + }); } function filter_framed_close_all_excepted(id) { @@ -24,4 +27,4 @@ function filter_framed_show(event) { dom_object.css('top', (event.pageY + 7) + 'px'); dom_object.css('left', (event.pageX + 7) + 'px'); -} \ No newline at end of file +} diff --git a/app/assets/javascripts/pref_list_dossier.js b/app/assets/javascripts/pref_list_dossier.js index 70bf1a4dd..977778ff1 100644 --- a/app/assets/javascripts/pref_list_dossier.js +++ b/app/assets/javascripts/pref_list_dossier.js @@ -30,4 +30,4 @@ function pref_list_dossier_close_action() { } ) }); -} \ No newline at end of file +} diff --git a/app/views/backoffice/dossiers/_filter_framed.html.haml b/app/views/backoffice/dossiers/_filter_framed.html.haml index 0c69e2aed..35c60c7f8 100644 --- a/app/views/backoffice/dossiers/_filter_framed.html.haml +++ b/app/views/backoffice/dossiers/_filter_framed.html.haml @@ -3,6 +3,8 @@ = preference.libelle =form_tag @dossiers_list_facade.filter_url, {class: 'panel-body form-inline', method: :post} do - %input.form-control.filter_input{name: "filter_input[#{preference.table_attr}]", style:'width: 84%', value: "#{preference.filter}"} + %input.form-control.filter_input{name: "filter_input[#{preference.table_attr}]", style:'width: 69%', value: "#{preference.filter}"} %button.btn.btn-sm.btn-success - %i.fa.fa-check \ No newline at end of file + %i.fa.fa-check + %div.btn.btn-sm.btn-danger.erase-filter + %i.fa.fa-remove From 2f68d540e37e4b65e0af479c6e747128191bf951 Mon Sep 17 00:00:00 2001 From: Xavier J Date: Mon, 7 Nov 2016 11:23:21 +0100 Subject: [PATCH 5/7] Migrate to ruby 2.3.1 --- .ruby-version | 2 +- Gemfile | 6 ++-- Gemfile.lock | 38 --------------------- app/decorators/procedure_decorator.rb | 3 +- spec/decorators/procedure_decorator_spec.rb | 2 +- 5 files changed, 7 insertions(+), 44 deletions(-) diff --git a/.ruby-version b/.ruby-version index cd57a8b95..2bf1c1ccf 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.1.5 +2.3.1 diff --git a/Gemfile b/Gemfile index 026ba7955..b92fc4cbe 100644 --- a/Gemfile +++ b/Gemfile @@ -104,9 +104,9 @@ group :test do gem 'simplecov', require: false gem 'poltergeist' gem 'timecop' - gem 'guard' - gem 'guard-rspec', require: false - gem 'guard-livereload', '~> 2.4', require: false + # gem 'guard' + # gem 'guard-rspec', require: false + # gem 'guard-livereload', '~> 2.4', require: false gem 'vcr' end diff --git a/Gemfile.lock b/Gemfile.lock index a7599faa6..706c620e8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -136,11 +136,7 @@ GEM activemodel (>= 3.0) activesupport (>= 3.0) request_store (~> 1.0) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) erubis (2.7.0) - eventmachine (1.0.8) excon (0.49.0) execjs (2.7.0) factory_girl (4.5.0) @@ -283,24 +279,6 @@ GEM formatador (0.2.5) globalid (0.3.7) activesupport (>= 4.1.0) - guard (2.13.0) - formatador (>= 0.2.4) - listen (>= 2.7, <= 4.0) - lumberjack (~> 1.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-compat (1.2.1) - guard-livereload (2.5.1) - em-websocket (~> 0.5) - guard (~> 2.8) - guard-compat (~> 1.0) - multi_json (~> 1.8) - guard-rspec (4.3.1) - guard (~> 2.1) - rspec (>= 2.14, < 4.0) haml (4.0.6) tilt haml-rails (0.9.0) @@ -318,7 +296,6 @@ GEM ruby_parser (~> 3.5) http-cookie (1.0.2) domain_name (~> 0.5) - http_parser.rb (0.6.0) httpclient (2.6.0.1) i18n (0.7.0) inflecto (0.0.2) @@ -346,16 +323,12 @@ GEM railties (>= 3.1) leaflet-rails (0.7.4) libv8 (3.16.14.7) - listen (3.0.4) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) logstash-event (1.2.02) logstasher (0.6.5) logstash-event (~> 1.2.0) request_store loofah (2.0.3) nokogiri (>= 1.5.9) - lumberjack (1.0.9) mail (2.6.4) mime-types (>= 1.16, < 4) mailjet (1.1.0) @@ -369,14 +342,10 @@ GEM minitest (5.9.0) multi_json (1.11.2) multipart-post (2.0.0) - nenv (0.2.0) netrc (0.10.3) nokogiri (1.6.8) mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) - notiffany (0.0.8) - nenv (~> 0.1) - shellany (~> 0.0) nyan-cat-formatter (0.11) rspec (>= 2.99, >= 2.14.2, < 4) open4 (1.3.4) @@ -451,9 +420,6 @@ GEM rainbow (2.0.0) raindrops (0.13.0) rake (11.2.2) - rb-fsevent (0.9.6) - rb-inotify (0.9.5) - ffi (>= 0.5.0) rbvmomi (1.8.2) builder nokogiri (>= 1.4.1) @@ -528,7 +494,6 @@ GEM sentry-raven (0.13.1) faraday (>= 0.7.6) sexp_processor (4.6.0) - shellany (0.0.1) shoulda-matchers (2.8.0) activesupport (>= 3.0.0) simplecov (0.9.1) @@ -643,9 +608,6 @@ DEPENDENCIES fog fog-openstack font-awesome-rails - guard - guard-livereload (~> 2.4) - guard-rspec haml-rails hashie jbuilder (~> 2.0) diff --git a/app/decorators/procedure_decorator.rb b/app/decorators/procedure_decorator.rb index cefb52444..f78a02d88 100644 --- a/app/decorators/procedure_decorator.rb +++ b/app/decorators/procedure_decorator.rb @@ -1,4 +1,5 @@ class ProcedureDecorator < Draper::Decorator + delegate_all def lien @@ -10,7 +11,7 @@ class ProcedureDecorator < Draper::Decorator end def logo_img - return image_url(LOGO_NAME) if logo.blank? + return h.image_url(LOGO_NAME) if logo.blank? File.join(STORAGE_URL, File.basename(logo.path)) end def geographic_information diff --git a/spec/decorators/procedure_decorator_spec.rb b/spec/decorators/procedure_decorator_spec.rb index 789257668..d94025473 100644 --- a/spec/decorators/procedure_decorator_spec.rb +++ b/spec/decorators/procedure_decorator_spec.rb @@ -16,7 +16,7 @@ describe ProcedureDecorator do describe 'logo_img' do subject { super().logo_img } - it { is_expected.to eq(image_url(LOGO_NAME)) } + it { is_expected.to match(/http.*#{ActionController::Base.helpers.image_url(LOGO_NAME)}/) } end describe 'geographic_information' do From 83ad08622f1959d612d02c40d47c308eb00b1deb Mon Sep 17 00:00:00 2001 From: JC Date: Mon, 7 Nov 2016 11:32:51 +0100 Subject: [PATCH 6/7] Adding js that check oustide click from div, adding rescue LOGO_NAME causing 500 --- app/assets/javascripts/dossiers_list_filter.js | 11 ++++++++++- app/views/layouts/_navbar.html.haml | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/dossiers_list_filter.js b/app/assets/javascripts/dossiers_list_filter.js index dee999526..c373bc0e0 100644 --- a/app/assets/javascripts/dossiers_list_filter.js +++ b/app/assets/javascripts/dossiers_list_filter.js @@ -3,9 +3,18 @@ $(document).ready(filters_init); function filters_init() { + $('html').click(function(event) { + var visible_filter = $('.filter_framed:visible') + if(visible_filter.length) { + if (!$(event.target).closest('.filter_framed').is(":visible")) { + visible_filter.hide(); + } + } + }); $(".filter").on('click', function (event) { filter_framed_show(event); filter_framed_close_all_excepted(framed_id(event)); + event.stopPropagation(); }); } @@ -24,4 +33,4 @@ function filter_framed_show(event) { dom_object.css('top', (event.pageY + 7) + 'px'); dom_object.css('left', (event.pageX + 7) + 'px'); -} \ No newline at end of file +} diff --git a/app/views/layouts/_navbar.html.haml b/app/views/layouts/_navbar.html.haml index ce9e08d80..c67a744f2 100644 --- a/app/views/layouts/_navbar.html.haml +++ b/app/views/layouts/_navbar.html.haml @@ -5,7 +5,7 @@ Env Test = image_tag('marianne_small.png', class: 'logo') %a{href: '/'} - = image_tag(image_url(LOGO_NAME), class: 'logo') + = image_tag(image_url(LOGO_NAME), class: 'logo') rescue nil - if gestionnaire_signed_in? && user_signed_in? %a{href: (current_gestionnaire.procedure_filter.blank? ? backoffice_dossiers_path : backoffice_dossiers_procedure_path(current_gestionnaire.procedure_filter)), class: 'btn btn-md'} From 5284df5ce0afbd14c6531e1a800fbba868e5c5a5 Mon Sep 17 00:00:00 2001 From: Xavier J Date: Mon, 7 Nov 2016 17:08:33 +0100 Subject: [PATCH 7/7] =?UTF-8?q?Add=20page=20=C2=AB=C2=A0Proc=C3=A9dure=20t?= =?UTF-8?q?ermin=C3=A9e=C2=A0=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/procedures_controller.rb | 7 ++- app/controllers/users/dossiers_controller.rb | 7 +++ app/models/procedure.rb | 1 - app/views/commencer/archived.html.haml | 15 +++++++ .../sessions/_resume_procedure.html.haml | 18 ++++++++ app/views/users/sessions/new.html.haml | 20 +-------- .../admin/procedures_controller_spec.rb | 44 ++++++++++++++----- .../users/dossiers_controller_spec.rb | 10 +++++ spec/models/procedure_spec.rb | 6 +-- 9 files changed, 93 insertions(+), 35 deletions(-) create mode 100644 app/views/commencer/archived.html.haml create mode 100644 app/views/users/sessions/_resume_procedure.html.haml diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 0e51c2097..4d8e44af3 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -179,7 +179,12 @@ class Admin::ProceduresController < AdminController end def path_list - render json: ProcedurePath.where("path LIKE '%#{params[:request]}%'").pluck(:path, :administrateur_id).inject([]) { + render json: ProcedurePath + .joins(', procedures') + .where("procedures.id = procedure_paths.procedure_id AND procedures.archived != true") + .where("path LIKE '%#{params[:request]}%'") + .pluck(:path, :administrateur_id) + .inject([]) { |acc, value| acc.push({label: value.first, mine: value.second == current_administrateur.id}) }.to_json end diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 8e175d8b2..f5ef2472f 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -30,6 +30,13 @@ class Users::DossiersController < UsersController procedure = ProcedurePath.where(path: params[:procedure_path]).first!.procedure end + if procedure.archived? + + @dossier = Dossier.new(procedure: procedure) + + return render 'commencer/archived' + end + redirect_to new_users_dossier_path(procedure_id: procedure.id) rescue ActiveRecord::RecordNotFound error_procedure diff --git a/app/models/procedure.rb b/app/models/procedure.rb index f8d737532..9a81ed2b6 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -103,7 +103,6 @@ class Procedure < ActiveRecord::Base end def archive - self.procedure_path.destroy! if self.path self.update_attributes!({archived: true}) end diff --git a/app/views/commencer/archived.html.haml b/app/views/commencer/archived.html.haml new file mode 100644 index 000000000..5ad9c0f18 --- /dev/null +++ b/app/views/commencer/archived.html.haml @@ -0,0 +1,15 @@ +%br +%div{style: 'text-align: center; max-width:500px; margin-left:auto; margin-right:auto; padding: 20px;'} + = render partial: 'users/sessions/resume_procedure' + +.center{style:'margin-top: -20px'} + %h3 + La campagne de création de nouveau dossier + %br + pour cette démarche en ligne est maintenant terminée. + + %br + %p + Si vous avez déjà déposé un ou plusieurs dossiers : + %a.btn.btn-lg.btn-info{href: new_user_session_path} + Accéder à mon espace en ligne. \ No newline at end of file diff --git a/app/views/users/sessions/_resume_procedure.html.haml b/app/views/users/sessions/_resume_procedure.html.haml new file mode 100644 index 000000000..f99ce8bd8 --- /dev/null +++ b/app/views/users/sessions/_resume_procedure.html.haml @@ -0,0 +1,18 @@ +- if @dossier + = link_to 'X', users_no_procedure_url, class: 'btn btn-xs', style:'float: right' + + - if @dossier.procedure.euro_flag + #euro_flag.flag + =image_tag('drapeau_europe.png') + + #logo_procedure.flag + =image_tag( @dossier.procedure.decorate.logo_img ) + + %h2#titre_procedure.text-info + = @dossier.procedure.libelle + %p + = h @dossier.procedure.description.html_safe + +- else + = image_tag(image_url(LOGO_NAME), {id: 'logo_tps'}) +%br \ No newline at end of file diff --git a/app/views/users/sessions/new.html.haml b/app/views/users/sessions/new.html.haml index c82745969..718da7056 100644 --- a/app/views/users/sessions/new.html.haml +++ b/app/views/users/sessions/new.html.haml @@ -1,24 +1,6 @@ #form_login %br - - if @dossier - = link_to 'X', users_no_procedure_url, class: 'btn btn-xs', style:'float: right' - - - if @dossier.procedure.euro_flag - #euro_flag.flag - =image_tag('drapeau_europe.png') - - #logo_procedure.flag - =image_tag( @dossier.procedure.decorate.logo_img ) - - %h2#titre_procedure.text-info - = @dossier.procedure.libelle - %p - = h @dossier.procedure.description.html_safe - - - - else - = image_tag(image_url(LOGO_NAME), {id: 'logo_tps'}) - %br + = render partial: 'users/sessions/resume_procedure' %h2#login_user =t('dynamics.users.connexion_title') diff --git a/spec/controllers/admin/procedures_controller_spec.rb b/spec/controllers/admin/procedures_controller_spec.rb index c6ddc9462..c72a02d35 100644 --- a/spec/controllers/admin/procedures_controller_spec.rb +++ b/spec/controllers/admin/procedures_controller_spec.rb @@ -299,7 +299,7 @@ describe Admin::ProceduresController, type: :controller do it 'archive previous procedure' do expect(procedure2.published).to be_truthy expect(procedure2.archived).to be_truthy - expect(procedure2.path).to be_nil + expect(procedure2.path).not_to be_nil end end @@ -427,21 +427,31 @@ describe Admin::ProceduresController, type: :controller do let!(:procedure) { create(:procedure, :published, administrateur: admin) } let(:admin2) { create(:administrateur) } let!(:procedure2) { create(:procedure, :published, administrateur: admin2) } + let!(:procedure3) { create(:procedure, :published, administrateur: admin2) } + subject { get :path_list } + let(:body) { JSON.parse(response.body) } - before do - subject + describe 'when no params' do + before do + subject + end + + it { expect(response.status).to eq(200) } + it { expect(body.size).to eq(3) } + it { expect(body.first['label']).to eq(procedure.path) } + it { expect(body.first['mine']).to be_truthy } + it { expect(body.second['label']).to eq(procedure2.path) } + it { expect(body.second['mine']).to be_falsy } + end - it { expect(response.status).to eq(200) } - it { expect(body.size).to eq(2) } - it { expect(body.first['label']).to eq(procedure.path) } - it { expect(body.first['mine']).to be_truthy } - it { expect(body.second['label']).to eq(procedure2.path) } - it { expect(body.second['mine']).to be_falsy } - context 'filtered' do + before do + subject + end + subject { get :path_list, request: procedure2.path } it { expect(response.status).to eq(200) } @@ -449,6 +459,18 @@ describe Admin::ProceduresController, type: :controller do it { expect(body.first['label']).to eq(procedure2.path) } it { expect(body.first['mine']).to be_falsy } end + + context 'when procedure is archived' do + + before do + procedure3.update_attribute :archived, true + subject + end + + it 'do not return on the json' do + expect(body.size).to eq(2) + end + end end describe 'POST transfer' do @@ -467,7 +489,7 @@ describe Admin::ProceduresController, type: :controller do let(:email_admin) { new_admin.email } it { expect(subject.status).to eq 200 } - it { expect {subject}.to change(Procedure, :count).by(1) } + it { expect { subject }.to change(Procedure, :count).by(1) } context { before do diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb index d88ae049a..9bdb158de 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -157,6 +157,16 @@ describe Users::DossiersController, type: :controller do it { expect(subject.status).to eq 302 } it { expect(subject).to redirect_to new_users_dossier_path(procedure_id: procedure.id) } + + context 'when procedure is archived' do + let(:procedure) { create(:procedure, :published, archived: true) } + + before do + procedure.update_column :archived, true + end + + it { expect(subject.status).to eq 200 } + end end describe 'POST #siret_informations' do diff --git a/spec/models/procedure_spec.rb b/spec/models/procedure_spec.rb index 47356f165..db62fda24 100644 --- a/spec/models/procedure_spec.rb +++ b/spec/models/procedure_spec.rb @@ -243,14 +243,14 @@ describe Procedure do end it 'is not available from a valid path anymore' do - expect(procedure.path).to be_nil + expect(procedure.path).to eq procedure_path.path expect(procedure.published).to be_truthy expect(procedure.archived).to be_truthy end it 'is not in ProcedurePath table anymore' do - expect(ProcedurePath.where(path: procedure.path).count).to eq(0) - expect(ProcedurePath.find_by_procedure_id(procedure.id)).to be_nil + expect(ProcedurePath.where(path: procedure.path).count).to eq(1) + expect(ProcedurePath.find_by_procedure_id(procedure.id)).not_to be_nil end end