- updated;

This commit is contained in:
Vitalii Kiiko
2025-10-17 10:34:58 +02:00
parent a1ddf9f973
commit 1e63d62ba4
8 changed files with 72 additions and 37 deletions

View File

@@ -272,27 +272,37 @@ export const resendEmailLabelsByType = {
} }
export const rejectionReasons = [ export const rejectionReasons = [
{ label: 'Documentazione incompleta', text: 'la stessa è stata sottoposta ad istruttoria di ammissibilità con esito negativo.' }, {
{ label: 'Altri motivi', text: 'la stessa è stata esclusa dalla graduatoria definitiva' } id: 1,
] label: 'Documentazione incompleta',
text: 'la stessa è stata sottoposta ad istruttoria di ammissibilità con esito negativo.',
subject: 'Esito negativo istruttoria di ammissibilità'
},
{
id: 2,
label: 'Altri motivi',
text: 'la stessa è stata esclusa dalla graduatoria definitiva',
subject: 'Esclusione dalla graduatoria definitiva.'
}
];
export const amendmentRequestedDocs = { export const amendmentRequestedDocs = {
NESSUNA_GARANZIA: [ NESSUNA_GARANZIA: [
'lettera di accettazione firmata' 'Lettera di accettazione firmata'
], ],
GARANZIA_MCC: [ GARANZIA_MCC: [
'lettera di accettazione firmata', 'Lettera di accettazione firmata',
'Modulo di domanda della agevolazione (ex allegato 4)' 'Modulo di domanda della agevolazione (ex allegato 4)'
], ],
MCC_START_UP: [ MCC_START_UP: [
'lettera di accettazione firmata', 'Lettera di accettazione firmata',
'Modulo di domanda della agevolazione (ex allegato 4)', 'Modulo di domanda della agevolazione (ex allegato 4)',
'Modello di valutazione bilanci previsionali', 'Modello di valutazione bilanci previsionali',
'Modello valutazione start up' 'Modello valutazione start up'
], ],
ALTRE_GARANZIE: [ ALTRE_GARANZIE: [
'lettera di accettazione firmata', 'Lettera di accettazione firmata',
'modello privacy', 'Modello privacy',
'autocertificazione e altri eventuali in zip/p7m' 'Autocertificazione e altri eventuali in zip/p7m'
], ],
} }

View File

@@ -75,7 +75,7 @@ const getBandoLabel = (status) => {
return __('Respinto', 'gepafin'); return __('Respinto', 'gepafin');
case 'TECHNICAL_EVALUATION_REJECTED': case 'TECHNICAL_EVALUATION_REJECTED':
return __('Respinto', 'gepafin'); return __('Respinto Tec-Fin', 'gepafin');
default: default:
return ''; return '';

View File

@@ -72,6 +72,9 @@ const getBandoSeverity = (status) => {
case 'REJECTED': case 'REJECTED':
return 'danger'; return 'danger';
case 'TECHNICAL_EVALUATION_REJECTED':
return 'danger';
default: default:
return 'info'; return 'info';
} }

View File

@@ -31,7 +31,9 @@ import SoccorsoResendEmails from '../../../SoccorsoEditPreInstructor/components/
const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const APP_HUB_ID = process.env.REACT_APP_HUB_ID;
const DomandeTablePreInstructorAsync = ({ userId = null, statuses = [] }) => { const DomandeTablePreInstructorAsync = ({ userId = null, statuses = [],
applicationStatuses = ['EVALUATION', 'SOCCORSO', 'NDG', 'APPOINTMENT', 'ADMISSIBLE',
'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION']}) => {
const navigate = useNavigate(); const navigate = useNavigate();
const userData = useStoreValue('userData'); const userData = useStoreValue('userData');
const [localAsyncRequest, setLocalAsyncRequest] = useState(false); const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
@@ -54,8 +56,6 @@ const DomandeTablePreInstructorAsync = ({ userId = null, statuses = [] }) => {
assignedUserName: { value: null, matchMode: 'equals' } assignedUserName: { value: null, matchMode: 'equals' }
} }
}); });
const applicationStatuses = ['EVALUATION', 'SOCCORSO', 'NDG', 'APPOINTMENT', 'ADMISSIBLE',
'AWAITING_TECHNICAL_EVALUATION', 'TECHNICAL_EVALUATION'];
const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'applicationId'), [lazyState]); const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'applicationId'), [lazyState]);

View File

@@ -525,7 +525,8 @@ const DomandaEditInstructorManager = () => {
files: klona(data.files), files: klona(data.files),
note: data.note, note: data.note,
motivation: finalDialogData.motivation, motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject rejectedReason: finalDialogData.reason,
rejectedReasonSubject: finalDialogData.subject
} }
const formDataToSend = new FormData(); const formDataToSend = new FormData();
@@ -562,7 +563,8 @@ 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 rejectedReason: finalDialogData.reason,
rejectedReasonSubject: finalDialogData.subject
} }
const formDataToSend = new FormData(); const formDataToSend = new FormData();
@@ -723,7 +725,7 @@ const DomandaEditInstructorManager = () => {
onSubmitAction = () => doReject('TECHNICAL_EVALUATION_REJECTED'); onSubmitAction = () => doReject('TECHNICAL_EVALUATION_REJECTED');
} else { } else {
onSubmitAction = () => doReject('REJECTED'); onSubmitAction = () => doReject('REJECTED');
isDisabled = isDisabled || !finalDialogData.subject || isEmpty(finalDialogData.subject) || !finalDialogData.motivation || isEmpty(finalDialogData.motivation) isDisabled = isDisabled || !finalDialogData.reason || isEmpty(finalDialogData.reason) || !finalDialogData.motivation || isEmpty(finalDialogData.motivation)
} }
return <div> return <div>
@@ -1590,22 +1592,31 @@ const DomandaEditInstructorManager = () => {
</div> : null} </div> : null}
{operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' {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.reason || isEmpty(finalDialogData.reason) })}>
{__('Oggetto', 'gepafin')} {__('Oggetto', 'gepafin')}
</label> </label>
<Dropdown <Dropdown
value={null} value={rejectionReasons.find(reason => reason.id === finalDialogData.reasonId) || null}
options={rejectionReasons} options={rejectionReasons}
optionLabel="label" optionLabel="label"
placeholder={__('Seleziona motivo', 'gepafin')} placeholder={__('Seleziona motivo', 'gepafin')}
onChange={(e) => updateFinalDialogData(e.value.text, 'subject')} onChange={(e) => {
setFinalDialogData(prev => ({
...prev,
reasonId: e.value.id,
reason: e.value.text,
subject: e.value.subject
}))
}}
style={{ marginBottom: '10px' }} style={{ marginBottom: '10px' }}
/> />
<InputText <InputTextarea
name="subject" name="reason"
value={finalDialogData.subject} value={finalDialogData.reason}
invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)} invalid={!finalDialogData.reason || isEmpty(finalDialogData.reason)}
onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/> onChange={(e) => updateFinalDialogData(e.target.value, 'reason')}
rows={3}
style={{ width: '100%' }}/>
</div> : null} </div> : null}
<div className="appForm__field"> <div className="appForm__field">
<label className={classNames({ 'p-error': !finalDialogData.motivation || isEmpty(finalDialogData.motivation) })}> <label className={classNames({ 'p-error': !finalDialogData.motivation || isEmpty(finalDialogData.motivation) })}>

View File

@@ -525,7 +525,8 @@ const DomandaEditPreInstructor = () => {
files: klona(data.files), files: klona(data.files),
note: data.note, note: data.note,
motivation: finalDialogData.motivation, motivation: finalDialogData.motivation,
rejectedReason: finalDialogData.subject rejectedReason: finalDialogData.reason,
rejectedReasonSubject: finalDialogData.subject
} }
const formDataToSend = new FormData(); const formDataToSend = new FormData();
@@ -562,7 +563,8 @@ 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 rejectedReason: finalDialogData.reason,
rejectedReasonSubject: finalDialogData.subject
} }
const formDataToSend = new FormData(); const formDataToSend = new FormData();
@@ -723,7 +725,7 @@ const DomandaEditPreInstructor = () => {
onSubmitAction = () => doReject('TECHNICAL_EVALUATION_REJECTED'); onSubmitAction = () => doReject('TECHNICAL_EVALUATION_REJECTED');
} else { } else {
onSubmitAction = () => doReject('REJECTED'); onSubmitAction = () => doReject('REJECTED');
isDisabled = isDisabled || !finalDialogData.subject || isEmpty(finalDialogData.subject) || !finalDialogData.motivation || isEmpty(finalDialogData.motivation) isDisabled = isDisabled || !finalDialogData.reason || isEmpty(finalDialogData.reason) || !finalDialogData.motivation || isEmpty(finalDialogData.motivation)
} }
return <div> return <div>
@@ -1590,22 +1592,31 @@ const DomandaEditPreInstructor = () => {
</div> : null} </div> : null}
{operationType === 'reject' && APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' {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.reason || isEmpty(finalDialogData.reason) })}>
{__('Oggetto', 'gepafin')} {__('Oggetto', 'gepafin')}
</label> </label>
<Dropdown <Dropdown
value={null} value={rejectionReasons.find(reason => reason.id === finalDialogData.reasonId) || null}
options={rejectionReasons} options={rejectionReasons}
optionLabel="label" optionLabel="label"
placeholder={__('Seleziona motivo', 'gepafin')} placeholder={__('Seleziona motivo', 'gepafin')}
onChange={(e) => updateFinalDialogData(e.value.text, 'subject')} onChange={(e) => {
setFinalDialogData(prev => ({
...prev,
reasonId: e.value.id,
reason: e.value.text,
subject: e.value.subject
}))
}}
style={{ marginBottom: '10px' }} style={{ marginBottom: '10px' }}
/> />
<InputText <InputTextarea
name="subject" name="reason"
value={finalDialogData.subject} value={finalDialogData.reason}
invalid={!finalDialogData.subject || isEmpty(finalDialogData.subject)} invalid={!finalDialogData.reason || isEmpty(finalDialogData.reason)}
onChange={(e) => updateFinalDialogData(e.target.value, 'subject')}/> onChange={(e) => updateFinalDialogData(e.target.value, 'reason')}
rows={3}
style={{ width: '100%' }}/>
</div> : null} </div> : null}
<div className="appForm__field"> <div className="appForm__field">
<label className={classNames({ 'p-error': !finalDialogData.motivation || isEmpty(finalDialogData.motivation) })}> <label className={classNames({ 'p-error': !finalDialogData.motivation || isEmpty(finalDialogData.motivation) })}>

View File

@@ -15,7 +15,7 @@ const DomandeArchive = () => {
<div className="appPageSection"> <div className="appPageSection">
<h2>{__('Domande completate', 'gepafin')}</h2> <h2>{__('Domande completate', 'gepafin')}</h2>
<DomandeTablePreInstructorAsync statuses={['CLOSE']} userId={0}/> <DomandeTablePreInstructorAsync statuses={['CLOSE']} applicationStatuses={['APPROVED', 'REJECTED', 'TECHNICAL_EVALUATION_REJECTED']} userId={0}/>
</div> </div>
</div> </div>
) )

View File

@@ -20,7 +20,7 @@ const DomandeArchivePreInstructor = () => {
<div className="appPageSection"> <div className="appPageSection">
<h2>{__('Domande completate', 'gepafin')}</h2> <h2>{__('Domande completate', 'gepafin')}</h2>
<DomandeTablePreInstructorAsync statuses={['CLOSE']} userId={userData.id}/> <DomandeTablePreInstructorAsync statuses={['CLOSE']} applicationStatuses={['APPROVED', 'REJECTED', 'TECHNICAL_EVALUATION_REJECTED']} userId={userData.id}/>
</div> </div>
</div> </div>
) )