Merge branch 'staging'

This commit is contained in:
Mathieu Magnin 2017-02-02 12:09:51 +01:00
commit 4e493e6c83
11 changed files with 113 additions and 60 deletions

View file

@ -11,7 +11,8 @@ function initCarto() {
map = L.map("map", { map = L.map("map", {
center: new L.LatLng(position.lat, position.lon), center: new L.LatLng(position.lat, position.lon),
zoom: position.zoom, zoom: position.zoom,
layers: [OSM] layers: [OSM],
scrollWheelZoom: false
}); });
icon = L.icon({ icon = L.icon({

View file

@ -42,20 +42,20 @@ class CommentairesController < ApplicationController
flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe." flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe."
end end
notify_user_with_mail(@commentaire) if saved
if is_gestionnaire? if is_gestionnaire?
unless current_gestionnaire.follow? @commentaire.dossier unless current_gestionnaire.follow? @commentaire.dossier
current_gestionnaire.toggle_follow_dossier @commentaire.dossier current_gestionnaire.toggle_follow_dossier @commentaire.dossier
end end
NotificationMailer.new_answer(@commentaire.dossier).deliver_now! if saved
redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id']) redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id'])
else else
if current_user.email != @commentaire.dossier.user.email if current_user.email != @commentaire.dossier.user.email
invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first
redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id) redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id)
else 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 end
end end
@ -63,4 +63,10 @@ class CommentairesController < ApplicationController
def is_gestionnaire? def is_gestionnaire?
false false
end 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 end

View file

@ -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

View file

@ -7,41 +7,25 @@
MESSAGERIE MESSAGERIE
.col-xs-2.count .col-xs-2.count
- message_count = dossier_facade.commentaires.count = pluralize(@facade.commentaires.count, "message")
= (message_count == 1) ? "1 message" : "#{message_count} messages"
.alert.alert-info .alert.alert-info
Cette messagerie permet d'échanger entre le demandeur et le service instructeur. Cette messagerie permet d'échanger entre le demandeur et le service instructeur.
.body .body
- if dossier_facade.commentaires.any? - if dossier_facade.commentaires.any?
.commentaires .commentaires
= render partial: 'dossiers/commentaire', collection: dossier_facade.commentaires.object.sort = render partial: 'dossiers/commentaires/commentaire', collection: dossier_facade.commentaires.object.sort
.split-hr .split-hr
#new-commentaire #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 .last-commentaire.clearfix
- if last_comment = dossier_facade.commentaires.first - if last_comment = dossier_facade.commentaires.first
%div %div
DERNIER MESSAGE DERNIER MESSAGE
= render partial: 'dossiers/commentaire', object: last_comment = render partial: 'dossiers/commentaires/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
#open-message.new-action #open-message.new-action
ENVOYER UN MESSAGE ENVOYER UN MESSAGE

View file

@ -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

View file

@ -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' }

View file

@ -8,31 +8,29 @@
-if dossiers_list_facade.liste == 'brouillon' -if dossiers_list_facade.liste == 'brouillon'
Les dossiers présents dans cette liste Les dossiers présents dans cette liste
%b %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. Ils ne sont visibles que par vous.
-elsif dossiers_list_facade.liste == 'nouveaux' -elsif dossiers_list_facade.liste == 'nouveaux'
Les dossiers présents dans cette liste Les dossiers présents dans cette liste
%b %b
n'ont pas encore été ouverts 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' -elsif dossiers_list_facade.liste == 'a_traiter'
Les dossiers présents dans cette liste sont Les dossiers présents dans cette liste sont
%b %b
visibles par l'administration. visibles par les services instructeurs.
%br %br
Ces dossiers ne sont pas encore figés et peuvent être modifiés à souhait. 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' -elsif dossiers_list_facade.liste == 'en_attente'
Les dossiers présents dans cette liste sont Les dossiers présents dans cette liste sont
%b %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. Il reviendra vers vous si des informations ou documents sont manquants pour le futur examen de votre dossier.
-elsif dossiers_list_facade.liste == 'valides' -elsif dossiers_list_facade.liste == 'valides'
Les dossiers présents dans cette liste ont été Les dossiers présents dans cette liste ont été
%b %b
relus et considérés comme complets 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' -elsif dossiers_list_facade.liste == 'en_instruction'
Les dossiers présents dans cette liste sont Les dossiers présents dans cette liste sont
%b %b
@ -40,9 +38,9 @@
ou ou
%b %b
en cours d'examen 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' -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 %b
une décision finale a été rendue. une décision finale a été rendue.
Ils peuvent posséder trois états différents : Accepté, Refusé ou Sans Suite. 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 Les dossiers présents dans cette liste sont ceux
%b %b
auxquels vous avez été invités 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.

View file

@ -21,3 +21,7 @@ end
# ActiveSupport::Inflector.inflections(:en) do |inflect| # ActiveSupport::Inflector.inflections(:en) do |inflect|
# inflect.acronym 'RESTful' # inflect.acronym 'RESTful'
# end # end
ActiveSupport::Inflector.inflections(:fr) do |inflect|
inflect.plural(/$/, 's')
inflect.plural(/(hib|ch|bij|caill|p|gen|jouj)ou$/i, '\1oux')
end

View file

@ -14,7 +14,7 @@ describe Users::CommentairesController, type: :controller do
context 'création correct d\'un commentaire' do context 'création correct d\'un commentaire' do
subject do subject do
sign_in dossier.user 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 end
it 'depuis la page récapitulatif' do it 'depuis la page récapitulatif' do
@ -34,12 +34,12 @@ describe Users::CommentairesController, type: :controller do
end end
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') } let(:document_upload) { Rack::Test::UploadedFile.new("./spec/support/files/piece_justificative_0.pdf", 'application/pdf') }
subject do subject do
sign_in dossier.user 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 end
it 'create a new piece justificative' do it 'create a new piece justificative' do
@ -88,7 +88,7 @@ describe Users::CommentairesController, type: :controller do
sign_in dossier.user sign_in dossier.user
dossier.replied! 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 dossier.reload
end end

View file

@ -5,19 +5,67 @@ describe Users::Dossiers::CommentairesController, type: :controller do
let(:texte_commentaire) { 'Commentaire de test' } let(:texte_commentaire) { 'Commentaire de test' }
describe '#POST create' do describe '#POST create' do
subject {
post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire}
dossier.reload
}
context 'when invite is connected' do context 'when invite is connected' do
let!(:invite) { create(:invite, :with_user, dossier: dossier) } let!(:invite) { create(:invite, :with_user, dossier: dossier) }
before do before do
sign_in invite.user sign_in invite.user
dossier.replied! dossier.replied!
post :create, params:{dossier_id: dossier.id, texte_commentaire: texte_commentaire}
dossier.reload
end end
it { is_expected.to redirect_to users_dossiers_invite_path(invite.id) } it do
it { expect(dossier.state).to eq 'replied' } 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 end
end end

View file

@ -46,5 +46,9 @@ FactoryGirl.define do
dossier.cerfa << create(:cerfa) dossier.cerfa << create(:cerfa)
end end
end end
trait :replied do
state 'replied'
end
end end
end end