demarches-normaliennes/app/controllers/new_administrateur/procedures_controller.rb

219 lines
6.9 KiB
Ruby

module NewAdministrateur
class ProceduresController < AdministrateurController
before_action :retrieve_procedure, only: [:champs, :annotations, :edit, :monavis, :update_monavis, :jeton, :update_jeton, :publication, :publish, :transfert, :allow_expert_review, :invited_expert_list]
before_action :procedure_locked?, only: [:champs, :annotations]
ITEMS_PER_PAGE = 25
def index
@procedures_publiees = paginated_published_procedures
@procedures_draft = paginated_draft_procedures
@procedures_closed = paginated_closed_procedures
@procedures_publiees_count = current_administrateur.procedures.publiees.count
@procedures_draft_count = current_administrateur.procedures.brouillons.count
@procedures_closed_count = current_administrateur.procedures.closes.count
@statut = params[:statut]
@statut.blank? ? @statut = 'publiees' : @statut = params[:statut]
end
def paginated_published_procedures
current_administrateur
.procedures
.publiees
.page(params[:page])
.per(ITEMS_PER_PAGE)
.order(published_at: :desc)
end
def paginated_draft_procedures
current_administrateur
.procedures
.brouillons
.page(params[:page])
.per(ITEMS_PER_PAGE)
.order(created_at: :desc)
end
def paginated_closed_procedures
current_administrateur
.procedures
.closes
.page(params[:page])
.per(ITEMS_PER_PAGE)
.order(created_at: :desc)
end
def apercu
@dossier = procedure_without_control.new_dossier
@tab = apercu_tab
end
def new
@procedure ||= Procedure.new(for_individual: true)
end
def show
@procedure = current_administrateur.procedures.find(params[:id])
@current_administrateur = current_administrateur
if @procedure.brouillon?
@procedure_lien = commencer_test_url(path: @procedure.path)
else
@procedure_lien = commencer_url(path: @procedure.path)
end
end
def edit
end
def create
@procedure = Procedure.new(procedure_params.merge(administrateurs: [current_administrateur]))
@procedure.draft_revision = @procedure.revisions.build
if !@procedure.save
flash.now.alert = @procedure.errors.full_messages
render 'new'
else
flash.notice = 'Démarche enregistrée.'
current_administrateur.instructeur.assign_to_procedure(@procedure)
redirect_to champs_admin_procedure_path(@procedure)
end
end
def update
@procedure = current_administrateur.procedures.find(params[:id])
if !@procedure.update(procedure_params)
flash.now.alert = @procedure.errors.full_messages
render 'edit'
elsif @procedure.brouillon?
reset_procedure
flash.notice = 'Démarche modifiée. Tous les dossiers de cette démarche ont été supprimés.'
redirect_to edit_admin_procedure_path(id: @procedure.id)
else
flash.notice = 'Démarche modifiée.'
redirect_to edit_admin_procedure_path(id: @procedure.id)
end
end
def destroy
procedure = current_administrateur.procedures.find(params[:id])
if procedure.can_be_deleted_by_administrateur?
procedure.discard_and_keep_track!(current_administrateur)
flash.notice = 'Démarche supprimée'
redirect_to admin_procedures_draft_path
else
render json: {}, status: 403
end
end
def monavis
end
def update_monavis
if !@procedure.update(procedure_params)
flash.now.alert = @procedure.errors.full_messages
else
flash.notice = 'le champ MonAvis a bien été mis à jour'
end
render 'monavis'
end
def jeton
end
def update_jeton
token = params[:procedure][:api_entreprise_token]
@procedure.api_entreprise_token = token
if @procedure.valid? &&
ApiEntreprise::PrivilegesAdapter.new(token).valid? &&
@procedure.save
redirect_to jeton_admin_procedure_path(procedure_id: params[:procedure_id]),
notice: 'Le jeton a bien été mis à jour'
else
flash.now.alert = "Mise à jour impossible : le jeton n'est pas valide"
render 'jeton'
end
end
def publication
if @procedure.brouillon?
@procedure_lien = commencer_test_url(path: @procedure.path)
else
@procedure_lien = commencer_url(path: @procedure.path)
end
@procedure.path = @procedure.suggested_path(current_administrateur)
@current_administrateur = current_administrateur
end
def publish
@procedure.assign_attributes(publish_params)
if @procedure.publish_or_reopen!(current_administrateur)
redirect_to admin_procedure_path(@procedure)
flash.notice = "Démarche publiée"
else
redirect_to admin_procedure_path(@procedure)
flash.alert = @procedure.errors.full_messages
end
end
def transfert
end
def allow_expert_review
@procedure.update!(allow_expert_review: !@procedure.allow_expert_review)
flash.notice = @procedure.allow_expert_review? ? "Avis externes activés" : "Avis externes désactivés"
redirect_to admin_procedure_path(@procedure)
end
def transfer
admin = Administrateur.by_email(params[:email_admin].downcase)
if admin.nil?
redirect_to admin_procedure_transfert_path(params[:procedure_id])
flash.alert = "Envoi vers #{params[:email_admin]} impossible : cet administrateur n'existe pas"
else
procedure = current_administrateur.procedures.find(params[:procedure_id])
procedure.clone(admin, false)
redirect_to admin_procedure_path(params[:procedure_id])
flash.notice = "La démarche a correctement été clonée vers le nouvel administrateur."
end
end
def invited_expert_list
@invited_expert_emails = ExpertsProcedure.invited_expert_emails(@procedure)
end
private
def apercu_tab
params[:tab] || 'dossier'
end
def procedure_without_control
Procedure.find(params[:id])
end
def procedure_params
editable_params = [:libelle, :description, :organisation, :direction, :lien_site_web, :cadre_juridique, :deliberation, :notice, :web_hook_url, :declarative_with_state, :euro_flag, :logo, :auto_archive_on, :monavis_embed, :api_entreprise_token]
permited_params = if @procedure&.locked?
params.require(:procedure).permit(*editable_params)
else
params.require(:procedure).permit(*editable_params, :duree_conservation_dossiers_dans_ds, :duree_conservation_dossiers_hors_ds, :for_individual, :path)
end
if permited_params[:auto_archive_on].present?
permited_params[:auto_archive_on] = Date.parse(permited_params[:auto_archive_on]) + 1.day
end
permited_params
end
def publish_params
params.permit(:path, :lien_site_web)
end
end
end