mon-entreprise/source/actions/existingCompanyActions.js

114 lines
2.9 KiB
JavaScript

/* @flow */
import { isNil } from 'ramda'
import type { SaveExistingCompanyDetailsAction } from 'Types/companyTypes'
import type { LegalStatus } from 'Selectors/companyStatusSelectors'
const getCommuneByCodeInsee = function(codeInsee: string) {
return fetch(
`https://geo.api.gouv.fr/communes/${codeInsee}?fields=departement,region`
).then(response => {
return response.json()
})
}
const getCommuneByCodePostal = function(codePostal: string) {
return fetch(
`https://geo.api.gouv.fr/communes?codePostal=${codePostal}&fields=departement,region`
)
.then(response => {
return response.json()
})
.then(communes => {
if (!communes || communes.length === 0) {
throw new Error(
`Pas de commune associée à ce code postal : ${codePostal}`
)
}
if (communes.length > 1) {
throw new Error(
`Trop de communes associées à ce code postal : ${codePostal}`
)
}
return communes[0]
})
}
const getLegalStatus = (
{ nature_juridique_entreprise: codeNatureJuridique },
isAutoEntrepreneur
): ?LegalStatus => {
/*
Nous utilisons le code entreprise pour connaitre le statut juridique
(voir https://www.insee.fr/fr/information/2028129)
En revanche, impossible de différencier EI et auto-entreprise
https://www.sirene.fr/sirene/public/question.action?idQuestion=2933
*/
if (!codeNatureJuridique) {
return isAutoEntrepreneur ? 'auto-entrepreneur' : 'EI'
}
if (codeNatureJuridique === '5498') {
return 'EURL'
}
if (codeNatureJuridique.match(/^54..$/)) {
return 'SARL'
}
if (codeNatureJuridique.match(/^55..$/)) {
return 'SA'
}
if (codeNatureJuridique === '5720') {
return 'SASU'
}
if (codeNatureJuridique.match(/^57..$/)) {
return 'SAS'
}
return null
}
export const saveExistingCompanyDetails = (
details: { [string]: string },
isAutoEntrepreneur?: boolean
) => (
dispatch: SaveExistingCompanyDetailsAction => void,
_: any,
{ history, sitePaths }: any
) => {
let effectif = Number.parseInt(
details.tranche_effectif_salarie_entreprise_centaine_pret,
10
)
effectif = isNaN(effectif) ? null : effectif
const legalStatus = getLegalStatus(details, isAutoEntrepreneur)
dispatch({
type: 'SAVE_EXISTING_COMPANY_DETAILS',
details: {
siret: details.siret,
...(!isNil(effectif) ? { effectif } : null),
...(legalStatus ? { legalStatus } : null),
apiDetails: details
}
})
history.push(sitePaths.sécuritéSociale.index)
getCommuneByCodeInsee(details.departement + details.commune)
.catch(err => {
console.warn(err)
return getCommuneByCodePostal(details.code_postal)
})
.catch(err => {
console.warn(err)
return null
})
.then(commune =>
dispatch({
type: 'SAVE_EXISTING_COMPANY_DETAILS',
details: {
siret: details.siret,
...(!isNil(effectif) ? { effectif } : null),
...(commune ? { localisation: commune } : null),
...(legalStatus ? { legalStatus } : null),
apiDetails: details
}
})
)
}