- updated implementation related to new rejection flow;

This commit is contained in:
Vitalii Kiiko
2025-10-16 15:22:50 +02:00
parent 61389f6c43
commit 8c8737e2ee
8 changed files with 274 additions and 48 deletions

View File

@@ -270,3 +270,29 @@ export const resendEmailLabelsByType = {
APPLICATION_ADMISSIBLE: 'Invia email (ammisibile)', APPLICATION_ADMISSIBLE: 'Invia email (ammisibile)',
APPLICATION_REJECTED: 'Invia email (respinto)' APPLICATION_REJECTED: 'Invia email (respinto)'
} }
export const rejectionReasons = [
{ label: 'Documentazione incompleta', text: 'la stessa è stata sottoposta ad istruttoria di ammissibilità con esito negativo.' },
{ label: 'Altri motivi', text: 'altri motivi' }
]
export const amendmentRequestedDocs = {
NESSUNA_GARANZIA: [
'lettera di accettazione firmata'
],
GARANZIA_MCC: [
'lettera di accettazione firmata',
'Modulo di domanda della agevolazione (ex allegato 4)'
],
MCC_START_UP: [
'lettera di accettazione firmata',
'Modulo di domanda della agevolazione (ex allegato 4)',
'Modello di valutazione bilanci previsionali',
'Modello valutazione start up'
],
ALTRE_GARANZIE: [
'lettera di accettazione firmata',
'modello privacy',
'autocertificazione e altri eventuali in zip/p7m'
],
}

View File

@@ -48,6 +48,7 @@ import BlockingOverlay from '../../components/BlockingOverlay';
import { classNames } from 'primereact/utils'; import { classNames } from 'primereact/utils';
import { InputTextarea } from 'primereact/inputtextarea'; import { InputTextarea } from 'primereact/inputtextarea';
import { InputText } from 'primereact/inputtext'; import { InputText } from 'primereact/inputtext';
import { Dropdown } from 'primereact/dropdown';
import ListOfFiles from '../DomandaEditPreInstructor/components/ListOfFiles'; import ListOfFiles from '../DomandaEditPreInstructor/components/ListOfFiles';
import RepeaterFields from '../DomandaEditPreInstructor/components/RepeaterFields'; import RepeaterFields from '../DomandaEditPreInstructor/components/RepeaterFields';
import ApplicationInfo from '../DomandaEditPreInstructor/components/ApplicationInfo'; import ApplicationInfo from '../DomandaEditPreInstructor/components/ApplicationInfo';
@@ -57,7 +58,7 @@ import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/Soccor
import EvaluationReAdmit from '../DomandaEditPreInstructor/components/EvaluationReAdmit'; import EvaluationReAdmit from '../DomandaEditPreInstructor/components/EvaluationReAdmit';
import { SplitButton } from 'primereact/splitbutton'; import { SplitButton } from 'primereact/splitbutton';
import { FileUpload } from 'primereact/fileupload'; import { FileUpload } from 'primereact/fileupload';
import { defaultMaxFileSize, mimeTypes } from '../../configData'; import { defaultMaxFileSize, mimeTypes, rejectionReasons } from '../../configData';
import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText';
const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID;
@@ -377,9 +378,15 @@ const DomandaEditInstructorManager = () => {
...cfgModifier ...cfgModifier
}; };
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
(data) => updateCallback(data, afterUpdateCallback), (data) => updateCallback(data, afterUpdateCallback),
errUpdateCallback errUpdateCallback
); );
@@ -398,10 +405,16 @@ const DomandaEditInstructorManager = () => {
...cfgModifier ...cfgModifier
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
(data) => updateCallback(data, afterUpdateCallback), (data) => updateCallback(data, afterUpdateCallback),
errUpdateCallback errUpdateCallback
); );
@@ -454,11 +467,17 @@ const DomandaEditInstructorManager = () => {
amountAccepted: finalDialogData.amount amountAccepted: finalDialogData.amount
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -479,12 +498,18 @@ const DomandaEditInstructorManager = () => {
amountAccepted: finalDialogData.amount amountAccepted: finalDialogData.amount
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -499,14 +524,27 @@ const DomandaEditInstructorManager = () => {
checklist: klona(data.checklist), checklist: klona(data.checklist),
files: klona(data.files), files: klona(data.files),
note: data.note, note: data.note,
motivation: finalDialogData.motivation motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject
}
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
if (finalDialogData.files && finalDialogData.files.length > 0) {
finalDialogData.files.forEach((file) => {
formDataToSend.append('rejectedDocuments', file);
});
} }
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -523,7 +561,20 @@ const DomandaEditInstructorManager = () => {
)), )),
amendmentDetails: klona(data.amendmentDetails), amendmentDetails: klona(data.amendmentDetails),
note: data.note, note: data.note,
motivation: finalDialogData.motivation motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject
}
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
if (finalDialogData.files && finalDialogData.files.length > 0) {
finalDialogData.files.forEach((file) => {
formDataToSend.append('rejectedDocuments', file);
});
} }
setLoading(true); setLoading(true);
@@ -531,7 +582,7 @@ const DomandaEditInstructorManager = () => {
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -956,7 +1007,7 @@ const DomandaEditInstructorManager = () => {
? <Button ? <Button
type="button" type="button"
disabled={!data.id || data.status === 'CLOSE' disabled={!data.id || data.status === 'CLOSE'
|| (data.applicationStatus !== 'SOCCORSO' && shouldDisableNewSoccorso()) || (!['SOCCORSO', 'AWAITING_TECHNICAL_EVALUATION'].includes(data.applicationStatus) && shouldDisableNewSoccorso())
|| evaluationBlockedForUser(data)} || evaluationBlockedForUser(data)}
onClick={doNewSoccorso} onClick={doNewSoccorso}
outlined outlined
@@ -1100,12 +1151,24 @@ const DomandaEditInstructorManager = () => {
setData(newData); setData(newData);
}, [data]); }, [data]);
const rejectionFiles = () => {
return data.rejectedDocument && !isEmpty(data.rejectedDocument) && ['REJECTED'].includes(data.applicationStatus)
? <ul>
{data.rejectedDocument.map(o => <li key={o.id}>
<a href={o.filePath}>{o.name}</a>
</li>)}
</ul> : null
}
const motivationMsg = () => { const motivationMsg = () => {
return data.motivation && !isEmpty(data.motivation) && ['REJECTED', 'APPROVED'].includes(data.applicationStatus) return data.motivation && !isEmpty(data.motivation) && ['REJECTED', 'APPROVED'].includes(data.applicationStatus)
? <div className="appPageSection__message info"> ? <div className="appPageSection__message info">
<i className="pi pi-info-circle"></i> <i className="pi pi-info-circle"></i>
<span className="summary">{__('Motivazione:', 'gepafin')}</span> <span className="summary">{__('Motivazione:', 'gepafin')}</span>
<div style={{display: 'flex', flexDirection: 'column', gap: 10}}>
<span>{renderHtmlContent(data.motivation)}</span> <span>{renderHtmlContent(data.motivation)}</span>
{rejectionFiles()}
</div>
</div> : null </div> : null
} }
@@ -1525,12 +1588,21 @@ const DomandaEditInstructorManager = () => {
invalid={!finalDialogData.amount || isEmpty(finalDialogData.amount) || finalDialogData.amount === 0} invalid={!finalDialogData.amount || isEmpty(finalDialogData.amount) || finalDialogData.amount === 0}
onChange={(e) => updateFinalDialogData(e.value, 'amount')}/> onChange={(e) => updateFinalDialogData(e.value, 'amount')}/>
</div> : null} </div> : null}
{operationType === 'reject' {operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE'
? <div className="appForm__field"> ? <div className="appForm__field">
<label className={classNames({ 'p-error': !finalDialogData.subject || isEmpty(finalDialogData.subject) })}> <label className={classNames({ 'p-error': !finalDialogData.subject || isEmpty(finalDialogData.subject) })}>
{__('Soggetto', 'gepafin')} {__('Oggetto', 'gepafin')}
</label> </label>
<Dropdown
value={null}
options={rejectionReasons}
optionLabel="label"
placeholder={__('Seleziona motivo', 'gepafin')}
onChange={(e) => updateFinalDialogData(e.value.text, 'subject')}
style={{ marginBottom: '10px' }}
/>
<InputText <InputText
name="subject"
value={finalDialogData.subject} value={finalDialogData.subject}
invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)} invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)}
onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/> onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/>
@@ -1550,7 +1622,7 @@ const DomandaEditInstructorManager = () => {
/> />
</div> </div>
</div> </div>
{operationType === 'reject' {operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE'
? <div className="appForm__field"> ? <div className="appForm__field">
<label> <label>
{__('Files', 'gepafin')} {__('Files', 'gepafin')}

View File

@@ -48,6 +48,7 @@ import BlockingOverlay from '../../components/BlockingOverlay';
import { classNames } from 'primereact/utils'; import { classNames } from 'primereact/utils';
import { InputTextarea } from 'primereact/inputtextarea'; import { InputTextarea } from 'primereact/inputtextarea';
import { InputText } from 'primereact/inputtext'; import { InputText } from 'primereact/inputtext';
import { Dropdown } from 'primereact/dropdown';
import ListOfFiles from './components/ListOfFiles'; import ListOfFiles from './components/ListOfFiles';
import RepeaterFields from './components/RepeaterFields'; import RepeaterFields from './components/RepeaterFields';
import ApplicationInfo from './components/ApplicationInfo'; import ApplicationInfo from './components/ApplicationInfo';
@@ -57,7 +58,7 @@ import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/Soccor
import EvaluationReAdmit from './components/EvaluationReAdmit'; import EvaluationReAdmit from './components/EvaluationReAdmit';
import { SplitButton } from 'primereact/splitbutton'; import { SplitButton } from 'primereact/splitbutton';
import { FileUpload } from 'primereact/fileupload'; import { FileUpload } from 'primereact/fileupload';
import { defaultMaxFileSize, mimeTypes } from '../../configData'; import { defaultMaxFileSize, mimeTypes, rejectionReasons } from '../../configData';
import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText';
const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID;
@@ -377,9 +378,15 @@ const DomandaEditPreInstructor = () => {
...cfgModifier ...cfgModifier
}; };
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
(data) => updateCallback(data, afterUpdateCallback), (data) => updateCallback(data, afterUpdateCallback),
errUpdateCallback errUpdateCallback
); );
@@ -398,10 +405,16 @@ const DomandaEditPreInstructor = () => {
...cfgModifier ...cfgModifier
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
(data) => updateCallback(data, afterUpdateCallback), (data) => updateCallback(data, afterUpdateCallback),
errUpdateCallback errUpdateCallback
); );
@@ -454,11 +467,17 @@ const DomandaEditPreInstructor = () => {
amountAccepted: finalDialogData.amount amountAccepted: finalDialogData.amount
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -479,12 +498,18 @@ const DomandaEditPreInstructor = () => {
amountAccepted: finalDialogData.amount amountAccepted: finalDialogData.amount
} }
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -499,14 +524,27 @@ const DomandaEditPreInstructor = () => {
checklist: klona(data.checklist), checklist: klona(data.checklist),
files: klona(data.files), files: klona(data.files),
note: data.note, note: data.note,
motivation: finalDialogData.motivation motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject
}
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('evaluationRequest', jsonBlob);
if (finalDialogData.files && finalDialogData.files.length > 0) {
finalDialogData.files.forEach((file) => {
formDataToSend.append('rejectedDocuments', file);
});
} }
setLoading(true); setLoading(true);
setIsVisibleCompleteDialog(false); setIsVisibleCompleteDialog(false);
ApplicationEvaluationService.updateEvaluation( ApplicationEvaluationService.updateEvaluation(
data.assignedApplicationId, data.assignedApplicationId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -523,7 +561,20 @@ const DomandaEditPreInstructor = () => {
)), )),
amendmentDetails: klona(data.amendmentDetails), amendmentDetails: klona(data.amendmentDetails),
note: data.note, note: data.note,
motivation: finalDialogData.motivation motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject
}
const formDataToSend = new FormData();
const jsonBlob = new Blob([JSON.stringify(submitData)], {
type: 'application/json'
});
formDataToSend.append('applicationEvaluationFormRequestBean', jsonBlob);
if (finalDialogData.files && finalDialogData.files.length > 0) {
finalDialogData.files.forEach((file) => {
formDataToSend.append('rejectedDocuments', file);
});
} }
setLoading(true); setLoading(true);
@@ -531,7 +582,7 @@ const DomandaEditPreInstructor = () => {
ApplicationEvaluationService.updateEvaluationV2( ApplicationEvaluationService.updateEvaluationV2(
data.assignedApplicationId, data.assignedApplicationId,
formId, formId,
submitData, formDataToSend,
approveRejectCallback, approveRejectCallback,
errApproveRejectCallback errApproveRejectCallback
); );
@@ -956,7 +1007,7 @@ const DomandaEditPreInstructor = () => {
? <Button ? <Button
type="button" type="button"
disabled={!data.id || data.status === 'CLOSE' disabled={!data.id || data.status === 'CLOSE'
|| (data.applicationStatus !== 'SOCCORSO' && shouldDisableNewSoccorso()) || (!['SOCCORSO', 'AWAITING_TECHNICAL_EVALUATION'].includes(data.applicationStatus) && shouldDisableNewSoccorso())
|| evaluationBlockedForUser(data)} || evaluationBlockedForUser(data)}
onClick={doNewSoccorso} onClick={doNewSoccorso}
outlined outlined
@@ -1100,12 +1151,24 @@ const DomandaEditPreInstructor = () => {
setData(newData); setData(newData);
}, [data]); }, [data]);
const rejectionFiles = () => {
return data.rejectedDocument && !isEmpty(data.rejectedDocument) && ['REJECTED'].includes(data.applicationStatus)
? <ul>
{data.rejectedDocument.map(o => <li key={o.id}>
<a href={o.filePath}>{o.name}</a>
</li>)}
</ul> : null
}
const motivationMsg = () => { const motivationMsg = () => {
return data.motivation && !isEmpty(data.motivation) && ['REJECTED', 'APPROVED'].includes(data.applicationStatus) return data.motivation && !isEmpty(data.motivation) && ['REJECTED', 'APPROVED'].includes(data.applicationStatus)
? <div className="appPageSection__message info"> ? <div className="appPageSection__message info">
<i className="pi pi-info-circle"></i> <i className="pi pi-info-circle"></i>
<span className="summary">{__('Motivazione:', 'gepafin')}</span> <span className="summary">{__('Motivazione:', 'gepafin')}</span>
<div style={{display: 'flex', flexDirection: 'column', gap: 10}}>
<span>{renderHtmlContent(data.motivation)}</span> <span>{renderHtmlContent(data.motivation)}</span>
{rejectionFiles()}
</div>
</div> : null </div> : null
} }
@@ -1525,12 +1588,21 @@ const DomandaEditPreInstructor = () => {
invalid={!finalDialogData.amount || isEmpty(finalDialogData.amount) || finalDialogData.amount === 0} invalid={!finalDialogData.amount || isEmpty(finalDialogData.amount) || finalDialogData.amount === 0}
onChange={(e) => updateFinalDialogData(e.value, 'amount')}/> onChange={(e) => updateFinalDialogData(e.value, 'amount')}/>
</div> : null} </div> : null}
{operationType === 'reject' {operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE'
? <div className="appForm__field"> ? <div className="appForm__field">
<label className={classNames({ 'p-error': !finalDialogData.subject || isEmpty(finalDialogData.subject) })}> <label className={classNames({ 'p-error': !finalDialogData.subject || isEmpty(finalDialogData.subject) })}>
{__('Soggetto', 'gepafin')} {__('Oggetto', 'gepafin')}
</label> </label>
<Dropdown
value={null}
options={rejectionReasons}
optionLabel="label"
placeholder={__('Seleziona motivo', 'gepafin')}
onChange={(e) => updateFinalDialogData(e.value.text, 'subject')}
style={{ marginBottom: '10px' }}
/>
<InputText <InputText
name="subject"
value={finalDialogData.subject} value={finalDialogData.subject}
invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)} invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)}
onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/> onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/>
@@ -1550,7 +1622,7 @@ const DomandaEditPreInstructor = () => {
/> />
</div> </div>
</div> </div>
{operationType === 'reject' {operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE'
? <div className="appForm__field"> ? <div className="appForm__field">
<label> <label>
{__('Files', 'gepafin')} {__('Files', 'gepafin')}

View File

@@ -30,6 +30,7 @@ import { InputNumber } from 'primereact/inputnumber';
import SoccorsoComunications from '../SoccorsoEditPreInstructor/components/SoccorsoComunications'; import SoccorsoComunications from '../SoccorsoEditPreInstructor/components/SoccorsoComunications';
import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/SoccorsoResendEmails'; import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/SoccorsoResendEmails';
import { amendmentRequestedDocs } from '../../configData';
const SoccorsoEditInstructorManager = () => { const SoccorsoEditInstructorManager = () => {
const isAsyncRequest = useStoreValue('isAsyncRequest'); const isAsyncRequest = useStoreValue('isAsyncRequest');
@@ -433,16 +434,22 @@ const SoccorsoEditInstructorManager = () => {
</ol> </ol>
</div> : null} </div> : null}
<div className="appPageSection"> {(data.formFields && !isEmpty(data.formFields)) || (data.amendmentType === 'SPECIAL' && !isNil(data.amendmentDocumentType)
&& amendmentRequestedDocs[data.amendmentDocumentType])
? <div className="appPageSection">
<h3>{__('Documenti richiesti', 'gepafin')}</h3> <h3>{__('Documenti richiesti', 'gepafin')}</h3>
<ol className="appPageSection__list"> <ol className="appPageSection__list">
{data.formFields {data.formFields && !isEmpty(data.formFields)
? data.formFields.map((o, i) => <li key={o.fieldId} ? data.formFields.map((o, i) => <li key={o.fieldId}
style={{ flexDirection: 'row' }}> style={{ flexDirection: 'row' }}>
<span>{o.label}</span> <span>{o.label}</span>
</li>) : null} </li>) : null}
{amendmentRequestedDocs[data.amendmentDocumentType].map((v) => <li key={v}
style={{ flexDirection: 'row' }}>
<span>{v}</span>
</li>)}
</ol> </ol>
</div> </div> : null}
<div className="appPageSection"> <div className="appPageSection">
<h2>{__('Comunicazioni', 'gepafin')}</h2> <h2>{__('Comunicazioni', 'gepafin')}</h2>

View File

@@ -44,7 +44,7 @@ const SoccorsoComunications = ({amendmentId, soccorsoStatus}) => {
const getCommsCallback = (data) => { const getCommsCallback = (data) => {
if (data.status === 'SUCCESS') { if (data.status === 'SUCCESS') {
setComms(data.data.commentsList.map(o => getFormattedCommsData(o))); setComms(data.data.map(o => getFormattedCommsData(o)));
} }
setIsLoadingCommunication(false); setIsLoadingCommunication(false);
}; };

View File

@@ -30,6 +30,7 @@ import { InputNumber } from 'primereact/inputnumber';
import SoccorsoComunications from './components/SoccorsoComunications'; import SoccorsoComunications from './components/SoccorsoComunications';
import SoccorsoResendEmails from './components/SoccorsoResendEmails'; import SoccorsoResendEmails from './components/SoccorsoResendEmails';
import { amendmentRequestedDocs } from '../../configData';
const SoccorsoEditPreInstructor = () => { const SoccorsoEditPreInstructor = () => {
const isAsyncRequest = useStoreValue('isAsyncRequest'); const isAsyncRequest = useStoreValue('isAsyncRequest');
@@ -433,16 +434,22 @@ const SoccorsoEditPreInstructor = () => {
</ol> </ol>
</div> : null} </div> : null}
<div className="appPageSection"> {(data.formFields && !isEmpty(data.formFields)) || (data.amendmentType === 'SPECIAL' && !isNil(data.amendmentDocumentType)
&& amendmentRequestedDocs[data.amendmentDocumentType])
? <div className="appPageSection">
<h3>{__('Documenti richiesti', 'gepafin')}</h3> <h3>{__('Documenti richiesti', 'gepafin')}</h3>
<ol className="appPageSection__list"> <ol className="appPageSection__list">
{data.formFields {data.formFields && !isEmpty(data.formFields)
? data.formFields.map((o, i) => <li key={o.fieldId} ? data.formFields.map((o, i) => <li key={o.fieldId}
style={{ flexDirection: 'row' }}> style={{ flexDirection: 'row' }}>
<span>{o.label}</span> <span>{o.label}</span>
</li>) : null} </li>) : null}
{amendmentRequestedDocs[data.amendmentDocumentType].map((v) => <li key={v}
style={{ flexDirection: 'row' }}>
<span>{v}</span>
</li>)}
</ol> </ol>
</div> </div> : null}
<div className="appPageSection"> <div className="appPageSection">
<h2>{__('Comunicazioni', 'gepafin')}</h2> <h2>{__('Comunicazioni', 'gepafin')}</h2>

View File

@@ -17,11 +17,11 @@ export default class ApplicationEvaluationService {
}; };
static updateEvaluation = (assignedApplicationId, body, callback, errCallback, queryParams) => { static updateEvaluation = (assignedApplicationId, body, callback, errCallback, queryParams) => {
NetworkService.put(`${API_BASE_URL}/applicationEvaluation/${assignedApplicationId}`, body, callback, errCallback, queryParams); NetworkService.putMultiPart(`${API_BASE_URL}/applicationEvaluation/${assignedApplicationId}`, body, callback, errCallback, queryParams);
}; };
static updateEvaluationV2 = (assignedApplicationId, formId, body, callback, errCallback, queryParams = []) => { static updateEvaluationV2 = (assignedApplicationId, formId, body, callback, errCallback, queryParams = []) => {
NetworkService.put(`${API_BASE_URL}/applicationEvaluation/v2/assignedApplication/${assignedApplicationId}`, body, callback, errCallback, [ NetworkService.putMultiPart(`${API_BASE_URL}/applicationEvaluation/v2/assignedApplication/${assignedApplicationId}`, body, callback, errCallback, [
['evaluationFormId', formId] ['evaluationFormId', formId]
]); ]);
}; };

View File

@@ -84,7 +84,6 @@ export class NetworkService {
method: 'POST', method: 'POST',
mode: 'cors', mode: 'cors',
headers: { headers: {
//'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer ' + storeGet('getToken'), 'Authorization': 'Bearer ' + storeGet('getToken'),
}, },
body: body body: body
@@ -235,6 +234,49 @@ export class NetworkService {
.catch(err => errorCallback(err)); .catch(err => errorCallback(err));
}; };
static putMultiPart = (url, body, callback, errorCallback, queryParams = null) => {
if (queryParams) {
url += '?'
for (let i = 0; i < queryParams.length; i++) {
if (queryParams[i] && this.isNotBlank(queryParams[i][0]) && this.isNotBlank(queryParams[i][1])) {
let param = queryParams[i][0] + '=' + queryParams[i][1]
if (i !== queryParams.length - 1)
param += '&'
url += param;
}
}
if (url.charAt(url.length) === '&')
url = url.substring(0, url.length - 1);
}
fetch(url, {
method: 'PUT',
mode: 'cors',
headers: {
'Authorization': 'Bearer ' + storeGet('getToken'),
},
body: body
})
.then(async response => {
let status = response.status;
this.logApiError(url, status);
return { response: await response.json(), status: status }
})
.then(data => {
if (data.status >= 400 && data.status <= 599) {
errorCallback(data.response)
this.logApiError(url, data.status, data.response);
} else {
callback(data.response)
}
})
.catch(err => errorCallback(err));
};
static isNotBlank(value) { static isNotBlank(value) {
return value !== null && value !== undefined && value !== '' return value !== null && value !== undefined && value !== ''
} }