- updated implementation related to new rejection flow;
This commit is contained in:
@@ -269,4 +269,30 @@ export const resendEmailLabelsByType = {
|
|||||||
APPLICATION_AMENDMENT_REMINDER: 'Invia email (sollecito)',
|
APPLICATION_AMENDMENT_REMINDER: 'Invia email (sollecito)',
|
||||||
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'
|
||||||
|
],
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
<span>{renderHtmlContent(data.motivation)}</span>
|
<div style={{display: 'flex', flexDirection: 'column', gap: 10}}>
|
||||||
|
<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')}
|
||||||
|
|||||||
@@ -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>
|
||||||
<span>{renderHtmlContent(data.motivation)}</span>
|
<div style={{display: 'flex', flexDirection: 'column', gap: 10}}>
|
||||||
|
<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')}
|
||||||
|
|||||||
@@ -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)
|
||||||
<h3>{__('Documenti richiesti', 'gepafin')}</h3>
|
&& amendmentRequestedDocs[data.amendmentDocumentType])
|
||||||
<ol className="appPageSection__list">
|
? <div className="appPageSection">
|
||||||
{data.formFields
|
<h3>{__('Documenti richiesti', 'gepafin')}</h3>
|
||||||
? data.formFields.map((o, i) => <li key={o.fieldId}
|
<ol className="appPageSection__list">
|
||||||
style={{ flexDirection: 'row' }}>
|
{data.formFields && !isEmpty(data.formFields)
|
||||||
|
? data.formFields.map((o, i) => <li key={o.fieldId}
|
||||||
|
style={{ flexDirection: 'row' }}>
|
||||||
<span>{o.label}</span>
|
<span>{o.label}</span>
|
||||||
</li>) : null}
|
</li>) : null}
|
||||||
</ol>
|
{amendmentRequestedDocs[data.amendmentDocumentType].map((v) => <li key={v}
|
||||||
</div>
|
style={{ flexDirection: 'row' }}>
|
||||||
|
<span>{v}</span>
|
||||||
|
</li>)}
|
||||||
|
</ol>
|
||||||
|
</div> : null}
|
||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<h2>{__('Comunicazioni', 'gepafin')}</h2>
|
<h2>{__('Comunicazioni', 'gepafin')}</h2>
|
||||||
|
|||||||
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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)
|
||||||
<h3>{__('Documenti richiesti', 'gepafin')}</h3>
|
&& amendmentRequestedDocs[data.amendmentDocumentType])
|
||||||
<ol className="appPageSection__list">
|
? <div className="appPageSection">
|
||||||
{data.formFields
|
<h3>{__('Documenti richiesti', 'gepafin')}</h3>
|
||||||
? data.formFields.map((o, i) => <li key={o.fieldId}
|
<ol className="appPageSection__list">
|
||||||
style={{ flexDirection: 'row' }}>
|
{data.formFields && !isEmpty(data.formFields)
|
||||||
|
? data.formFields.map((o, i) => <li key={o.fieldId}
|
||||||
|
style={{ flexDirection: 'row' }}>
|
||||||
<span>{o.label}</span>
|
<span>{o.label}</span>
|
||||||
</li>) : null}
|
</li>) : null}
|
||||||
</ol>
|
{amendmentRequestedDocs[data.amendmentDocumentType].map((v) => <li key={v}
|
||||||
</div>
|
style={{ flexDirection: 'row' }}>
|
||||||
|
<span>{v}</span>
|
||||||
|
</li>)}
|
||||||
|
</ol>
|
||||||
|
</div> : null}
|
||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<h2>{__('Comunicazioni', 'gepafin')}</h2>
|
<h2>{__('Comunicazioni', 'gepafin')}</h2>
|
||||||
|
|||||||
@@ -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]
|
||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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 !== ''
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user