Merge pull request #5078 from betagouv/5068-effectif-annee-anterieure

instructeurs: affiche l'effectif moyen pour l'année antérieure
This commit is contained in:
Paul Chavard 2020-04-23 10:20:44 +02:00 committed by GitHub
commit 54d37bdb5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 133 additions and 27 deletions

View file

@ -687,23 +687,24 @@ enum DossierState {
}
type Effectif {
"""
Année de l'effectif mensuel
"""
annee: String!
"""
Mois de l'effectif mensuel
"""
mois: String!
nb: Float!
periode: String!
}
type Entreprise {
capitalSocial: BigInt!
codeEffectifEntreprise: String!
dateCreation: ISO8601Date!
effectifs: [Effectif!]!
"""
effectif moyen d'une année
"""
effectifAnnuel: Effectif
"""
effectif pour un mois donné
"""
effectifMensuel: Effectif
formeJuridique: String!
formeJuridiqueCode: String!
inlineAdresse: String!

View file

@ -2,8 +2,7 @@ module Types
class PersonneMoraleType < Types::BaseObject
class EntrepriseType < Types::BaseObject
class EffectifType < Types::BaseObject
field :mois, String, null: false, description: "Mois de l'effectif mensuel"
field :annee, String, null: false, description: "Année de l'effectif mensuel"
field :periode, String, null: false
field :nb, Float, null: false
end
@ -16,21 +15,28 @@ module Types
field :raison_sociale, String, null: false
field :siret_siege_social, String, null: false
field :code_effectif_entreprise, String, null: false
field :effectifs, [EffectifType], null: false
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 :nom, String, null: false
field :prenom, String, null: false
field :inline_adresse, String, null: false
def effectifs
def effectif_mensuel
if object.effectif_mensuel.present?
[
{
mois: object.effectif_mois,
annee: object.effectif_annee,
nb: object.effectif_mensuel
}
]
{
periode: [object.effectif_mois, object.effectif_annee].join('/'),
nb: object.effectif_mensuel
}
end
end
def effectif_annuel
if object.effectif_annuel.present?
{
periode: object.effectif_annuel_annee,
nb: object.effectif_annuel
}
end
end
end

View file

@ -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)

View file

@ -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

View file

@ -15,6 +15,8 @@ class Entreprise < Hashie::Dash
property :effectif_mois
property :effectif_annee
property :effectif_mensuel
property :effectif_annuel
property :effectif_annuel_annee
property :date_creation
property :nom
property :prenom

View file

@ -105,6 +105,8 @@ class Etablissement < ApplicationRecord
effectif_mensuel: entreprise_effectif_mensuel,
effectif_mois: entreprise_effectif_mois,
effectif_annee: entreprise_effectif_annee,
effectif_annuel: entreprise_effectif_annuel,
effectif_annuel_annee: entreprise_effectif_annuel_annee,
date_creation: entreprise_date_creation,
nom: entreprise_nom,
prenom: entreprise_prenom,

View file

@ -11,6 +11,8 @@ class EntrepriseSerializer < ActiveModel::Serializer
:effectif_mois,
:effectif_annee,
:effectif_mensuel,
:effectif_annuel,
:effectif_annuel_annee,
:date_creation,
:nom,
:prenom

View file

@ -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

View file

@ -32,13 +32,18 @@
%th.libelle
Effectif mensuel
= 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 :
%td= effectif(etablissement)
%tr
%th.libelle Code effectif :
%td= etablissement.entreprise.code_effectif_entreprise
%th.libelle Effectif de l'organisation (INSEE) :
%td
= effectif(etablissement)
%tr
%th.libelle Numéro de TVA intracommunautaire :
%td= etablissement.entreprise.numero_tva_intracommunautaire

View file

@ -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

View file

@ -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

View file

@ -200,6 +200,8 @@ describe API::V1::DossiersController do
:effectif_mois,
:effectif_annee,
:effectif_mensuel,
:effectif_annuel,
:effectif_annuel_annee,
:date_creation,
:nom,
:prenom

View file

@ -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

View file

@ -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 }

View file

@ -0,0 +1,5 @@
{
"siren": "418166096",
"annee": "2019",
"effectifs_annuels": 100.5
}

View file

@ -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

View file

@ -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