144 lines
3.9 KiB
Ruby
144 lines
3.9 KiB
Ruby
module Gestionnaires
|
|
class AvisController < GestionnaireController
|
|
include CreateAvisConcern
|
|
|
|
before_action :authenticate_gestionnaire!, except: [:sign_up, :create_gestionnaire]
|
|
before_action :redirect_if_no_sign_up_needed, only: [:sign_up]
|
|
before_action :check_avis_exists_and_email_belongs_to_avis, only: [:sign_up, :create_gestionnaire]
|
|
before_action :set_avis_and_dossier, only: [:show, :instruction, :messagerie, :create_commentaire, :update]
|
|
|
|
A_DONNER_STATUS = 'a-donner'
|
|
DONNES_STATUS = 'donnes'
|
|
|
|
def index
|
|
gestionnaire_avis = current_gestionnaire.avis.includes(dossier: [:procedure, :user])
|
|
@avis_a_donner = gestionnaire_avis.without_answer
|
|
@avis_donnes = gestionnaire_avis.with_answer
|
|
|
|
@statut = params[:statut].presence || A_DONNER_STATUS
|
|
|
|
@avis = case @statut
|
|
when A_DONNER_STATUS
|
|
@avis_a_donner
|
|
when DONNES_STATUS
|
|
@avis_donnes
|
|
end
|
|
|
|
@avis = @avis.page([params[:page].to_i, 1].max)
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def instruction
|
|
@new_avis = Avis.new
|
|
end
|
|
|
|
def update
|
|
if @avis.update(avis_params)
|
|
flash.notice = 'Votre réponse est enregistrée.'
|
|
redirect_to instruction_gestionnaire_avis_path(@avis)
|
|
else
|
|
flash.now.alert = @avis.errors.full_messages
|
|
@new_avis = Avis.new
|
|
render :instruction
|
|
end
|
|
end
|
|
|
|
def messagerie
|
|
@commentaire = Commentaire.new
|
|
end
|
|
|
|
def create_commentaire
|
|
@commentaire = CommentaireService.build(current_gestionnaire, avis.dossier, commentaire_params)
|
|
|
|
if @commentaire.save
|
|
flash.notice = "Message envoyé"
|
|
redirect_to messagerie_gestionnaire_avis_path(avis)
|
|
else
|
|
flash.alert = @commentaire.errors.full_messages
|
|
render :messagerie
|
|
end
|
|
end
|
|
|
|
def create_avis
|
|
@new_avis = create_avis_from_params(avis.dossier, avis.confidentiel)
|
|
|
|
if @new_avis.nil?
|
|
redirect_to instruction_gestionnaire_avis_path(avis)
|
|
else
|
|
set_avis_and_dossier
|
|
render :instruction
|
|
end
|
|
end
|
|
|
|
def sign_up
|
|
@email = params[:email]
|
|
@dossier = Avis.includes(:dossier).find(params[:id]).dossier
|
|
|
|
render
|
|
end
|
|
|
|
def create_gestionnaire
|
|
email = params[:email]
|
|
password = params['gestionnaire']['password']
|
|
|
|
gestionnaire = Gestionnaire.new(email: email, password: password)
|
|
|
|
if gestionnaire.save
|
|
user = User.find_by(email: email)
|
|
if user.blank?
|
|
user = User.create(email: email, password: password, confirmed_at: Time.zone.now)
|
|
end
|
|
|
|
sign_in(user)
|
|
sign_in(gestionnaire, scope: :gestionnaire)
|
|
|
|
Avis.link_avis_to_gestionnaire(gestionnaire)
|
|
redirect_to url_for(gestionnaire_avis_index_path)
|
|
else
|
|
flash[:alert] = gestionnaire.errors.full_messages
|
|
redirect_to url_for(sign_up_gestionnaire_avis_path(params[:id], email))
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_avis_and_dossier
|
|
@avis = avis
|
|
@dossier = avis.dossier
|
|
end
|
|
|
|
def redirect_if_no_sign_up_needed
|
|
avis = Avis.find(params[:id])
|
|
|
|
if current_gestionnaire.present?
|
|
# a gestionnaire is authenticated ... lets see if it can view the dossier
|
|
|
|
redirect_to gestionnaire_avis_url(avis)
|
|
elsif avis.gestionnaire&.email == params[:email]
|
|
# the avis gestionnaire has already signed up and it sould sign in
|
|
|
|
redirect_to new_gestionnaire_session_url
|
|
end
|
|
end
|
|
|
|
def check_avis_exists_and_email_belongs_to_avis
|
|
if !Avis.avis_exists_and_email_belongs_to_avis?(params[:id], params[:email])
|
|
redirect_to url_for(root_path)
|
|
end
|
|
end
|
|
|
|
def avis
|
|
current_gestionnaire.avis.includes(dossier: [:avis, :commentaires]).find(params[:id])
|
|
end
|
|
|
|
def avis_params
|
|
params.require(:avis).permit(:answer, :piece_justificative_file)
|
|
end
|
|
|
|
def commentaire_params
|
|
params.require(:commentaire).permit(:body, :piece_jointe)
|
|
end
|
|
end
|
|
end
|