feat(dossier): use select in filters bygroupe instructeur
This commit is contained in:
parent
dc222dc6be
commit
44488c7014
6 changed files with 40 additions and 10 deletions
|
@ -18,6 +18,6 @@ class Dossiers::FilterComponent < ApplicationComponent
|
||||||
end
|
end
|
||||||
|
|
||||||
def options_for_select_of_field
|
def options_for_select_of_field
|
||||||
I18n.t(procedure_presentation.field_enum(field_id)).map(&:to_a).map(&:reverse)
|
procedure_presentation.field_enum(field_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -60,7 +60,7 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
fields.push(
|
fields.push(
|
||||||
field_hash('user', 'email', type: :text),
|
field_hash('user', 'email', type: :text),
|
||||||
field_hash('followers_instructeurs', 'email', type: :text),
|
field_hash('followers_instructeurs', 'email', type: :text),
|
||||||
field_hash('groupe_instructeur', 'label', type: :text)
|
field_hash('groupe_instructeur', 'id', type: :enum)
|
||||||
)
|
)
|
||||||
|
|
||||||
if procedure.for_individual
|
if procedure.for_individual
|
||||||
|
@ -214,9 +214,16 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
.includes(table)
|
.includes(table)
|
||||||
.filter_ilike(table, column, values)
|
.filter_ilike(table, column, values)
|
||||||
when 'groupe_instructeur'
|
when 'groupe_instructeur'
|
||||||
|
assert_supported_column(table, column)
|
||||||
|
if column == 'label'
|
||||||
dossiers
|
dossiers
|
||||||
.joins(:groupe_instructeur)
|
.joins(:groupe_instructeur)
|
||||||
.filter_ilike(table, column, values)
|
.filter_ilike(table, column, values)
|
||||||
|
else
|
||||||
|
dossiers
|
||||||
|
.joins(:groupe_instructeur)
|
||||||
|
.where(groupe_instructeur_id: values)
|
||||||
|
end
|
||||||
end.pluck(:id)
|
end.pluck(:id)
|
||||||
end.reduce(:&)
|
end.reduce(:&)
|
||||||
end
|
end
|
||||||
|
@ -237,6 +244,9 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
find_type_de_champ(filter[COLUMN]).dynamic_type.filter_to_human(filter['value'])
|
find_type_de_champ(filter[COLUMN]).dynamic_type.filter_to_human(filter['value'])
|
||||||
elsif filter['column'] == 'state'
|
elsif filter['column'] == 'state'
|
||||||
Dossier.human_attribute_name("state.#{filter['value']}")
|
Dossier.human_attribute_name("state.#{filter['value']}")
|
||||||
|
elsif filter['table'] == 'groupe_instructeur' && filter['column'] == 'id'
|
||||||
|
instructeur.groupe_instructeurs
|
||||||
|
.find { _1.id == filter['value'].to_i }&.label || "Groupe Instucteur #{filter['value']}"
|
||||||
else
|
else
|
||||||
filter['value']
|
filter['value']
|
||||||
end
|
end
|
||||||
|
@ -316,7 +326,13 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def field_enum(field_id)
|
def field_enum(field_id)
|
||||||
find_field(*field_id.split(SLASH))['scope']
|
field = find_field(*field_id.split(SLASH))
|
||||||
|
if field['scope'].present?
|
||||||
|
I18n.t(field['scope']).map(&:to_a).map(&:reverse)
|
||||||
|
elsif field['table'] == 'groupe_instructeur'
|
||||||
|
instructeur.groupe_instructeurs
|
||||||
|
.map { [_1.label, _1.id] }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -424,5 +440,8 @@ class ProcedurePresentation < ApplicationRecord
|
||||||
if table == 'followers_instructeurs' && column != 'email'
|
if table == 'followers_instructeurs' && column != 'email'
|
||||||
raise ArgumentError, 'Table `followers_instructeurs` only supports the `email` column.'
|
raise ArgumentError, 'Table `followers_instructeurs` only supports the `email` column.'
|
||||||
end
|
end
|
||||||
|
if table == 'groupe_instructeur' && (column != 'label' && column != 'id')
|
||||||
|
raise ArgumentError, 'Table `groupe_instructeur` only supports the `label` or `id` column.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,6 +22,7 @@ en:
|
||||||
followers_instructeurs:
|
followers_instructeurs:
|
||||||
email: Email instructeur
|
email: Email instructeur
|
||||||
groupe_instructeur:
|
groupe_instructeur:
|
||||||
|
id: Team
|
||||||
label: Team
|
label: Team
|
||||||
individual:
|
individual:
|
||||||
prenom: First name
|
prenom: First name
|
||||||
|
|
|
@ -22,6 +22,7 @@ fr:
|
||||||
followers_instructeurs:
|
followers_instructeurs:
|
||||||
email: Email instructeur
|
email: Email instructeur
|
||||||
groupe_instructeur:
|
groupe_instructeur:
|
||||||
|
id: Groupe instructeur
|
||||||
label: Groupe instructeur
|
label: Groupe instructeur
|
||||||
individual:
|
individual:
|
||||||
prenom: Prénom
|
prenom: Prénom
|
||||||
|
|
|
@ -72,7 +72,7 @@ describe ProcedurePresentation do
|
||||||
{ "label" => "Statut", "table" => "self", "column" => "state", "classname" => "", 'virtual' => true, 'scope' => 'instructeurs.dossiers.filterable_state', 'type' => :enum },
|
{ "label" => "Statut", "table" => "self", "column" => "state", "classname" => "", 'virtual' => true, 'scope' => 'instructeurs.dossiers.filterable_state', 'type' => :enum },
|
||||||
{ "label" => 'Demandeur', "table" => 'user', "column" => 'email', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'Demandeur', "table" => 'user', "column" => 'email', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
||||||
{ "label" => 'Email instructeur', "table" => 'followers_instructeurs', "column" => 'email', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'Email instructeur', "table" => 'followers_instructeurs', "column" => 'email', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
||||||
{ "label" => 'Groupe instructeur', "table" => 'groupe_instructeur', "column" => 'label', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'Groupe instructeur', "table" => 'groupe_instructeur', "column" => 'id', 'classname' => '', 'virtual' => false, 'type' => :enum, "scope" => '' },
|
||||||
{ "label" => 'SIREN', "table" => 'etablissement', "column" => 'entreprise_siren', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'SIREN', "table" => 'etablissement', "column" => 'entreprise_siren', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
||||||
{ "label" => 'Forme juridique', "table" => 'etablissement', "column" => 'entreprise_forme_juridique', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'Forme juridique', "table" => 'etablissement', "column" => 'entreprise_forme_juridique', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
||||||
{ "label" => 'Nom commercial', "table" => 'etablissement', "column" => 'entreprise_nom_commercial', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
{ "label" => 'Nom commercial', "table" => 'etablissement', "column" => 'entreprise_nom_commercial', 'classname' => '', 'virtual' => false, 'type' => :text, "scope" => '' },
|
||||||
|
@ -739,7 +739,7 @@ describe ProcedurePresentation do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for groupe_instructeur table' do
|
context 'for groupe_instructeur table' do
|
||||||
let(:filter) { [{ 'table' => 'groupe_instructeur', 'column' => 'label', 'value' => 'défaut' }] }
|
let(:filter) { [{ 'table' => 'groupe_instructeur', 'column' => 'id', 'value' => procedure.defaut_groupe_instructeur.id.to_s }] }
|
||||||
|
|
||||||
let!(:gi_2) { procedure.groupe_instructeurs.create(label: 'gi2') }
|
let!(:gi_2) { procedure.groupe_instructeurs.create(label: 'gi2') }
|
||||||
let!(:gi_3) { procedure.groupe_instructeurs.create(label: 'gi3') }
|
let!(:gi_3) { procedure.groupe_instructeurs.create(label: 'gi3') }
|
||||||
|
@ -752,8 +752,8 @@ describe ProcedurePresentation do
|
||||||
context 'with multiple search values' do
|
context 'with multiple search values' do
|
||||||
let(:filter) do
|
let(:filter) do
|
||||||
[
|
[
|
||||||
{ 'table' => 'groupe_instructeur', 'column' => 'label', 'value' => 'défaut' },
|
{ 'table' => 'groupe_instructeur', 'column' => 'id', 'value' => procedure.defaut_groupe_instructeur.id.to_s },
|
||||||
{ 'table' => 'groupe_instructeur', 'column' => 'label', 'value' => 'gi3' }
|
{ 'table' => 'groupe_instructeur', 'column' => 'id', 'value' => gi_3.id.to_s }
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ describe "procedure filters" do
|
||||||
scenario "should be able to add and remove two filters for the same field", js: true do
|
scenario "should be able to add and remove two filters for the same field", js: true do
|
||||||
add_filter(type_de_champ.libelle, champ.value)
|
add_filter(type_de_champ.libelle, champ.value)
|
||||||
add_filter(type_de_champ.libelle, champ_2.value)
|
add_filter(type_de_champ.libelle, champ_2.value)
|
||||||
|
add_enum_filter('Groupe instructeur', procedure.groupe_instructeurs.first.label)
|
||||||
|
|
||||||
within ".dossiers-table" do
|
within ".dossiers-table" do
|
||||||
expect(page).to have_link(new_unfollow_dossier.id.to_s, exact: true)
|
expect(page).to have_link(new_unfollow_dossier.id.to_s, exact: true)
|
||||||
|
@ -138,6 +139,14 @@ describe "procedure filters" do
|
||||||
expect(page).to have_no_css("select#field", visible: true)
|
expect(page).to have_no_css("select#field", visible: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_enum_filter(column_name, filter_value)
|
||||||
|
click_on 'Sélectionner un filtre'
|
||||||
|
select column_name, from: "Colonne"
|
||||||
|
select filter_value, from: "Valeur"
|
||||||
|
click_button "Ajouter le filtre"
|
||||||
|
expect(page).to have_no_css("select#field", visible: true)
|
||||||
|
end
|
||||||
|
|
||||||
def add_column(column_name)
|
def add_column(column_name)
|
||||||
click_on 'Personnaliser'
|
click_on 'Personnaliser'
|
||||||
select_combobox('Colonne à afficher', column_name, column_name, check: false)
|
select_combobox('Colonne à afficher', column_name, column_name, check: false)
|
||||||
|
|
Loading…
Reference in a new issue