diff --git a/.env b/.env index 871e4c5..16f67c8 100644 --- a/.env +++ b/.env @@ -4,6 +4,7 @@ REACT_APP_API_ADDRESS=https://api-dev-gepafin.memento.credit REACT_APP_API_ADDRESS_WS=https://api-dev-gepafin.memento.credit/wss REACT_APP_LOGO_FILENAME=gepafin-logo.svg REACT_APP_FAVICON_FILENAME=gepafin-favicon.ico +# t7jh5wfg9QXylNaTZkPoE - sviluppumbria | p4lk3bcx1RStqTaIVVbXs - gepafin REACT_APP_HUB_ID=p4lk3bcx1RStqTaIVVbXs REACT_APP_EVALUATION_FLOW_ID=1 REACT_APP_LOCAL_DEVELOPMENT=1 diff --git a/src/assets/scss/components/evaluation.scss b/src/assets/scss/components/evaluation.scss index 1498d2f..97b6888 100644 --- a/src/assets/scss/components/evaluation.scss +++ b/src/assets/scss/components/evaluation.scss @@ -38,4 +38,58 @@ th, td { padding: 3px; } +} + +.file-upload-container { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.file-upload-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.5rem; + border: 1px solid #dee2e6; + border-radius: 4px; + background-color: #f8f9fa; + + .file-name { + font-size: 0.875rem; + color: #495057; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 1; + margin-right: 0.5rem; + + .pi-file { + margin-right: 0.5rem; + } + } + + .p-button { + min-width: auto; + padding: 0.25rem; + } +} + +.file-upload-button { + cursor: pointer; + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + border-radius: 4px; + border: 1px dashed #007ad9; + background-color: transparent; + color: #007ad9; + font-size: 0.875rem; + text-decoration: none; + transition: background-color 0.2s; + + &:hover { + background-color: rgba(0, 122, 217, 0.04); + } } \ No newline at end of file diff --git a/src/components/FormField/components/CriteriaTable/RenderTable/components/LastRowCell/index.js b/src/components/FormField/components/CriteriaTable/RenderTable/components/LastRowCell/index.js index 1c2dcc2..1123085 100644 --- a/src/components/FormField/components/CriteriaTable/RenderTable/components/LastRowCell/index.js +++ b/src/components/FormField/components/CriteriaTable/RenderTable/components/LastRowCell/index.js @@ -2,7 +2,7 @@ import { head, is, isNil, pathOr } from 'ramda'; import getNumberFormatted from '../../../../../../../helpers/getNumberFormatted'; const LastRowCell = ({columnId, lastRowCfg, columnMeta = {}, tableValue = []}) => { - const cellData = head(lastRowCfg.filter(o => !isNil(o[columnId]))); + const cellData = pathOr({}, [], head(lastRowCfg.filter(o => !isNil(o[columnId])))); let cellValue = cellData[columnId]; if (columnMeta.enableFormula) { diff --git a/src/components/FormField/components/Table/RenderTable/components/LastRowCell/index.js b/src/components/FormField/components/Table/RenderTable/components/LastRowCell/index.js index e9c400d..a0d15c2 100644 --- a/src/components/FormField/components/Table/RenderTable/components/LastRowCell/index.js +++ b/src/components/FormField/components/Table/RenderTable/components/LastRowCell/index.js @@ -1,9 +1,9 @@ -import { head, isNil, sum } from 'ramda'; +import { head, isNil, pathOr, sum } from 'ramda'; import getNumberFormatted from '../../../../../../../helpers/getNumberFormatted'; import parseLocaleNumber from '../../../../../../../helpers/parseLocaleNumber'; const LastRowCell = ({columnId, lastRowCfg, columnMeta = {}, getColumnDataFn}) => { - const cellData = head(lastRowCfg.filter(o => !isNil(o[columnId]))); + const cellData = pathOr({}, [], head(lastRowCfg.filter(o => !isNil(o[columnId])))); let cellValue = cellData[columnId]; if (columnMeta.enableFormula) { diff --git a/src/helpers/getBandoLabel.js b/src/helpers/getBandoLabel.js index 286c9d2..6c27fdf 100644 --- a/src/helpers/getBandoLabel.js +++ b/src/helpers/getBandoLabel.js @@ -35,6 +35,9 @@ const getBandoLabel = (status) => { case 'TECHNICAL_EVALUATION': return __('Valutazione technico-finanziaria', 'gepafin'); + case 'AWAITING_TECHNICAL_EVALUATION': + return __('Pre valutazione technico-finanziaria', 'gepafin'); + case 'DUE': return __('In scadenza', 'gepafin'); diff --git a/src/helpers/getBandoSeverity.js b/src/helpers/getBandoSeverity.js index 115ab3b..5c54514 100644 --- a/src/helpers/getBandoSeverity.js +++ b/src/helpers/getBandoSeverity.js @@ -33,6 +33,9 @@ const getBandoSeverity = (status) => { case 'TECHNICAL_EVALUATION': return 'info'; + case 'AWAITING_TECHNICAL_EVALUATION': + return 'warning'; + case 'DUE': return 'warning'; diff --git a/src/pages/DomandaEditInstructorManager/index.js b/src/pages/DomandaEditInstructorManager/index.js index 39bf0b4..45667d8 100644 --- a/src/pages/DomandaEditInstructorManager/index.js +++ b/src/pages/DomandaEditInstructorManager/index.js @@ -4,9 +4,9 @@ import { useNavigate, useParams } from 'react-router-dom'; import { is, isEmpty, isNil, sum, pathOr, head, pluck } from 'ramda'; import { klona } from 'klona'; import { wrap } from 'object-path-immutable'; +import { useForm } from 'react-hook-form'; import { evaluate } from 'mathjs'; import equal from 'fast-deep-equal'; -import { useForm } from 'react-hook-form'; // store import { storeGet, storeSet, useStoreValue } from '../../store'; @@ -44,6 +44,7 @@ import { InputNumber } from 'primereact/inputnumber'; import { Toast } from 'primereact/toast'; import { Dialog } from 'primereact/dialog'; import HelpIcon from '../../icons/HelpIcon'; +import BlockingOverlay from '../../components/BlockingOverlay'; import { classNames } from 'primereact/utils'; import { InputTextarea } from 'primereact/inputtextarea'; import { InputText } from 'primereact/inputtext'; @@ -54,6 +55,7 @@ import ApplicationDownloadFiles from '../DomandaEditPreInstructor/components/App import FormField from '../../components/FormField'; import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/SoccorsoResendEmails'; import EvaluationReAdmit from '../DomandaEditPreInstructor/components/EvaluationReAdmit'; +import { SplitButton } from 'primereact/splitbutton'; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; @@ -69,12 +71,19 @@ const DomandaEditInstructorManager = () => { const [isAdmissible, setIsAdmissible] = useState(false); const [connectedSoccorsoId, setConnectedSoccorsoId] = useState(0); const toast = useRef(null); + const tecFinBtnRef = useRef(null); const [loading, setLoading] = useState(false); const [isVisibleCompleteDialog, setIsVisibleCompleteDialog] = useState(false); const [operationType, setOperationType] = useState(''); const [motivation, setMotivation] = useState(''); const [amountAccepted, setAmountAccepted] = useState(0); const [isVisibleAppointmentDialog, setIsVisibleAppointmentDialog] = useState(false); + const [isVisiblePreTecEvalDialog, setIsVisiblePreTecEvalDialog] = useState(false); + const [preTecEvalData, setPreTecEvalData] = useState({ + amendmentDocumentType: '', + pec: '', + amount: 0 + }); const [allFilesRated, setAllFilesRated] = useState(false); const [atLeastOneChecked, setAtLeastOneChecked] = useState(false); const [allChecksChecked, setAllChecksChecked] = useState(false); @@ -276,6 +285,40 @@ const DomandaEditInstructorManager = () => { }; const header = renderHeader(); + const technicalEvalItems = [ + { + label: __('Nessuna garanzia', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'NESSUNA_GARANZIA' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Garanzia MCC', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'GARANZIA_MCC' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Garanzia MCC Start-Up', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'MCC_START_UP' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Altre garanzie (fideiussioni)', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'ALTRE_GARANZIE' })); + setIsVisiblePreTecEvalDialog(true); + } + } + ] const updateEvaluationValue = (value, path, maxValue = null) => { let finalValue = value; @@ -579,6 +622,8 @@ const DomandaEditInstructorManager = () => { if (data.status === 'SUCCESS') { if (data.data.length) { setConnectedSoccorsoId(data.data[0].id); + } else { + setConnectedSoccorsoId(0); } } } @@ -700,7 +745,7 @@ const DomandaEditInstructorManager = () => { setIsVisibleAppointmentDialog(true); } - const setFieldValue = (name, value) => { + const setAppointmentFieldValue = (name, value) => { const newData = wrap(appointmentData).set(name, value).value(); setAppointmentData(newData); } @@ -724,6 +769,30 @@ const DomandaEditInstructorManager = () => { } + const setPreTecEvalFieldValue = (name, value) => { + const newData = wrap(preTecEvalData).set(name, value).value(); + setPreTecEvalData(newData); + } + + const headerPreTecEvalDialog = () => { + return {__('Valutazione Tecnico-Finanziaria', 'gepafin')}; + } + + const hidePreTecEvalDialog = () => { + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + } + + const footerPreTecEvalDialog = () => { + return
+
+ } + const doCreateAppointmentRequest = () => { if ( !isEmpty(appointmentData.title) && !isEmpty(appointmentData.text) && !isEmpty(appointmentData.amount) @@ -776,6 +845,48 @@ const DomandaEditInstructorManager = () => { storeSet('unsetAsyncRequest'); } + const doCreateSpecialAmendment = useCallback(() => { + if ( + !isEmpty(preTecEvalData.amount) && !isEmpty(preTecEvalData.pec) && !isEmpty(preTecEvalData.amendmentDocumentType) + ) { + storeSet('setAsyncRequest'); + + AmendmentsService.createAmendmentSpecial(preTecEvalData, getAmendmentSpecialCallback, errGetAmendmentSpecialCallback, + [ + ['applicationEvaluationId', data.id] + ]); + } + }, [preTecEvalData, data]); + + const getAmendmentSpecialCallback = (data) => { + if (data.status === 'SUCCESS') { + if (toast.current && data.message) { + toast.current.show({ + severity: 'success', + summary: '', + detail: data.message + }); + } + } + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + storeSet('unsetAsyncRequest'); + } + + const errGetAmendmentSpecialCallback = (data) => { + if (toast.current && data.message) { + toast.current.show({ + severity: data.status === 'SUCCESS' ? 'info' : 'error', + summary: '', + detail: data.message + }); + } + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + set404FromErrorResponse(data); + storeSet('unsetAsyncRequest'); + } + const doMakeAdmisible = () => { doSaveDraft(null, { applicationStatus: 'ADMISSIBLE' @@ -796,9 +907,9 @@ const DomandaEditInstructorManager = () => { } const shouldDisableNewSoccorso = () => { - if (data.evaluationVersion === 'V1') { - return !allFilesRated || !atLeastOneChecked; - } else if (data.evaluationVersion === 'V2') { + if (APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE') { + return !data.ndg || !data.appointmentId || !allFilesRated || !atLeastOneChecked; + } else if (APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE') { return !allFilesRated || !atLeastOneChecked; } else { return true; @@ -812,7 +923,11 @@ const DomandaEditInstructorManager = () => { const actionBtns = () => { return
- {['EVALUATION', 'SOCCORSO', 'CLOSE'].includes(data.applicationStatus) + {(['SOCCORSO', 'CLOSE', 'EVALUATION', 'NDG', 'APPOINTMENT', 'ADMISSIBLE', + 'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus) + && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE') + || (['SOCCORSO', 'CLOSE', 'EVALUATION', 'ADMISSIBLE', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus) + && APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE') ?
+ +
+ + setPreTecEvalFieldValue('amount', e.value)}/> +
+
+ + setPreTecEvalFieldValue('pec', e.target.value)}/> +
+ {/*
+ +
+ {(preTecEvalData.files || []).map((file, index) => ( +
+ + + {file.name} + + +
+ ))} +
+ { + const newFiles = Array.from(e.target.files); + const existingFiles = preTecEvalData.files || []; + setPreTecEvalFieldValue('files', [...existingFiles, ...newFiles]); + e.target.value = ''; + }} + /> + +
+
+
*/} +
+ : <> diff --git a/src/pages/DomandaEditPreInstructor/index.js b/src/pages/DomandaEditPreInstructor/index.js index 7433472..58ebd03 100644 --- a/src/pages/DomandaEditPreInstructor/index.js +++ b/src/pages/DomandaEditPreInstructor/index.js @@ -28,11 +28,11 @@ import { isPIVA, isUrl, maxChecks, minChecks, nonEmptyTables } from '../../helpers/validators'; +import formatDateString from '../../helpers/formatDateString'; import getTokens from '../../helpers/getTokens'; import parseCommaDecimal from '../../helpers/parseCommaDecimal'; import renderWithDataVars from '../../helpers/renderWithDataVars'; import renderHtmlContent from '../../helpers/renderHtmlContent'; -import formatDateString from '../../helpers/formatDateString'; // components import { Skeleton } from 'primereact/skeleton'; @@ -55,6 +55,7 @@ import ApplicationDownloadFiles from './components/ApplicationDownloadFiles'; import FormField from '../../components/FormField'; import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/SoccorsoResendEmails'; import EvaluationReAdmit from './components/EvaluationReAdmit'; +import { SplitButton } from 'primereact/splitbutton'; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; @@ -70,12 +71,19 @@ const DomandaEditPreInstructor = () => { const [isAdmissible, setIsAdmissible] = useState(false); const [connectedSoccorsoId, setConnectedSoccorsoId] = useState(0); const toast = useRef(null); + const tecFinBtnRef = useRef(null); const [loading, setLoading] = useState(false); const [isVisibleCompleteDialog, setIsVisibleCompleteDialog] = useState(false); const [operationType, setOperationType] = useState(''); const [motivation, setMotivation] = useState(''); const [amountAccepted, setAmountAccepted] = useState(0); const [isVisibleAppointmentDialog, setIsVisibleAppointmentDialog] = useState(false); + const [isVisiblePreTecEvalDialog, setIsVisiblePreTecEvalDialog] = useState(false); + const [preTecEvalData, setPreTecEvalData] = useState({ + amendmentDocumentType: '', + pec: '', + amount: 0 + }); const [allFilesRated, setAllFilesRated] = useState(false); const [atLeastOneChecked, setAtLeastOneChecked] = useState(false); const [allChecksChecked, setAllChecksChecked] = useState(false); @@ -127,6 +135,7 @@ const DomandaEditPreInstructor = () => { const updateFlagsForSoccorso = useCallback((data) => { let nonRatedFilesLength = 0; + let nonRatedAmmendFilesLength = 0; if (data.files) { const nonRatedFiles = data.files @@ -139,10 +148,10 @@ const DomandaEditPreInstructor = () => { const nonRatedFiles = data.amendmentDetails .map(el => el.valid) .filter(v => isNil(v)); - nonRatedFilesLength = nonRatedFiles.length; + nonRatedAmmendFilesLength = nonRatedFiles.length; } - setAllFilesRated(nonRatedFilesLength === 0); + setAllFilesRated(nonRatedFilesLength === 0 && nonRatedAmmendFilesLength === 0); if (data.evaluationVersion === 'V1') { if (data.checklist) { @@ -276,6 +285,40 @@ const DomandaEditPreInstructor = () => { }; const header = renderHeader(); + const technicalEvalItems = [ + { + label: __('Nessuna garanzia', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'NESSUNA_GARANZIA' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Garanzia MCC', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'GARANZIA_MCC' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Garanzia MCC Start-Up', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'MCC_START_UP' })); + setIsVisiblePreTecEvalDialog(true); + } + }, + { + label: __('Altre garanzie (fideiussioni)', 'gepafin'), + icon: 'pi pi-pen-to-square', + command: () => { + setPreTecEvalData(prev => ({ ...prev, amendmentDocumentType: 'ALTRE_GARANZIE' })); + setIsVisiblePreTecEvalDialog(true); + } + } + ] const updateEvaluationValue = (value, path, maxValue = null) => { let finalValue = value; @@ -418,6 +461,7 @@ const DomandaEditPreInstructor = () => { } else if (data.evaluationVersion === 'V2') { const newFormValues = getTransformedSubmitData(); const submitData = { + applicationStatus: 'APPROVED', formFields: newFormValues, files: klona(data.files), evaluationDocument: klona(data.evaluationDocument.map(o => ({ @@ -578,6 +622,8 @@ const DomandaEditPreInstructor = () => { if (data.status === 'SUCCESS') { if (data.data.length) { setConnectedSoccorsoId(data.data[0].id); + } else { + setConnectedSoccorsoId(0); } } } @@ -644,7 +690,7 @@ const DomandaEditPreInstructor = () => { setIsVisibleCompleteDialog(true); } - const initiateTFRejecting = () => { + const initiateTFRejecting = () => { setOperationType('tf_reject'); setIsVisibleCompleteDialog(true); } @@ -699,7 +745,7 @@ const DomandaEditPreInstructor = () => { setIsVisibleAppointmentDialog(true); } - const setFieldValue = (name, value) => { + const setAppointmentFieldValue = (name, value) => { const newData = wrap(appointmentData).set(name, value).value(); setAppointmentData(newData); } @@ -723,6 +769,30 @@ const DomandaEditPreInstructor = () => { } + const setPreTecEvalFieldValue = (name, value) => { + const newData = wrap(preTecEvalData).set(name, value).value(); + setPreTecEvalData(newData); + } + + const headerPreTecEvalDialog = () => { + return {__('Valutazione Tecnico-Finanziaria', 'gepafin')}; + } + + const hidePreTecEvalDialog = () => { + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + } + + const footerPreTecEvalDialog = () => { + return
+
+ } + const doCreateAppointmentRequest = () => { if ( !isEmpty(appointmentData.title) && !isEmpty(appointmentData.text) && !isEmpty(appointmentData.amount) @@ -775,6 +845,48 @@ const DomandaEditPreInstructor = () => { storeSet('unsetAsyncRequest'); } + const doCreateSpecialAmendment = useCallback(() => { + if ( + !isEmpty(preTecEvalData.amount) && !isEmpty(preTecEvalData.pec) && !isEmpty(preTecEvalData.amendmentDocumentType) + ) { + storeSet('setAsyncRequest'); + + AmendmentsService.createAmendmentSpecial(preTecEvalData, getAmendmentSpecialCallback, errGetAmendmentSpecialCallback, + [ + ['applicationEvaluationId', data.id] + ]); + } + }, [preTecEvalData, data]); + + const getAmendmentSpecialCallback = (data) => { + if (data.status === 'SUCCESS') { + if (toast.current && data.message) { + toast.current.show({ + severity: 'success', + summary: '', + detail: data.message + }); + } + } + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + storeSet('unsetAsyncRequest'); + } + + const errGetAmendmentSpecialCallback = (data) => { + if (toast.current && data.message) { + toast.current.show({ + severity: data.status === 'SUCCESS' ? 'info' : 'error', + summary: '', + detail: data.message + }); + } + setIsVisiblePreTecEvalDialog(false); + setPreTecEvalData({}); + set404FromErrorResponse(data); + storeSet('unsetAsyncRequest'); + } + const doMakeAdmisible = () => { doSaveDraft(null, { applicationStatus: 'ADMISSIBLE' @@ -790,14 +902,14 @@ const DomandaEditPreInstructor = () => { }, [isAdmissible]); const evaluationBlockedForUser = (data = {}) => { - const userData = storeGet('userData') + const userData = storeGet('userData'); return isAsyncRequest || userData.id !== data.assignedUserId; } const shouldDisableNewSoccorso = () => { - if (data.evaluationVersion === 'V1') { - return !allFilesRated || !atLeastOneChecked; - } else if (data.evaluationVersion === 'V2') { + if (APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE') { + return !data.ndg || !data.appointmentId || !allFilesRated || !atLeastOneChecked; + } else if (APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE') { return !allFilesRated || !atLeastOneChecked; } else { return true; @@ -811,7 +923,11 @@ const DomandaEditPreInstructor = () => { const actionBtns = () => { return
- {['EVALUATION', 'SOCCORSO', 'CLOSE'].includes(data.applicationStatus) + {(['SOCCORSO', 'CLOSE', 'EVALUATION', 'NDG', 'APPOINTMENT', 'ADMISSIBLE', + 'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus) + && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE') + || (['SOCCORSO', 'CLOSE', 'EVALUATION', 'ADMISSIBLE', 'TECHNICAL_EVALUATION'].includes(data.applicationStatus) + && APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE') ?
} @@ -1286,7 +1435,7 @@ const DomandaEditPreInstructor = () => { )} {__('Punteggio:', 'gepafin')} - {new Intl.NumberFormat("it-IT").format( + {new Intl.NumberFormat('it-IT').format( sum(data.criteria.map(o => o.score)) )} @@ -1378,7 +1527,7 @@ const DomandaEditPreInstructor = () => { locale="it-IT" minFractionDigits={2} invalid={isEmpty(appointmentData.amount) || appointmentData.amount === 0} - onChange={(e) => setFieldValue('amount', e.value)}/> + onChange={(e) => setAppointmentFieldValue('amount', e.value)}/>
+ +
+ + setPreTecEvalFieldValue('amount', e.value)}/> +
+
+ + setPreTecEvalFieldValue('pec', e.target.value)}/> +
+ {/*
+ +
+ {(preTecEvalData.files || []).map((file, index) => ( +
+ + + {file.name} + + +
+ ))} +
+ { + const newFiles = Array.from(e.target.files); + const existingFiles = preTecEvalData.files || []; + setPreTecEvalFieldValue('files', [...existingFiles, ...newFiles]); + e.target.value = ''; + }} + /> + +
+
+
*/} +
+ : <> diff --git a/src/pages/Domande/components/AllDomandeTable/index.js b/src/pages/Domande/components/AllDomandeTable/index.js index 2adb952..7a99f18 100644 --- a/src/pages/Domande/components/AllDomandeTable/index.js +++ b/src/pages/Domande/components/AllDomandeTable/index.js @@ -37,7 +37,7 @@ const AllDomandeTable = ({ openDialogFn, updaterString = '' }) => { ApplicationService.getApplications(getCallback, errGetCallbacks, [ ['statuses', [ 'SUBMIT', 'EVALUATION', 'SOCCORSO', - 'APPOINTMENT', 'NDG', 'ADMISSIBLE', 'TECHNICAL_EVALUATION' + 'APPOINTMENT', 'NDG', 'ADMISSIBLE', 'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION' ]] ]); }, [updaterString]); diff --git a/src/pages/Domande/components/AllDomandeTableAsync/index.js b/src/pages/Domande/components/AllDomandeTableAsync/index.js index 38fdcad..fea327d 100644 --- a/src/pages/Domande/components/AllDomandeTableAsync/index.js +++ b/src/pages/Domande/components/AllDomandeTableAsync/index.js @@ -43,7 +43,7 @@ const AllDomandeTableAsync = ({ openDialogFn, updaterString = '' }) => { status: { value: null, matchMode: 'equals' } } }); - const statuses = ['SUBMIT', 'EVALUATION', 'SOCCORSO', 'APPOINTMENT', 'NDG', 'ADMISSIBLE', 'TECHNICAL_EVALUATION']; + const statuses = ['SUBMIT', 'EVALUATION', 'SOCCORSO', 'APPOINTMENT', 'NDG', 'ADMISSIBLE', 'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION']; const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'id'), [lazyState]); diff --git a/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js b/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js index 54f3bf3..e1e5676 100644 --- a/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js +++ b/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js @@ -92,7 +92,7 @@ const AllDomandeBeneficiarioTableAsync = ({ statuses }) => { const actionsBodyTemplate = (rowData) => { return
- {rowData.status === 'SOCCORSO' + {['SOCCORSO', 'AWAITING_TECHNICAL_EVALUATION'].includes(rowData.status) ?
) diff --git a/src/service/amendments-service.js b/src/service/amendments-service.js index 9b9cc55..13a5a4d 100644 --- a/src/service/amendments-service.js +++ b/src/service/amendments-service.js @@ -42,6 +42,10 @@ export default class AmendmentsService { ]); }; + static createAmendmentSpecial = (body, callback, errCallback, queryParams) => { + NetworkService.post(`${API_BASE_URL}/amendments/special`, body, callback, errCallback, queryParams); + }; + static sendReminderForSoccorso = (id, callback, errCallback, queryParams) => { NetworkService.post(`${API_BASE_URL}/amendments/${id}/reminder`, {}, callback, errCallback, queryParams); };