fix(dossier): fix projected value on linked_drop_down_list

This commit is contained in:
Paul Chavard 2024-05-13 15:03:28 +02:00
parent 4f69b35ee2
commit f766a6fb5e
2 changed files with 9 additions and 8 deletions

View file

@ -687,7 +687,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value(type_champ, champ)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?)
if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_value
else
dynamic_type_class.champ_value(champ)
@ -697,7 +697,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_api(type_champ, champ, version = 2)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?)
if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_api_value(version)
else
dynamic_type_class.champ_value_for_api(champ, version)
@ -707,7 +707,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_export(type_champ, champ, path = :value)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?)
if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_export_value(path)
else
dynamic_type_class.champ_value_for_export(champ, path)
@ -717,7 +717,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_tag(type_champ, champ, path = :value)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?)
if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
''
else
dynamic_type_class.champ_value_for_tag(champ, path)

View file

@ -3,23 +3,24 @@ describe DossierProjectionService do
subject { described_class.project(dossiers_ids, fields) }
context 'with multiple dossier' do
let!(:procedure) { create(:procedure, :with_type_de_champ) }
let!(:procedure) { create(:procedure, types_de_champ_public: [{}, { type: :linked_drop_down_list }]) }
let!(:dossier_1) { create(:dossier, procedure: procedure) }
let!(:dossier_2) { create(:dossier, :en_construction, :archived, procedure: procedure) }
let!(:dossier_3) { create(:dossier, :en_instruction, procedure: procedure) }
let(:dossiers_ids) { [dossier_3.id, dossier_1.id, dossier_2.id] }
let(:fields) do
[
procedure.active_revision.types_de_champ_public.map do |type_de_champ|
{
"table" => "type_de_champ",
"column" => procedure.active_revision.types_de_champ_public[0].stable_id.to_s
"column" => type_de_champ.stable_id.to_s
}
]
end
end
before do
dossier_1.champs_public.first.update(value: 'champ_1')
dossier_1.champs_public.second.update(value: '["test"]')
dossier_2.champs_public.first.update(value: 'champ_2')
dossier_3.champs_public.first.destroy
end