feat(pj): add specialized column for attachments

This commit is contained in:
mfo 2024-11-04 17:01:00 +01:00
parent 4f0713a764
commit 9d13ebb3ff
No known key found for this signature in database
GPG key ID: 7CE3E1F5B794A8EC
7 changed files with 59 additions and 51 deletions

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
class Columns::AttachedManyColumn < Columns::ChampColumn
private
def typed_value(champ)
champ.piece_justificative_file.to_a
end
end

View file

@ -1,9 +0,0 @@
# frozen_string_literal: true
class Columns::TitreIdentiteColumn < Columns::ChampColumn
private
def typed_value(champ)
champ.piece_justificative_file.attached?
end
end

View file

@ -540,8 +540,10 @@ class TypeDeChamp < ApplicationRecord
:enums
when type_champs.fetch(:drop_down_list), type_champs.fetch(:departements), type_champs.fetch(:regions)
:enum
when type_champs.fetch(:checkbox), type_champs.fetch(:yes_no), type_champs.fetch(:titre_identite)
when type_champs.fetch(:checkbox), type_champs.fetch(:yes_no)
:boolean
when type_champs.fetch(:titre_identite), type_champs.fetch(:piece_justificative)
:attachements
else
:text
end

View file

@ -26,6 +26,17 @@ class TypesDeChamp::PieceJustificativeTypeDeChamp < TypesDeChamp::TypeDeChampBas
def champ_blank?(champ) = champ.piece_justificative_file.blank?
def columns(procedure_id:, displayable: true, prefix: nil)
[]
[
Columns::AttachedManyColumn.new(
procedure_id:,
stable_id:,
tdc_type: type_champ,
label: libelle_with_prefix(prefix),
type: TypeDeChamp.column_type(type_champ),
value_column: TypeDeChamp.value_column(type_champ),
displayable: false,
filterable: false
)
]
end
end

View file

@ -26,7 +26,7 @@ class TypesDeChamp::TitreIdentiteTypeDeChamp < TypesDeChamp::TypeDeChampBase
def columns(procedure_id:, displayable: nil, prefix: nil)
[
Columns::TitreIdentiteColumn.new(
Columns::AttachedManyColumn.new(
procedure_id:,
stable_id:,
tdc_type: type_champ,

View file

@ -1,4 +0,0 @@
# frozen_string_literal: true
describe Column do
end

View file

@ -9,39 +9,38 @@ describe Columns::ChampColumn do
let(:types_de_champ) { procedure.all_revisions_types_de_champ }
it 'extracts values for columns and type de champ' do
expect_type_de_champ_values('civilite', ["M."])
expect_type_de_champ_values('email', ['yoda@beta.gouv.fr'])
expect_type_de_champ_values('phone', ['0666666666'])
expect_type_de_champ_values('address', ["2 rue des Démarches"])
expect_type_de_champ_values('communes', ["Coye-la-Forêt"])
expect_type_de_champ_values('departements', ['01'])
expect_type_de_champ_values('regions', ['01'])
expect_type_de_champ_values('pays', ['France'])
expect_type_de_champ_values('epci', [nil])
expect_type_de_champ_values('iban', [nil])
expect_type_de_champ_values('siret', ["44011762001530", "postal_code", "city_name", "departement_code", "region_name"])
expect_type_de_champ_values('text', ['text'])
expect_type_de_champ_values('textarea', ['textarea'])
expect_type_de_champ_values('number', ['42'])
expect_type_de_champ_values('decimal_number', [42.1])
expect_type_de_champ_values('integer_number', [42])
expect_type_de_champ_values('date', [Time.zone.parse('2019-07-10').to_date])
expect_type_de_champ_values('datetime', [Time.zone.parse("1962-09-15T15:35:00+01:00")])
expect_type_de_champ_values('checkbox', [true])
expect_type_de_champ_values('drop_down_list', ['val1'])
expect_type_de_champ_values('multiple_drop_down_list', [["val1", "val2"]])
expect_type_de_champ_values('linked_drop_down_list', [nil, "categorie 1", "choix 1"])
expect_type_de_champ_values('yes_no', [true])
expect_type_de_champ_values('annuaire_education', [nil])
expect_type_de_champ_values('carte', [])
expect_type_de_champ_values('piece_justificative', [])
expect_type_de_champ_values('titre_identite', [true])
expect_type_de_champ_values('cnaf', [nil])
expect_type_de_champ_values('dgfip', [nil])
expect_type_de_champ_values('pole_emploi', [nil])
expect_type_de_champ_values('mesri', [nil])
expect_type_de_champ_values('cojo', [nil])
expect_type_de_champ_values('expression_reguliere', [nil])
expect_type_de_champ_values('civilite', eq(["M."]))
expect_type_de_champ_values('email', eq(['yoda@beta.gouv.fr']))
expect_type_de_champ_values('phone', eq(['0666666666']))
expect_type_de_champ_values('address', eq(["2 rue des Démarches"]))
expect_type_de_champ_values('communes', eq(["Coye-la-Forêt"]))
expect_type_de_champ_values('departements', eq(['01']))
expect_type_de_champ_values('regions', eq(['01']))
expect_type_de_champ_values('pays', eq(['France']))
expect_type_de_champ_values('epci', eq([nil]))
expect_type_de_champ_values('iban', eq([nil]))
expect_type_de_champ_values('siret', eq(["44011762001530", "postal_code", "city_name", "departement_code", "region_name"]))
expect_type_de_champ_values('text', eq(['text']))
expect_type_de_champ_values('textarea', eq(['textarea']))
expect_type_de_champ_values('number', eq(['42']))
expect_type_de_champ_values('decimal_number', eq([42.1]))
expect_type_de_champ_values('integer_number', eq([42]))
expect_type_de_champ_values('date', eq([Time.zone.parse('2019-07-10').to_date]))
expect_type_de_champ_values('datetime', eq([Time.zone.parse("1962-09-15T15:35:00+01:00")]))
expect_type_de_champ_values('checkbox', eq([true]))
expect_type_de_champ_values('drop_down_list', eq(['val1']))
expect_type_de_champ_values('multiple_drop_down_list', eq([["val1", "val2"]]))
expect_type_de_champ_values('linked_drop_down_list', eq([nil, "categorie 1", "choix 1"]))
expect_type_de_champ_values('yes_no', eq([true]))
expect_type_de_champ_values('annuaire_education', eq([nil]))
expect_type_de_champ_values('piece_justificative', be_an_instance_of(Array))
expect_type_de_champ_values('titre_identite', be_an_instance_of(Array))
expect_type_de_champ_values('cnaf', eq([nil]))
expect_type_de_champ_values('dgfip', eq([nil]))
expect_type_de_champ_values('pole_emploi', eq([nil]))
expect_type_de_champ_values('mesri', eq([nil]))
expect_type_de_champ_values('cojo', eq([nil]))
expect_type_de_champ_values('expression_reguliere', eq([nil]))
end
end
@ -120,11 +119,11 @@ describe Columns::ChampColumn do
private
def expect_type_de_champ_values(type, values)
def expect_type_de_champ_values(type, assertion)
type_de_champ = types_de_champ.find { _1.type_champ == type }
champ = dossier.send(:filled_champ, type_de_champ, nil)
columns = type_de_champ.columns(procedure_id: procedure.id)
expect(columns.map { _1.value(champ) }).to eq(values)
expect(columns.map { _1.value(champ) }).to assertion
end
def retrieve_champ(type)