diff --git a/app/models/types_de_champ/annuaire_education_type_de_champ.rb b/app/models/types_de_champ/annuaire_education_type_de_champ.rb index b4891aeaa..bce005c58 100644 --- a/app/models/types_de_champ/annuaire_education_type_de_champ.rb +++ b/app/models/types_de_champ/annuaire_education_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::AnnuaireEducationTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/carte_type_de_champ.rb b/app/models/types_de_champ/carte_type_de_champ.rb index ee4c2f461..ff8a0a697 100644 --- a/app/models/types_de_champ/carte_type_de_champ.rb +++ b/app/models/types_de_champ/carte_type_de_champ.rb @@ -11,4 +11,8 @@ class TypesDeChamp::CarteTypeDeChamp < TypesDeChamp::TypeDeChampBase :znieff, :cadastres ] + + def estimated_fill_duration(revision) + FILL_DURATION_LONG + end end diff --git a/app/models/types_de_champ/cnaf_type_de_champ.rb b/app/models/types_de_champ/cnaf_type_de_champ.rb index 2702bec84..cd62bbfab 100644 --- a/app/models/types_de_champ/cnaf_type_de_champ.rb +++ b/app/models/types_de_champ/cnaf_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::CnafTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/dgfip_type_de_champ.rb b/app/models/types_de_champ/dgfip_type_de_champ.rb index 7843bcd0b..666d80ef2 100644 --- a/app/models/types_de_champ/dgfip_type_de_champ.rb +++ b/app/models/types_de_champ/dgfip_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::DgfipTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/iban_type_de_champ.rb b/app/models/types_de_champ/iban_type_de_champ.rb index 204348185..209e4b899 100644 --- a/app/models/types_de_champ/iban_type_de_champ.rb +++ b/app/models/types_de_champ/iban_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::IbanTypeDeChamp < TypesDeChamp::TypeDeChampBase + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/mesri_type_de_champ.rb b/app/models/types_de_champ/mesri_type_de_champ.rb index 1e1455fe1..ed616875f 100644 --- a/app/models/types_de_champ/mesri_type_de_champ.rb +++ b/app/models/types_de_champ/mesri_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::MesriTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/piece_justificative_type_de_champ.rb b/app/models/types_de_champ/piece_justificative_type_de_champ.rb index d51140786..a03884d20 100644 --- a/app/models/types_de_champ/piece_justificative_type_de_champ.rb +++ b/app/models/types_de_champ/piece_justificative_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::PieceJustificativeTypeDeChamp < TypesDeChamp::TypeDeChampBase + def estimated_fill_duration(revision) + FILL_DURATION_LONG + end end diff --git a/app/models/types_de_champ/pole_emploi_type_de_champ.rb b/app/models/types_de_champ/pole_emploi_type_de_champ.rb index ec71c731e..508f72e20 100644 --- a/app/models/types_de_champ/pole_emploi_type_de_champ.rb +++ b/app/models/types_de_champ/pole_emploi_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::PoleEmploiTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/repetition_type_de_champ.rb b/app/models/types_de_champ/repetition_type_de_champ.rb index 019ceaefd..15e448256 100644 --- a/app/models/types_de_champ/repetition_type_de_champ.rb +++ b/app/models/types_de_champ/repetition_type_de_champ.rb @@ -6,6 +6,15 @@ class TypesDeChamp::RepetitionTypeDeChamp < TypesDeChamp::TypeDeChampBase champ end + def estimated_fill_duration(revision) + estimated_rows_in_repetition = 2.5 + estimated_row_duration = @type_de_champ + .types_de_champ + .map { |child_tdc| child_tdc.estimated_fill_duration(revision) } + .sum + estimated_row_duration * estimated_rows_in_repetition + end + # We have to truncate the label here as spreadsheets have a (30 char) limit on length. def libelle_for_export(index = 0) str = "(#{stable_id}) #{libelle}" diff --git a/app/models/types_de_champ/siret_type_de_champ.rb b/app/models/types_de_champ/siret_type_de_champ.rb index 6f869b8bd..26b653cf6 100644 --- a/app/models/types_de_champ/siret_type_de_champ.rb +++ b/app/models/types_de_champ/siret_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::SiretTypeDeChamp < TypesDeChamp::TypeDeChampBase + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/textarea_type_de_champ.rb b/app/models/types_de_champ/textarea_type_de_champ.rb index 69d45a343..3c92afb1e 100644 --- a/app/models/types_de_champ/textarea_type_de_champ.rb +++ b/app/models/types_de_champ/textarea_type_de_champ.rb @@ -1,2 +1,5 @@ class TypesDeChamp::TextareaTypeDeChamp < TypesDeChamp::TextTypeDeChamp + def estimated_fill_duration(revision) + FILL_DURATION_MEDIUM + end end diff --git a/app/models/types_de_champ/titre_identite_type_de_champ.rb b/app/models/types_de_champ/titre_identite_type_de_champ.rb index febd8e065..169e9f05f 100644 --- a/app/models/types_de_champ/titre_identite_type_de_champ.rb +++ b/app/models/types_de_champ/titre_identite_type_de_champ.rb @@ -1,4 +1,8 @@ class TypesDeChamp::TitreIdentiteTypeDeChamp < TypesDeChamp::TypeDeChampBase FRANCE_CONNECT = 'france_connect' PIECE_JUSTIFICATIVE = 'piece_justificative' + + def estimated_fill_duration(revision) + FILL_DURATION_LONG + end end diff --git a/app/models/types_de_champ/type_de_champ_base.rb b/app/models/types_de_champ/type_de_champ_base.rb index cf628baa8..e37879fc7 100644 --- a/app/models/types_de_champ/type_de_champ_base.rb +++ b/app/models/types_de_champ/type_de_champ_base.rb @@ -3,6 +3,10 @@ class TypesDeChamp::TypeDeChampBase delegate :description, :libelle, :stable_id, to: :@type_de_champ + FILL_DURATION_SHORT = 10.seconds.in_seconds + FILL_DURATION_MEDIUM = 1.minute.in_seconds + FILL_DURATION_LONG = 3.minutes.in_seconds + def initialize(type_de_champ) @type_de_champ = type_de_champ end @@ -25,6 +29,12 @@ class TypesDeChamp::TypeDeChampBase libelle end + # Default estimated duration to fill the champ in a form, in seconds. + # May be overridden by subclasses. + def estimated_fill_duration(revision) + FILL_DURATION_SHORT + end + def build_champ(params) @type_de_champ.champ.build(params) end