list all admins
This commit is contained in:
parent
3b2df47ba0
commit
c96781cfad
3 changed files with 137 additions and 58 deletions
|
@ -5,7 +5,7 @@ class ProceduresFilter
|
|||
|
||||
def initialize(admin, params)
|
||||
@admin = admin
|
||||
@params = params.permit(:page, :from_publication_date, zone_ids: [], statuses: [])
|
||||
@params = params.permit(:page, :from_publication_date, :view_admins, zone_ids: [], statuses: [])
|
||||
end
|
||||
|
||||
def admin_zones
|
||||
|
@ -36,6 +36,10 @@ class ProceduresFilter
|
|||
nil
|
||||
end
|
||||
|
||||
def view_admins?
|
||||
params[:view_admins] == 'true'
|
||||
end
|
||||
|
||||
def zone_filtered?(zone_id)
|
||||
zone_ids&.map(&:to_i)&.include?(zone_id)
|
||||
end
|
||||
|
@ -53,12 +57,32 @@ class ProceduresFilter
|
|||
end
|
||||
end
|
||||
|
||||
def with_view_admins(view_admins)
|
||||
params.to_h.merge(view_admins: view_admins)
|
||||
end
|
||||
|
||||
def procedures_result
|
||||
return @procedures_result if @procedures_result
|
||||
@procedures_result = Procedure.joins(:procedures_zones).publiees_ou_closes
|
||||
@procedures_result = @procedures_result.where(procedures_zones: { zone_id: zone_ids }) if zone_ids.present?
|
||||
@procedures_result = @procedures_result.where(aasm_state: statuses) if statuses.present?
|
||||
@procedures_result = @procedures_result.where('published_at >= ?', from_publication_date) if from_publication_date.present?
|
||||
@procedures_result = @procedures_result.page(params[:page]).per(ITEMS_PER_PAGE).order(published_at: :desc)
|
||||
@procedures_result = paginate(filter_procedures, published_at: :desc)
|
||||
end
|
||||
|
||||
def admins_result
|
||||
return @admins_result if @admins_result
|
||||
@admins_result = Administrateur.includes(:user).where(id: AdministrateursProcedure.where(procedure: filter_procedures).select(:administrateur_id))
|
||||
@admins_result = paginate(@admins_result, 'users.email')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def filter_procedures
|
||||
procedures_result = Procedure.joins(:procedures_zones).publiees_ou_closes
|
||||
procedures_result = procedures_result.where(procedures_zones: { zone_id: zone_ids }) if zone_ids.present?
|
||||
procedures_result = procedures_result.where(aasm_state: statuses) if statuses.present?
|
||||
procedures_result = procedures_result.where('published_at >= ?', from_publication_date) if from_publication_date.present?
|
||||
procedures_result
|
||||
end
|
||||
|
||||
def paginate(result, ordered_by)
|
||||
result.page(params[:page]).per(ITEMS_PER_PAGE).order(ordered_by)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -64,52 +64,96 @@
|
|||
= b.label(class: 'fr-label') { t b.text, scope: 'activerecord.attributes.procedure.aasm_state' }
|
||||
|
||||
.fr-col-9
|
||||
.main-filter-header.fr-my-3w
|
||||
.search
|
||||
= link_to 'Voir la liste des administeurs', '#', class: 'fr-btn fr-btn--secondary btn-admins'
|
||||
.fr-table.fr-table--bordered
|
||||
%table#all-demarches
|
||||
%caption
|
||||
= "#{@filter.procedures_result.total_count} démarches"
|
||||
%span.hidden.fr-icon-ball-pen-fill{ 'aria-hidden': 'true', 'data-autosubmit-target': 'spinner' }
|
||||
- if @filter.selected_zones.present?
|
||||
.selected-zones.fr-mb-2w
|
||||
- @filter.selected_zones.each do |zone|
|
||||
= link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.statuses.present?
|
||||
.selected-statuses.fr-mb-2w
|
||||
- @filter.statuses.each do |status|
|
||||
= link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.from_publication_date.present?
|
||||
.selected-from-publication-date.fr-mb-2w
|
||||
= link_to "Depuis le #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
= paginate @filter.procedures_result, views_prefix: 'administrateurs'
|
||||
%thead
|
||||
%tr
|
||||
%th{ scope: 'col' }
|
||||
%th{ scope: 'col' } Démarche
|
||||
%th{ scope: 'col' } N°
|
||||
%th{ scope: 'col' } Administrateurs
|
||||
%th{ scope: 'col' } Statut
|
||||
%th{ scope: 'col' } Date
|
||||
- @filter.procedures_result.each do |procedure|
|
||||
%tbody{ 'data-controller': 'expand' }
|
||||
%tr.procedure{ 'data-action': 'click->expand#toggle' }
|
||||
%td
|
||||
%button.fr-icon-add-line.fr-icon--sm.fr-mr-1w.fr-mb-1w.fr-text-action-high--blue-france{ 'aria-hidden': 'true', 'data-expand-target': 'icon' }
|
||||
%td= procedure.libelle
|
||||
%td= procedure.id
|
||||
%td= procedure.administrateurs.count
|
||||
%td= t procedure.aasm_state, scope: 'activerecord.attributes.procedure.aasm_state'
|
||||
%td= l(procedure.published_at, format: :message_date_without_time)
|
||||
%tr.hidden{ 'data-expand-target': 'content' }
|
||||
%td.fr-highlight--beige-gris-galet{ colspan: '6' }
|
||||
.fr-container
|
||||
.fr-grid-row
|
||||
.fr-col-6
|
||||
- procedure.zones.uniq.each do |zone|
|
||||
= zone.label_at(procedure.published_or_created_at)
|
||||
.fr-col-6
|
||||
- procedure.administrateurs.uniq.each do |admin|
|
||||
= admin.email
|
||||
.fr-mt-2w= paginate @filter.procedures_result, views_prefix: 'administrateurs'
|
||||
- if @filter.view_admins?
|
||||
.main-filter-header.fr-my-3w
|
||||
.search
|
||||
= link_to 'Voir la liste des démarches', all_admin_procedures_path(@filter.with_view_admins(false)), class: 'fr-btn fr-btn--secondary btn-admins'
|
||||
.fr-table.fr-table--bordered
|
||||
%table#all-admins
|
||||
%caption
|
||||
= "#{@filter.admins_result.total_count} administrateurs"
|
||||
%span.hidden.fr-icon-ball-pen-fill{ 'aria-hidden': 'true', 'data-autosubmit-target': 'spinner' }
|
||||
- if @filter.selected_zones.present?
|
||||
.selected-zones.fr-mb-2w
|
||||
- @filter.selected_zones.each do |zone|
|
||||
= link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.statuses.present?
|
||||
.selected-statuses.fr-mb-2w
|
||||
- @filter.statuses.each do |status|
|
||||
= link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.from_publication_date.present?
|
||||
.selected-from-publication-date.fr-mb-2w
|
||||
= link_to "Depuis le #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
= paginate @filter.admins_result, views_prefix: 'administrateurs'
|
||||
%thead
|
||||
%tr
|
||||
%th{ scope: 'col' }
|
||||
%th{ scope: 'col' } Administrateurs
|
||||
%th{ scope: 'col' } Nb démarches
|
||||
%th{ scope: 'col' } Inscrit le
|
||||
- @filter.admins_result.each do |admin|
|
||||
%tbody{ 'data-controller': 'expand' }
|
||||
%tr.procedure{ 'data-action': 'click->expand#toggle' }
|
||||
%td
|
||||
%button.fr-icon-add-line.fr-icon--sm.fr-mr-1w.fr-mb-1w.fr-text-action-high--blue-france{ 'aria-hidden': 'true', 'data-expand-target': 'icon' }
|
||||
%td= admin.email
|
||||
%td= admin.procedures.count
|
||||
%td= l(admin.created_at, format: :message_date_without_time)
|
||||
%tr.hidden{ 'data-expand-target': 'content' }
|
||||
%td.fr-highlight--beige-gris-galet{ colspan: '6' }
|
||||
.fr-container
|
||||
.fr-col-12.fr-mr-1w
|
||||
%ul
|
||||
- admin.procedures.each do |procedure|
|
||||
%li= procedure.libelle
|
||||
.fr-mt-2w= paginate @filter.admins_result, views_prefix: 'administrateurs'
|
||||
- else
|
||||
.main-filter-header.fr-my-3w
|
||||
.search
|
||||
= link_to 'Voir la liste des administrateurs', all_admin_procedures_path(@filter.with_view_admins(true)), class: 'fr-btn fr-btn--secondary btn-admins'
|
||||
.fr-table.fr-table--bordered
|
||||
%table#all-demarches
|
||||
%caption
|
||||
= "#{@filter.procedures_result.total_count} démarches"
|
||||
%span.hidden.fr-icon-ball-pen-fill{ 'aria-hidden': 'true', 'data-autosubmit-target': 'spinner' }
|
||||
- if @filter.selected_zones.present?
|
||||
.selected-zones.fr-mb-2w
|
||||
- @filter.selected_zones.each do |zone|
|
||||
= link_to zone.current_label, all_admin_procedures_path(@filter.without(:zone_ids, zone.id)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.statuses.present?
|
||||
.selected-statuses.fr-mb-2w
|
||||
- @filter.statuses.each do |status|
|
||||
= link_to status, all_admin_procedures_path(@filter.without(:statuses, status)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
- if @filter.from_publication_date.present?
|
||||
.selected-from-publication-date.fr-mb-2w
|
||||
= link_to "Depuis #{l(@filter.from_publication_date)}", all_admin_procedures_path(@filter.without(:from_publication_date)), class: 'fr-tag fr-tag--dismiss fr-mb-1w'
|
||||
= paginate @filter.procedures_result, views_prefix: 'administrateurs'
|
||||
%thead
|
||||
%tr
|
||||
%th{ scope: 'col' }
|
||||
%th{ scope: 'col' } Démarche
|
||||
%th{ scope: 'col' } N°
|
||||
%th{ scope: 'col' } Administrateurs
|
||||
%th{ scope: 'col' } Statut
|
||||
%th{ scope: 'col' } Date
|
||||
- @filter.procedures_result.each do |procedure|
|
||||
%tbody{ 'data-controller': 'expand' }
|
||||
%tr.procedure{ 'data-action': 'click->expand#toggle' }
|
||||
%td
|
||||
%button.fr-icon-add-line.fr-icon--sm.fr-mr-1w.fr-mb-1w.fr-text-action-high--blue-france{ 'aria-hidden': 'true', 'data-expand-target': 'icon' }
|
||||
%td= procedure.libelle
|
||||
%td= procedure.id
|
||||
%td= procedure.administrateurs.count
|
||||
%td= t procedure.aasm_state, scope: 'activerecord.attributes.procedure.aasm_state'
|
||||
%td= l(procedure.published_at, format: :message_date_without_time)
|
||||
%tr.hidden{ 'data-expand-target': 'content' }
|
||||
%td.fr-highlight--beige-gris-galet{ colspan: '6' }
|
||||
.fr-container
|
||||
.fr-grid-row
|
||||
.fr-col-6
|
||||
- procedure.zones.uniq.each do |zone|
|
||||
= zone.label_at(procedure.published_or_created_at)
|
||||
.fr-col-6
|
||||
- procedure.administrateurs.uniq.each do |admin|
|
||||
= admin.email
|
||||
.fr-mt-2w= paginate @filter.procedures_result, views_prefix: 'administrateurs'
|
||||
|
|
|
@ -5,15 +5,26 @@ describe ProceduresFilter do
|
|||
|
||||
context 'without filter' do
|
||||
let(:filters) { {} }
|
||||
let!(:draft_procedure) { create(:procedure) }
|
||||
let!(:published_procedure) { create(:procedure_with_dossiers, :published, dossiers_count: 2) }
|
||||
let!(:closed_procedure) { create(:procedure, :closed) }
|
||||
let!(:draft_procedure) { create(:procedure, administrateur: admin3) }
|
||||
let!(:published_procedure) { create(:procedure_with_dossiers, :published, dossiers_count: 2, administrateur: admin1) }
|
||||
let!(:closed_procedure) { create(:procedure, :closed, administrateur: admin2) }
|
||||
let(:admin1) { create(:administrateur) }
|
||||
let(:admin2) { create(:administrateur) }
|
||||
let(:admin3) { create(:administrateur) }
|
||||
|
||||
it 'returns only published and closed procedures' do
|
||||
expect(subject.procedures_result).to include(published_procedure)
|
||||
expect(subject.procedures_result).to include(closed_procedure)
|
||||
expect(subject.procedures_result).not_to include(draft_procedure)
|
||||
end
|
||||
|
||||
context 'with view_admins param' do
|
||||
it 'returns admins of the procedures' do
|
||||
expect(subject.admins_result).to include(admin1)
|
||||
expect(subject.admins_result).to include(admin2)
|
||||
expect(subject.admins_result).not_to include(admin3)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with zone filter' do
|
||||
|
|
Loading…
Reference in a new issue