diff --git a/app/components/procedure/groupes_management_component.rb b/app/components/procedure/groupes_management_component.rb new file mode 100644 index 000000000..48f051f20 --- /dev/null +++ b/app/components/procedure/groupes_management_component.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +class Procedure::GroupesManagementComponent < ApplicationComponent + def initialize(procedure:, groupe_instructeurs:, query:) + @procedure = procedure + @groupe_instructeurs = groupe_instructeurs + @query = query + @total = groupe_instructeurs.total_count + end + + def table_header + if @query.present? + if @groupe_instructeurs.length != @total + "#{t('.groupe', count: @groupe_instructeurs.length)} sur #{@total} #{t('.found', count: @total)}" + else + "#{t('.groupe', count: @groupe_instructeurs.length)} #{t('.found', count: @groupe_instructeurs.length)}" + end + else + if @groupe_instructeurs.length != @total + "#{t('.groupe', count: @groupe_instructeurs.length)} sur #{@total}" + else + t('.groupe', count: @groupe_instructeurs.length) + end + end + end +end diff --git a/app/components/procedure/groupes_management_component/groupes_management_component.fr.yml b/app/components/procedure/groupes_management_component/groupes_management_component.fr.yml new file mode 100644 index 000000000..3230cd0a9 --- /dev/null +++ b/app/components/procedure/groupes_management_component/groupes_management_component.fr.yml @@ -0,0 +1,8 @@ +--- +fr: + groupe: + one: "%{count} groupe" + other: "%{count} groupes" + found: + one: "trouvé" + other: "trouvés" diff --git a/app/components/procedure/groupes_management_component/groupes_management_component.html.haml b/app/components/procedure/groupes_management_component/groupes_management_component.html.haml new file mode 100644 index 000000000..d98152d1d --- /dev/null +++ b/app/components/procedure/groupes_management_component/groupes_management_component.html.haml @@ -0,0 +1,40 @@ +- content_for(:title, 'Groupes') +%h1 Gestion des groupes + += render Procedure::GroupesSearchComponent.new(procedure: @procedure, query: @query, to_configure_count: @procedure.groupe_instructeurs.filter(&:routing_to_configure?).count) + +.fr-table.fr-table--no-caption.fr-table--layout-fixed.fr-mt-2w + %table + %caption= table_header + %thead + %tr + %th{ scope: "col" } + .flex + .flex.auto= table_header + %span.fr-icon.fr-icon-user-line + %tbody + - @groupe_instructeurs.each do |gi| + %tr + %td + .flex + .flex.auto + = link_to admin_procedure_groupe_instructeur_path(@procedure, gi), class: 'fr-link' do + %span= gi.label + - if gi.closed + %p.fr-badge.fr-badge--info.fr-badge--sm.fr-ml-1w inactif + - elsif gi.routing_to_configure? + %p.fr-badge.fr-badge--warning.fr-badge--sm.fr-ml-1w à configurer + + %div{ style: 'width: 25px; text-align: center;' } + #{gi.instructeurs.count} + %p= gi.routing_rule&.to_s(@procedure.active_revision.types_de_champ) + .fr-mt-1w + = paginate @groupe_instructeurs + += form_tag admin_procedure_update_defaut_groupe_instructeur_path, + class: 'fr-my-3w', + data: { controller: 'autosave' } do + = label_tag :defaut_groupe_instructeur_id, 'Et si aucune règle ne correspond, router vers :', class: 'fr-label' + = select_tag :defaut_groupe_instructeur_id, + options_for_select(@procedure.groupe_instructeurs.pluck(:label, :id), selected: @procedure.defaut_groupe_instructeur.id), + class: 'fr-select' diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index 95d06694f..472935dbf 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -86,6 +86,11 @@ class GroupeInstructeur < ApplicationRecord dossiers.empty? && (procedure.groupe_instructeurs.active.many? || (procedure.groupe_instructeurs.active.one? && closed)) end + def routing_to_configure? + rule = routing_rule + !(rule.is_a?(Logic::Eq) && rule.left.is_a?(Logic::ChampValue) && rule.right.is_a?(Logic::Constant)) + end + private def toggle_routing diff --git a/app/views/administrateurs/groupe_instructeurs/index.html.haml b/app/views/administrateurs/groupe_instructeurs/index.html.haml index edf0cd685..584bf15a2 100644 --- a/app/views/administrateurs/groupe_instructeurs/index.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/index.html.haml @@ -10,3 +10,5 @@ instructeurs: @instructeurs, available_instructeur_emails: @available_instructeur_emails, disabled_as_super_admin: administrateur_as_manager?) + - else + = render Procedure::GroupesManagementComponent.new(procedure: @procedure, groupe_instructeurs: @groupes_instructeurs, query: params[:q])