feat: calcule la RGCP mois par mois à la saisie

pull/3197/head
Alice Dahan 2024-10-15 16:44:24 +02:00 committed by liliced
parent 7095e3ea40
commit 4b6d5796d3
2 changed files with 43 additions and 4 deletions

View File

@ -23,6 +23,7 @@ import EffectifSwitch from './components/EffectifSwitch'
import RéductionGénéraleMoisParMois from './RéductionGénéraleMoisParMois'
import {
getInitialRéductionGénéraleMoisParMois,
getRéductionGénéraleFromRémunération,
MonthState,
reevaluateRéductionGénéraleMoisParMois,
rémunérationBruteDottedName,
@ -114,10 +115,31 @@ function RéductionGénéraleSimulationGoals({
)
}, [engine, situation])
const onRémunérationChange = (
monthIndex: number,
rémunérationBrute: number
) => {
setData((previousData) => {
const updatedData = [...previousData]
updatedData[monthIndex] = {
rémunérationBrute,
réductionGénérale: getRéductionGénéraleFromRémunération(
engine,
rémunérationBrute
),
}
return updatedData
})
}
return (
<SimulationGoals toggles={toggles} legend={legend}>
{monthByMonth ? (
<RéductionGénéraleMoisParMois data={réductionGénéraleMoisParMoisData} />
<RéductionGénéraleMoisParMois
data={réductionGénéraleMoisParMoisData}
onChange={onRémunérationChange}
/>
) : (
<>
<SimulationGoal

View File

@ -1,4 +1,4 @@
import { formatValue } from 'publicodes'
import { formatValue, PublicodesExpression } from 'publicodes'
import { useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
@ -8,10 +8,17 @@ import { useEngine } from '@/components/utils/EngineContext'
import { MonthState, rémunérationBruteDottedName } from './utils'
type RémunérationBruteInput = {
unité: string
valeur: number
}
export default function RéductionGénéraleMoisParMois({
data,
onChange,
}: {
data: MonthState[]
onChange: (monthIndex: number, rémunérationBrute: number) => void
}) {
const engine = useEngine()
const { t, i18n } = useTranslation()
@ -33,7 +40,12 @@ export default function RéductionGénéraleMoisParMois({
t('décembre'),
]
const onRémunérationChange = () => {}
const onRémunérationChange = (
monthIndex: number,
rémunérationBrute: RémunérationBruteInput
) => {
onChange(monthIndex, rémunérationBrute.valeur)
}
// TODO: enlever les 4 premières props après résolution de #3123
const ruleInputProps = {
@ -87,7 +99,12 @@ export default function RéductionGénéraleMoisParMois({
)}-${monthIndex}`}
aria-label={`${engine.getRule(rémunérationBruteDottedName)
?.title} (${monthName})`}
onChange={onRémunérationChange}
onChange={(rémunérationBrute?: PublicodesExpression) =>
onRémunérationChange(
monthIndex,
rémunérationBrute as RémunérationBruteInput
)
}
value={data[monthIndex].rémunérationBrute}
/>
</td>