display a select for input of choice type in instructeur filter
This commit is contained in:
parent
da62a5ec79
commit
cde8c614e6
9 changed files with 65 additions and 7 deletions
|
@ -57,6 +57,7 @@ class Champ < ApplicationRecord
|
||||||
:refresh_after_update?,
|
:refresh_after_update?,
|
||||||
:character_limit?,
|
:character_limit?,
|
||||||
:character_limit,
|
:character_limit,
|
||||||
|
:yes_no?,
|
||||||
to: :type_de_champ
|
to: :type_de_champ
|
||||||
|
|
||||||
delegate :to_typed_id, :to_typed_id_for_query, to: :type_de_champ, prefix: true
|
delegate :to_typed_id, :to_typed_id_for_query, to: :type_de_champ, prefix: true
|
||||||
|
|
|
@ -11,6 +11,10 @@ class Champs::CheckboxChamp < Champs::BooleanChamp
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.options
|
||||||
|
[[I18n.t('activerecord.attributes.type_de_champ.type_champs.checkbox_true'), true], [I18n.t('activerecord.attributes.type_de_champ.type_champs.checkbox_false'), false]]
|
||||||
|
end
|
||||||
|
|
||||||
# TODO remove when normalize_checkbox_values is over
|
# TODO remove when normalize_checkbox_values is over
|
||||||
def true?
|
def true?
|
||||||
value_with_legacy == TRUE_VALUE
|
value_with_legacy == TRUE_VALUE
|
||||||
|
|
|
@ -18,4 +18,8 @@ class Champs::YesNoChamp < Champs::BooleanChamp
|
||||||
def focusable_input_id
|
def focusable_input_id
|
||||||
yes_input_id
|
yes_input_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.options
|
||||||
|
[[I18n.t('activerecord.attributes.type_de_champ.type_champs.yes_no_true'), true], [I18n.t('activerecord.attributes.type_de_champ.type_champs.yes_no_false'), false]]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -296,6 +296,20 @@ class TypeDeChamp < ApplicationRecord
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def choice_type?
|
||||||
|
type_champ.in?([
|
||||||
|
TypeDeChamp.type_champs.fetch(:checkbox),
|
||||||
|
TypeDeChamp.type_champs.fetch(:drop_down_list),
|
||||||
|
TypeDeChamp.type_champs.fetch(:multiple_drop_down_list),
|
||||||
|
TypeDeChamp.type_champs.fetch(:linked_drop_down_list),
|
||||||
|
TypeDeChamp.type_champs.fetch(:yes_no)
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.is_choice_type_from(type_champ)
|
||||||
|
TYPE_DE_CHAMP_TO_CATEGORIE[type_champ.to_sym] == CHOICE
|
||||||
|
end
|
||||||
|
|
||||||
def drop_down_list?
|
def drop_down_list?
|
||||||
type_champ.in?([
|
type_champ.in?([
|
||||||
TypeDeChamp.type_champs.fetch(:drop_down_list),
|
TypeDeChamp.type_champs.fetch(:drop_down_list),
|
||||||
|
@ -312,6 +326,10 @@ class TypeDeChamp < ApplicationRecord
|
||||||
type_champ == TypeDeChamp.type_champs.fetch(:linked_drop_down_list)
|
type_champ == TypeDeChamp.type_champs.fetch(:linked_drop_down_list)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def yes_no?
|
||||||
|
type_champ == TypeDeChamp.type_champs.fetch(:yes_no)
|
||||||
|
end
|
||||||
|
|
||||||
def block?
|
def block?
|
||||||
type_champ == TypeDeChamp.type_champs.fetch(:repetition)
|
type_champ == TypeDeChamp.type_champs.fetch(:repetition)
|
||||||
end
|
end
|
||||||
|
@ -462,7 +480,7 @@ class TypeDeChamp < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.filter_hash_type(type_champ)
|
def self.filter_hash_type(type_champ)
|
||||||
if type_champ.in?([TypeDeChamp.type_champs.fetch(:departements), TypeDeChamp.type_champs.fetch(:regions)])
|
if type_champ.in?([TypeDeChamp.type_champs.fetch(:departements), TypeDeChamp.type_champs.fetch(:regions)]) || is_choice_type_from(type_champ)
|
||||||
:enum
|
:enum
|
||||||
else
|
else
|
||||||
:text
|
:text
|
||||||
|
@ -482,6 +500,14 @@ class TypeDeChamp < ApplicationRecord
|
||||||
APIGeoService.departements.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] }
|
APIGeoService.departements.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] }
|
||||||
elsif region?
|
elsif region?
|
||||||
APIGeoService.regions.map { [_1[:name], _1[:code]] }
|
APIGeoService.regions.map { [_1[:name], _1[:code]] }
|
||||||
|
elsif choice_type?
|
||||||
|
if drop_down_list_options?
|
||||||
|
options[:drop_down_options]
|
||||||
|
elsif yes_no?
|
||||||
|
Champs::YesNoChamp.options
|
||||||
|
elsif checkbox?
|
||||||
|
Champs::CheckboxChamp.options
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,11 @@
|
||||||
class TypesDeChamp::CheckboxTypeDeChamp < TypesDeChamp::TypeDeChampBase
|
class TypesDeChamp::CheckboxTypeDeChamp < TypesDeChamp::TypeDeChampBase
|
||||||
|
def filter_to_human(filter_value)
|
||||||
|
if filter_value == "true"
|
||||||
|
I18n.t('activerecord.attributes.type_de_champ.type_champs.checkbox_true')
|
||||||
|
elsif filter_value == "false"
|
||||||
|
I18n.t('activerecord.attributes.type_de_champ.type_champs.checkbox_false')
|
||||||
|
else
|
||||||
|
filter_value
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
class TypesDeChamp::YesNoTypeDeChamp < TypesDeChamp::CheckboxTypeDeChamp
|
class TypesDeChamp::YesNoTypeDeChamp < TypesDeChamp::CheckboxTypeDeChamp
|
||||||
def filter_to_human(filter_value)
|
def filter_to_human(filter_value)
|
||||||
if filter_value == "true"
|
if filter_value == "true"
|
||||||
"oui"
|
I18n.t('activerecord.attributes.type_de_champ.type_champs.yes_no_true')
|
||||||
elsif filter_value == "false"
|
elsif filter_value == "false"
|
||||||
"non"
|
I18n.t('activerecord.attributes.type_de_champ.type_champs.yes_no_false')
|
||||||
else
|
else
|
||||||
filter_value
|
filter_value
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,10 +38,14 @@ en:
|
||||||
piece_justificative: 'Supporting document'
|
piece_justificative: 'Supporting document'
|
||||||
titre_identite: 'Identity title'
|
titre_identite: 'Identity title'
|
||||||
checkbox: 'Checkbox'
|
checkbox: 'Checkbox'
|
||||||
|
checkbox_true: 'checked'
|
||||||
|
checkbox_false: 'not checked'
|
||||||
drop_down_list: 'Dropdown list'
|
drop_down_list: 'Dropdown list'
|
||||||
multiple_drop_down_list: 'Multiple dropdown list'
|
multiple_drop_down_list: 'Multiple dropdown list'
|
||||||
linked_drop_down_list: 'Linked dropdown list'
|
linked_drop_down_list: 'Linked dropdown list'
|
||||||
yes_no: 'Yes/No'
|
yes_no: 'Yes/No'
|
||||||
|
yes_no_true: 'yes'
|
||||||
|
yes_no_false: 'no'
|
||||||
annuaire_education: 'Schooling directory'
|
annuaire_education: 'Schooling directory'
|
||||||
rna: 'RNA'
|
rna: 'RNA'
|
||||||
carte: 'Card'
|
carte: 'Card'
|
||||||
|
@ -56,5 +60,3 @@ en:
|
||||||
attributes:
|
attributes:
|
||||||
header_section_level:
|
header_section_level:
|
||||||
gap_error: "An header section with %{level} is missing."
|
gap_error: "An header section with %{level} is missing."
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,10 +38,14 @@ fr:
|
||||||
piece_justificative: 'Pièce justificative'
|
piece_justificative: 'Pièce justificative'
|
||||||
titre_identite: 'Titre identité'
|
titre_identite: 'Titre identité'
|
||||||
checkbox: 'Case à cocher seule'
|
checkbox: 'Case à cocher seule'
|
||||||
|
checkbox_true: 'coché'
|
||||||
|
checkbox_false: 'non coché'
|
||||||
drop_down_list: 'Choix simple'
|
drop_down_list: 'Choix simple'
|
||||||
multiple_drop_down_list: 'Choix multiple'
|
multiple_drop_down_list: 'Choix multiple'
|
||||||
linked_drop_down_list: 'Deux menus déroulants liés'
|
linked_drop_down_list: 'Deux menus déroulants liés'
|
||||||
yes_no: 'Oui/Non'
|
yes_no: 'Oui/Non'
|
||||||
|
yes_no_true: 'oui'
|
||||||
|
yes_no_false: 'non'
|
||||||
annuaire_education: 'Annuaire de l’éducation'
|
annuaire_education: 'Annuaire de l’éducation'
|
||||||
rna: 'RNA'
|
rna: 'RNA'
|
||||||
carte: 'Carte'
|
carte: 'Carte'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
describe "procedure filters" do
|
describe "procedure filters" do
|
||||||
let(:instructeur) { create(:instructeur) }
|
let(:instructeur) { create(:instructeur) }
|
||||||
let(:procedure) { create(:procedure, :published, :with_type_de_champ, :with_departement, :with_region, instructeurs: [instructeur]) }
|
let(:procedure) { create(:procedure, :published, :with_type_de_champ, :with_departement, :with_region, :with_drop_down_list, instructeurs: [instructeur]) }
|
||||||
let!(:type_de_champ) { procedure.active_revision.types_de_champ_public.first }
|
let!(:type_de_champ) { procedure.active_revision.types_de_champ_public.first }
|
||||||
let!(:new_unfollow_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) }
|
let!(:new_unfollow_dossier) { create(:dossier, procedure: procedure, state: Dossier.states.fetch(:en_instruction)) }
|
||||||
let!(:champ) { Champ.find_by(type_de_champ_id: type_de_champ.id, dossier_id: new_unfollow_dossier.id) }
|
let!(:champ) { Champ.find_by(type_de_champ_id: type_de_champ.id, dossier_id: new_unfollow_dossier.id) }
|
||||||
|
@ -95,12 +95,20 @@ describe "procedure filters" do
|
||||||
click_button "Ajouter le filtre"
|
click_button "Ajouter le filtre"
|
||||||
expect(page).to have_no_css("select#field", visible: true)
|
expect(page).to have_no_css("select#field", visible: true)
|
||||||
|
|
||||||
# use enum filter
|
# use statut dropdown filter
|
||||||
click_on 'Sélectionner un filtre'
|
click_on 'Sélectionner un filtre'
|
||||||
select "Statut", from: "Colonne"
|
select "Statut", from: "Colonne"
|
||||||
find("select#value", visible: false)
|
find("select#value", visible: false)
|
||||||
select 'En construction', from: "Valeur"
|
select 'En construction', from: "Valeur"
|
||||||
click_button "Ajouter le filtre"
|
click_button "Ajouter le filtre"
|
||||||
|
expect(page).to have_no_css("select#field", visible: true)
|
||||||
|
|
||||||
|
# use choice dropdown filter
|
||||||
|
click_on 'Sélectionner un filtre'
|
||||||
|
select "Choix unique", from: "Colonne"
|
||||||
|
find("select#value", visible: false)
|
||||||
|
select 'val1', from: "Valeur"
|
||||||
|
click_button "Ajouter le filtre"
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'with a vcr cached cassette' do
|
describe 'with a vcr cached cassette' do
|
||||||
|
|
Loading…
Add table
Reference in a new issue