refactor(dossier): create only fillable champs on new dossiers
This commit is contained in:
parent
7ee90b6d85
commit
5f10486a51
3 changed files with 35 additions and 48 deletions
|
@ -1058,13 +1058,13 @@ class Dossier < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_default_champs_for(types_de_champ)
|
def build_default_champs_for(types_de_champ)
|
||||||
self.champs << types_de_champ.flat_map do |type_de_champ|
|
self.champs << types_de_champ.filter(&:fillable?).filter_map do |type_de_champ|
|
||||||
champ = type_de_champ.build_champ(dossier: self)
|
if type_de_champ.repetition?
|
||||||
if type_de_champ.repetition? && (type_de_champ.private? || type_de_champ.mandatory?)
|
if type_de_champ.private? || type_de_champ.mandatory?
|
||||||
row_id = ULID.generate
|
type_de_champ.build_champ(dossier: self, row_id: ULID.generate)
|
||||||
[champ] + revision.children_of(type_de_champ).map { _1.build_champ(dossier: self, row_id:) }
|
end
|
||||||
else
|
else
|
||||||
champ
|
type_de_champ.build_champ(dossier: self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -94,14 +94,6 @@ FactoryBot.define do
|
||||||
external_id { '200071991' }
|
external_id { '200071991' }
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :champ_do_not_use_header_section, class: 'Champs::HeaderSectionChamp' do
|
|
||||||
value { 'une section' }
|
|
||||||
end
|
|
||||||
|
|
||||||
factory :champ_do_not_use_explication, class: 'Champs::ExplicationChamp' do
|
|
||||||
value { '' }
|
|
||||||
end
|
|
||||||
|
|
||||||
factory :champ_do_not_use_dossier_link, class: 'Champs::DossierLinkChamp' do
|
factory :champ_do_not_use_dossier_link, class: 'Champs::DossierLinkChamp' do
|
||||||
value { create(:dossier, :en_construction).id }
|
value { create(:dossier, :en_construction).id }
|
||||||
end
|
end
|
||||||
|
@ -188,25 +180,5 @@ FactoryBot.define do
|
||||||
|
|
||||||
factory :champ_do_not_use_expression_reguliere, class: 'Champs::ExpressionReguliereChamp' do
|
factory :champ_do_not_use_expression_reguliere, class: 'Champs::ExpressionReguliereChamp' do
|
||||||
end
|
end
|
||||||
|
|
||||||
factory :champ_do_not_use_repetition, class: 'Champs::RepetitionChamp' do
|
|
||||||
transient do
|
|
||||||
rows { 2 }
|
|
||||||
end
|
|
||||||
|
|
||||||
after(:build) do |champ_repetition, evaluator|
|
|
||||||
revision = champ_repetition.procedure.active_revision
|
|
||||||
parent = revision.revision_types_de_champ.find { _1.type_de_champ == champ_repetition.type_de_champ }
|
|
||||||
types_de_champ = revision.revision_types_de_champ.filter { _1.parent == parent }.map(&:type_de_champ)
|
|
||||||
|
|
||||||
evaluator.rows.times do
|
|
||||||
row_id = ULID.generate
|
|
||||||
champ_repetition.dossier.champs << types_de_champ.map do |type_de_champ|
|
|
||||||
attrs = { dossier: champ_repetition.dossier, private: champ_repetition.private?, stable_id: type_de_champ.stable_id, row_id: }
|
|
||||||
build(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,25 +24,13 @@ FactoryBot.define do
|
||||||
after(:create) do |dossier, evaluator|
|
after(:create) do |dossier, evaluator|
|
||||||
if evaluator.populate_champs
|
if evaluator.populate_champs
|
||||||
dossier.revision.types_de_champ_public.each do |type_de_champ|
|
dossier.revision.types_de_champ_public.each do |type_de_champ|
|
||||||
value = if type_de_champ.drop_down_list?
|
dossier_factory_create_champ_or_repetition(type_de_champ, dossier)
|
||||||
type_de_champ.drop_down_options.first
|
|
||||||
elsif type_de_champ.multiple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first(2).to_json
|
|
||||||
end
|
|
||||||
attrs = { stable_id: type_de_champ.stable_id, dossier:, value: }.compact
|
|
||||||
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if evaluator.populate_annotations
|
if evaluator.populate_annotations
|
||||||
dossier.revision.types_de_champ_private.each do |type_de_champ|
|
dossier.revision.types_de_champ_private.each do |type_de_champ|
|
||||||
value = if type_de_champ.drop_down_list?
|
dossier_factory_create_champ_or_repetition(type_de_champ, dossier)
|
||||||
type_de_champ.drop_down_options.first
|
|
||||||
elsif type_de_champ.multiple_drop_down_list?
|
|
||||||
type_de_champ.drop_down_options.first(2).to_json
|
|
||||||
end
|
|
||||||
attrs = { stable_id: type_de_champ.stable_id, dossier:, private: true, value: }.compact
|
|
||||||
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -301,3 +289,30 @@ FactoryBot.define do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dossier_factory_create_champ_or_repetition(type_de_champ, dossier)
|
||||||
|
if type_de_champ.repetition?
|
||||||
|
types_de_champ = dossier.revision.children_of(type_de_champ)
|
||||||
|
2.times do
|
||||||
|
row_id = ULID.generate
|
||||||
|
type_de_champ.build_champ(dossier:, row_id:).save!
|
||||||
|
types_de_champ.each do |type_de_champ|
|
||||||
|
dossier_factory_create_champ(type_de_champ, dossier, row_id:)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
dossier_factory_create_champ(type_de_champ, dossier)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def dossier_factory_create_champ(type_de_champ, dossier, row_id: nil)
|
||||||
|
return unless type_de_champ.fillable?
|
||||||
|
|
||||||
|
value = if type_de_champ.drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first
|
||||||
|
elsif type_de_champ.multiple_drop_down_list?
|
||||||
|
type_de_champ.drop_down_options.first(2).to_json
|
||||||
|
end
|
||||||
|
attrs = { stable_id: type_de_champ.stable_id, private: type_de_champ.private?, row_id:, dossier:, value: }.compact
|
||||||
|
create(:"champ_do_not_use_#{type_de_champ.type_champ}", **attrs)
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in a new issue