demarches-normaliennes/app/controllers/administrateurs/administrateur_controller.rb
2024-08-22 09:26:48 +02:00

96 lines
2.7 KiB
Ruby

# frozen_string_literal: true
module Administrateurs
class AdministrateurController < ApplicationController
before_action :authenticate_administrateur!
before_action :alert_for_missing_siret_service
before_action :alert_for_missing_service
helper_method :administrateur_as_manager?
def nav_bar_profile
:administrateur
end
def retrieve_procedure
id = params[:procedure_id] || params[:id]
@procedure = current_administrateur.procedures.find(id)
Sentry.configure_scope do |scope|
scope.set_tags(procedure: @procedure.id)
end
rescue ActiveRecord::RecordNotFound
flash.alert = 'Démarche inexistante'
redirect_to admin_procedures_path, status: 404
end
def reset_procedure
@procedure.reset!
end
def preload_revisions
ProcedureRevisionPreloader.new(@procedure.revisions).all
@procedure.association(:draft_revision).target = @procedure.revisions.find { _1.id == @procedure.draft_revision.id }
if @procedure.published_revision
@procedure.association(:published_revision).target = @procedure.revisions.find { _1.id == @procedure.published_revision.id }
end
end
def ensure_not_super_admin!
if administrateur_as_manager?
redirect_back fallback_location: root_url, alert: "Interdit aux super admins", status: 403
end
end
private
def administrateur_as_manager?
id = params[:procedure_id] || params[:id]
current_administrateur.administrateurs_procedures
.exists?(procedure_id: id, manager: true)
end
def alert_for_missing_siret_service
return if flash[:alert].present?
procedures = missing_siret_services
if procedures.any?
errors = []
errors << I18n.t('shared.procedures.no_siret')
procedures.each do |p|
errors << I18n.t('shared.procedures.add_siret_to_service_without_siret_html', link: edit_admin_service_path(p.service, procedure_id: p.id), nom: p.service.nom)
end
flash.now.alert = errors
end
end
def missing_siret_services
current_administrateur
.procedures.publiees
.joins(:service)
.where(service: { siret: nil })
end
def alert_for_missing_service
return if flash[:alert].present?
procedures = missing_service
if procedures.any?
errors = []
errors << I18n.t('shared.procedures.no_service')
procedures.each do |p|
errors << I18n.t('shared.procedures.add_service_html', link: admin_services_path(procedure_id: p.id), id: p.id)
end
flash.now.alert = errors
end
end
def missing_service
current_administrateur
.procedures.publiees
.where(service_id: nil)
end
end
end