From e1d3d1f8442221cc181222201850e85274bfd0c0 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 12:23:57 +0200 Subject: [PATCH 1/6] chore(schema): add entreprise_etat_administratif to etablissements --- app/models/etablissement.rb | 7 +++++++ ..._add_entreprise_etat_administratif_to_etablissements.rb | 5 +++++ db/schema.rb | 3 ++- spec/factories/etablissement.rb | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20220718093034_add_entreprise_etat_administratif_to_etablissements.rb diff --git a/app/models/etablissement.rb b/app/models/etablissement.rb index 25b3969cc..fcc3f2712 100644 --- a/app/models/etablissement.rb +++ b/app/models/etablissement.rb @@ -25,6 +25,7 @@ # entreprise_effectif_annuel_annee :string # entreprise_effectif_mensuel :decimal(, ) # entreprise_effectif_mois :string +# entreprise_etat_administratif :string # entreprise_forme_juridique :string # entreprise_forme_juridique_code :string # entreprise_nom :string @@ -60,6 +61,11 @@ class Etablissement < ApplicationRecord validates :siret, presence: true validates :dossier_id, uniqueness: { allow_nil: true } + enum entreprise_etat_administratif: { + actif: "actif", + fermé: "fermé" + }, _prefix: true + def search_terms [ entreprise_siren, @@ -162,6 +168,7 @@ class Etablissement < ApplicationRecord effectif_annuel: entreprise_effectif_annuel, effectif_annuel_annee: entreprise_effectif_annuel_annee, date_creation: entreprise_date_creation, + etat_administratif: entreprise_etat_administratif, nom: entreprise_nom, prenom: entreprise_prenom, inline_adresse: inline_adresse diff --git a/db/migrate/20220718093034_add_entreprise_etat_administratif_to_etablissements.rb b/db/migrate/20220718093034_add_entreprise_etat_administratif_to_etablissements.rb new file mode 100644 index 000000000..35392f2bf --- /dev/null +++ b/db/migrate/20220718093034_add_entreprise_etat_administratif_to_etablissements.rb @@ -0,0 +1,5 @@ +class AddEntrepriseEtatAdministratifToEtablissements < ActiveRecord::Migration[6.1] + def change + add_column :etablissements, :entreprise_etat_administratif, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 54487b249..601109809 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_07_08_152039) do +ActiveRecord::Schema.define(version: 2022_07_18_093034) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -376,6 +376,7 @@ ActiveRecord::Schema.define(version: 2022_07_08_152039) do t.string "entreprise_effectif_annuel_annee" t.decimal "entreprise_effectif_mensuel" t.string "entreprise_effectif_mois" + t.string "entreprise_etat_administratif" t.string "entreprise_forme_juridique" t.string "entreprise_forme_juridique_code" t.string "entreprise_nom" diff --git a/spec/factories/etablissement.rb b/spec/factories/etablissement.rb index f0e5c24c8..16b01f4b4 100644 --- a/spec/factories/etablissement.rb +++ b/spec/factories/etablissement.rb @@ -23,6 +23,7 @@ FactoryBot.define do entreprise_siret_siege_social { '44011762001530' } entreprise_code_effectif_entreprise { '51' } entreprise_date_creation { "1990-04-24" } + entreprise_etat_administratif { :actif } trait :with_exercices do exercices { [association(:exercice)] } From f05e9331a760bd2c640d6017e62fe2e3199409f1 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 12:24:41 +0200 Subject: [PATCH 2/6] chore(entreprises): save etat_administratif from API --- app/lib/api_entreprise/entreprise_adapter.rb | 10 ++++++++++ app/models/entreprise.rb | 1 + spec/fixtures/files/api_entreprise/entreprises.json | 4 ++++ spec/jobs/api_entreprise/entreprise_job_spec.rb | 10 +++++++++- spec/lib/api_entreprise/entreprise_adapter_spec.rb | 4 ++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/lib/api_entreprise/entreprise_adapter.rb b/app/lib/api_entreprise/entreprise_adapter.rb index 8586caa50..3677c7ce5 100644 --- a/app/lib/api_entreprise/entreprise_adapter.rb +++ b/app/lib/api_entreprise/entreprise_adapter.rb @@ -7,6 +7,7 @@ class APIEntreprise::EntrepriseAdapter < APIEntreprise::Adapter def process_params params = data_source[:entreprise]&.slice(*attr_to_fetch) + params[:etat_administratif] = map_etat_administratif(data_source) if params.present? && valid_params?(params) params[:date_creation] = Time.zone.at(params[:date_creation]).to_datetime @@ -32,4 +33,13 @@ class APIEntreprise::EntrepriseAdapter < APIEntreprise::Adapter :prenom ] end + + def map_etat_administratif(data_source) + raw_value = data_source.dig(:entreprise, :etat_administratif, :value) # data structure will change in v3 + + case raw_value + when 'A' then 'actif' + when 'F' then 'fermé' + end + end end diff --git a/app/models/entreprise.rb b/app/models/entreprise.rb index 315a3da13..09a71053e 100644 --- a/app/models/entreprise.rb +++ b/app/models/entreprise.rb @@ -13,6 +13,7 @@ class Entreprise < Hashie::Dash property :raison_sociale property :siret_siege_social property :code_effectif_entreprise + property :etat_administratif property :effectif_mois property :effectif_annee property :effectif_mensuel diff --git a/spec/fixtures/files/api_entreprise/entreprises.json b/spec/fixtures/files/api_entreprise/entreprises.json index 55a1f4e8c..90512381c 100644 --- a/spec/fixtures/files/api_entreprise/entreprises.json +++ b/spec/fixtures/files/api_entreprise/entreprises.json @@ -22,6 +22,10 @@ "date_reference": "2014", "intitule": "200 à 249 salariés" }, + "etat_administratif": { + "value": "A", + "date_cessation": null + }, "exercices": [ { "chiffre_affaires": null, diff --git a/spec/jobs/api_entreprise/entreprise_job_spec.rb b/spec/jobs/api_entreprise/entreprise_job_spec.rb index 8ba5221d6..df8fdb796 100644 --- a/spec/jobs/api_entreprise/entreprise_job_spec.rb +++ b/spec/jobs/api_entreprise/entreprise_job_spec.rb @@ -1,7 +1,7 @@ RSpec.describe APIEntreprise::EntrepriseJob, type: :job do let(:siret) { '41816609600051' } let(:siren) { '418166096' } - let(:etablissement) { create(:etablissement, siret: siret) } + let(:etablissement) { create(:etablissement, siret: siret, entreprise_etat_administratif: nil) } let(:procedure) { create(:procedure) } let(:procedure_id) { procedure.id } let(:body) { File.read('spec/fixtures/files/api_entreprise/entreprises.json') } @@ -19,4 +19,12 @@ RSpec.describe APIEntreprise::EntrepriseJob, type: :job do subject expect(Etablissement.find(etablissement.id).entreprise_numero_tva_intracommunautaire).to eq('FR16418166096') end + + it 'convert entreprise etat_administratif source to an enum' do + subject + etablissement.reload + + expect(etablissement.entreprise_etat_administratif).to eq("actif") + expect(etablissement.entreprise_etat_administratif_actif?) + end end diff --git a/spec/lib/api_entreprise/entreprise_adapter_spec.rb b/spec/lib/api_entreprise/entreprise_adapter_spec.rb index cb26c6db9..f2dd7bc2f 100644 --- a/spec/lib/api_entreprise/entreprise_adapter_spec.rb +++ b/spec/lib/api_entreprise/entreprise_adapter_spec.rb @@ -67,6 +67,10 @@ describe APIEntreprise::EntrepriseAdapter do it 'L\'entreprise contient bien un prenom' do expect(subject[:entreprise_prenom]).to eq('test_prenom') end + + it 'L\'entreprise contient bien un etat administratif' do + expect(subject[:entreprise_etat_administratif]).to eq('actif') + end end end From 22fed3d9dedc813fd108bb5d2581d3f70f2f653e Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 12:25:11 +0200 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20show=20entreprise=20etat=20"en=20ac?= =?UTF-8?q?tivit=C3=A9"=20|=20"ferm=C3=A9=20in=20entreprise=20summary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #7505 --- app/helpers/etablissement_helper.rb | 9 ++++++++ .../dossiers/_identite_entreprise.html.haml | 7 ++++++- spec/helpers/etablissement_helper_spec.rb | 21 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/helpers/etablissement_helper.rb b/app/helpers/etablissement_helper.rb index d517381ac..94689adee 100644 --- a/app/helpers/etablissement_helper.rb +++ b/app/helpers/etablissement_helper.rb @@ -39,4 +39,13 @@ module EtablissementHelper def pretty_date_exercice(date) date.sub(/(?\d{4})(?\d{2})/, '\k') if date.present? end + + def humanized_entreprise_etat_administratif(etablissement) + case etablissement.entreprise_etat_administratif&.to_sym + when :actif + "en activité" + when :fermé + "fermé" + end + end end diff --git a/app/views/shared/dossiers/_identite_entreprise.html.haml b/app/views/shared/dossiers/_identite_entreprise.html.haml index f8859f6b2..2ce7df007 100644 --- a/app/views/shared/dossiers/_identite_entreprise.html.haml +++ b/app/views/shared/dossiers/_identite_entreprise.html.haml @@ -27,7 +27,12 @@ %td= etablissement.naf %tr %td.libelle Date de création : - %td= try_format_date(etablissement.entreprise.date_creation) + %td + = try_format_date(etablissement.entreprise.date_creation) + + - if etablissement.entreprise_etat_administratif.present? + %span.label= humanized_entreprise_etat_administratif(etablissement) + - if profile == 'instructeur' %tr %td.libelle diff --git a/spec/helpers/etablissement_helper_spec.rb b/spec/helpers/etablissement_helper_spec.rb index 9a4d01a67..912556d40 100644 --- a/spec/helpers/etablissement_helper_spec.rb +++ b/spec/helpers/etablissement_helper_spec.rb @@ -4,12 +4,14 @@ RSpec.describe EtablissementHelper, type: :helper do let(:enseigne) { "mon enseigne" } let(:nom) { 'mon nom' } let(:prenom) { 'mon prenom' } + let(:etat_administratif) { 'actif' } let(:etablissement_params) do { enseigne: enseigne, entreprise_capital_social: 123_000, entreprise_code_effectif_entreprise: code_effectif, entreprise_raison_sociale: raison_sociale, + entreprise_etat_administratif: etat_administratif, entreprise_nom: nom, entreprise_prenom: prenom } @@ -72,4 +74,23 @@ RSpec.describe EtablissementHelper, type: :helper do subject { pretty_date_exercice("201908") } it { is_expected.to eq("2019") } end + + describe "#humanized_entreprise_etat_administratif" do + subject { humanized_entreprise_etat_administratif(etablissement) } + + context "when etat_administratif is A" do + let(:etat_administratif) { "actif" } + it { is_expected.to eq("en activité") } + end + + context "when etat_administratif is F" do + let(:etat_administratif) { "fermé" } + it { is_expected.to eq("fermé") } + end + + context "when etat_administratif is nil" do + let(:etat_administratif) { nil } + it { is_expected.to be_nil } + end + end end From e53b6e4e7724dbced8611e119046edd0edbadcd3 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 12:30:09 +0200 Subject: [PATCH 4/6] feat(export/pdf): list entreprise etat_administratif in "demandeur" section --- app/views/dossiers/show.pdf.prawn | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/dossiers/show.pdf.prawn b/app/views/dossiers/show.pdf.prawn index d5326fcf5..e93c91f12 100644 --- a/app/views/dossiers/show.pdf.prawn +++ b/app/views/dossiers/show.pdf.prawn @@ -102,6 +102,10 @@ def add_identite_etablissement(pdf, etablissement) format_in_2_columns(pdf, "Code NAF ", etablissement.naf) format_in_2_columns(pdf, "Date de création ", try_format_date(etablissement.entreprise.date_creation)) + if etablissement.entreprise_etat_administratif.present? + format_in_2_columns(pdf, "État administratif", humanized_entreprise_etat_administratif(etablissement)) + end + if @include_infos_administration if etablissement.entreprise_effectif_mensuel.present? format_in_2_columns(pdf, "Effectif mensuel #{try_format_mois_effectif(etablissement)} (URSSAF) ", number_with_delimiter(etablissement.entreprise_effectif_mensuel.to_s)) From 11cd73b4ac990641ee43ed01993641b20958c0e5 Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 13:21:50 +0200 Subject: [PATCH 5/6] feat(export/csv): list etablisement entreprise_etat_administratif --- app/models/dossier.rb | 1 + app/models/etablissement.rb | 1 + spec/services/procedure_export_service_spec.rb | 2 ++ 3 files changed, 4 insertions(+) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 4e5713d35..6a63b5644 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -1050,6 +1050,7 @@ class Dossier < ApplicationRecord ['Entreprise SIRET siège social', etablissement&.entreprise_siret_siege_social], ['Entreprise code effectif entreprise', etablissement&.entreprise_code_effectif_entreprise], ['Entreprise date de création', etablissement&.entreprise_date_creation], + ['Entreprise état administratif', etablissement&.entreprise_etat_administratif], ['Entreprise nom', etablissement&.entreprise_nom], ['Entreprise prénom', etablissement&.entreprise_prenom], ['Association RNA', etablissement&.association_rna], diff --git a/app/models/etablissement.rb b/app/models/etablissement.rb index fcc3f2712..8082085bf 100644 --- a/app/models/etablissement.rb +++ b/app/models/etablissement.rb @@ -118,6 +118,7 @@ class Etablissement < ApplicationRecord ['Entreprise SIRET siège social', :entreprise_siret_siege_social], ['Entreprise code effectif entreprise', :entreprise_code_effectif_entreprise], ['Entreprise date de création', :entreprise_date_creation], + ['Entreprise état administratif', :entreprise_etat_administratif], ['Entreprise nom', :entreprise_nom], ['Entreprise prénom', :entreprise_prenom], ['Association RNA', :association_rna], diff --git a/spec/services/procedure_export_service_spec.rb b/spec/services/procedure_export_service_spec.rb index 0422bdfa7..2d47a3be1 100644 --- a/spec/services/procedure_export_service_spec.rb +++ b/spec/services/procedure_export_service_spec.rb @@ -211,6 +211,7 @@ describe ProcedureExportService do "Entreprise SIRET siège social", "Entreprise code effectif entreprise", "Entreprise date de création", + "Entreprise état administratif", "Entreprise nom", "Entreprise prénom", "Association RNA", @@ -300,6 +301,7 @@ describe ProcedureExportService do "Entreprise SIRET siège social", "Entreprise code effectif entreprise", "Entreprise date de création", + "Entreprise état administratif", "Entreprise nom", "Entreprise prénom", "Association RNA", From 2364e2dda500772c30c679e6529af42cb57c735b Mon Sep 17 00:00:00 2001 From: Colin Darie Date: Mon, 18 Jul 2022 14:43:01 +0200 Subject: [PATCH 6/6] feat(graphql): expose entreprise etat_adminitratif --- app/graphql/schema.graphql | 13 +++++++++++++ app/graphql/types/personne_morale_type.rb | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/app/graphql/schema.graphql b/app/graphql/schema.graphql index a3bb3ffb2..5e8d05227 100644 --- a/app/graphql/schema.graphql +++ b/app/graphql/schema.graphql @@ -1461,6 +1461,7 @@ type Entreprise { effectif pour un mois donné """ effectifMensuel: Effectif + etatAdministratif: EntrepriseEtatAdministratif formeJuridique: String formeJuridiqueCode: String inlineAdresse: String! @@ -1473,6 +1474,18 @@ type Entreprise { siretSiegeSocial: String! } +enum EntrepriseEtatAdministratif { + """ + L'entreprise est en activité + """ + Actif + + """ + L'entreprise a cessé son activité + """ + Ferme +} + type File { byteSize: Int! @deprecated(reason: "Utilisez le champ `byteSizeBigInt` à la place.") byteSizeBigInt: BigInt! diff --git a/app/graphql/types/personne_morale_type.rb b/app/graphql/types/personne_morale_type.rb index 2d2d98d2b..e69f8812e 100644 --- a/app/graphql/types/personne_morale_type.rb +++ b/app/graphql/types/personne_morale_type.rb @@ -6,6 +6,11 @@ module Types field :nb, Float, null: false end + class EntrepriseEtatAdministratifType < Types::BaseEnum + value("Actif", "L'entreprise est en activité", value: Etablissement.entreprise_etat_administratifs.fetch("actif")) + value("Ferme", "L'entreprise a cessé son activité", value: Etablissement.entreprise_etat_administratifs.fetch("fermé")) + end + field :siren, String, null: false field :capital_social, GraphQL::Types::BigInt, null: true, description: "capital social de l’entreprise. -1 si inconnu." field :numero_tva_intracommunautaire, String, null: true @@ -18,6 +23,7 @@ module Types field :effectif_mensuel, EffectifType, null: true, description: "effectif pour un mois donné" field :effectif_annuel, EffectifType, null: true, description: "effectif moyen d’une année" field :date_creation, GraphQL::Types::ISO8601Date, null: false + field :etat_administratif, EntrepriseEtatAdministratifType, null: true field :nom, String, null: true field :prenom, String, null: true field :inline_adresse, String, null: false