Merge pull request #5585 from betagouv/feat/5575-1

feat/5575 - add titre_identite champ
This commit is contained in:
Kara Diaby 2020-09-18 16:42:53 +02:00 committed by GitHub
commit 28f6168f45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 92 additions and 3 deletions

View file

@ -1291,6 +1291,11 @@ enum TypeDeChamp {
"""
textarea
"""
Titre identité
"""
titre_identite
"""
Oui/Non
"""

View file

@ -26,6 +26,7 @@ const TypeDeChamp = sortableElement(
const isCarte = typeDeChamp.type_champ === 'carte';
const isExplication = typeDeChamp.type_champ === 'explication';
const isHeaderSection = typeDeChamp.type_champ === 'header_section';
const isTitreIdentite = typeDeChamp.type_champ === 'titre_identite';
const isRepetition = typeDeChamp.type_champ === 'repetition';
const canBeMandatory =
!isHeaderSection && !isExplication && !state.isAnnotation;
@ -118,7 +119,7 @@ const TypeDeChamp = sortableElement(
</div>
<div className="flex justify-start">
<DescriptionInput
isVisible={!isHeaderSection}
isVisible={!isHeaderSection && !isTitreIdentite}
handler={updateHandlers.description}
/>
</div>

View file

@ -0,0 +1,57 @@
# == Schema Information
#
# Table name: champs
#
# id :integer not null, primary key
# private :boolean default(FALSE), not null
# row :integer
# type :string
# value :string
# created_at :datetime
# updated_at :datetime
# dossier_id :integer
# etablissement_id :integer
# parent_id :bigint
# type_de_champ_id :integer
#
class Champs::TitreIdentiteChamp < Champ
MAX_SIZE = 20.megabytes
ACCEPTED_FORMATS = [
"image/png",
"image/jpeg"
]
# TODO: once we're running on Rails 6, re-enable this validation.
# See https://github.com/betagouv/demarches-simplifiees.fr/issues/4926
#
validates :piece_justificative_file,
content_type: ACCEPTED_FORMATS,
size: { less_than: MAX_SIZE }
def main_value_name
:piece_justificative_file
end
def search_terms
# We dont know how to search inside documents yet
end
def mandatory_and_blank?
mandatory? && !piece_justificative_file.attached?
end
def for_export
piece_justificative_file.filename.to_s if piece_justificative_file.attached?
end
def for_api
if piece_justificative_file.attached? && (piece_justificative_file.virus_scanner.safe? || piece_justificative_file.virus_scanner.pending?)
piece_justificative_file.service_url
end
end
def update_skip_pj_validation
type_de_champ.update(skip_pj_validation: true)
end
end

View file

@ -47,7 +47,8 @@ class TypeDeChamp < ApplicationRecord
piece_justificative: 'piece_justificative',
siret: 'siret',
carte: 'carte',
repetition: 'repetition'
repetition: 'repetition',
titre_identite: 'titre_identite'
}
belongs_to :revision, class_name: 'ProcedureRevision', optional: true
@ -189,7 +190,7 @@ class TypeDeChamp < ApplicationRecord
end
def piece_justificative?
type_champ == TypeDeChamp.type_champs.fetch(:piece_justificative)
type_champ == TypeDeChamp.type_champs.fetch(:piece_justificative) || type_champ == TypeDeChamp.type_champs.fetch(:titre_identite)
end
def legacy_number?

View file

@ -0,0 +1,2 @@
class TypesDeChamp::TitreIdentiteTypeDeChamp < TypesDeChamp::TypeDeChampBase
end

View file

@ -26,6 +26,8 @@
= render partial: "shared/champs/multiple_drop_down_list/show", locals: { champ: c }
- when TypeDeChamp.type_champs.fetch(:piece_justificative)
= render partial: "shared/champs/piece_justificative/show", locals: { champ: c }
- when TypeDeChamp.type_champs.fetch(:titre_identite)
= render partial: "shared/champs/piece_justificative/show", locals: { champ: c }
- when TypeDeChamp.type_champs.fetch(:siret)
= render partial: "shared/champs/siret/show", locals: { champ: c, profile: profile }
- when TypeDeChamp.type_champs.fetch(:textarea)

View file

@ -6,6 +6,8 @@
- elsif has_label?(champ)
= render partial: 'shared/dossiers/editable_champs/champ_label', locals: { form: form, champ: champ, seen_at: defined?(seen_at) ? seen_at : nil }
- if champ.type_champ == "titre_identite"
%p.notice Carte d'identité (uniquement le recto), passeport ou titre de séjour. Formats acceptés : jpg / png.
= render partial: "shared/dossiers/editable_champs/#{champ.type_champ}",
locals: { champ: champ, form: form }

View file

@ -0,0 +1,4 @@
= render 'shared/attachment/edit',
{ form: form,
attached_file: champ.piece_justificative_file,
template: champ.type_de_champ.piece_justificative_template, user_can_destroy: true }

View file

@ -33,3 +33,4 @@ fr:
siret: 'SIRET'
carte: 'Carte'
repetition: 'Bloc répétable'
titre_identite: 'Titre identité'

View file

@ -143,6 +143,14 @@ FactoryBot.define do
end
end
factory :champ_titre_identite, class: 'Champs::TitreIdentiteChamp' do
type_de_champ { association :type_de_champ_titre_identite, procedure: dossier.procedure }
after(:build) do |champ, _evaluator|
champ.piece_justificative_file.attach(io: StringIO.new("toto"), filename: "toto.png", content_type: "image/png")
end
end
factory :champ_carte, class: 'Champs::CarteChamp' do
type_de_champ { association :type_de_champ_carte, procedure: dossier.procedure }
end

View file

@ -133,6 +133,9 @@ FactoryBot.define do
type_de_champ.piece_justificative_template.attach(io: StringIO.new("toto"), filename: "toto.txt", content_type: "text/plain")
end
end
factory :type_de_champ_titre_identite do
type_champ { TypeDeChamp.type_champs.fetch(:titre_identite) }
end
factory :type_de_champ_siret do
type_champ { TypeDeChamp.type_champs.fetch(:siret) }
end

View file

@ -73,6 +73,7 @@ describe ProcedureExportService do
"piece_justificative",
"siret",
"carte",
"titre_identite",
"text"
]
end
@ -156,6 +157,7 @@ describe ProcedureExportService do
"piece_justificative",
"siret",
"carte",
"titre_identite",
"text"
]
end
@ -235,6 +237,7 @@ describe ProcedureExportService do
"piece_justificative",
"siret",
"carte",
"titre_identite",
"text"
]
end