- implemented feature-132 - new status technical_evaluation;
This commit is contained in:
@@ -71,6 +71,7 @@ const DomandaEditInstructorManager = () => {
|
||||
const [isVisibleCompleteDialog, setIsVisibleCompleteDialog] = useState(false);
|
||||
const [operationType, setOperationType] = useState('');
|
||||
const [motivation, setMotivation] = useState('');
|
||||
const [amountAccepted, setAmountAccepted] = useState(0);
|
||||
const [isVisibleAppointmentDialog, setIsVisibleAppointmentDialog] = useState(false);
|
||||
const [allFilesRated, setAllFilesRated] = useState(false);
|
||||
const [atLeastOneChecked, setAtLeastOneChecked] = useState(false);
|
||||
@@ -167,10 +168,14 @@ const DomandaEditInstructorManager = () => {
|
||||
if (connectedSoccorsoId !== 0) {
|
||||
navigate(`/mie-domande/${id}/soccorso/${connectedSoccorsoId}`);
|
||||
} else {
|
||||
doSaveDraft(`/mie-domande/${id}/aggiungi-soccorso/`)
|
||||
doSaveDraft(navigateToNewSoccorso)
|
||||
}
|
||||
}
|
||||
|
||||
const navigateToNewSoccorso = () => {
|
||||
navigate(`/mie-domande/${id}/aggiungi-soccorso/`);
|
||||
}
|
||||
|
||||
const getVersion = (resp) => {
|
||||
if (resp.status === 'SUCCESS') {
|
||||
if (resp.data.evaluationVersion === 'V1') {
|
||||
@@ -306,7 +311,7 @@ const DomandaEditInstructorManager = () => {
|
||||
}, []);
|
||||
}
|
||||
|
||||
const doSaveDraft = useCallback((doRedirect = '') => {
|
||||
const doSaveDraft = useCallback((afterUpdateCallback = null, cfgModifier = {}) => {
|
||||
if (data.evaluationVersion === 'V1') {
|
||||
const submitData = {
|
||||
criteria: klona(data.criteria),
|
||||
@@ -318,13 +323,14 @@ const DomandaEditInstructorManager = () => {
|
||||
})
|
||||
)),
|
||||
amendmentDetails: klona(data.amendmentDetails),
|
||||
note: data.note
|
||||
note: data.note,
|
||||
...cfgModifier
|
||||
};
|
||||
|
||||
ApplicationEvaluationService.updateEvaluation(
|
||||
data.assignedApplicationId,
|
||||
submitData,
|
||||
(data) => updateCallback(data, doRedirect),
|
||||
(data) => updateCallback(data, afterUpdateCallback),
|
||||
errUpdateCallback
|
||||
);
|
||||
} else if (data.evaluationVersion === 'V2') {
|
||||
@@ -338,20 +344,26 @@ const DomandaEditInstructorManager = () => {
|
||||
})
|
||||
)),
|
||||
amendmentDetails: klona(data.amendmentDetails),
|
||||
note: data.note
|
||||
note: data.note,
|
||||
...cfgModifier
|
||||
}
|
||||
|
||||
ApplicationEvaluationService.updateEvaluationV2(
|
||||
data.assignedApplicationId,
|
||||
formId,
|
||||
submitData,
|
||||
(data) => updateCallback(data, doRedirect),
|
||||
(data) => updateCallback(data, afterUpdateCallback),
|
||||
errUpdateCallback
|
||||
);
|
||||
}
|
||||
}, [data]);
|
||||
|
||||
const updateCallback = (data, doRedirect = '') => {
|
||||
/**
|
||||
*
|
||||
* @param data {object}
|
||||
* @param afterUpdateCallback {function}
|
||||
*/
|
||||
const updateCallback = (data, afterUpdateCallback = null) => {
|
||||
if (data.status === 'SUCCESS') {
|
||||
setData(getFormattedData(data.data));
|
||||
if (toast.current) {
|
||||
@@ -361,8 +373,8 @@ const DomandaEditInstructorManager = () => {
|
||||
detail: data.message
|
||||
});
|
||||
}
|
||||
if (!isEmpty(doRedirect)) {
|
||||
navigate(doRedirect);
|
||||
if (afterUpdateCallback) {
|
||||
afterUpdateCallback();
|
||||
}
|
||||
}
|
||||
storeSet.main.unsetAsyncRequest();
|
||||
@@ -388,7 +400,8 @@ const DomandaEditInstructorManager = () => {
|
||||
checklist: klona(data.checklist),
|
||||
files: klona(data.files),
|
||||
note: data.note,
|
||||
motivation
|
||||
motivation,
|
||||
amountAccepted
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
@@ -396,8 +409,8 @@ const DomandaEditInstructorManager = () => {
|
||||
ApplicationEvaluationService.updateEvaluation(
|
||||
data.assignedApplicationId,
|
||||
submitData,
|
||||
updateStatusCallback,
|
||||
errUpdateStatusCallback
|
||||
approveRejectCallback,
|
||||
errApproveRejectCallback
|
||||
);
|
||||
} else if (data.evaluationVersion === 'V2') {
|
||||
const newFormValues = getTransformedSubmitData();
|
||||
@@ -411,7 +424,8 @@ const DomandaEditInstructorManager = () => {
|
||||
)),
|
||||
amendmentDetails: klona(data.amendmentDetails),
|
||||
note: data.note,
|
||||
motivation
|
||||
motivation,
|
||||
amountAccepted
|
||||
}
|
||||
|
||||
setLoading(true);
|
||||
@@ -420,8 +434,8 @@ const DomandaEditInstructorManager = () => {
|
||||
data.assignedApplicationId,
|
||||
formId,
|
||||
submitData,
|
||||
updateStatusCallback,
|
||||
errUpdateStatusCallback
|
||||
approveRejectCallback,
|
||||
errApproveRejectCallback
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -442,8 +456,8 @@ const DomandaEditInstructorManager = () => {
|
||||
ApplicationEvaluationService.updateEvaluation(
|
||||
data.assignedApplicationId,
|
||||
submitData,
|
||||
updateStatusCallback,
|
||||
errUpdateStatusCallback
|
||||
approveRejectCallback,
|
||||
errApproveRejectCallback
|
||||
);
|
||||
} else if (data.evaluationVersion === 'V2') {
|
||||
const newFormValues = getTransformedSubmitData();
|
||||
@@ -466,13 +480,13 @@ const DomandaEditInstructorManager = () => {
|
||||
data.assignedApplicationId,
|
||||
formId,
|
||||
submitData,
|
||||
updateStatusCallback,
|
||||
errUpdateStatusCallback
|
||||
approveRejectCallback,
|
||||
errApproveRejectCallback
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const updateStatusCallback = (data) => {
|
||||
const approveRejectCallback = (data) => {
|
||||
if (data.status === 'SUCCESS') {
|
||||
setData(getFormattedData(data.data));
|
||||
if (toast.current) {
|
||||
@@ -486,7 +500,7 @@ const DomandaEditInstructorManager = () => {
|
||||
setLoading(false);
|
||||
}
|
||||
|
||||
const errUpdateStatusCallback = (data) => {
|
||||
const errApproveRejectCallback = (data) => {
|
||||
if (toast.current && data.message) {
|
||||
toast.current.show({
|
||||
severity: 'error',
|
||||
@@ -575,10 +589,10 @@ const DomandaEditInstructorManager = () => {
|
||||
set404FromErrorResponse(data);
|
||||
}
|
||||
|
||||
const shouldDisableField = (fieldName) => {
|
||||
return !['EVALUATION'].includes(data.applicationStatus)
|
||||
const shouldDisableField = useCallback((fieldName) => {
|
||||
return !['EVALUATION', 'ADMISSIBLE'].includes(data.applicationStatus)
|
||||
|| (['ADMISSIBLE'].includes(data.applicationStatus) && fieldName !== 'criteria')
|
||||
}
|
||||
}, [data.applicationStatus]);
|
||||
|
||||
const headerCompleteDialog = () => {
|
||||
return 'approve' === operationType
|
||||
@@ -592,15 +606,15 @@ const DomandaEditInstructorManager = () => {
|
||||
setMotivation('');
|
||||
}
|
||||
|
||||
const footerCompleteDialog = () => {
|
||||
const footerCompleteDialog = useCallback(() => {
|
||||
return <div>
|
||||
<Button type="button" label={__('Anulla', 'gepafin')} onClick={hideCompleteDialog} outlined/>
|
||||
<Button
|
||||
type="button"
|
||||
disabled={loading}
|
||||
disabled={loading || ('approve' === operationType && (!amountAccepted || isEmpty(amountAccepted) || amountAccepted === 0))}
|
||||
label={__('Invia', 'gepafin')} onClick={'approve' === operationType ? doApprove : doReject}/>
|
||||
</div>
|
||||
}
|
||||
}, [amountAccepted])
|
||||
|
||||
const initiateApproving = () => {
|
||||
setOperationType('approve');
|
||||
@@ -614,11 +628,12 @@ const DomandaEditInstructorManager = () => {
|
||||
}
|
||||
|
||||
const doCheckNDG = () => {
|
||||
doSaveDraft(doGetNDGRequest);
|
||||
}
|
||||
|
||||
const doGetNDGRequest = () => {
|
||||
storeSet.main.setAsyncRequest();
|
||||
doSaveDraft();
|
||||
setTimeout(() => {
|
||||
AppointmentService.getNdg(id, getNdgCallback, errGetNdgCallback);
|
||||
}, 100);
|
||||
AppointmentService.getNdg(id, getNdgCallback, errGetNdgCallback);
|
||||
}
|
||||
|
||||
const getNdgCallback = (data) => {
|
||||
@@ -733,9 +748,19 @@ const DomandaEditInstructorManager = () => {
|
||||
}
|
||||
|
||||
const doMakeAdmisible = () => {
|
||||
// TODO
|
||||
doSaveDraft(null, {
|
||||
applicationStatus: 'ADMISSIBLE'
|
||||
});
|
||||
}
|
||||
|
||||
const doPassTechnicalEvaluation = useCallback(() => {
|
||||
if (isAdmissible) {
|
||||
doSaveDraft(null, {
|
||||
applicationStatus: 'TECHNICAL_EVALUATION'
|
||||
});
|
||||
}
|
||||
}, [isAdmissible]);
|
||||
|
||||
const evaluationBlockedForUser = (data = {}) => {
|
||||
const userData = storeGet.main.userData();
|
||||
return isAsyncRequest || userData.id !== data.assignedUserId;
|
||||
@@ -807,9 +832,13 @@ const DomandaEditInstructorManager = () => {
|
||||
/>
|
||||
<Button
|
||||
type="button"
|
||||
disabled={true}
|
||||
onClick={() => {
|
||||
}}
|
||||
disabled={!data.id || !['ADMISSIBLE'].includes(data.applicationStatus) || evaluationBlockedForUser(data)}
|
||||
onClick={doPassTechnicalEvaluation}
|
||||
icon="pi pi-info-circle" iconPos="right"
|
||||
tooltip={isAdmissible
|
||||
? __('Punteggio sufficiente per passaggio alla valutazione tecnica ed economico finanziaria', 'gepafin')
|
||||
: __('Punteggio non sufficiente per passaggio alla valutazione tecnica ed economico finanziaria', 'gepafin')}
|
||||
severity={isAdmissible ? 'success' : 'warning'}
|
||||
label={__('Valutazione tecnico-finanziaria positiva', 'gepafin')}
|
||||
/>
|
||||
{data.id
|
||||
@@ -818,7 +847,7 @@ const DomandaEditInstructorManager = () => {
|
||||
disabled={!isAdmissible
|
||||
|| ['APPROVED'].includes(data.applicationStatus)
|
||||
|| evaluationBlockedForUser(data)
|
||||
|| (APP_EVALUATION_FLOW_ID === '1' && !['ADMISSIBLE'].includes(data.applicationStatus))
|
||||
|| (APP_EVALUATION_FLOW_ID === '1' && !['ADMISSIBLE', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus))
|
||||
}
|
||||
onClick={initiateApproving}
|
||||
label={__('Domanda deliberata', 'gepafin')}
|
||||
@@ -827,7 +856,7 @@ const DomandaEditInstructorManager = () => {
|
||||
? <Button
|
||||
type="button"
|
||||
disabled={APP_EVALUATION_FLOW_ID === '1'
|
||||
&& (!['EVALUATION', 'ADMISSIBLE', 'APPOINTMENT'].includes(data.applicationStatus)
|
||||
&& (!['EVALUATION', 'ADMISSIBLE', 'APPOINTMENT', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus)
|
||||
|| evaluationBlockedForUser(data))}
|
||||
onClick={initiateRejecting}
|
||||
label={__('Respingi domanda', 'gepafin')}
|
||||
@@ -1211,6 +1240,18 @@ const DomandaEditInstructorManager = () => {
|
||||
footer={footerCompleteDialog}
|
||||
style={{ maxWidth: '600px', width: '100%' }}
|
||||
onHide={hideCompleteDialog}>
|
||||
{operationType === 'approve'
|
||||
? <div className="appForm__field">
|
||||
<label
|
||||
className={classNames({ 'p-error': !amountAccepted || isEmpty(amountAccepted) || amountAccepted === 0 })}>
|
||||
{__('Importo approvato', 'gepafin')}
|
||||
</label>
|
||||
<InputNumber
|
||||
value={amountAccepted}
|
||||
keyfilter="int"
|
||||
invalid={!amountAccepted || isEmpty(amountAccepted) || amountAccepted === 0}
|
||||
onChange={(e) => setAmountAccepted(e.value)}/>
|
||||
</div> : null}
|
||||
<div className="appForm__field">
|
||||
<label>{__('Motivazione', 'gepafin')}</label>
|
||||
<Editor
|
||||
|
||||
Reference in New Issue
Block a user