- updates to teh flow;

This commit is contained in:
Vitalii Kiiko
2024-12-19 15:54:53 +01:00
parent 23525141b1
commit 099ac72563
8 changed files with 142 additions and 57 deletions

View File

@@ -134,7 +134,9 @@ const DomandaBeneficiario = () => {
});
return acc;
}, []);
const newAmendDocs = formValues.amendmentDocuments.map(o => o.id).join(',');
const newAmendDocs = formValues.amendmentDocuments
? formValues.amendmentDocuments.map(o => o.id).join(',')
: '';
const submitData = {
applicationFormFields: newFormValues,
@@ -340,7 +342,7 @@ const DomandaBeneficiario = () => {
defaultValue={formInitialData[o.fieldId] ? formInitialData[o.fieldId] : []}
accept={[]}
source="AMENDMENT"
sourceId={data.applicationId}
sourceId={data.id}
multiple={true}
/>
}) : null}

View File

@@ -1,8 +1,14 @@
import React, { useEffect, useRef, useState } from 'react';
import { __ } from '@wordpress/i18n';
import { isEmpty } from 'ramda';
import { isEmpty, pathOr, isNil } from 'ramda';
import { wrap } from 'object-path-immutable';
// store
import AppointmentService from '../../../../service/appointment-service';
// tools
import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
// components
import { Button } from 'primereact/button';
import { Dialog } from 'primereact/dialog';
@@ -11,14 +17,11 @@ import { Dropdown } from 'primereact/dropdown';
import { classNames } from 'primereact/utils';
import { InputSwitch } from 'primereact/inputswitch';
import { InputText } from 'primereact/inputtext';
import { classificationType, protocolType } from '../../../../configData';
import AppointmentService from '../../../../service/appointment-service';
import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
import { storeSet } from '../../../../store';
import { Toast } from 'primereact/toast';
const ArchiveDocument = ({ applicationId, ndg = '', fileId = 0, docAttachmentId = null }) => {
import { classificationType, protocolType } from '../../../../configData';
const ArchiveDocument = ({ applicationId, ndg = '', fileId = 0, docAttachmentId = null, updateFn = () => {} }) => {
const [loading, setLoading] = useState(false);
const [isVisibleDialog, setIsVisibleDialog] = useState(false);
const [modalData, setModalData] = useState({});
@@ -87,19 +90,29 @@ const ArchiveDocument = ({ applicationId, ndg = '', fileId = 0, docAttachmentId
const submitCallback = (data) => {
if (data.status === 'SUCCESS') {
console.log(data.data);
if (toast.current && data.message) {
toast.current.show({
severity: 'success',
summary: '',
detail: data.message
});
}
const documentAttachmentId = pathOr('fake_id', ['documentAttachmentId'], data.data);
updateFn(documentAttachmentId);
}
setIsVisibleDialog(false);
setLoading(false);
}
const errSubmitCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: 'error',
severity: data.status === 'SUCCESS' ? 'info' : 'error',
summary: '',
detail: data.message
});
}
setIsVisibleDialog(false);
set404FromErrorResponse(data);
setLoading(false);
}
@@ -119,7 +132,7 @@ const ArchiveDocument = ({ applicationId, ndg = '', fileId = 0, docAttachmentId
setTypes(protocolType.map(o => ({ value: o.id, label: o.name })));
}, []);
return (!isEmpty(ndg) && !docAttachmentId
return (!isEmpty(ndg) && !isNil(ndg) && !docAttachmentId
? <>
<Toast ref={toast}/>
<Button icon="pi pi-file-export"

View File

@@ -4,22 +4,34 @@ import { __ } from '@wordpress/i18n';
import { isNil } from 'ramda';
import ArchiveDocument from '../ArchiveDocument';
import renderHtmlContent from '../../../../helpers/renderHtmlContent';
import uniqid from '../../../../helpers/uniqid';
const ListOfFiles = ({ files, updateFn, shouldDisableFieldFn, name, ndg, applicationId }) => {
return (
<ol className="appPageSection__list">
{files.map((o, i) => <li key={o.id} className="appPageSection__listItem">
{files.map((o, i) => <li key={`${o.id}_${uniqid('f')}`} className="appPageSection__listItem">
<div className="appPageSection__listItemRow">
<div>{renderHtmlContent(o.label)}</div>
<div className="appPageSection__iconActions">
{o.fileDetail && o.fileDetail.length === 1
? <Button icon="pi pi-eye" rounded
? <>
<Button icon="pi pi-eye" rounded
onClick={() => {
window.open(o.fileDetail[0].filePath, '_blank').focus()
}}
outlined severity="info"
aria-label={__('Mostra', 'gepafin')}/> : null}
aria-label={__('Mostra', 'gepafin')}/>
<ArchiveDocument
ndg={ndg}
applicationId={applicationId}
fileId={o.fileDetail[0].id}
updateFn={(val) => updateFn(
val,
[name, i, 'fileDetail', 0, 'documentAttachmentId']
)}
docAttachmentId={o.fileDetail[0].documentAttachmentId}/>
</> : null}
<Button icon="pi pi-thumbs-up" rounded outlined
disabled={shouldDisableFieldFn(name)}
severity={!isNil(o.valid) && o.valid ? 'success' : 'secondary'}
@@ -46,7 +58,7 @@ const ListOfFiles = ({ files, updateFn, shouldDisableFieldFn, name, ndg, applica
flexDirection: 'column',
gap: '10px'
}}>
{o.fileDetail.map((k) => <li key={k.id} style={{
{o.fileDetail.map((k, ind) => <li key={k.id} style={{
display: 'flex',
flexDirection: 'row',
alignItems: 'center',
@@ -54,7 +66,14 @@ const ListOfFiles = ({ files, updateFn, shouldDisableFieldFn, name, ndg, applica
}}>
<span>{k.name}</span>
<div className="appPageSection__iconActions">
<ArchiveDocument ndg={ndg} applicationId={applicationId} fileId={k.id}
<ArchiveDocument
ndg={ndg}
applicationId={applicationId}
fileId={k.id}
updateFn={(val) => updateFn(
val,
[name, i, 'fileDetail', ind, 'documentAttachmentId']
)}
docAttachmentId={k.documentAttachmentId}/>
<Button icon="pi pi-eye" rounded
onClick={() => {

View File

@@ -71,12 +71,24 @@ const DomandaEditPreInstructor = () => {
}
const updateFlagsForSoccorso = (data) => {
let nonRatedFilesLength = 0;
if (data.files) {
const nonRatedFiles = data.files
.map(el => el.valid)
.filter(v => isNil(v));
setAllFilesRated(nonRatedFiles.length === 0);
nonRatedFilesLength = nonRatedFiles.length;
}
if (data.amendmentDetails) {
const nonRatedFiles = data.amendmentDetails
.map(el => el.valid)
.filter(v => isNil(v));
nonRatedFilesLength = nonRatedFiles.length;
}
setAllFilesRated(nonRatedFilesLength === 0);
if (data.checklist) {
const checkedChecklistItems = data.checklist
.map(el => el.valid)
@@ -380,7 +392,13 @@ const DomandaEditPreInstructor = () => {
const getNdgCallback = (data) => {
if (data.status === 'SUCCESS') {
console.log('data', data.data);
if (toast.current && data.message) {
toast.current.show({
severity: 'success',
summary: '',
detail: data.message
});
}
}
storeSet.main.unsetAsyncRequest();
}
@@ -388,7 +406,7 @@ const DomandaEditPreInstructor = () => {
const errGetNdgCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: 'error',
severity: data.status === 'SUCCESS' ? 'info' : 'error',
summary: '',
detail: data.message
});
@@ -436,10 +454,47 @@ const DomandaEditPreInstructor = () => {
!isEmpty(appointmentData.title) && !isEmpty(appointmentData.text) && !isEmpty(appointmentData.amount)
&& !isEmpty(appointmentData.duration) && appointmentData.duration !== 0 && appointmentData.amount !== 0
) {
console.log(appointmentData);
storeSet.main.setAsyncRequest();
const submitData = {
'importoBreveTermine': appointmentData.amount,
'durataMesiFinanziamento': appointmentData.duration,
'nota': {
'titolo': appointmentData.title,
'testo': appointmentData.text
}
}
AppointmentService.createAppointment(id, submitData, getAppointemntCallback, errGetAppointemntCallback);
}
}
const getAppointemntCallback = (data) => {
if (data.status === 'SUCCESS') {
if (toast.current && data.message) {
toast.current.show({
severity: 'success',
summary: '',
detail: data.message
});
}
}
setIsVisibleAppointmentDialog(false);
storeSet.main.unsetAsyncRequest();
}
const errGetAppointemntCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: data.status === 'SUCCESS' ? 'info' : 'error',
summary: '',
detail: data.message
});
}
setIsVisibleAppointmentDialog(false);
set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest();
}
const doMakeAdmisible = () => {
// TODO
}
@@ -605,34 +660,17 @@ const DomandaEditPreInstructor = () => {
</div>
</div>
<div className="appPageSection">
{!isEmpty(data.amendmentDetails)
? <div className="appPageSection">
<h2>{__('Documenti di soccorso', 'gepafin')}</h2>
{data.amendmentDetails
.map(o => {
const aDocs = pathOr([],['amendmentDocuments'], o);
const aNotes = pathOr('',['amendmentNotes'], o);
const aValid = pathOr(null,['valid'], o);
const aDocsObj = {
id: o.amendmentId,
label: aNotes,
fileDetail: aDocs,
valid: aValid
}
const fDocs = pathOr([],['formFieldDocuments'], o);
return {
files: [aDocsObj, ...fDocs]
}
})
.map((o, i) => <ListOfFiles
key={`list_${i}`}
files={o.files}
<ListOfFiles
files={data.amendmentDetails}
updateFn={updateEvaluationValue}
shouldDisableFieldFn={shouldDisableField}
name="amendmentDetails"
ndg={data.ndg}
applicationId={id}/>)}
</div>
applicationId={id}/>
</div> : null}
<div className="appPageSection">
<h2>{__('Punteggi di valutazione', 'gepafin')}</h2>
@@ -749,14 +787,14 @@ const DomandaEditPreInstructor = () => {
onClick={() => doSaveDraft()}
label={__('Crea valutazione', 'gepafin')}
icon="pi pi-save" iconPos="right"/>}
{APP_EVALUATION_FLOW_ID === '1' && ['EVALUATION'].includes(data.applicationStatus)
{/*{APP_EVALUATION_FLOW_ID === '1' && ['EVALUATION'].includes(data.applicationStatus)
? <Button
type="button"
disabled={!data.id || !allFilesRated || !allChecksChecked}
onClick={doCheckNDG}
label={__('Controlla NDG', 'gepafin')}
/> : null}
{APP_EVALUATION_FLOW_ID === '1' && ['EVALUATION'].includes(data.applicationStatus) && data.ndg
/> : null}*/}
{APP_EVALUATION_FLOW_ID === '1' && ['NDG'].includes(data.applicationStatus) && data.ndg
? <Button
type="button"
disabled={!data.id}
@@ -778,12 +816,19 @@ const DomandaEditPreInstructor = () => {
onClick={initiateApproving}
label={__('Approva Domanda', 'gepafin')}
icon="pi pi-check" iconPos="right"/> : null}
{data.id
{/*{data.id
? <Button
type="button"
disabled={APP_EVALUATION_FLOW_ID === '1' && !['ADMISSIBLE', 'APPOINTMENT'].includes(data.applicationStatus)}
onClick={initiateRejecting}
label={__('Respingi Domanda', 'gepafin')}
icon="pi pi-times" iconPos="right"/> : null}*/}
{data.id
? <Button
type="button"
disabled={APP_EVALUATION_FLOW_ID === '1' && !['EVALUATION', 'ADMISSIBLE', 'APPOINTMENT'].includes(data.applicationStatus)}
onClick={initiateRejecting}
label={__('Respingi Domanda', 'gepafin')}
icon="pi pi-times" iconPos="right"/> : null}
</div>
</div>

View File

@@ -114,7 +114,7 @@ const AllDomandeTable = ({ openDialogFn, updaterString = '' }) => {
const actionsBodyTemplate = (rowData) => {
return <div className="appPageSection__tableActions lessGap">
{openDialogFn && rowData.applicationStatus === 'SUBMIT'
{openDialogFn && rowData.status === 'SUBMIT'
? <Button severity="info"
onClick={() => openDialogFn(rowData.id)}
label={__('Assegnare', 'gepafin')}

View File

@@ -4,7 +4,7 @@ import { is, isEmpty, uniq } from 'ramda';
import { Link } from 'react-router-dom';
// store
import { useStore } from '../../../../store';
import { useStore, storeGet } from '../../../../store';
// api
import ApplicationService from '../../../../service/application-service';
@@ -33,7 +33,7 @@ const BeneficiarioDomandeTable = () => {
const [statuses, setStatuses] = useState([]);
useEffect(() => {
if (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0) {
if (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && !localAsyncRequest) {
setLocalAsyncRequest(true);
ApplicationService.getApplications(getApplCallback, errGetApplCallback, [
['companyId', chosenCompanyId],

View File

@@ -142,7 +142,9 @@ const SoccorsoEditPreInstructor = () => {
});
return acc;
}, []);
const newAmendDocs = formValues.amendmentDocuments.map(o => o.id).join(',');
const newAmendDocs = formValues.amendmentDocuments
? formValues.amendmentDocuments.map(o => o.id).join(',')
: '';
const submitData = {
applicationFormFields: newFormValues,

View File

@@ -4,11 +4,15 @@ const API_BASE_URL = process.env.REACT_APP_API_EXECUTION_ADDRESS;
export default class AppointmentService {
static getNdg = (id, callback, errCallback, queryParams) => {
NetworkService.get(`${API_BASE_URL}/appointment/application/${id}/check-ndg`, callback, errCallback, queryParams);
static getNdg = (applicationId, callback, errCallback, queryParams) => {
NetworkService.get(`${API_BASE_URL}/appointment/application/${applicationId}/check-ndg`, callback, errCallback, queryParams);
};
static archiveDocument = (applicationId, documentId, body, callback, errCallback, queryParams) => {
NetworkService.post(`${API_BASE_URL}/appointment/application/${applicationId}/document/${documentId}`, body, callback, errCallback, queryParams);
NetworkService.post(`${API_BASE_URL}/appointment/document/${documentId}`, body, callback, errCallback, queryParams);
};
static createAppointment = (applicationId, body, callback, errCallback, queryParams) => {
NetworkService.post(`${API_BASE_URL}/appointment/application/${applicationId}`, body, callback, errCallback, queryParams);
};
}