Skip to content

Commit

Permalink
fix: various calculator fixes and tweaks (#2872)
Browse files Browse the repository at this point in the history
  • Loading branch information
sirtawast authored Mar 7, 2024
1 parent d536285 commit ae0f48b
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 26 deletions.
9 changes: 7 additions & 2 deletions backend/benefit/calculator/rules.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,13 @@ def get_item_in_effect(
training_compensation,
)
)
assert ranges[0].start_date == self.calculation.start_date
assert ranges[-1].end_date == self.calculation.end_date

if (
ranges[-1].end_date != self.calculation.end_date
or ranges[0].start_date != self.calculation.start_date
):
raise ValueError("Error in range of calculation.start_date / end_date")

return ranges

def get_amount(self, row_type: RowType, default=None):
Expand Down
9 changes: 9 additions & 0 deletions frontend/benefit/handler/public/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,10 @@
"monthlyAmount": {
"label": "Koulutuskorvaus",
"placeholder": "Koulutuskorvaus € / kk"
},
"unknownField": {
"label": "Tunnistamaton kenttä",
"placeholder": ""
}
},
"notifications": {
Expand Down Expand Up @@ -920,6 +924,11 @@
"header": "Myönnettävä Helsinki-lisä",
"header2": "Arvio koostuu seuraavista tiedoista:",
"acceptedBenefit": "Myönnettävä Helsinki-lisä"
},
"errors": {
"trainingCompensation": {
"invalid": "Koulutuskorvausrivin syöttö on vielä kesken. Lisää rivi laskelmaan."
}
}
},
"organizationTypes": {
Expand Down
9 changes: 9 additions & 0 deletions frontend/benefit/handler/public/locales/fi/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,10 @@
"monthlyAmount": {
"label": "Koulutuskorvaus",
"placeholder": "Koulutuskorvaus € / kk"
},
"unknownField": {
"label": "Tunnistamaton kenttä",
"placeholder": ""
}
},
"notifications": {
Expand Down Expand Up @@ -920,6 +924,11 @@
"header": "Myönnettävä Helsinki-lisä",
"header2": "Arvio koostuu seuraavista tiedoista:",
"acceptedBenefit": "Myönnettävä Helsinki-lisä"
},
"errors": {
"trainingCompensation": {
"invalid": "Koulutuskorvausrivin syöttö on vielä kesken. Lisää rivi laskelmaan."
}
}
},
"organizationTypes": {
Expand Down
9 changes: 9 additions & 0 deletions frontend/benefit/handler/public/locales/sv/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,10 @@
"monthlyAmount": {
"label": "Koulutuskorvaus",
"placeholder": "Koulutuskorvaus € / kk"
},
"unknownField": {
"label": "Tunnistamaton kenttä",
"placeholder": ""
}
},
"notifications": {
Expand Down Expand Up @@ -920,6 +924,11 @@
"header": "Myönnettävä Helsinki-lisä",
"header2": "Arvio koostuu seuraavista tiedoista:",
"acceptedBenefit": "Myönnettävä Helsinki-lisä"
},
"errors": {
"trainingCompensation": {
"invalid": "Koulutuskorvausrivin syöttö on vielä kesken. Lisää rivi laskelmaan."
}
}
},
"organizationTypes": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import ReviewSection from 'benefit/handler/components/reviewSection/ReviewSectio
import { CALCULATION_TYPES } from 'benefit/handler/constants';
import { useCalculatorData } from 'benefit/handler/hooks/useCalculatorData';
import { SalaryBenefitCalculatorViewProps } from 'benefit/handler/types/application';
import { PAY_SUBSIDY_GRANTED } from 'benefit-shared/constants';
import { PaySubsidy } from 'benefit-shared/types/application';
import {
Button,
Expand Down Expand Up @@ -179,16 +180,23 @@ const SalaryBenefitCalculatorView: React.FC<
/>
</$GridCell>

<$GridCell $colStart={1} $colSpan={11}>
<$CalculatorHeader>
{t(`${translationsBase}.subsidies`)}
</$CalculatorHeader>
</$GridCell>
{formik.values.paySubsidies && (
{formik.values.paySubsidies?.length > 0 && (
<$GridCell $colStart={1} $colSpan={11}>
<h3 style={{ fontSize: theme.fontSize.heading.xs, margin: 0 }}>
{t(`${translationsBase}.paySubsidy`)}
</h3>
<$CalculatorHeader as="div">
<p style={{ marginBottom: '0.5em' }}>
{t(`${translationsBase}.subsidies`)}
</p>
<$ViewField>
<strong>
{t(`${translationsBase}.paySubsidy`)}{' '}
{data.paySubsidyGranted === PAY_SUBSIDY_GRANTED.GRANTED_AGED
? `(${t(
'applications.sections.fields.paySubsidyGranted.grantedAged'
)})`
: null}
</strong>
</$ViewField>
</$CalculatorHeader>
</$GridCell>
)}
{formik.values.paySubsidies?.map(
Expand Down Expand Up @@ -607,6 +615,15 @@ const SalaryBenefitCalculatorView: React.FC<
$colSpan={11}
style={{ marginTop: 'var(--spacing-xs)' }}
>
<$ViewField
css={`
color: ${theme.colors.brick};
`}
>
{isDisabledAddTrainingCompensationButton === false &&
t('common:calculators.errors.trainingCompensation.invalid')}
</$ViewField>

<Button
onClick={handleSubmit}
theme="coat"
Expand Down Expand Up @@ -634,11 +651,14 @@ const SalaryBenefitCalculatorView: React.FC<
</$Notification>
</$GridCell>
)}
<SalaryCalculatorResults
data={data}
isManualCalculator={isManualCalculator}
isRecalculationRequired={isRecalculationRequired}
/>

{!calculationsErrors && (
<SalaryCalculatorResults
data={data}
isManualCalculator={isManualCalculator}
isRecalculationRequired={isRecalculationRequired}
/>
)}
</ReviewSection>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ const SalaryCalculatorResults: React.FC<ApplicationReviewViewProps> = ({
if (isRecalculationRequired) {
return null;
}

if (rowsWithoutTotal.length === 0) {
return null;
}

return (
<$GridCell
$colSpan={11}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
TrainingCompensation,
} from 'benefit-shared/types/application';
import { FormikProps, useFormik } from 'formik';
import clone from 'lodash/clone';
import fromPairs from 'lodash/fromPairs';
import { useTranslation } from 'next-i18next';
import React, { Dispatch, SetStateAction, useEffect, useState } from 'react';
Expand Down Expand Up @@ -47,6 +48,13 @@ type ExtendedComponentProps = {
isDisabledAddTrainingCompensationButton: boolean;
};

const initialTrainingCompensationValues = {
id: '',
monthlyAmount: '',
startDate: '',
endDate: '',
};

const useSalaryBenefitCalculatorData = (
application: Application
): ExtendedComponentProps => {
Expand All @@ -60,12 +68,7 @@ const useSalaryBenefitCalculatorData = (
useHandlerReviewActions(application);

const [newTrainingCompensation, setNewTrainingCompensation] =
useState<TrainingCompensation>({
id: '',
monthlyAmount: '',
startDate: '',
endDate: '',
});
useState<TrainingCompensation>(clone(initialTrainingCompensationValues));

const [
isDisabledAddTrainingCompensationButton,
Expand Down Expand Up @@ -136,6 +139,7 @@ const useSalaryBenefitCalculatorData = (
id: uuidv4(),
},
]);
setNewTrainingCompensation(clone(initialTrainingCompensationValues));
};

const removeTrainingCompensation = (id: string): void => {
Expand Down
23 changes: 19 additions & 4 deletions frontend/benefit/handler/src/hooks/useHandlerReviewActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { ErrorData } from 'benefit-shared/types/common';
import camelcaseKeys from 'camelcase-keys';
import isEmpty from 'lodash/isEmpty';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import React, { useEffect, useState } from 'react';
import { convertToBackendDateFormat } from 'shared/utils/date.utils';
import { stringToFloatValue } from 'shared/utils/string.utils';
Expand Down Expand Up @@ -40,6 +41,8 @@ const useHandlerReviewActions = (

const { updateStatus } = useApplicationActions(application);

const { t } = useTranslation();

// ACCEPTED, REJECTED
const onDone = React.useCallback((): void => {
if (handledApplication?.status) {
Expand Down Expand Up @@ -161,13 +164,25 @@ const useHandlerReviewActions = (

useEffect(() => {
if (updateApplicationQuery.error) {
setCalculationErrors(
camelcaseKeys(updateApplicationQuery.error?.response?.data ?? {})
);
// Can parse error codes from data on 400s, set generic error on 500
if (
updateApplicationQuery.error.response?.status >= 400 &&
updateApplicationQuery.error.response?.status < 500
) {
setCalculationErrors(
camelcaseKeys(updateApplicationQuery.error.response?.data ?? {})
);
} else {
setCalculationErrors({
calculation: {
unknownField: t('common:calculators.notifications.error.message'),
},
} as ErrorData);
}
} else {
setCalculationErrors(null);
}
}, [updateApplicationQuery.error, setCalculationErrors]);
}, [updateApplicationQuery.error, setCalculationErrors, t]);

const onCalculateEmployment = (calculator: CalculationFormProps): void => {
void updateApplicationQuery.mutate(getDataEmployment(calculator));
Expand Down

0 comments on commit ae0f48b

Please sign in to comment.