- added proper form fields for archiving document;

This commit is contained in:
Vitalii Kiiko
2024-12-06 16:29:48 +01:00
parent a36bb3fcaf
commit e65fb6bde2
4 changed files with 296 additions and 53 deletions

View File

@@ -45,3 +45,110 @@ export const dynamicDataOptions = {
textinput: dynamicDataForTextinput, textinput: dynamicDataForTextinput,
textarea: dynamicDataForTextinput textarea: dynamicDataForTextinput
} }
export const protocolType = [
{
'id': 1,
'name': 'PROTOCOLLO IN ENTRATA'
},
{
'id': 2,
'name': 'PROTOCOLLO IN USCITA'
},
{
'id': 3,
'name': 'DOCUMENTO INTERNO'
},
{
'id': 1003,
'name': 'PROTOCOLLO INTERNO '
}
];
export const classificationType = [
{
'idClassificazione': 101,
'name': 'BILANCIO',
'idTipoprotocollo': 1
},
{
'idClassificazione': 102,
'name': 'DICHHIARAZIONE DEI REDDITI',
'idTipoprotocollo': 1
},
{
'idClassificazione': 103,
'name': 'SITUAZIONE CONTABILE',
'idTipoprotocollo': 1
},
{
'idClassificazione': 104,
'name': 'PROSPETTO CONTO ECONOMICO',
'idTipoprotocollo': 1
},
{
'idClassificazione': 105,
'name': 'CENTRALE DEI RISCHI',
'idTipoprotocollo': 1
},
{
'idClassificazione': 106,
'name': 'RELAZIONE AZIENDALE ILLUSTRATIVA (MOD R1C, R1I, R1R, R1R A SECONDO DEI ',
'idTipoprotocollo': 1
},
{
'idClassificazione': 107,
'name': 'DOCUMENTO IDENTITA\'',
'idTipoprotocollo': 1
},
{
'idClassificazione': 108,
'name': 'MODELLO SP1',
'idTipoprotocollo': 1
},
{
'idClassificazione': 109,
'name': 'PRIVACY',
'idTipoprotocollo': 1
},
{
'idClassificazione': 110,
'name': 'DOCUMENTAZIONE CHE ATTESTA POSSIBILITA\' DI RILASCIARE GAA FAVORE',
'idTipoprotocollo': 1
},
{
'idClassificazione': 111,
'name': 'MODELLO AR1 D.LG 231/2007',
'idTipoprotocollo': 1
},
{
'idClassificazione': 112,
'name': 'DOCUMENTO IDENTITA\' FIRMATORIO DICHHIARAZIONE SOSTITUTIVA',
'idTipoprotocollo': 1
},
{
'idClassificazione': 113,
'name': 'PRIVACY FIRMATARIO DICHHIARAZIONE SOSTITUTIVA',
'idTipoprotocollo': 1
},
{
'idClassificazione': 114,
'name': 'NULLAOSTA ANTIMAFIA',
'idTipoprotocollo': 1
},
{
'idClassificazione': 201,
'name': 'LETTERA ESITO DELIBERA',
'idTipoprotocollo': 2
},
{
'idClassificazione': 202,
'name': 'LETTERA DI GARANZIA',
'idTipoprotocollo': 1
},
{
'idClassificazione': 203,
'name': 'GENERICO',
'idTipoprotocollo': 3
}
];

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useRef, useState } from 'react';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { isEmpty } from 'ramda'; import { isEmpty } from 'ramda';
import { wrap } from 'object-path-immutable'; import { wrap } from 'object-path-immutable';
@@ -9,24 +9,37 @@ import { Dialog } from 'primereact/dialog';
import { InputTextarea } from 'primereact/inputtextarea'; import { InputTextarea } from 'primereact/inputtextarea';
import { Dropdown } from 'primereact/dropdown'; import { Dropdown } from 'primereact/dropdown';
import { classNames } from 'primereact/utils'; import { classNames } from 'primereact/utils';
import { InputSwitch } from 'primereact/inputswitch';
import { InputText } from 'primereact/inputtext';
const ArchiveDocument = ({ ndg = '', fileId = 0 }) => { 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 }) => {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [isVisibleDialog, setIsVisibleDialog] = useState(false); const [isVisibleDialog, setIsVisibleDialog] = useState(false);
const [modalData, setModalData] = useState({}); const [modalData, setModalData] = useState({});
const [types, setTypes] = useState([]);
const [categories, setCategories] = useState([]); const [categories, setCategories] = useState([]);
const toast = useRef(null);
const openArchivationModal = () => { const openArchivationModal = () => {
setIsVisibleDialog(true); setIsVisibleDialog(true);
setModalData({ setModalData({
description: '', descrizione: '',
categoryId: 0, idTipoProtocollo: 0,
idClassificazione: 0,
flagDaFirmare: false,
email: '',
fileId fileId
}); });
} }
const headerDialog = () => { const headerDialog = () => {
return <span>{__('Archive document', 'gepafin')}</span>; return <span>{__('Archiviazione del documento', 'gepafin')}</span>;
} }
const hideDialog = () => { const hideDialog = () => {
@@ -50,26 +63,71 @@ const ArchiveDocument = ({ ndg = '', fileId = 0 }) => {
} }
const submitData = () => { const submitData = () => {
console.log('submitData', modalData) if (
modalData.idTipoProtocollo !== 0 && modalData.idClassificazione !== 0
&& !isEmpty(modalData.descrizione) && !isEmpty(modalData.email)
) {
setLoading(true);
const submitData = {
'input': {
'idTipoProtocollo': modalData.idTipoProtocollo,
'idClassificazione': modalData.idClassificazione,
'flagDaFirmare': modalData.flagDaFirmare,
'descrizione': modalData.descrizione,
'attributes': {
'ndg': ndg,
'email': modalData.email
}
}
}
console.log('submitData', submitData);
//AppointmentService.archiveDocument(applicationId, fileId, submitData, submitCallback, errSubmitCallback)
}
}
const submitCallback = (data) => {
if (data.status === 'SUCCESS') {
console.log(data.data);
}
setLoading(false);
}
const errSubmitCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: 'error',
summary: '',
detail: data.message
});
}
set404FromErrorResponse(data);
setLoading(false);
} }
useEffect(() => { useEffect(() => {
setCategories([ const newModalData = {
{value: 1, label: 'Type 1'}, ...modalData,
{value: 2, label: 'Type 2'}, idClassificazione: 0
]) };
setModalData(newModalData);
setCategories(classificationType
.filter(o => o.idTipoprotocollo === modalData.idTipoProtocollo)
.map(o => ({ value: o.idClassificazione, label: o.name })));
}, [modalData.idTipoProtocollo])
useEffect(() => {
setTypes(protocolType.map(o => ({ value: o.id, label: o.name })));
}, []); }, []);
return ( return (!isEmpty(ndg)
<> ? <>
{!isEmpty(ndg) <Toast ref={toast}/>
? <Button icon="pi pi-file-export" <Button icon="pi pi-file-export"
rounded rounded
onClick={openArchivationModal} onClick={openArchivationModal}
outlined outlined
severity="info" severity="info"
aria-label={__('Mostra', 'gepafin')}/> aria-label={__('Mostra', 'gepafin')}/>
: null}
<Dialog <Dialog
visible={isVisibleDialog} visible={isVisibleDialog}
modal modal
@@ -78,28 +136,68 @@ const ArchiveDocument = ({ ndg = '', fileId = 0 }) => {
style={{ maxWidth: '600px', width: '100%' }} style={{ maxWidth: '600px', width: '100%' }}
onHide={hideDialog}> onHide={hideDialog}>
<div className="appForm__field"> <div className="appForm__field">
<label className={classNames({ 'p-error': !modalData.categoryId || modalData.categoryId === 0 })}> <label
className={classNames({ 'p-error': !modalData.idTipoProtocollo || modalData.idTipoProtocollo === 0 })}>
{__('Tipo di protocollo', 'gepafin')}*
</label>
<Dropdown
value={modalData.idTipoProtocollo}
invalid={!modalData.idTipoProtocollo || modalData.idTipoProtocollo === 0}
onChange={(e) => setValue('idTipoProtocollo', e.value)}
options={types}/>
</div>
<div className="appForm__field">
<label
className={classNames({ 'p-error': !modalData.idClassificazione || modalData.idClassificazione === 0 })}>
{__('Classificazione', 'gepafin')}* {__('Classificazione', 'gepafin')}*
</label> </label>
<Dropdown <Dropdown
value={modalData.categoryId} value={modalData.idClassificazione}
invalid={!modalData.categoryId || modalData.categoryId === 0} invalid={!modalData.idClassificazione || modalData.idClassificazione === 0}
onChange={(e) => setValue('categoryId', e.value)} onChange={(e) => setValue('idClassificazione', e.value)}
options={categories}/> options={categories}/>
</div> </div>
<div className="appForm__field"> <div className="appForm__field">
<label className={classNames({ 'p-error': isEmpty(modalData.description) })}> <label>
{__('Descrizione', 'gepafin')} {__('Da firmare?', 'gepafin')}
</label>
<InputSwitch
checked={modalData.flagDaFirmare}
onChange={(e) => setValue('flagDaFirmare', e.value)}/>
</div>
<div className="appForm__field">
<label className={classNames({ 'p-error': isEmpty(modalData.descrizione) })}>
{__('Descrizione', 'gepafin')}*
</label> </label>
<InputTextarea <InputTextarea
value={modalData.description} value={modalData.descrizione}
invalid={isEmpty(modalData.description)} invalid={isEmpty(modalData.descrizione)}
onChange={(e) => setValue('description', e.target.value)} onChange={(e) => setValue('descrizione', e.target.value)}
rows={3} rows={3}
cols={30}/> cols={30}/>
</div> </div>
<div className="appForm__field">
<label>
{__('NDG', 'gepafin')}*
</label>
<InputText
value={ndg}
disabled
onChange={() => {
}}/>
</div>
<div className="appForm__field">
<label className={classNames({ 'p-error': isEmpty(modalData.email) })}>
{__('Email', 'gepafin')}*
</label>
<InputText
value={modalData.email}
keyfilter="email"
invalid={isEmpty(modalData.email)}
onChange={(e) => setValue('email', e.target.value)}/>
</div>
</Dialog> </Dialog>
</> </> : null
) )
} }

View File

@@ -35,6 +35,7 @@ import { InputText } from 'primereact/inputtext';
import DownloadApplicationArchive from './components/DownloadApplicationArchive'; import DownloadApplicationArchive from './components/DownloadApplicationArchive';
import DownloadCompanyDelegation from './components/DownloadCompanyDelegation'; import DownloadCompanyDelegation from './components/DownloadCompanyDelegation';
import DownloadSignedApplication from './components/DownloadSignedApplication'; import DownloadSignedApplication from './components/DownloadSignedApplication';
import AppointmentService from '../../service/appointment-service';
const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID;
@@ -360,7 +361,30 @@ const DomandaEditPreInstructor = () => {
} }
const doCheckNDG = () => { const doCheckNDG = () => {
// TODO storeSet.main.setAsyncRequest();
doSaveDraft();
setTimeout(() => {
AppointmentService.getNdg(id, getNdgCallback, errGetNdgCallback);
}, 100);
}
const getNdgCallback = (data) => {
if (data.status === 'SUCCESS') {
console.log('data', data.data);
}
storeSet.main.unsetAsyncRequest();
}
const errGetNdgCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: 'error',
summary: '',
detail: data.message
});
}
set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest();
} }
const doCreateAppointment = () => { const doCreateAppointment = () => {
@@ -595,7 +619,7 @@ const DomandaEditPreInstructor = () => {
}}> }}>
<span>{k.name}</span> <span>{k.name}</span>
<div className="appPageSection__iconActions"> <div className="appPageSection__iconActions">
<ArchiveDocument ndg={data.ndg} fileId={k.id}/> <ArchiveDocument ndg={data.ndg} applicationId={id} fileId={k.id}/>
<Button icon="pi pi-eye" rounded <Button icon="pi pi-eye" rounded
onClick={() => { onClick={() => {
window.open(encodeURI(k.filePath), '_blank').focus() window.open(encodeURI(k.filePath), '_blank').focus()

View File

@@ -0,0 +1,14 @@
import { NetworkService } from './network-service';
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 archiveDocument = (applicationId, documentId, body, callback, errCallback, queryParams) => {
NetworkService.post(`${API_BASE_URL}/appointment/application/${applicationId}/document/${documentId}`, {}, callback, errCallback, queryParams);
};
}