Utilisation de l'API GEO pour chercher le nom de commune
parent
8191379e9f
commit
d4d0f2c1b3
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,22 @@
|
|||
/* Petit script de transformation du fichier de taux du versement transport, un object indexé sur le code commune, vers
|
||||
* une liste contenant le code commune en clef d'objet
|
||||
*/
|
||||
|
||||
let taux = require('./taux.json')
|
||||
let R = require('ramda')
|
||||
let fs = require('fs')
|
||||
|
||||
let result = R.pipe(
|
||||
R.toPairs,
|
||||
R.map(([k,v]) => R.assoc('codeCommune', k, v)),
|
||||
)(taux)
|
||||
|
||||
let json = JSON.stringify(result)
|
||||
|
||||
fs.writeFile("./liste-taux.json", json, function(err) {
|
||||
if(err) {
|
||||
return console.log(err);
|
||||
}
|
||||
|
||||
console.log("C'est tout bon !");
|
||||
});
|
|
@ -20,8 +20,8 @@
|
|||
formule:
|
||||
sélection:
|
||||
données: taux versement transport
|
||||
cherche: commune
|
||||
dans: nomLaposte
|
||||
cherche: code commune
|
||||
dans: codeCommune
|
||||
composantes:
|
||||
- nom: aot
|
||||
renvoie: aot
|
||||
|
|
|
@ -1,19 +1,29 @@
|
|||
- espace: établissement
|
||||
nom: code postal
|
||||
titre: Code postal de l'établissement
|
||||
question: Quel est le code postal de la commune où est implanté l'établissement ?
|
||||
question: Quel est le code postal de la commune de l'établissement ?
|
||||
description: |
|
||||
Lorsqu'une entreprise dispose de plusieurs établissements, certaines cotisations sont
|
||||
calculées à l'échelle de l'établissement et sont fonction de règlementations locales.
|
||||
format: nombre
|
||||
suggestions: utilisation d'une API
|
||||
|
||||
- espace: établissement
|
||||
nom: code commune
|
||||
titre: Code commune de l'établissement
|
||||
question: Dans quelle commune l'établissement est-il implanté ?
|
||||
description: |
|
||||
Lorsqu'une entreprise dispose de plusieurs établissements, certaines cotisations sont
|
||||
calculées à l'échelle de l'établissement et sont fonction de règlementations locales.
|
||||
format: nombre
|
||||
suggestions: utilisation d'une API
|
||||
|
||||
- espace: établissement
|
||||
nom: commune
|
||||
titre: Commune de l'établissement
|
||||
question: Quel est la commune où est implanté l'établissement ?
|
||||
question: Dans quelle commune l'établissement est-il implanté ?
|
||||
description: |
|
||||
Lorsqu'une entreprise dispose de plusieurs établissements, certaines cotisations sont
|
||||
calculées à l'échelle de l'établissement et sont fonction de règlementations locales.
|
||||
# format: objet
|
||||
format: texte
|
||||
suggestions: communes
|
||||
|
|
|
@ -1,24 +1,30 @@
|
|||
import React, { Component } from 'react'
|
||||
import {FormDecorator} from '../FormDecorator'
|
||||
import VirtualizedSelect from 'react-virtualized-select'
|
||||
import createFilterOptions from 'react-select-fast-filter-options'
|
||||
import ReactSelect from 'react-select'
|
||||
|
||||
import 'react-select/dist/react-select.css'
|
||||
import './Select.css'
|
||||
|
||||
|
||||
let getOptions = input =>
|
||||
input.length < 3 ?
|
||||
Promise.resolve({options: []}) :
|
||||
fetch(`https://geo.api.gouv.fr/communes?nom=${input}`)
|
||||
.then(response => {
|
||||
if (!response.ok)
|
||||
return [ {nom: 'Aucune commune trouvée', disabled: true} ]
|
||||
return response.json()
|
||||
})
|
||||
.then(json => ({options: json}))
|
||||
.catch(function(error) {
|
||||
console.log('Erreur dans la recherche de communes à partir du code postal', error) // eslint-disable-line no-console
|
||||
return {options: []}
|
||||
})
|
||||
|
||||
|
||||
@FormDecorator('select')
|
||||
export default class Select extends Component {
|
||||
state = {
|
||||
data: null
|
||||
}
|
||||
componentDidMount(){
|
||||
import(/* webpackChunkName: "communescsv" */ 'Règles/communes.csv')
|
||||
.then(module => this.setState({
|
||||
data: module,
|
||||
}))
|
||||
.catch(error => 'An error occurred while loading the component')
|
||||
}
|
||||
|
||||
render() {
|
||||
let {
|
||||
input: {
|
||||
|
@ -28,23 +34,21 @@ export default class Select extends Component {
|
|||
} = this.props,
|
||||
submitOnChange =
|
||||
option => {
|
||||
onChange(option.Nom_commune)
|
||||
onChange(option.code)
|
||||
submit()
|
||||
}
|
||||
|
||||
if (!this.state.data)
|
||||
return <div>Nous reçevons les données... </div>
|
||||
|
||||
return (
|
||||
<div className="select-answer commune">
|
||||
<VirtualizedSelect
|
||||
options={this.state.data}
|
||||
<ReactSelect.Async
|
||||
onChange={submitOnChange}
|
||||
ignoreAccents={false}
|
||||
labelKey="Nom_commune"
|
||||
valueKey="Nom_commune"
|
||||
labelKey="nom"
|
||||
optionRenderer={({nom, codeDepartement}) => nom + ` (${codeDepartement})`}
|
||||
placeholder="Entrez le nom de commune"
|
||||
noResultsText="Nous n'avons trouvé aucune commune"
|
||||
searchPromptText={null}
|
||||
loadingPlaceholder="Recherche en cours..."
|
||||
loadOptions={getOptions}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
|
|
@ -7,7 +7,7 @@ import {findRuleByName} from './rules'
|
|||
|
||||
import 'react-virtualized/styles.css'
|
||||
import {Table, Column} from 'react-virtualized'
|
||||
import taux_versement_transport from 'Règles/rémunération-travail/cotisations/ok/taux.json'
|
||||
import taux_versement_transport from 'Règles/rémunération-travail/cotisations/ok/liste-taux.json'
|
||||
|
||||
let constantNode = constant => ({nodeValue: constant, jsx: nodeValue => <span className="value">{nodeValue}</span>})
|
||||
|
||||
|
@ -641,7 +641,7 @@ export let mecanismSelection = (recurse,k,v) => {
|
|||
return rewriteNode(node,nodeValue,explanation,collectMissing)
|
||||
}
|
||||
|
||||
let indexOf = explanation => explanation.nodeValue ? R.findIndex(x => x['nomLaposte'] == explanation.nodeValue, R.values(taux_versement_transport)) : 0
|
||||
let indexOf = explanation => explanation.nodeValue ? R.findIndex(x => x['nomLaposte'] == explanation.nodeValue, taux_versement_transport) : 0
|
||||
let indexOffset = 8
|
||||
|
||||
let jsx = (nodeValue, explanation) =>
|
||||
|
@ -655,7 +655,7 @@ export let mecanismSelection = (recurse,k,v) => {
|
|||
height={300}
|
||||
headerHeight={20}
|
||||
rowHeight={30}
|
||||
rowCount={R.values(taux_versement_transport).length}
|
||||
rowCount={taux_versement_transport.length}
|
||||
scrollToIndex={indexOf(explanation)+indexOffset}
|
||||
rowStyle={
|
||||
({ index }) => index == indexOf(explanation) ? { fontWeight: "bold" } : {}
|
||||
|
@ -663,7 +663,7 @@ export let mecanismSelection = (recurse,k,v) => {
|
|||
rowGetter={
|
||||
({ index }) => {
|
||||
// transformation de données un peu crade du fichier taux.json qui gagnerait à être un CSV
|
||||
let line = R.values(taux_versement_transport)[index],
|
||||
let line = taux_versement_transport[index],
|
||||
getLastTaux = dataTargetName => {
|
||||
let lastTaux = R.values(R.path([dataTargetName, 'taux'], line))
|
||||
return (lastTaux && lastTaux.length && lastTaux[0]) || 0
|
||||
|
|
|
@ -6,7 +6,7 @@ import possibleVariableTypes from './possibleVariableTypes.yaml'
|
|||
import marked from './marked'
|
||||
|
||||
// TODO - should be in UI, not engine
|
||||
import taux_versement_transport from '../../règles/rémunération-travail/cotisations/ok/taux.json'
|
||||
import taux_versement_transport from '../../règles/rémunération-travail/cotisations/ok/liste-taux.json'
|
||||
|
||||
// console.log('rawRules', rawRules.map(({espace, nom}) => espace + nom))
|
||||
/***********************************
|
||||
|
|
|
@ -242,7 +242,7 @@ describe('analyseSituation with mecanisms', function() {
|
|||
|
||||
it('should handle selection', function() {
|
||||
let stateSelector = (name) => ({"top . code postal":"2"})[name]
|
||||
let data = {taux_versement_transport: {xyz: {codePostal:1, aot: {taux: {"2019":"1.0"}}}, abc: {codePostal:2, smt: {taux: {"2019":"2.0"}}}}}
|
||||
let data = {taux_versement_transport: [{codePostal:1, aot: {taux: {"2019":"1.0"}}}, {codePostal:2, smt: {taux: {"2019":"2.0"}}}]}
|
||||
let rawRules = [
|
||||
{ espace: "top",
|
||||
nom: "startHere",
|
||||
|
@ -260,7 +260,7 @@ describe('analyseSituation with mecanisms', function() {
|
|||
|
||||
it('should handle failed selections', function() {
|
||||
let stateSelector = (name) => ({"top . code postal":"3"})[name]
|
||||
let data = {taux_versement_transport: {xyz: {codePostal:1, aot: {taux: {"2019":"1.0"}}}, abc: {codePostal:2, smt: {taux: {"2019":"2.0"}}}}}
|
||||
let data = {taux_versement_transport: [{codePostal:1, aot: {taux: {"2019":"1.0"}}}, {codePostal:2, smt: {taux: {"2019":"2.0"}}}]}
|
||||
let rawRules = [
|
||||
{ espace: "top",
|
||||
nom: "startHere",
|
||||
|
|
Loading…
Reference in New Issue