235 lines
7.4 KiB
Ruby
235 lines
7.4 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, :update_allow_decision_access]
|
|
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
|
|
@experts_procedure = @procedure.experts_procedures.where(revoked_at: nil).sort_by { |expert_procedure| expert_procedure.expert.email }
|
|
@experts_emails = experts_procedure_emails
|
|
end
|
|
|
|
def update_allow_decision_access
|
|
@procedure
|
|
.experts_procedures
|
|
.find(params[:expert_procedure])
|
|
.update!(allow_decision_access_params)
|
|
end
|
|
|
|
private
|
|
|
|
def experts_procedure_emails
|
|
@procedure.experts.map(&:email).sort
|
|
end
|
|
|
|
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
|
|
|
|
def allow_decision_access_params
|
|
params.require(:experts_procedure).permit(:allow_decision_access)
|
|
end
|
|
end
|
|
end
|