diff --git a/app/assets/javascripts/carte/carte.js b/app/assets/javascripts/carte/carte.js index b7ec0ea4b..af6ac5cf4 100644 --- a/app/assets/javascripts/carte/carte.js +++ b/app/assets/javascripts/carte/carte.js @@ -11,7 +11,8 @@ function initCarto() { map = L.map("map", { center: new L.LatLng(position.lat, position.lon), zoom: position.zoom, - layers: [OSM] + layers: [OSM], + scrollWheelZoom: false }); icon = L.icon({ @@ -159,4 +160,4 @@ function add_event_search_address() { if (e.keyCode == 13) get_address_point($(this).val()); }); -} \ No newline at end of file +} diff --git a/app/controllers/commentaires_controller.rb b/app/controllers/commentaires_controller.rb index 9506aa7f8..920a64155 100644 --- a/app/controllers/commentaires_controller.rb +++ b/app/controllers/commentaires_controller.rb @@ -42,20 +42,20 @@ class CommentairesController < ApplicationController flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe." end + notify_user_with_mail(@commentaire) if saved + if is_gestionnaire? unless current_gestionnaire.follow? @commentaire.dossier current_gestionnaire.toggle_follow_dossier @commentaire.dossier end - NotificationMailer.new_answer(@commentaire.dossier).deliver_now! if saved - redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id']) else if current_user.email != @commentaire.dossier.user.email invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id) else - redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: params['dossier_id']) + redirect_to users_dossier_recapitulatif_path(params['dossier_id']) end end end @@ -63,4 +63,10 @@ class CommentairesController < ApplicationController def is_gestionnaire? false end + + private + + def notify_user_with_mail(commentaire) + NotificationMailer.new_answer(commentaire.dossier).deliver_now! unless current_user.try(:email) == commentaire.dossier.user.email + end end diff --git a/app/views/dossiers/_commentaire.html.haml b/app/views/dossiers/_commentaire.html.haml deleted file mode 100644 index c6eb31717..000000000 --- a/app/views/dossiers/_commentaire.html.haml +++ /dev/null @@ -1,14 +0,0 @@ -%div.commentaire - .row - %div.col-lg-12.col-md-12.col-sm-12.col-xs-12.comment-header - = commentaire.header - .row - %div.col-lg-12.col-md-12.col-sm-12.col-xs-12.content - = commentaire.body.html_safe - - if file = commentaire.piece_justificative - .row - %div.col-lg-12.col-md-12.col-sm-12.col-xs-12.file - = link_to file.content_url, class: 'link', target: '_blank' do - %span.fa.fa-file - %div - = file.original_filename diff --git a/app/views/dossiers/_messagerie.html.haml b/app/views/dossiers/_messagerie.html.haml index 754c34e50..c38063552 100644 --- a/app/views/dossiers/_messagerie.html.haml +++ b/app/views/dossiers/_messagerie.html.haml @@ -7,41 +7,25 @@ MESSAGERIE .col-xs-2.count - - message_count = dossier_facade.commentaires.count - = (message_count == 1) ? "1 message" : "#{message_count} messages" + = pluralize(@facade.commentaires.count, "message") + .alert.alert-info Cette messagerie permet d'échanger entre le demandeur et le service instructeur. .body - if dossier_facade.commentaires.any? .commentaires - = render partial: 'dossiers/commentaire', collection: dossier_facade.commentaires.object.sort + = render partial: 'dossiers/commentaires/commentaire', collection: dossier_facade.commentaires.object.sort .split-hr #new-commentaire - = form_tag(url_for({ controller: 'commentaires', action: :create, dossier_id: dossier_facade.dossier.id, champ_id: dossier_facade.champ_id }), class: 'form-inline', method: 'POST', multipart: true) do + = render partial: 'dossiers/commentaires/form', locals: { dossier_facade: @facade } - %textarea.form-control{id: 'texte_commentaire', class: 'wysihtml5', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', placeholder:"Commentaire"} - - .row - .col-md-6 - %h4.text-primary{style: 'margin-top: 0px'} Ajouter un fichier - = file_field_tag "piece_justificative[content]", accept: PieceJustificative.accept_format, style: 'float: left; margin-left: 20px' - - .col-md-6 - %input#save-message.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' } .last-commentaire.clearfix - if last_comment = dossier_facade.commentaires.first %div DERNIER MESSAGE - = render partial: 'dossiers/commentaire', object: last_comment - -# = "DERNIER MESSAGE (#{last_comment.header})" - -# .content - -# = last_comment.body.html_safe - -# - if file = last_comment.piece_justificative - -# .file - -# = link_to file.content_url, class: 'link', target: '_blank' do - -# %span.fa.fa-file - -# = file.original_filename + = render partial: 'dossiers/commentaires/commentaire', object: last_comment + #open-message.new-action ENVOYER UN MESSAGE diff --git a/app/views/dossiers/commentaires/_commentaire.html.haml b/app/views/dossiers/commentaires/_commentaire.html.haml new file mode 100644 index 000000000..576903f08 --- /dev/null +++ b/app/views/dossiers/commentaires/_commentaire.html.haml @@ -0,0 +1,11 @@ +%div.commentaire + .comment-header + = commentaire.header + .content + = commentaire.body.html_safe + - if file = commentaire.piece_justificative + .file + = link_to file.content_url, class: 'link', target: '_blank' do + %span.fa.fa-file + %div + = file.original_filename diff --git a/app/views/dossiers/commentaires/_form.html.haml b/app/views/dossiers/commentaires/_form.html.haml new file mode 100644 index 000000000..41163c221 --- /dev/null +++ b/app/views/dossiers/commentaires/_form.html.haml @@ -0,0 +1,11 @@ += form_tag(url_for({ controller: 'commentaires', action: :create, dossier_id: dossier_facade.dossier.id, champ_id: dossier_facade.champ_id }), class: 'form-inline', method: 'POST', multipart: true) do + + %textarea.form-control{id: 'texte_commentaire', class: 'wysihtml5', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', placeholder:"Commentaire"} + + .row + .col-md-6 + %h4.text-primary{style: 'margin-top: 0px'} Ajouter un fichier + = file_field_tag "piece_justificative[content]", accept: PieceJustificative.accept_format, style: 'float: left; margin-left: 20px' + + .col-md-6 + %input#save-message.form-control.btn.btn-send{ type: 'submit', value: 'ENVOYER' } diff --git a/app/views/users/dossiers/_state_description.html.haml b/app/views/users/dossiers/_state_description.html.haml index 884df3a16..5cf936cef 100644 --- a/app/views/users/dossiers/_state_description.html.haml +++ b/app/views/users/dossiers/_state_description.html.haml @@ -8,31 +8,29 @@ -if dossiers_list_facade.liste == 'brouillon' Les dossiers présents dans cette liste %b - n'ont pas encore été soumis à votre administration. + n'ont pas encore été soumis aux services instructeurs. Ils ne sont visibles que par vous. -elsif dossiers_list_facade.liste == 'nouveaux' Les dossiers présents dans cette liste %b n'ont pas encore été ouverts - par votre accompagnteur. Une notification vous sera envoyée quand votre demande aura été étudiée. + par les services instructeurs. Une notification vous sera envoyée quand votre demande aura été étudiée. -elsif dossiers_list_facade.liste == 'a_traiter' Les dossiers présents dans cette liste sont %b - visibles par l'administration. + visibles par les services instructeurs. %br Ces dossiers ne sont pas encore figés et peuvent être modifiés à souhait. - %br - Une fois que le dossier aura été considéré comme complet par votre accompagnateur, celui-ci passera à l'étape suivante de dépôt. -elsif dossiers_list_facade.liste == 'en_attente' Les dossiers présents dans cette liste sont %b - en cours de relecture par votre accompagnateur. + en cours de relecture par les services instructeurs. Il reviendra vers vous si des informations ou documents sont manquants pour le futur examen de votre dossier. -elsif dossiers_list_facade.liste == 'valides' Les dossiers présents dans cette liste ont été %b relus et considérés comme complets - pour examen par votre accompagnateur. Ceux-ci ne peuvent maintenant plus être modifiés. Il faut que vous procédiez à leur dépôt afin qu'une décision finale soit rendue. + pour examen par les services instructeurs. Ceux-ci ne peuvent maintenant plus être modifiés. Il faut que vous procédiez à leur dépôt afin qu'une décision finale soit rendue. -elsif dossiers_list_facade.liste == 'en_instruction' Les dossiers présents dans cette liste sont %b @@ -40,9 +38,9 @@ ou %b en cours d'examen - par l'administration compétente. Une notification vous sera envoyée une fois qu'une décision aura été rendue. + par les services instructeurs. Une notification vous sera envoyée une fois qu'une décision aura été rendue. -elsif dossiers_list_facade.liste == 'termine' - Les dossiers présents dans cette liste sont ceux qui ont été instruits par l'administration et + Les dossiers présents dans cette liste sont ceux qui ont été instruits et pour lesquels %b une décision finale a été rendue. Ils peuvent posséder trois états différents : Accepté, Refusé ou Sans Suite. @@ -50,4 +48,4 @@ Les dossiers présents dans cette liste sont ceux %b auxquels vous avez été invités - à participer afin d'émettre un avis et/ou à fournir des documents complémentaires. + à participer afin d'émettre un avis ou de fournir des documents complémentaires. diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 940e78aad..a3bd49fb8 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -21,3 +21,7 @@ end # ActiveSupport::Inflector.inflections(:en) do |inflect| # inflect.acronym 'RESTful' # end +ActiveSupport::Inflector.inflections(:fr) do |inflect| + inflect.plural(/$/, 's') + inflect.plural(/(hib|ch|bij|caill|p|gen|jouj)ou$/i, '\1oux') +end diff --git a/spec/controllers/users/commentaires_controller_spec.rb b/spec/controllers/users/commentaires_controller_spec.rb index b03cc9225..b6d2f0f60 100644 --- a/spec/controllers/users/commentaires_controller_spec.rb +++ b/spec/controllers/users/commentaires_controller_spec.rb @@ -14,7 +14,7 @@ describe Users::CommentairesController, type: :controller do context 'création correct d\'un commentaire' do subject do sign_in dossier.user - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } end it 'depuis la page récapitulatif' do @@ -34,12 +34,12 @@ describe Users::CommentairesController, type: :controller do end end - context 'when document is upload whith a commentaire', vcr: {cassette_name: 'controllers_sers_commentaires_controller_upload_doc'} do + context 'when document is upload whith a commentaire', vcr: { cassette_name: 'controllers_sers_commentaires_controller_upload_doc' } do let(:document_upload) { Rack::Test::UploadedFile.new("./spec/support/files/piece_justificative_0.pdf", 'application/pdf') } subject do sign_in dossier.user - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire, piece_justificative: {content: document_upload}} + post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire, piece_justificative: { content: document_upload } } end it 'create a new piece justificative' do @@ -88,7 +88,7 @@ describe Users::CommentairesController, type: :controller do sign_in dossier.user dossier.replied! - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } dossier.reload end diff --git a/spec/controllers/users/dossiers/commentaires_controller_spec.rb b/spec/controllers/users/dossiers/commentaires_controller_spec.rb index 871da0722..d56a18d9b 100644 --- a/spec/controllers/users/dossiers/commentaires_controller_spec.rb +++ b/spec/controllers/users/dossiers/commentaires_controller_spec.rb @@ -5,19 +5,67 @@ describe Users::Dossiers::CommentairesController, type: :controller do let(:texte_commentaire) { 'Commentaire de test' } describe '#POST create' do + + subject { + post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire} + dossier.reload + } + context 'when invite is connected' do let!(:invite) { create(:invite, :with_user, dossier: dossier) } before do sign_in invite.user dossier.replied! - - post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire} - dossier.reload end - it { is_expected.to redirect_to users_dossiers_invite_path(invite.id) } - it { expect(dossier.state).to eq 'replied' } + it do + subject + is_expected.to redirect_to users_dossiers_invite_path(invite.id) + expect(dossier.state).to eq 'replied' + end + + it 'should notify user' do + expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + + subject + end + end + + context 'when user is connected' do + before do + sign_in dossier.user + end + + it 'do not send a mail to notify user' do + expect(NotificationMailer).to_not receive(:new_answer) + subject + end + + end + end + + describe '#notify_user_with_mail' do + let(:commentaire){create(:commentaire)} + + context 'when usager is writing a commentaire on dossier' do + before { sign_in commentaire.dossier.user } + + it { + expect(NotificationMailer).to_not receive(:new_answer) + subject.send(:notify_user_with_mail, commentaire) + } + end + + context 'when anybody else but usager is writing a commentaire' do + before { sign_in create(:user, email: 'administrateur@test.fr') } + + it { + expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + subject.send(:notify_user_with_mail, commentaire) + } end end end diff --git a/spec/factories/dossier.rb b/spec/factories/dossier.rb index aa619d795..05e70525c 100644 --- a/spec/factories/dossier.rb +++ b/spec/factories/dossier.rb @@ -46,5 +46,9 @@ FactoryGirl.define do dossier.cerfa << create(:cerfa) end end + + trait :replied do + state 'replied' + end end end