demarches-normaliennes/app/controllers/new_user/dossiers_controller.rb

186 lines
5.1 KiB
Ruby
Raw Normal View History

module NewUser
class DossiersController < UserController
2018-03-29 15:25:05 +02:00
before_action :ensure_ownership!, except: [:index, :modifier, :update]
before_action :ensure_ownership_or_invitation!, only: [:modifier, :update]
before_action :forbid_invite_submission!, only: [:update]
def attestation
send_data(dossier.attestation.pdf.read, filename: 'attestation.pdf', type: 'application/pdf')
end
def identite
@dossier = dossier
@user = current_user
end
2018-02-08 17:13:15 +01:00
def update_identite
@dossier = dossier
individual_updated = @dossier.individual.update(individual_params)
dossier_updated = @dossier.update(dossier_params)
if individual_updated && dossier_updated
flash.notice = "Identité enregistrée"
if @dossier.procedure.module_api_carto.use_api_carto
redirect_to users_dossier_carte_path(@dossier.id)
else
redirect_to modifier_dossier_path(@dossier)
2018-02-08 17:13:15 +01:00
end
else
flash.now.alert = @dossier.errors.full_messages
render :identite
end
end
2018-02-21 18:32:07 +01:00
def modifier
@dossier = dossier_with_champs
# TODO: remove when the champs are unifed
if !@dossier.autorisation_donnees
if dossier.procedure.for_individual
redirect_to identite_dossier_path(@dossier)
else
redirect_to users_dossier_path(@dossier)
end
end
end
# FIXME: remove PiecesJustificativesService
# delegate draft save logic to champ ?
def update
@dossier = dossier_with_champs
errors = PiecesJustificativesService.upload!(@dossier, current_user, params)
if champs_params[:dossier] && !@dossier.update(champs_params[:dossier])
2018-02-21 18:32:07 +01:00
errors += @dossier.errors.full_messages
end
if !draft?
errors += @dossier.champs.select(&:mandatory_and_blank?)
.map { |c| "Le champ #{c.libelle.truncate(200)} doit être rempli." }
errors += PiecesJustificativesService.missing_pj_error_messages(@dossier)
end
if errors.present?
flash.now.alert = errors
render :modifier
elsif draft?
flash.now.notice = 'Votre brouillon a bien été sauvegardé.'
render :modifier
elsif @dossier.brouillon?
@dossier.en_construction!
NotificationMailer.send_initiated_notification(@dossier).deliver_now!
redirect_to merci_dossier_path(@dossier)
elsif owns_dossier?
redirect_to users_dossier_recapitulatif_path(@dossier)
2018-02-21 18:32:07 +01:00
else
redirect_to users_dossiers_invite_path(@dossier.invite_for_user(current_user))
2018-02-21 18:32:07 +01:00
end
end
2018-02-27 09:49:58 +01:00
def merci
@dossier = current_user.dossiers.includes(:procedure).find(params[:id])
end
2018-03-28 15:02:37 +02:00
def index
@user_dossiers = current_user.dossiers.includes(:procedure).page(page)
@dossiers_invites = current_user.dossiers_invites.includes(:procedure).page(page)
@current_tab = current_tab(@user_dossiers.count, @dossiers_invites.count)
@dossiers = case @current_tab
when 'mes-dossiers'
@user_dossiers
when 'dossiers-invites'
@dossiers_invites
end
2018-03-28 15:02:37 +02:00
end
def ask_deletion
@dossier = current_user.dossiers.find(params[:id])
DossierMailer.ask_deletion(@dossier).deliver_later
flash.notice = 'Une demande de suppression de votre dossier a été envoyée, elle sera traitée dans les plus brefs délais.'
redirect_to users_dossier_recapitulatif_path(@dossier)
end
private
def page
[params[:page].to_i, 1].max
end
def current_tab(mes_dossiers_count, dossiers_invites_count)
if dossiers_invites_count == 0
'mes-dossiers'
elsif mes_dossiers_count == 0
'dossiers-invites'
else
params[:current_tab].presence || 'mes-dossiers'
end
end
# FIXME: require(:dossier) when all the champs are united
2018-02-21 18:32:07 +01:00
def champs_params
2018-04-03 17:53:14 +02:00
params.permit(dossier: {
champs_attributes: [
:id, :value, :piece_justificative_file, value: [],
etablissement_attributes: Champs::SiretChamp::ETABLISSEMENT_ATTRIBUTES
]
})
2018-02-21 18:32:07 +01:00
end
def dossier
Dossier.find(params[:id] || params[:dossier_id])
end
2018-02-21 18:32:07 +01:00
def dossier_with_champs
2018-03-29 15:25:05 +02:00
@dossier_with_champs ||= Dossier.with_ordered_champs.find(params[:id])
2018-02-21 18:32:07 +01:00
end
def ensure_ownership!
if !owns_dossier?
2018-03-29 15:25:05 +02:00
forbidden!
end
end
2018-02-08 17:13:15 +01:00
2018-03-29 15:25:05 +02:00
def ensure_ownership_or_invitation!
if !dossier.owner_or_invite?(current_user)
forbidden!
end
end
def forbid_invite_submission!
if passage_en_construction? && !owns_dossier?
forbidden!
end
end
2018-03-29 15:25:05 +02:00
def forbidden!
flash[:alert] = "Vous n'avez pas accès à ce dossier"
redirect_to root_path
end
2018-02-08 17:13:15 +01:00
def individual_params
params.require(:individual).permit(:gender, :nom, :prenom, :birthdate)
end
def dossier_params
params.require(:dossier).permit(:autorisation_donnees)
end
2018-02-21 18:32:07 +01:00
def owns_dossier?
dossier.user_id == current_user.id
end
def passage_en_construction?
dossier.brouillon? && !draft?
end
2018-02-21 18:32:07 +01:00
def draft?
params[:submit_action] == 'draft'
end
end
end