From 39df032c8c51dc5472091b1848fdb32cd22cb018 Mon Sep 17 00:00:00 2001 From: Guillaume Lazzara Date: Wed, 24 Aug 2016 17:05:38 +0200 Subject: [PATCH 1/8] Translate type de champ values --- app/models/type_de_champ.rb | 4 ++++ .../admin/types_de_champ/_fields.html.haml | 2 +- config/locales/models/type_de_champ/fr.yml | 20 +++++++++++++++++++ spec/features/admin/add_type_de_champ_spec.rb | 7 ++++--- 4 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 config/locales/models/type_de_champ/fr.yml diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 4292aa8c7..db33a1a9c 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -26,4 +26,8 @@ class TypeDeChamp < ActiveRecord::Base validates :libelle, presence: true, allow_blank: false, allow_nil: false validates :type_champ, presence: true, allow_blank: false, allow_nil: false # validates :order_place, presence: true, allow_blank: false, allow_nil: false + + def self.type_de_champs_list_fr + type_champs.map { |champ| [ I18n.t("activerecord.attributes.type_de_champ.type_champs.#{champ.last}"), champ.first ] } + end end \ No newline at end of file diff --git a/app/views/admin/types_de_champ/_fields.html.haml b/app/views/admin/types_de_champ/_fields.html.haml index 3b9c5c6f9..649be960e 100644 --- a/app/views/admin/types_de_champ/_fields.html.haml +++ b/app/views/admin/types_de_champ/_fields.html.haml @@ -6,7 +6,7 @@ .form-group.type %h4 Type - = ff.select :type_champ, TypeDeChamp.type_champs, {}, {class: 'form-control type_champ'} + = ff.select :type_champ, TypeDeChamp.type_de_champs_list_fr, {}, {class: 'form-control type_champ'} .form-group.description %h4 Description diff --git a/config/locales/models/type_de_champ/fr.yml b/config/locales/models/type_de_champ/fr.yml new file mode 100644 index 000000000..2c53daf98 --- /dev/null +++ b/config/locales/models/type_de_champ/fr.yml @@ -0,0 +1,20 @@ +fr: + activerecord: + models: + type_de_champ: 'Type de champ' + attributes: + type_de_champ: + type_champs: + text: 'Texte' + textarea: 'Zone de texte' + date: 'Date' + datetime: 'Date et Heure' + number: 'Nombre' + checkbox: 'checkbox' + civilite: 'Civilité' + email: 'Email' + phone: 'Téléphone' + address: 'Adresse' + yes_no: 'Oui/Non' + drop_down_list: 'Menu déroulant' + header_section: 'Titre de section' \ No newline at end of file diff --git a/spec/features/admin/add_type_de_champ_spec.rb b/spec/features/admin/add_type_de_champ_spec.rb index 2540a2fcf..adbf661f9 100644 --- a/spec/features/admin/add_type_de_champ_spec.rb +++ b/spec/features/admin/add_type_de_champ_spec.rb @@ -40,11 +40,12 @@ feature 'add a new type de champs', js: true do context 'user fill another one' do let(:libelle) { 'coucou' } - let(:type_champ) { 'textarea' } + let(:type_champ_value) { 'textarea' } + let(:type_champ_label) { 'Zone de texte' } let(:description) { 'to be or not to be' } before do page.find_by_id('procedure_types_de_champ_attributes_1_libelle').set libelle - select(type_champ, from: 'procedure_types_de_champ_attributes_1_type_champ') + select(type_champ_label, from: 'procedure_types_de_champ_attributes_1_type_champ') page.find_by_id('procedure_types_de_champ_attributes_1_description').set description click_button 'Ajouter le champ' wait_for_ajax @@ -54,7 +55,7 @@ feature 'add a new type de champs', js: true do scenario 'creates another types_de_champ' do expect(page).to have_css('#procedure_types_de_champ_attributes_2_libelle') expect(subject.libelle).to eq(libelle) - expect(subject.type_champ).to eq(type_champ) + expect(subject.type_champ).to eq(type_champ_value) expect(subject.description).to eq(description) expect(subject.order_place).to eq(1) expect(procedure.types_de_champ.count).to eq(2) From e4cf25b677ddf96f91799a40c05ddfa0b7df41da Mon Sep 17 00:00:00 2001 From: Xavier J Date: Thu, 25 Aug 2016 12:30:15 +0200 Subject: [PATCH 2/8] Download all gestionnaire dossier with a button --- app/controllers/backoffice/dossiers_controller.rb | 8 ++++++++ app/views/backoffice/dossiers/_onglets.html.haml | 1 + config/routes.rb | 2 ++ 3 files changed, 11 insertions(+) diff --git a/app/controllers/backoffice/dossiers_controller.rb b/app/controllers/backoffice/dossiers_controller.rb index 9453ce3bf..d3a450bbc 100644 --- a/app/controllers/backoffice/dossiers_controller.rb +++ b/app/controllers/backoffice/dossiers_controller.rb @@ -13,6 +13,14 @@ class Backoffice::DossiersController < ApplicationController @champs = @facade.champs_private unless @facade.nil? end + def download_dossiers_tps + dossiers = current_gestionnaire.dossiers.where.not(state: :draft) + + response.headers['Content-Type'] = 'text/csv' + + render csv: dossiers, status: 200 + end + def search @search_terms = params[:q] @dossiers_search, @dossier = Dossier.search(current_gestionnaire, @search_terms) diff --git a/app/views/backoffice/dossiers/_onglets.html.haml b/app/views/backoffice/dossiers/_onglets.html.haml index dbd429e6f..2d88d5b7b 100644 --- a/app/views/backoffice/dossiers/_onglets.html.haml +++ b/app/views/backoffice/dossiers/_onglets.html.haml @@ -1,3 +1,4 @@ +=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 %br diff --git a/config/routes.rb b/config/routes.rb index 9c582b394..c0be6950b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -152,6 +152,8 @@ Rails.application.routes.draw do get 'reload_pref_list' end + get 'download_dossiers_tps' => 'dossiers#download_dossiers_tps' + resources :dossiers do post 'valid' => 'dossiers#valid' post 'close' => 'dossiers#close' From 0120ce2a3211d5309c208cae0389bb7f9a311bc9 Mon Sep 17 00:00:00 2001 From: Guillaume Lazzara Date: Thu, 25 Aug 2016 15:21:25 +0200 Subject: [PATCH 3/8] Add an action to set a dossier as 'recu'. --- .../backoffice/dossiers_controller.rb | 9 +++++ app/models/dossier.rb | 8 +++- app/views/dossiers/_infos_dossier.html.haml | 7 +++- config/routes.rb | 1 + .../backoffice/dossiers_controller_spec.rb | 16 +++++++- spec/models/dossier_spec.rb | 40 +++++++++++++++++-- .../dossiers/show.html.html_spec.rb | 39 +++++++++--------- 7 files changed, 92 insertions(+), 28 deletions(-) diff --git a/app/controllers/backoffice/dossiers_controller.rb b/app/controllers/backoffice/dossiers_controller.rb index d3a450bbc..2c19239f0 100644 --- a/app/controllers/backoffice/dossiers_controller.rb +++ b/app/controllers/backoffice/dossiers_controller.rb @@ -48,6 +48,15 @@ class Backoffice::DossiersController < ApplicationController render 'show' end + def receive + create_dossier_facade params[:dossier_id] + + @facade.dossier.next_step! 'gestionnaire', 'receive' + flash.notice = 'Dossier considéré comme reçu.' + + render 'show' + end + def close create_dossier_facade params[:dossier_id] diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 120d56f35..c8f9c454a 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -87,7 +87,7 @@ class Dossier < ActiveRecord::Base end def next_step! role, action - unless %w(initiate update comment valid submit close).include?(action) + unless %w(initiate update comment valid submit receive close).include?(action) fail 'action is not valid' end @@ -130,8 +130,12 @@ class Dossier < ActiveRecord::Base elsif initiated? validated! end - when 'close' + when 'receive' if submitted? + received! + end + when 'close' + if received? closed! end end diff --git a/app/views/dossiers/_infos_dossier.html.haml b/app/views/dossiers/_infos_dossier.html.haml index 5f0238d31..0d51edced 100644 --- a/app/views/dossiers/_infos_dossier.html.haml +++ b/app/views/dossiers/_infos_dossier.html.haml @@ -66,7 +66,12 @@ = 'Valider le dossier' -elsif @facade.dossier.submitted? + = form_tag(url_for({controller: 'backoffice/dossiers', action: :receive, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do + %button#action_button.btn.btn-success + = 'Notifier de la bonne réception' + + -elsif @facade.dossier.received? = form_tag(url_for({controller: 'backoffice/dossiers', action: :close, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do %button#action_button.btn.btn-success - = 'Traiter le dossier' + = 'Accepter le dossier' diff --git a/config/routes.rb b/config/routes.rb index c0be6950b..228950579 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -156,6 +156,7 @@ Rails.application.routes.draw do resources :dossiers do post 'valid' => 'dossiers#valid' + post 'receive' => 'dossiers#receive' post 'close' => 'dossiers#close' post 'invites' => '/invites#create' diff --git a/spec/controllers/backoffice/dossiers_controller_spec.rb b/spec/controllers/backoffice/dossiers_controller_spec.rb index 19d5c280b..87943c6b6 100644 --- a/spec/controllers/backoffice/dossiers_controller_spec.rb +++ b/spec/controllers/backoffice/dossiers_controller_spec.rb @@ -119,12 +119,26 @@ describe Backoffice::DossiersController, type: :controller do end end - describe 'POST #close' do + describe 'POST #receive' do before do dossier.submitted! sign_in gestionnaire end + it 'change state to received' do + post :receive, dossier_id: dossier_id + + dossier.reload + expect(dossier.state).to eq('received') + end + end + + describe 'POST #close' do + before do + dossier.received! + sign_in gestionnaire + end + it 'change state to closed' do post :close, dossier_id: dossier_id diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 2ad0dfed3..7ac092ab4 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -323,10 +323,10 @@ describe Dossier do dossier.submitted! end - context 'when user is connect' do + context 'when user is connected' do let(:role) { 'user' } - context 'when is post a comment' do + context 'when he posts a comment' do let(:action) { 'comment' } it { is_expected.to eq('submitted') } @@ -336,13 +336,45 @@ describe Dossier do context 'when gestionnaire is connect' do let(:role) { 'gestionnaire' } - context 'when is post a comment' do + context 'when he posts a comment' do let(:action) { 'comment' } it { is_expected.to eq('submitted') } end - context 'when is closed the dossier' do + context 'when he receive the dossier' do + let(:action) { 'receive' } + + it { is_expected.to eq('received') } + end + end + end + + context 'when dossier is at state received' do + before do + dossier.received! + end + + context 'when user is connected' do + let(:role) { 'user' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('received') } + end + end + + context 'when gestionnaire is connect' do + let(:role) { 'gestionnaire' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('received') } + end + + context 'when he closes the dossier' do let(:action) { 'close' } it { is_expected.to eq('closed') } diff --git a/spec/views/backoffice/dossiers/show.html.html_spec.rb b/spec/views/backoffice/dossiers/show.html.html_spec.rb index ee4e26a5d..e02a9cea3 100644 --- a/spec/views/backoffice/dossiers/show.html.html_spec.rb +++ b/spec/views/backoffice/dossiers/show.html.html_spec.rb @@ -119,28 +119,13 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Déposé') } - it 'button Traiter le dossier is present' do + it 'button notifier de la bonne réception is present' do expect(rendered).to have_css('#action_button') - expect(rendered).to have_content('Traiter le dossier') + expect(rendered).to have_content('Notifier de la bonne réception') end it 'button Valider le dossier is not present' do - expect(rendered).not_to have_content('Valider le dossier') - end - end - - context 'when dossier have state closed' do - let(:state) { 'closed' } - - before do - render - end - - it { expect(rendered).to have_content('Accepté') } - - it 'button Valider le dossier is not present' do - expect(rendered).not_to have_css('#action_button') - expect(rendered).not_to have_content('Valider le dossier') + expect(rendered).not_to have_content('Accepter le dossier') end end @@ -153,9 +138,23 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Reçu') } - it 'button Valider le dossier is not present' do + it 'button accepter le dossier is present' do + expect(rendered).to have_content('Accepter le dossier') + end + end + + context 'when dossier have state closed' do + let(:state) { 'closed' } + + before do + render + end + + it { expect(rendered).to have_content('Accepté') } + + it 'button Accepter le dossier is not present' do expect(rendered).not_to have_css('#action_button') - expect(rendered).not_to have_content('Valider le dossier') + expect(rendered).not_to have_content('Accepter le dossier') end end From 09236f32aa8acaeb55642b86e8046a6140e70c75 Mon Sep 17 00:00:00 2001 From: Guillaume Lazzara Date: Thu, 25 Aug 2016 17:46:26 +0200 Subject: [PATCH 4/8] Add 'refuser' and 'classer sans suite' buttons --- app/assets/javascripts/application.js | 1 + .../backoffice/dossiers_controller.rb | 18 +++++++ app/models/dossier.rb | 10 +++- app/views/dossiers/_infos_dossier.html.haml | 10 +++- config/routes.rb | 2 + spec/models/dossier_spec.rb | 53 +++++++++++++++++++ .../dossiers/show.html.html_spec.rb | 21 +++++--- 7 files changed, 104 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 8c2de3421..e9049908b 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -42,6 +42,7 @@ function application_init(){ } function tooltip_init() { + $('.action_button[data-toggle="tooltip"]').tooltip({delay: { "show": 100, "hide": 100 }}); $('[data-toggle="tooltip"]').tooltip({delay: { "show": 800, "hide": 100 }}); } diff --git a/app/controllers/backoffice/dossiers_controller.rb b/app/controllers/backoffice/dossiers_controller.rb index 2c19239f0..826794e2d 100644 --- a/app/controllers/backoffice/dossiers_controller.rb +++ b/app/controllers/backoffice/dossiers_controller.rb @@ -57,6 +57,24 @@ class Backoffice::DossiersController < ApplicationController render 'show' end + def refuse + create_dossier_facade params[:dossier_id] + + @facade.dossier.next_step! 'gestionnaire', 'refuse' + flash.notice = 'Dossier considéré comme refusé.' + + render 'show' + end + + def without_continuation + create_dossier_facade params[:dossier_id] + + @facade.dossier.next_step! 'gestionnaire', 'without_continuation' + flash.notice = 'Dossier considéré comme sans suite.' + + render 'show' + end + def close create_dossier_facade params[:dossier_id] diff --git a/app/models/dossier.rb b/app/models/dossier.rb index c8f9c454a..ccae17f45 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -87,7 +87,7 @@ class Dossier < ActiveRecord::Base end def next_step! role, action - unless %w(initiate update comment valid submit receive close).include?(action) + unless %w(initiate update comment valid submit receive refuse without_continuation close).include?(action) fail 'action is not valid' end @@ -138,6 +138,14 @@ class Dossier < ActiveRecord::Base if received? closed! end + when 'refuse' + if received? + refused! + end + when 'without_continuation' + if received? + without_continuation! + end end end state diff --git a/app/views/dossiers/_infos_dossier.html.haml b/app/views/dossiers/_infos_dossier.html.haml index 0d51edced..3947d592e 100644 --- a/app/views/dossiers/_infos_dossier.html.haml +++ b/app/views/dossiers/_infos_dossier.html.haml @@ -71,7 +71,13 @@ = 'Notifier de la bonne réception' -elsif @facade.dossier.received? - = form_tag(url_for({controller: 'backoffice/dossiers', action: :close, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do + = form_tag(url_for({controller: 'backoffice/dossiers', action: :close, dossier_id: @facade.dossier.id}), class: 'form-inline action_button', method: 'POST', style: 'display:inline', 'data-toggle' => :tooltip, title: 'Accepter') do %button#action_button.btn.btn-success - = 'Accepter le dossier' + %i.fa.fa-check + = form_tag(url_for({controller: 'backoffice/dossiers', action: :refuse, dossier_id: @facade.dossier.id}), class: 'form-inline action_button', method: 'POST', style: 'display:inline', 'data-toggle' => :tooltip, title: 'Refuser') do + %button#action_button.btn.btn-danger + %i.fa.fa-times + = form_tag(url_for({controller: 'backoffice/dossiers', action: :without_continuation, dossier_id: @facade.dossier.id}), class: 'form-inline action_button', method: 'POST', style: 'display:inline', 'data-toggle' => :tooltip, title: 'Classer sans suite') do + %button#action_button.btn.btn-warning + %i.fa.fa-circle-o diff --git a/config/routes.rb b/config/routes.rb index 228950579..d1f05b3c1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -157,6 +157,8 @@ Rails.application.routes.draw do resources :dossiers do post 'valid' => 'dossiers#valid' post 'receive' => 'dossiers#receive' + post 'refuse' => 'dossiers#refuse' + post 'without_continuation' => 'dossiers#without_continuation' post 'close' => 'dossiers#close' post 'invites' => '/invites#create' diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 7ac092ab4..19c46a4f1 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -382,6 +382,59 @@ describe Dossier do end end + context 'when dossier is at state refused' do + before do + dossier.refused! + end + + context 'when user is connected' do + let(:role) { 'user' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('refused') } + end + end + + context 'when gestionnaire is connect' do + let(:role) { 'gestionnaire' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('refused') } + end + end + end + + context 'when dossier is at state without_continuation' do + before do + dossier.without_continuation! + end + + context 'when user is connected' do + let(:role) { 'user' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('without_continuation') } + end + end + + context 'when gestionnaire is connect' do + let(:role) { 'gestionnaire' } + + context 'when he posts a comment' do + let(:action) { 'comment' } + + it { is_expected.to eq('without_continuation') } + end + end + end + + context 'when dossier is at state closed' do before do dossier.closed! diff --git a/spec/views/backoffice/dossiers/show.html.html_spec.rb b/spec/views/backoffice/dossiers/show.html.html_spec.rb index e02a9cea3..657baeb83 100644 --- a/spec/views/backoffice/dossiers/show.html.html_spec.rb +++ b/spec/views/backoffice/dossiers/show.html.html_spec.rb @@ -138,8 +138,10 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Reçu') } - it 'button accepter le dossier is present' do - expect(rendered).to have_content('Accepter le dossier') + it 'button accepter / refuser / classer sans suite are present' do + expect(rendered).to have_css('.action_button[data-toggle="tooltip"][title="Accepter"]') + expect(rendered).to have_css('.action_button[data-toggle="tooltip"][title="Classer sans suite"]') + expect(rendered).to have_css('.action_button[data-toggle="tooltip"][title="Refuser"]') end end @@ -153,8 +155,9 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Accepté') } it 'button Accepter le dossier is not present' do - expect(rendered).not_to have_css('#action_button') - expect(rendered).not_to have_content('Accepter le dossier') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Accepter"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Classer sans suite"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Refuser"]') end end @@ -168,8 +171,9 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Sans suite') } it 'button Valider le dossier is not present' do - expect(rendered).not_to have_css('#action_button') - expect(rendered).not_to have_content('Valider le dossier') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Accepter"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Classer sans suite"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Refuser"]') end end @@ -183,8 +187,9 @@ describe 'backoffice/dossiers/show.html.haml', type: :view do it { expect(rendered).to have_content('Refusé') } it 'button Valider le dossier is not present' do - expect(rendered).not_to have_css('#action_button') - expect(rendered).not_to have_content('Valider le dossier') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Accepter"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Classer sans suite"]') + expect(rendered).not_to have_css('.action_button[data-toggle="tooltip"][title="Refuser"]') end end end From fc99dc65d608d11c4cec6f2444be7123ece6e7b3 Mon Sep 17 00:00:00 2001 From: Guillaume Lazzara Date: Thu, 25 Aug 2016 18:02:56 +0200 Subject: [PATCH 5/8] Send notification emails when a dossier is closed. --- .../backoffice/dossiers_controller.rb | 6 ++ app/mailers/notification_mailer.rb | 12 ++++ .../dossier_closed.text.erb | 10 ++++ .../dossier_refused.text.erb | 10 ++++ .../dossier_without_continuation.text.erb | 10 ++++ .../backoffice/dossiers_controller_spec.rb | 56 ++++++++++++++++++- 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 app/views/notification_mailer/dossier_closed.text.erb create mode 100644 app/views/notification_mailer/dossier_refused.text.erb create mode 100644 app/views/notification_mailer/dossier_without_continuation.text.erb diff --git a/app/controllers/backoffice/dossiers_controller.rb b/app/controllers/backoffice/dossiers_controller.rb index 826794e2d..76230a9d0 100644 --- a/app/controllers/backoffice/dossiers_controller.rb +++ b/app/controllers/backoffice/dossiers_controller.rb @@ -63,6 +63,8 @@ class Backoffice::DossiersController < ApplicationController @facade.dossier.next_step! 'gestionnaire', 'refuse' flash.notice = 'Dossier considéré comme refusé.' + NotificationMailer.dossier_refused(@facade.dossier).deliver_now! + render 'show' end @@ -72,6 +74,8 @@ class Backoffice::DossiersController < ApplicationController @facade.dossier.next_step! 'gestionnaire', 'without_continuation' flash.notice = 'Dossier considéré comme sans suite.' + NotificationMailer.dossier_without_continuation(@facade.dossier).deliver_now! + render 'show' end @@ -81,6 +85,8 @@ class Backoffice::DossiersController < ApplicationController @facade.dossier.next_step! 'gestionnaire', 'close' flash.notice = 'Dossier traité avec succès.' + NotificationMailer.dossier_closed(@facade.dossier).deliver_now! + render 'show' end diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index eb609268b..3b9ee8bd1 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -11,6 +11,18 @@ class NotificationMailer < ApplicationMailer send_mail dossier, "Votre dossier TPS N°#{dossier.id} a été déposé" end + def dossier_without_continuation dossier + send_mail dossier, "Votre dossier TPS N°#{dossier.id} a été classé sans suite" + end + + def dossier_refused dossier + send_mail dossier, "Votre dossier TPS N°#{dossier.id} a été refusé" + end + + def dossier_closed dossier + send_mail dossier, "Votre dossier TPS N°#{dossier.id} a été accepté" + end + private def vars_mailer dossier diff --git a/app/views/notification_mailer/dossier_closed.text.erb b/app/views/notification_mailer/dossier_closed.text.erb new file mode 100644 index 000000000..57e7c03fa --- /dev/null +++ b/app/views/notification_mailer/dossier_closed.text.erb @@ -0,0 +1,10 @@ +Bonjour <%= @user.email %> + +votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été accepté ce jour à <%= @dossier.updated_at %>. + +A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> + +Bonne journée + +--- +L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_refused.text.erb b/app/views/notification_mailer/dossier_refused.text.erb new file mode 100644 index 000000000..1c061ad32 --- /dev/null +++ b/app/views/notification_mailer/dossier_refused.text.erb @@ -0,0 +1,10 @@ +Bonjour <%= @user.email %> + +votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été refusé ce jour à <%= @dossier.updated_at %>. + +Pour en savoir plus sur le motif du refus, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> + +Bonne journée, + +--- +L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_without_continuation.text.erb b/app/views/notification_mailer/dossier_without_continuation.text.erb new file mode 100644 index 000000000..66d0604c2 --- /dev/null +++ b/app/views/notification_mailer/dossier_without_continuation.text.erb @@ -0,0 +1,10 @@ +Bonjour <%= @user.email %> + +votre dossier N°<%=@dossier.id%> déposé auprès de <%= @dossier.procedure.organisation %> a été classé sans suite ce jour à <%= @dossier.updated_at %>. + +Pour en savoir plus sur les raisons de ce classement sans suite, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> + +Bonne journée, + +--- +L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/spec/controllers/backoffice/dossiers_controller_spec.rb b/spec/controllers/backoffice/dossiers_controller_spec.rb index 87943c6b6..13c22edff 100644 --- a/spec/controllers/backoffice/dossiers_controller_spec.rb +++ b/spec/controllers/backoffice/dossiers_controller_spec.rb @@ -133,18 +133,72 @@ describe Backoffice::DossiersController, type: :controller do end end + describe 'POST #refuse' do + before do + dossier.refused! + sign_in gestionnaire + end + + subject { post :refuse, dossier_id: dossier_id } + + it 'change state to refused' do + subject + + dossier.reload + expect(dossier.state).to eq('refused') + end + + it 'Notification email is sent' do + expect(NotificationMailer).to receive(:dossier_refused).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + + subject + end + end + + describe 'POST #without_continuation' do + before do + dossier.without_continuation! + sign_in gestionnaire + end + subject { post :without_continuation, dossier_id: dossier_id } + + + it 'change state to without_continuation' do + subject + + dossier.reload + expect(dossier.state).to eq('without_continuation') + end + + it 'Notification email is sent' do + expect(NotificationMailer).to receive(:dossier_without_continuation).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + + subject + end + end + describe 'POST #close' do before do dossier.received! sign_in gestionnaire end + subject { post :close, dossier_id: dossier_id } it 'change state to closed' do - post :close, dossier_id: dossier_id + subject dossier.reload expect(dossier.state).to eq('closed') end + + it 'Notification email is sent' do + expect(NotificationMailer).to receive(:dossier_closed).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + + subject + end end describe 'PUT #toggle_follow' do From db511b15a82f73977a006980aed24faa684698dc Mon Sep 17 00:00:00 2001 From: Guillaume Lazzara Date: Thu, 25 Aug 2016 18:03:05 +0200 Subject: [PATCH 6/8] Fix typos in notification emails --- app/views/notification_mailer/dossier_submitted.text.erb | 4 ++-- app/views/notification_mailer/dossier_validated.text.erb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/notification_mailer/dossier_submitted.text.erb b/app/views/notification_mailer/dossier_submitted.text.erb index ced433b16..bc05f0e26 100644 --- a/app/views/notification_mailer/dossier_submitted.text.erb +++ b/app/views/notification_mailer/dossier_submitted.text.erb @@ -1,8 +1,8 @@ Bonjour <%= @user.email %> -Nous vous confirmons que votre dossier N°<%=@dossier.id%> a été déposé aurpès de <%= @dossier.procedure.organisation %> avec succès ce jour à <%= @dossier.updated_at %>. +Nous vous confirmons que votre dossier N°<%=@dossier.id%> a été déposé auprès de <%= @dossier.procedure.organisation %> avec succès ce jour à <%= @dossier.updated_at %>. -Bonne journée +Bonne journée, --- L'équide TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/notification_mailer/dossier_validated.text.erb b/app/views/notification_mailer/dossier_validated.text.erb index f2a555ac4..adf8e4d08 100644 --- a/app/views/notification_mailer/dossier_validated.text.erb +++ b/app/views/notification_mailer/dossier_validated.text.erb @@ -2,9 +2,9 @@ Bonjour <%= @user.email %> Votre dossier N°<%=@dossier.id%> a été validé par votre accompagnateur. -Afin de finaliser son dépot, merci de vous rendre sur <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> +Afin de finaliser son dépôt, merci de vous rendre sur <%=users_dossier_recapitulatif_url(dossier_id: @dossier.id)%> -Bonne journée +Bonne journée, --- L'équide TPS - tps@apientreprise.fr \ No newline at end of file From a179c372cf1cc46d480277e453c58c9f9a60657d Mon Sep 17 00:00:00 2001 From: Xavier J Date: Fri, 26 Aug 2016 09:17:31 +0200 Subject: [PATCH 7/8] Ajust text --- .../description/_pieces_justificatives.html.haml | 13 +------------ app/views/users/description/_show.html.haml | 11 +++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/views/users/description/_pieces_justificatives.html.haml b/app/views/users/description/_pieces_justificatives.html.haml index df889d102..83e292f91 100644 --- a/app/views/users/description/_pieces_justificatives.html.haml +++ b/app/views/users/description/_pieces_justificatives.html.haml @@ -2,7 +2,7 @@ - if @dossier.procedure.cerfa_flag %tr %th{class:'col-lg-6'} - ='Formulaire / CERFA' + ='Formulaire / CERFA (complété et numérisé)' %td{class:'col-lg-5'} -if @dossier.cerfa_available? @@ -26,14 +26,3 @@ %span.btn.btn-sm.btn-file.btn-success Modifier = file_field_tag "piece_justificative_#{type_de_piece_justificative.id}", accept: PieceJustificative.accept_format, :max_file_size => 3.megabytes - - -#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 indispensable 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. \ No newline at end of file diff --git a/app/views/users/description/_show.html.haml b/app/views/users/description/_show.html.haml index 294884e26..b6fd592f0 100644 --- a/app/views/users/description/_show.html.haml +++ b/app/views/users/description/_show.html.haml @@ -37,6 +37,17 @@ //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. + + - if user_signed_in? %div{style: 'text-align:right'} From 0eb2acb959af7c5536ca3638df2c7381e1987716 Mon Sep 17 00:00:00 2001 From: Xavier J Date: Mon, 29 Aug 2016 11:02:02 +0200 Subject: [PATCH 8/8] CGU --- app/controllers/cgu_controller.rb | 5 + app/views/cgu/index.html.haml | 167 ++++++++++++++++++++++++ app/views/layouts/application.html.haml | 12 +- config/routes.rb | 2 + 4 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 app/controllers/cgu_controller.rb create mode 100644 app/views/cgu/index.html.haml diff --git a/app/controllers/cgu_controller.rb b/app/controllers/cgu_controller.rb new file mode 100644 index 000000000..95bb4ab15 --- /dev/null +++ b/app/controllers/cgu_controller.rb @@ -0,0 +1,5 @@ +class CguController < ApplicationController + def index + + end +end \ No newline at end of file diff --git a/app/views/cgu/index.html.haml b/app/views/cgu/index.html.haml new file mode 100644 index 000000000..70632182c --- /dev/null +++ b/app/views/cgu/index.html.haml @@ -0,0 +1,167 @@ +%h2 + Condition d’utilisation du service « TPS » pour téléprocédure simplifiée +%br +%h3 + Editeur +%p Ce service est proposé par le Secrétariat général pour la modernisation de l’action publique, un service interministériel du Premier Ministre, mis à disposition du ministère de la Réforme de l’Etat, de la Décentralisation et de la Fonction publique. +%p Il est opéré par la Direction interministérielle du numérique et du système d'information et de communication de l'Etat (DINSIC). +%p +%p + %strong Secrétariat Général pour la Modernisation de l’Action publique + %br/ + 64-70 allée de Bercy + %br/ + 75572 Paris Cedex 12 +%p + %strong Directeur de la publication +%p Laure de LA BRETECHE +%p + %strong Responsable éditorial +%p Henri VERDIER +%p + %strong Responsable éditorial délégué +%p Philippe VRIGNAUD +%br +%h3 + Ingénierie et hébergement informatique +%p L'ingénierie du site est assurée par : +%p + %strong OVH + %br/ + SAS au capital de 10 000 000 € + %br/ + RCS Roubaix – Tourcoing 424 761 419 00045 + %br/ + Code APE 6202A + %br/ + N° TVA : FR 22 424 761 419 + %br/ + Siège social : 2 rue Kellermann - 59100 Roubaix - France. +%br +%h3 + Object du site internet + %a{:href => "https://tps.apientreprise.fr/"} + %strong tps.apientreprise.fr +%p + Le site internet tps.apientreprise.fr a pour objet de faciliter la création de démarches administratives en ligne par les acteurs publics, et l’instruction par plusieurs services des demandes formulées par les usagers auprès d’un ou organismes publics. +%br +%h3 + Acteurs de + %a{:href => "https://tps.apientreprise.fr/"} + TPS +%p Les acteurs de TPS sont les suivants : +%ul + %li Le SGMAP qui héberge le service TPS, le maintien en condition opérationnelle et gère les droits d’accès + %li L’administrateur au sein d’une administration donnée qui crée la démarche en ligne + %li Le ou les accompagnateurs au sein d’une administration donnée, qui reçoivent les démarches des usagers, les accompagnent le cas échéant dans le bouclage de leurs dossier, instruisent la demande et décident des suites à donner aux demandes + %li Les Usagers qui formulent les demandes en ligne via le formulaire qui leur est mis à disposition +%br +%h3 + Déclaration CNIL +%p Le SGMAP a procédé à la déclaration CNIL de TPS. Néanmoins les administrations devront procéder à une déclaration complémentaire auprès de la CNIL si les données du formulaire qu’elles ont produit comportent des données de la nature suivante : +%ul + %li N° de sécurité sociale, + %li Infractions, condamnations, mesures de sécurité, + %li + %a{:href => "https://www.declaration.cnil.fr/declarations/declaration/donneesSensibles_DN.display.action"} Opinions philosophiques, politiques, religieuses, syndicales, vie sexuelle, données de santé, origine raciale. +%br +%h3 + Données collectées et responsabilité des organismes publics à l’initiative de démarches en ligne avec TPS. +%p Les données collectées par le service sont définis par les services publics utilisateurs du service qui arrêtent, sous leur responsabilité, la liste des informations qui seront demandées à l’usager. +%p Les organismes publics s’engagent à créer des démarches pour collecter les informations strictement nécessaires à l’instruction des demandes formulées auprès des acteurs publics, dans le cadre juridique prévu par chacune des démarches. +%p Ces données sont collectées et traitées par les seuls services concernés par l’instruction des demandes, et précisées dans la notice d’utilisation de chaque démarche publiée par l’organisme public. + +%br +%h3 Traitement des données à caractère personnel +%h4 Données personnelles : +%p + En application de la loi n°78-17 Informatique et Libertés du 6 janvier 1978, vous disposez d'un droit d'accès, de rectification, de modification et de suppression concernant les données qui vous concernent. Vous pouvez exercer ce droit à travers la rubrique + %a{:href => "http://www.faire-simple.gouv.fr/contact"} Contact +%h4 Données de connexion : +%p Conformément à la loi n°2004-575 du 21 juin 2004 pour la confiance dans l’économie numérique, certaines données de connexion sont conservées par le service aux fins de protection contre les intrusions et de poursuites judiciaires le cas échéant. Ces données sont conservées pendant un an. + +%br +%h3 Règles relatives aux informations sur les entreprises mises à disposition par les partenaires publics du SGMAP. +%p Le service « TPS », opéré par le SGMAP propose l’affichage aux internautes d’informations issues de deux bases de données distinctes gérées par quatre organismes qui sont : +%br +%h4 L’INSEE : +%p + %strong Insee (Institut national de la statistique et des études économiques) + %br/ + 18, boulevard Adolphe Pinard + %br/ + 75675 Paris cedex 14 + %br/ + Tél. : 01 41 17 50 50 +%p + %a{:href => "http://www.insee.fr/fr/bases-de-donnees/default.asp?page=sirene.htm"} Informations de la base SIRENE + %br/ + %a{:href => "http://www.sirene.fr/sirene/public/static/mentions-legales"} Condition légales d’utilisation de service SIRENE +%br +%h4 INFOGREFFE : +%p + %strong INFOGREFFE  + %br/ + Immeuble Le Parisien + %br/ + 5-7, avenue de Paris + %br/ + 94300 VINCENNES +%p + Les informations transmises aux autorités publiques en charges de l’instruction de dossiers de candidature sont définis par le service en ligne suivant proposé aux internautes : + %a{:href => "https://www.infogreffe.fr/societes/documents-officiels/demande-kbis.html"} https://www.infogreffe.fr/societes/documents-officiels/demande-kbis.html +%p + %a{:href => "https://www.infogreffe.fr/societes/cgu-cgv.html"} Conditions générales d’utilisation des données d’infogreffe + +%br +%h4 TPS fait appel à d’autres services opérés par le SGMAP afin de faciliter les démarches administratives : +%br +%p + %strong> France CONNECT + \ : informations complémentaires : + %a{:href => "https://franceconnect.gouv.fr/"} https://franceconnect.gouv.fr/ +%p + %strong La base d’adresse nationale : + %a{:href => "https://adresse.data.gouv.fr/"} https://adresse.data.gouv.fr/ +%p + %strong TPS est un service de l’Etat Plateforme : + + %a{:href => "http://etatplateforme.modernisation.gouv.fr/"} http://etatplateforme.modernisation.gouv.fr/ +%p + %strong Il met en œuvre les principes définis par le programme « Dites-le nous une fois » +%p + %a{:href => "http://www.modernisation.gouv.fr/les-services-publics-se-simplifient-et-innovent/par-des-simplifications-pour-les-entreprises/dites-le-nous-une-fois-un-programme-pour-simplifier-la-vie-des-entreprises"} http://www.modernisation.gouv.fr/les-services-publics-se-simplifient-et-innovent/par-des-simplifications-pour-les-entreprises/dites-le-nous-une-fois-un-programme-pour-simplifier-la-vie-des-entreprises +%br +%h3 Droit de reproduction : +%p Toute copie de pages du site doit avoir obtenu l’autorisation du directeur de la publication. +%p La création de liens avec le site « tps.apientreprise.fr » est libre. +%p Le SGMAP se réserve le droit de demander la suppression d’un lien qu’elle estime non conforme à l’objet du service « tps.apientreprise.fr » aux missions du SGMAP, ou plus généralement aux principes véhiculés par l’Administration. +%p L’autorisation de création de liens est valable pour tout support, à l’exception de ceux diffusant des informations à caractère raciste, pornographique, xénophobe ou pouvant porter atteinte à la sensibilité du plus grand nombre. +%p + La rubrique + %a{:href => "http://www.faire-simple.gouv.fr/contact"} Contactez-nous + est à votre disposition pour nous faire part de vos remarques et suggestions. +%br +%h3 Propriété intellectuelle, droits d’auteur et copyright +%p Ce service relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle. Tous les droits de reproduction sont réservés, y compris pour les documents téléchargeables et les représentations iconographiques et photographiques. +%p La reproduction de tout ou partie de ce site sur un support électronique quel qu'il soit est formellement interdite sauf autorisation expresse du Directeur de la publication (voir ci-après : Reproduction des contenus). +%p Les marques citées sur ce site sont protégées par les organismes qui en sont propriétaires. + +%br +%h3 Logiciels nécessaires à la consultation +%p Ce service est optimisé pour un affichage en 1024*768. Il est prévu pour : +%ul + %li les versions 10 ou supérieures d'Internet Explorer (sur windows 7 ou plus) + %li toutes versions de Microsoft Edge + %li les versions 19 ou supérieures d’Opera + %li les versions 8 ou supérieures de Safari + %li les versions 45.3.0 ou 48 ou supérieures de Firefox + %li les versions 40 ou supérieures de Chrome +%p + La liste des versions compatibles a volontairement été réduite afin de garantir une meilleure sécurité sur nos services. Par ailleurs, le service TPS peut fonctionner sur des versions antérieures à celles évoquées ci-dessus mais sans garantie par le SGMAP. +%p Certains navigateurs peuvent bloquer par défaut l'ouverture de fenêtres sur ce site. Afin de vous permettre d'afficher certaines pages, vous devez autoriser l'ouverture des fenêtres lorsque le navigateur vous le propose en cliquant sur le bandeau d'avertissement alors affiché en haut de la page. En cas d'absence de message d'avertissement de la part de votre navigateur, vous devez configurer celui-ci afin qu'il autorise l'ouverture des fenêtres pour le site "tps.apientreprise.fr". +%br +%h3 Conception & Réalisation +%p SGMAP +%p   +%p   \ No newline at end of file diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 7fb7c8008..95c642ffb 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -36,13 +36,17 @@ .container.center %p{style:'margin-top: 1em;'} %p{class: "copyright text-muted small"} - Copyright © - =link_to 'SGMAP', "http://etatplateforme.modernisation.gouv.fr" - 2016 - Tous droits réservés + 2016 - =link_to 'contact@tps.apientreprise.fr', "mailto:contact@tps.apientreprise.fr" + \- + + =link_to 'CGU / Mentions légales', cgu_path + + \- + + =link_to 'Contact', "mailto:contact@tps.apientreprise.fr" diff --git a/config/routes.rb b/config/routes.rb index d1f05b3c1..6445a1710 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,8 @@ Rails.application.routes.draw do root 'root#index' + get 'cgu' => 'cgu#index' + namespace :france_connect do get 'particulier' => 'particulier#login' get 'particulier/callback' => 'particulier#callback'