From 453adf3c74bfebaefe18bbcbd08ff096f00f433d Mon Sep 17 00:00:00 2001 From: Christophe Robillard Date: Wed, 22 Apr 2020 17:53:45 +0200 Subject: [PATCH] instructeurs: affiche l'effectif moyen annuel n-1 --- app/lib/api_entreprise/api.rb | 5 ++++ .../effectifs_annuels_adapter.rb | 23 ++++++++++++++++++ app/services/api_entreprise_service.rb | 6 +++++ .../dossiers/_identite_entreprise.html.haml | 9 +++++-- ...422090426_add_effectif_annee_anterieure.rb | 6 +++++ db/schema.rb | 4 +++- .../users/dossiers_controller_spec.rb | 6 +++++ spec/features/users/dossier_creation_spec.rb | 2 ++ .../api_entreprise/effectifs_annuels.json | 5 ++++ .../effectifs_annuels_adapter_spec.rb | 24 +++++++++++++++++++ spec/services/api_entreprise_service_spec.rb | 7 ++++++ 11 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 app/lib/api_entreprise/effectifs_annuels_adapter.rb create mode 100644 db/migrate/20200422090426_add_effectif_annee_anterieure.rb create mode 100644 spec/fixtures/files/api_entreprise/effectifs_annuels.json create mode 100644 spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb diff --git a/app/lib/api_entreprise/api.rb b/app/lib/api_entreprise/api.rb index 8c5c66eb4..5d8443fea 100644 --- a/app/lib/api_entreprise/api.rb +++ b/app/lib/api_entreprise/api.rb @@ -4,6 +4,7 @@ class ApiEntreprise::API EXERCICES_RESOURCE_NAME = "exercices" RNA_RESOURCE_NAME = "associations" EFFECTIFS_RESOURCE_NAME = "effectifs_mensuels_acoss_covid" + EFFECTIFS_ANNUELS_RESOURCE_NAME = "effectifs_annuels_acoss_covid" TIMEOUT = 15 @@ -34,6 +35,10 @@ class ApiEntreprise::API call(endpoint, siren, procedure_id) end + def self.effectifs_annuels(siren, procedure_id) + call(EFFECTIFS_ANNUELS_RESOURCE_NAME, siren, procedure_id) + end + private def self.call(resource_name, siret_or_siren, procedure_id) diff --git a/app/lib/api_entreprise/effectifs_annuels_adapter.rb b/app/lib/api_entreprise/effectifs_annuels_adapter.rb new file mode 100644 index 000000000..2c56b41f6 --- /dev/null +++ b/app/lib/api_entreprise/effectifs_annuels_adapter.rb @@ -0,0 +1,23 @@ +class ApiEntreprise::EffectifsAnnuelsAdapter < ApiEntreprise::Adapter + def initialize(siren, procedure_id) + @siren = siren + @procedure_id = procedure_id + end + + private + + def get_resource + ApiEntreprise::API.effectifs_annuels(@siren, @procedure_id) + end + + def process_params + if data_source[:effectifs_annuels].present? + { + entreprise_effectif_annuel: data_source[:effectifs_annuels], + entreprise_effectif_annuel_annee: data_source[:annee] + } + else + {} + end + end +end diff --git a/app/services/api_entreprise_service.rb b/app/services/api_entreprise_service.rb index 2b48acf8a..3f5082765 100644 --- a/app/services/api_entreprise_service.rb +++ b/app/services/api_entreprise_service.rb @@ -29,6 +29,12 @@ class ApiEntrepriseService rescue ApiEntreprise::API::RequestFailed end + begin + effectifs_annuels_params = ApiEntreprise::EffectifsAnnuelsAdapter.new(entreprise_params[:entreprise_siren], procedure_id).to_params + etablissement_params.merge!(effectifs_annuels_params) + rescue ApiEntreprise::API::RequestFailed + end + etablissement_params.merge(entreprise_params) end end diff --git a/app/views/shared/dossiers/_identite_entreprise.html.haml b/app/views/shared/dossiers/_identite_entreprise.html.haml index 87370d0b2..a10cfdaf5 100644 --- a/app/views/shared/dossiers/_identite_entreprise.html.haml +++ b/app/views/shared/dossiers/_identite_entreprise.html.haml @@ -34,11 +34,16 @@ = try_format_mois_effectif(etablissement) (URSSAF) %td= etablissement.entreprise_effectif_mensuel + %tr + %th.libelle + Effectif moyen annuel + = etablissement.entreprise_effectif_annuel_annee + (URSSAF) + %td= etablissement.entreprise_effectif_annuel %tr - %th.libelle Effectif de l'organisation : + %th.libelle Effectif de l'organisation (INSEE) : %td = effectif(etablissement) - (INSEE) %tr %th.libelle Numéro de TVA intracommunautaire : %td= etablissement.entreprise.numero_tva_intracommunautaire diff --git a/db/migrate/20200422090426_add_effectif_annee_anterieure.rb b/db/migrate/20200422090426_add_effectif_annee_anterieure.rb new file mode 100644 index 000000000..62f55e3fc --- /dev/null +++ b/db/migrate/20200422090426_add_effectif_annee_anterieure.rb @@ -0,0 +1,6 @@ +class AddEffectifAnneeAnterieure < ActiveRecord::Migration[5.2] + def change + add_column :etablissements, :entreprise_effectif_annuel, :decimal + add_column :etablissements, :entreprise_effectif_annuel_annee, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 005470ef1..2f59b5fe7 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: 2020_04_21_174642) do +ActiveRecord::Schema.define(version: 2020_04_22_090426) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -314,6 +314,8 @@ ActiveRecord::Schema.define(version: 2020_04_21_174642) do t.string "entreprise_effectif_mois" t.string "entreprise_effectif_annee" t.decimal "entreprise_effectif_mensuel" + t.decimal "entreprise_effectif_annuel" + t.string "entreprise_effectif_annuel_annee" t.index ["dossier_id"], name: "index_etablissements_on_dossier_id" end diff --git a/spec/controllers/users/dossiers_controller_spec.rb b/spec/controllers/users/dossiers_controller_spec.rb index 5779e099a..c2990c13c 100644 --- a/spec/controllers/users/dossiers_controller_spec.rb +++ b/spec/controllers/users/dossiers_controller_spec.rb @@ -212,6 +212,9 @@ describe Users::DossiersController, type: :controller do let(:annee) { "2020" } let(:mois) { "02" } + let(:api_entreprise_effectifs_annuels_status) { 200 } + let(:api_entreprise_effectifs_annuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') } + let(:api_exercices_status) { 200 } let(:api_exercices_body) { File.read('spec/fixtures/files/api_entreprise/exercices.json') } @@ -229,6 +232,8 @@ describe Users::DossiersController, type: :controller do .to_return(status: api_association_status, body: api_association_body) stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}?.*token=/) .to_return(body: api_entreprise_effectifs_mensuels_body, status: api_entreprise_effectifs_mensuels_status) + stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/) + .to_return(body: api_entreprise_effectifs_annuels_body, status: api_entreprise_effectifs_annuels_status) end before do @@ -328,6 +333,7 @@ describe Users::DossiersController, type: :controller do expect(dossier.etablissement.exercices).to be_present expect(dossier.etablissement.association?).to be(true) expect(dossier.etablissement.entreprise_effectif_mensuel).to be_present + expect(dossier.etablissement.entreprise_effectif_annuel).to be_present end end end diff --git a/spec/features/users/dossier_creation_spec.rb b/spec/features/users/dossier_creation_spec.rb index 5849cd1b4..4dec03889 100644 --- a/spec/features/users/dossier_creation_spec.rb +++ b/spec/features/users/dossier_creation_spec.rb @@ -76,6 +76,8 @@ feature 'Creating a new dossier:' do .to_return(status: 404, body: '') stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/2020\/02\/entreprise\/#{siren}?.*token=/) .to_return(status: 404, body: '') + stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/) + .to_return(status: 404, body: '') end before { Timecop.freeze(Time.zone.local(2020, 3, 14)) } after { Timecop.return } diff --git a/spec/fixtures/files/api_entreprise/effectifs_annuels.json b/spec/fixtures/files/api_entreprise/effectifs_annuels.json new file mode 100644 index 000000000..da299e40d --- /dev/null +++ b/spec/fixtures/files/api_entreprise/effectifs_annuels.json @@ -0,0 +1,5 @@ +{ + "siren": "418166096", + "annee": "2019", + "effectifs_annuels": 100.5 +} diff --git a/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb b/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb new file mode 100644 index 000000000..2c52cb00b --- /dev/null +++ b/spec/lib/api_entreprise/effectifs_annuels_adapter_spec.rb @@ -0,0 +1,24 @@ +describe ApiEntreprise::EffectifsAnnuelsAdapter do + let(:siren) { '418166096' } + let(:procedure_id) { 22 } + let(:adapter) { described_class.new(siren, procedure_id) } + subject { adapter.to_params } + + before do + stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/) + .to_return(body: body, status: status) + end + + context "when the SIREN is valid" do + let(:body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') } + let(:status) { 200 } + + it '#to_params class est une Hash ?' do + expect(subject).to be_an_instance_of(Hash) + end + + it "renvoie les effectifs de l'année antérieure" do + expect(subject[:entreprise_effectif_annuel]).to eq(100.5) + end + end +end diff --git a/spec/services/api_entreprise_service_spec.rb b/spec/services/api_entreprise_service_spec.rb index ff6fec019..ca999d147 100644 --- a/spec/services/api_entreprise_service_spec.rb +++ b/spec/services/api_entreprise_service_spec.rb @@ -11,6 +11,8 @@ describe ApiEntrepriseService do .to_return(body: associations_body, status: associations_status) stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_mensuels_acoss_covid\/#{annee}\/#{mois}\/entreprise\/#{siren}?.*token=/) .to_return(body: effectifs_mensuels_body, status: effectifs_mensuels_status) + stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/effectifs_annuels_acoss_covid\/#{siren}?.*token=/) + .to_return(body: effectifs_annuels_body, status: effectifs_annuels_status) end before { Timecop.freeze(Time.zone.local(2020, 3, 14)) } @@ -32,6 +34,10 @@ describe ApiEntrepriseService do let(:mois) { "02" } let(:effectif_mensuel) { 100.5 } + let(:effectifs_annuels_status) { 200 } + let(:effectifs_annuels_body) { File.read('spec/fixtures/files/api_entreprise/effectifs_annuels.json') } + let(:effectif_annuel) { 100.5 } + let(:exercices_status) { 200 } let(:exercices_body) { File.read('spec/fixtures/files/api_entreprise/exercices.json') } @@ -47,6 +53,7 @@ describe ApiEntrepriseService do expect(result[:association_rna]).to eq(rna) expect(result[:exercices_attributes]).to_not be_empty expect(result[:entreprise_effectif_mensuel]).to eq(effectif_mensuel) + expect(result[:entreprise_effectif_annuel]).to eq(effectif_annuel) end end