2018-04-13 16:56:00 +02:00
module NewAdministrateur
class ProceduresController < AdministrateurController
2021-04-16 11:11:39 +02:00
before_action :retrieve_procedure , only : [ :champs , :annotations , :edit , :monavis , :update_monavis , :jeton , :update_jeton , :publication , :publish , :transfert , :allow_expert_review , :experts_require_administrateur_invitation ]
2021-04-28 15:08:48 +02:00
before_action :procedure_revisable? , only : [ :champs , :annotations ]
2019-01-17 15:15:46 +01:00
2020-07-28 15:15:56 +02:00
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
2018-04-13 16:56:00 +02:00
def apercu
2021-06-23 15:57:11 +02:00
@dossier = procedure_without_control . draft_revision . new_dossier
2018-04-13 17:29:34 +02:00
@tab = apercu_tab
2018-04-13 16:56:00 +02:00
end
2019-09-24 16:38:58 +02:00
def new
@procedure || = Procedure . new ( for_individual : true )
end
2021-08-31 23:44:23 +02:00
SIGNIFICANT_DOSSIERS_THRESHOLD = 30
def new_from_existing
significant_procedure_ids = Procedure
. publiees_ou_closes
. joins ( :dossiers )
. group ( " procedures.id " )
. having ( " count(dossiers.id) >= ? " , SIGNIFICANT_DOSSIERS_THRESHOLD )
. pluck ( 'procedures.id' )
@grouped_procedures = Procedure
. includes ( :administrateurs , :service )
. where ( id : significant_procedure_ids )
. group_by ( & :organisation_name )
. sort_by { | _ , procedures | procedures . first . created_at }
end
2020-07-15 10:48:11 +02:00
def show
@procedure = current_administrateur . procedures . find ( params [ :id ] )
2020-09-24 14:36:22 +02:00
@current_administrateur = current_administrateur
2021-06-24 11:57:05 +02:00
@procedure_lien = commencer_url ( path : @procedure . path )
@procedure_lien_test = commencer_test_url ( path : @procedure . path )
2020-07-15 10:48:11 +02:00
end
2019-09-24 16:38:58 +02:00
def edit
end
def create
@procedure = Procedure . new ( procedure_params . merge ( administrateurs : [ current_administrateur ] ) )
2020-08-27 19:55:10 +02:00
@procedure . draft_revision = @procedure . revisions . build
2019-09-24 16:38:58 +02:00
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 )
2020-07-07 12:03:32 +02:00
redirect_to champs_admin_procedure_path ( @procedure )
2019-09-24 16:38:58 +02:00
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
2021-09-01 00:20:32 +02:00
def clone
procedure = Procedure . find ( params [ :procedure_id ] )
new_procedure = procedure . clone ( current_administrateur , cloned_from_library? )
if new_procedure . valid?
flash . notice = 'Démarche clonée'
redirect_to edit_admin_procedure_path ( id : new_procedure . id )
else
if cloned_from_library?
flash . alert = new_procedure . errors . full_messages
redirect_to new_from_existing_admin_procedures_path
else
flash . alert = new_procedure . errors . full_messages
redirect_to admin_procedures_path
end
end
rescue ActiveRecord :: RecordNotFound
flash . alert = 'Démarche inexistante'
redirect_to admin_procedures_path
end
2021-09-01 00:25:00 +02:00
def archive
procedure = current_administrateur . procedures . find ( params [ :procedure_id ] )
procedure . close!
flash . notice = " Démarche close "
redirect_to admin_procedures_path
rescue ActiveRecord :: RecordNotFound
flash . alert = 'Démarche inexistante'
redirect_to admin_procedures_path
end
2020-07-28 15:15:56 +02:00
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
2019-09-24 16:38:58 +02:00
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
2020-04-27 14:58:12 +02:00
def jeton
end
def update_jeton
2020-10-19 11:33:36 +02:00
token = params [ :procedure ] [ :api_entreprise_token ]
@procedure . api_entreprise_token = token
if @procedure . valid? &&
2020-08-05 18:40:47 +02:00
APIEntreprise :: PrivilegesAdapter . new ( token ) . valid? &&
2020-10-19 11:33:36 +02:00
@procedure . save
redirect_to jeton_admin_procedure_path ( procedure_id : params [ :procedure_id ] ) ,
notice : 'Le jeton a bien été mis à jour'
2020-04-27 14:58:12 +02:00
else
2020-10-19 11:33:36 +02:00
2021-05-26 15:16:30 +02:00
flash . now . alert = " Mise à jour impossible : le jeton n’ est pas valide "
2020-10-19 11:33:36 +02:00
render 'jeton'
2020-04-27 14:58:12 +02:00
end
end
2020-09-08 12:35:44 +02:00
def publication
2021-06-24 11:57:05 +02:00
@procedure_lien = commencer_url ( path : @procedure . path )
@procedure_lien_test = commencer_test_url ( path : @procedure . path )
2020-09-08 12:35:44 +02:00
@procedure . path = @procedure . suggested_path ( current_administrateur )
@current_administrateur = current_administrateur
end
def publish
@procedure . assign_attributes ( publish_params )
2021-04-28 15:08:48 +02:00
if @procedure . draft_changed?
@procedure . publish_revision!
flash . notice = " Nouvelle version de la démarche publiée "
2020-09-08 12:35:44 +02:00
redirect_to admin_procedure_path ( @procedure )
2021-04-28 15:08:48 +02:00
elsif @procedure . publish_or_reopen! ( current_administrateur )
2020-09-08 12:35:44 +02:00
flash . notice = " Démarche publiée "
redirect_to admin_procedure_path ( @procedure )
2021-04-28 15:08:48 +02:00
else
2020-09-08 12:35:44 +02:00
flash . alert = @procedure . errors . full_messages
2021-04-28 15:08:48 +02:00
redirect_to admin_procedure_path ( @procedure )
2020-09-08 12:35:44 +02:00
end
end
2020-09-29 10:52:13 +02:00
def transfert
end
2020-09-30 18:22:06 +02:00
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 "
2021-04-16 11:11:39 +02:00
redirect_to admin_procedure_experts_path ( @procedure )
2020-09-30 18:22:06 +02:00
end
2020-09-08 12:35:44 +02:00
def transfer
admin = Administrateur . by_email ( params [ :email_admin ] . downcase )
if admin . nil?
2020-09-29 10:52:13 +02:00
redirect_to admin_procedure_transfert_path ( params [ :procedure_id ] )
2021-05-26 15:16:30 +02:00
flash . alert = " Envoi vers #{ params [ :email_admin ] } impossible : cet administrateur n’ existe pas "
2020-09-08 12:35:44 +02:00
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
2021-04-16 11:11:39 +02:00
def experts_require_administrateur_invitation
@procedure . update! ( experts_require_administrateur_invitation : ! @procedure . experts_require_administrateur_invitation )
flash . notice = @procedure . experts_require_administrateur_invitation? ? " Les experts sont gérés par les administrateurs de la démarche " : " Les experts sont gérés par les instructeurs "
redirect_to admin_procedure_experts_path ( @procedure )
end
2018-04-13 16:56:00 +02:00
private
2018-04-13 17:29:34 +02:00
def apercu_tab
params [ :tab ] || 'dossier'
end
2018-04-13 16:56:00 +02:00
def procedure_without_control
Procedure . find ( params [ :id ] )
end
2019-09-24 16:38:58 +02:00
def procedure_params
2021-11-11 10:55:09 +01:00
editable_params = [ :libelle , :description , :organisation , :direction , :lien_site_web , :cadre_juridique , :deliberation , :notice , :web_hook_url , :declarative_with_state , :logo , :auto_archive_on , :monavis_embed , :api_entreprise_token , :duree_conservation_dossiers_dans_ds ]
2019-09-24 16:38:58 +02:00
permited_params = if @procedure & . locked?
params . require ( :procedure ) . permit ( * editable_params )
else
2021-11-11 10:58:13 +01:00
params . require ( :procedure ) . permit ( * editable_params , :for_individual , :path )
2019-09-24 16:38:58 +02:00
end
2020-02-29 03:49:31 +01:00
if permited_params [ :auto_archive_on ] . present?
permited_params [ :auto_archive_on ] = Date . parse ( permited_params [ :auto_archive_on ] ) + 1 . day
end
2019-09-24 16:38:58 +02:00
permited_params
end
2020-09-08 12:35:44 +02:00
def publish_params
params . permit ( :path , :lien_site_web )
end
2021-02-11 20:19:15 +01:00
def allow_decision_access_params
params . require ( :experts_procedure ) . permit ( :allow_decision_access )
end
2021-09-01 00:20:32 +02:00
def cloned_from_library?
params [ :from_new_from_existing ] . present?
end
2018-04-13 16:56:00 +02:00
end
end