From 31413399b09b1f8dcba0d8b30b90f4eabf228044 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Mon, 10 Nov 2025 12:00:44 +0100 Subject: [PATCH] - update to contract functionality; --- src/pages/DashboardBeneficiario/index.js | 229 +----------------- .../DashboardBeneficiarioConfidi/index.js | 228 +---------------- src/pages/DomandaEditPreInstructor/index.js | 32 ++- .../AllDomandeBeneficiarioTableAsync/index.js | 195 ++++++++++++++- 4 files changed, 210 insertions(+), 474 deletions(-) diff --git a/src/pages/DashboardBeneficiario/index.js b/src/pages/DashboardBeneficiario/index.js index eae7547..d56afcf 100644 --- a/src/pages/DashboardBeneficiario/index.js +++ b/src/pages/DashboardBeneficiario/index.js @@ -1,49 +1,29 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { Link, useNavigate } from 'react-router-dom'; import { head, isEmpty, pathOr } from 'ramda'; import NumberFlow from '@number-flow/react'; -import { wrap } from 'object-path-immutable'; // store -import { storeGet, storeSet, useStoreValue } from '../../store'; +import { storeGet, useStoreValue } from '../../store'; // api import DashboardService from '../../service/dashboard-service'; -import ApplicationContractService from '../../service/application-contract-service'; - -// tools -import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; -import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; // components import { Button } from 'primereact/button'; import ErrorBoundary from '../../components/ErrorBoundary'; import LatestBandiBeneficiarioTableAsync from './components/LatestBandiBeneficiarioTableAsync'; import MyLatestSubmissionsTableAsync from './components/MyLatestSubmissionsTableAsync'; -import { classNames } from 'primereact/utils'; -import { FileUpload } from 'primereact/fileupload'; -import { defaultMaxFileSize, mimeTypes } from '../../configData'; -import { Dialog } from 'primereact/dialog'; -import { Toast } from 'primereact/toast'; const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const DashboardBeneficiario = () => { - const isAsyncRequest = useStoreValue('isAsyncRequest'); const navigate = useNavigate(); const [mainStats, setMainStats] = useState({}); - const [contractsData, setContractsData] = useState([]); const companies = useStoreValue('companies'); const chosenCompanyId = useStoreValue('chosenCompanyId'); const company = head(companies.filter(o => o.id === chosenCompanyId)); - const [isVisibleContractForm, setIsVisibleContractForm] = useState(false); - const [contractFormData, setContractFormData] = useState({ - subject: '', - text: '' - }); - const contractFormFilesRef = useRef(null); - const toast = useRef(null); const goToAllSubmissions = () => { navigate('/bandi'); @@ -62,112 +42,12 @@ const DashboardBeneficiario = () => { const errGetStats = () => { } - const getContracts = (data) => { - if (data.status === 'SUCCESS') { - setContractsData(data.data); - } - } - - const errGetContracts = () => { - } - - const openSendContractForm = useCallback((id) => { - const contract = head(contractsData.filter(o => o.id === id)); - - if (contract) { - setContractFormData(contract) - setIsVisibleContractForm(true); - } - }, [contractsData]); - - const headerContractDialog = () => { - return {__('Invia il contratto', 'gepafin')}; - } - - const hideContractDialog = () => { - setIsVisibleContractForm(false); - setContractFormData({ - subject: '', - text: '' - }); - } - - const footerContractDialog = useCallback(() => { - let isDisabled = !contractFormData.files || isEmpty(contractFormData.files) || isAsyncRequest; - - return
-
- }, [contractFormData]); - - const updateContractFormData = (value, path) => { - const newData = wrap(contractFormData).set(path.split('.'), value).value(); - setContractFormData(newData); - }; - - const doSendContract = useCallback(() => { - if (contractFormData.files && !isEmpty(contractFormData.files) && !isAsyncRequest) { - const formDataToSend = new FormData(); - - if (contractFormData.files && contractFormData.files.length > 0) { - contractFormData.files.forEach((file) => { - formDataToSend.append('beneficiaryContractDocuments', file); - }); - } - - storeSet('setAsyncRequest'); - - ApplicationContractService.updateApplicationContract( - contractFormData.id, - formDataToSend, - getUploadApplicationContractCallback, - errGetUploadApplicationContractCallback - ); - } - }, [contractFormData]); - - const getUploadApplicationContractCallback = (data) => { - if (data.status === 'SUCCESS') { - setContractsData(null); - if (toast.current && data.message) { - toast.current.show({ - severity: 'success', - summary: '', - detail: data.message - }); - } - } - hideContractDialog(); - storeSet('unsetAsyncRequest'); - } - - const errGetUploadApplicationContractCallback = (data) => { - if (toast.current && data.message) { - toast.current.show({ - severity: data.status === 'SUCCESS' ? 'info' : 'error', - summary: '', - detail: data.message - }); - } - hideContractDialog(); - set404FromErrorResponse(data); - storeSet('unsetAsyncRequest'); - } - useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (existingCompany) { DashboardService.getBeneficiaryStatsForCompany(existingCompany.id, getStats, errGetStats); const userData = storeGet('userData'); - - ApplicationContractService.getContractByUserId(getContracts, errGetContracts, [ - ['userId', userData.id] - ]); } }, [companies, chosenCompanyId]); @@ -178,29 +58,6 @@ const DashboardBeneficiario = () => { {company ? {company.companyName} : null} - {contractsData && !isEmpty(contractsData) - ? <> -
-
-
-
- - {__('Contratti in attesa:', 'gepafin')} -
- -
-
- : null} - -
- -

{__('Panoramica di Sistema', 'gepafin')}

@@ -304,88 +161,6 @@ const DashboardBeneficiario = () => { label={__('Contatta assistenza', 'gepafin')} icon="pi pi-envelope" iconPos="right"/>*/}
- - -
-

Scarica il contratto:

-
    - {contractFormData?.instructorDocuments - ? contractFormData.instructorDocuments.map(o =>
  • - {o.name} -
  • ) - : null} -
-

Firmalo digitalmente e ricaricalo

-
-
- - { - updateContractFormData(e.files, 'files'); - }} - onRemove={(e) => { - const updatedFiles = contractFormFilesRef.current.getFiles(); - updateContractFormData(updatedFiles, 'files'); - }} - headerTemplate={(options) => { - const { chooseButton } = options; - return ( -
- {chooseButton} -
- ); - }} - chooseOptions={{ - label: __('Aggiungi i file', 'gepafin'), - icon: 'pi pi-plus' - }} - itemTemplate={(file, props) => { - return ( -
-
-
- {file.name} -
- {getFormatedFileSizeText(file.size)} -
-
-
-
- ) - }} - emptyTemplate={

{__('Trascina i file qua')}

} - /> -
-
) } diff --git a/src/pages/DashboardBeneficiarioConfidi/index.js b/src/pages/DashboardBeneficiarioConfidi/index.js index d71d949..ccbe482 100644 --- a/src/pages/DashboardBeneficiarioConfidi/index.js +++ b/src/pages/DashboardBeneficiarioConfidi/index.js @@ -1,49 +1,29 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { Link, useNavigate } from 'react-router-dom'; import { head, isEmpty, pathOr } from 'ramda'; import NumberFlow from '@number-flow/react'; -import { wrap } from 'object-path-immutable'; // store -import { storeGet, storeSet, useStoreValue } from '../../store'; +import { useStoreValue } from '../../store'; // api import DashboardService from '../../service/dashboard-service'; -import ApplicationContractService from '../../service/application-contract-service'; - -// tools -import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; -import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; // components import { Button } from 'primereact/button'; import ErrorBoundary from '../../components/ErrorBoundary'; import MyLatestSubmissionsTableAsync from '../DashboardBeneficiario/components/MyLatestSubmissionsTableAsync'; import LatestBandiBeneficiarioTableAsync from '../DashboardBeneficiario/components/LatestBandiBeneficiarioTableAsync'; -import { classNames } from 'primereact/utils'; -import { FileUpload } from 'primereact/fileupload'; -import { defaultMaxFileSize } from '../../configData'; -import { Dialog } from 'primereact/dialog'; -import { Toast } from 'primereact/toast'; const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const DashboardBeneficiarioConfidi = () => { - const isAsyncRequest = useStoreValue('isAsyncRequest'); const navigate = useNavigate(); const [mainStats, setMainStats] = useState({}); - const [contractsData, setContractsData] = useState([]); const companies = useStoreValue('companies'); const chosenCompanyId = useStoreValue('chosenCompanyId'); const company = head(companies.filter(o => o.id === chosenCompanyId)); - const [isVisibleContractForm, setIsVisibleContractForm] = useState(false); - const [contractFormData, setContractFormData] = useState({ - subject: '', - text: '' - }); - const contractFormFilesRef = useRef(null); - const toast = useRef(null); const goToAllSubmissions = () => { navigate('/bandi'); @@ -62,112 +42,11 @@ const DashboardBeneficiarioConfidi = () => { const errGetStats = () => { } - const getContracts = (data) => { - if (data.status === 'SUCCESS') { - setContractsData(data.data); - } - } - - const errGetContracts = () => { - } - - const openSendContractForm = useCallback((id) => { - const contract = head(contractsData.filter(o => o.id === id)); - - if (contract) { - setContractFormData(contract) - setIsVisibleContractForm(true); - } - }, [contractsData]); - - const headerContractDialog = () => { - return {__('Invia il contratto', 'gepafin')}; - } - - const hideContractDialog = () => { - setIsVisibleContractForm(false); - setContractFormData({ - subject: '', - text: '' - }); - } - - const footerContractDialog = useCallback(() => { - let isDisabled = !contractFormData.files || isEmpty(contractFormData.files) || isAsyncRequest; - - return
-
- }, [contractFormData]); - - const updateContractFormData = (value, path) => { - const newData = wrap(contractFormData).set(path.split('.'), value).value(); - setContractFormData(newData); - }; - - const doSendContract = useCallback(() => { - if (contractFormData.files && !isEmpty(contractFormData.files) && !isAsyncRequest) { - const formDataToSend = new FormData(); - - if (contractFormData.files && contractFormData.files.length > 0) { - contractFormData.files.forEach((file) => { - formDataToSend.append('beneficiaryContractDocuments', file); - }); - } - - storeSet('setAsyncRequest'); - - ApplicationContractService.updateApplicationContract( - contractFormData.id, - formDataToSend, - getUploadApplicationContractCallback, - errGetUploadApplicationContractCallback - ); - } - }, [contractFormData]); - - const getUploadApplicationContractCallback = (data) => { - if (data.status === 'SUCCESS') { - //setData(getFormattedData(data.data)); - if (toast.current && data.message) { - toast.current.show({ - severity: 'success', - summary: '', - detail: data.message - }); - } - } - hideContractDialog(); - storeSet('unsetAsyncRequest'); - } - - const errGetUploadApplicationContractCallback = (data) => { - if (toast.current && data.message) { - toast.current.show({ - severity: data.status === 'SUCCESS' ? 'info' : 'error', - summary: '', - detail: data.message - }); - } - hideContractDialog(); - set404FromErrorResponse(data); - storeSet('unsetAsyncRequest'); - } - useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (existingCompany) { DashboardService.getBeneficiaryStatsForCompany(existingCompany.id, getStats, errGetStats); - const userData = storeGet('userData'); - - ApplicationContractService.getContractByUserId(getContracts, errGetContracts, [ - ['userId', userData.id] - ]); } }, [companies, chosenCompanyId]); @@ -178,28 +57,7 @@ const DashboardBeneficiarioConfidi = () => { {company ? {company.companyName} : null} - {contractsData && !isEmpty(contractsData) - ? <> -
-
-
-
- - {__('Contratti in attesa:', 'gepafin')} -
- -
-
- : null} -
-

{__('Panoramica di Sistema', 'gepafin')}

@@ -304,88 +162,6 @@ const DashboardBeneficiarioConfidi = () => { label={__('Contatta assistenza', 'gepafin')} icon="pi pi-envelope" iconPos="right"/>*/}
- - -
-

Scarica il contratto:

-
    - {contractFormData?.instructorDocuments - ? contractFormData.instructorDocuments.map(o =>
  • - {o.name} -
  • ) - : null} -
-

Firmalo digitalmente e ricaricalo

-
-
- - { - updateContractFormData(e.files, 'files'); - }} - onRemove={(e) => { - const updatedFiles = contractFormFilesRef.current.getFiles(); - updateContractFormData(updatedFiles, 'files'); - }} - headerTemplate={(options) => { - const { chooseButton } = options; - return ( -
- {chooseButton} -
- ); - }} - chooseOptions={{ - label: __('Aggiungi i file', 'gepafin'), - icon: 'pi pi-plus' - }} - itemTemplate={(file, props) => { - return ( -
-
-
- {file.name} -
- {getFormatedFileSizeText(file.size)} -
-
-
-
- ) - }} - emptyTemplate={

{__('Trascina i file qua')}

} - /> -
-
) } diff --git a/src/pages/DomandaEditPreInstructor/index.js b/src/pages/DomandaEditPreInstructor/index.js index f8fda2d..affa1c8 100644 --- a/src/pages/DomandaEditPreInstructor/index.js +++ b/src/pages/DomandaEditPreInstructor/index.js @@ -15,7 +15,6 @@ import { storeGet, storeSet, useStoreValue } from '../../store'; import ApplicationEvaluationService from '../../service/application-evaluation-service'; import AmendmentsService from '../../service/amendments-service'; import AppointmentService from '../../service/appointment-service'; -import ApplicationContractService from '../../service/application-contract-service'; // tools import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; @@ -34,6 +33,7 @@ import getTokens from '../../helpers/getTokens'; import parseCommaDecimal from '../../helpers/parseCommaDecimal'; import renderWithDataVars from '../../helpers/renderWithDataVars'; import renderHtmlContent from '../../helpers/renderHtmlContent'; +import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; // components import { Skeleton } from 'primereact/skeleton'; @@ -60,7 +60,6 @@ import EvaluationReAdmit from './components/EvaluationReAdmit'; import { SplitButton } from 'primereact/splitbutton'; import { FileUpload } from 'primereact/fileupload'; import { defaultMaxFileSize, mimeTypes, rejectionReasons } from '../../configData'; -import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; import ArchiveDocument from './components/ArchiveDocument'; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; @@ -100,12 +99,12 @@ const DomandaEditPreInstructor = () => { duration: 0, amount: 0 }); - const [isVisibleContractForm, setIsVisibleContractForm] = useState(false); + /*const [isVisibleContractForm, setIsVisibleContractForm] = useState(false); const [contractFormData, setContractFormData] = useState({ subject: '', text: '' }); - const contractFormFilesRef = useRef(null); + const contractFormFilesRef = useRef(null);*/ const [formData, setFormData] = useState([]); const [formId, setFormId] = useState(0); const [formInitialData, setFormInitialData] = useState(null); @@ -1008,14 +1007,12 @@ const DomandaEditPreInstructor = () => { setData(newData); }, [data]); - const openSendContractForm = () => { + /*const openSendContractForm = () => { setIsVisibleContractForm(true); } - const headerContractDialog = () => { return {__('Invia il contratto', 'gepafin')}; } - const hideContractDialog = () => { setIsVisibleContractForm(false); setContractFormData({ @@ -1023,7 +1020,6 @@ const DomandaEditPreInstructor = () => { text: '' }); } - const footerContractDialog = useCallback(() => { let isDisabled = !contractFormData.subject || isEmpty(contractFormData.subject) || !contractFormData.text || isEmpty(contractFormData.text) @@ -1037,12 +1033,10 @@ const DomandaEditPreInstructor = () => { label={__('Invia', 'gepafin')} onClick={doSendContract}/> }, [contractFormData]); - const updateContractFormData = (value, path) => { const newData = wrap(contractFormData).set(path.split('.'), value).value(); setContractFormData(newData); }; - const doSendContract = useCallback(() => { if ( contractFormData.subject && !isEmpty(contractFormData.subject) @@ -1075,7 +1069,6 @@ const DomandaEditPreInstructor = () => { ); } }, [contractFormData]); - const getUploadApplicationContractCallback = (data) => { if (data.status === 'SUCCESS') { setData((prev) => ({ @@ -1094,7 +1087,6 @@ const DomandaEditPreInstructor = () => { hideContractDialog(); storeSet('unsetAsyncRequest'); } - const errGetUploadApplicationContractCallback = (data) => { if (toast.current && data.message) { toast.current.show({ @@ -1106,7 +1098,7 @@ const DomandaEditPreInstructor = () => { hideContractDialog(); set404FromErrorResponse(data); storeSet('unsetAsyncRequest'); - } + }*/ const actionBtns = () => { return
@@ -1243,13 +1235,16 @@ const DomandaEditPreInstructor = () => { onClick={initiateRejecting} label={__('Respingi domanda', 'gepafin')} icon="pi pi-times" iconPos="right"/> : null} - {APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' && data.applicationStatus === 'APPROVED' + {/* + This functionality has been moved + */} + {/*{APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' && data.applicationStatus === 'APPROVED' ?
} @@ -2035,7 +2030,10 @@ const DomandaEditPreInstructor = () => { - { emptyTemplate={

{__('Trascina i file qua')}

} /> -
+ */} : <> diff --git a/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js b/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js index 621cf41..1fd1b3c 100644 --- a/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js +++ b/src/pages/DomandeBeneficiario/components/AllDomandeBeneficiarioTableAsync/index.js @@ -1,12 +1,12 @@ -import React, { useEffect, useState, useCallback } from 'react'; +import React, { useEffect, useState, useCallback, useRef } from 'react'; import { __ } from '@wordpress/i18n'; -import { is } from 'ramda'; +import { is, isEmpty } from 'ramda'; import { Link } from 'react-router-dom'; import translationStrings from '../../../../translationStringsForComponents'; // store -import { useStoreValue } from '../../../../store'; +import { storeSet, useStoreValue } from '../../../../store'; // api import ApplicationService from '../../../../service/application-service'; @@ -25,8 +25,18 @@ import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { Dropdown } from 'primereact/dropdown'; import { Tag } from 'primereact/tag'; import { Calendar } from 'primereact/calendar'; +import { Toast } from 'primereact/toast'; +import { classNames } from 'primereact/utils'; +import { FileUpload } from 'primereact/fileupload'; +import { defaultMaxFileSize } from '../../../../configData'; +import getFormatedFileSizeText from '../../../../helpers/getFormatedFileSizeText'; +import { Dialog } from 'primereact/dialog'; +import { wrap } from 'object-path-immutable'; +import ApplicationContractService from '../../../../service/application-contract-service'; +import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; const AllDomandeBeneficiarioTableAsync = ({ statuses }) => { + const isAsyncRequest = useStoreValue('isAsyncRequest'); const chosenCompanyId = useStoreValue('chosenCompanyId'); const companies = useStoreValue('companies'); const [localAsyncRequest, setLocalAsyncRequest] = useState(false); @@ -47,6 +57,13 @@ const AllDomandeBeneficiarioTableAsync = ({ statuses }) => { applicationStatus: { value: null, matchMode: 'equals' } } }); + const [isVisibleContractForm, setIsVisibleContractForm] = useState(false); + const [contractFormData, setContractFormData] = useState({ + subject: '', + text: '' + }); + const contractFormFilesRef = useRef(null); + const toast = useRef(null); const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'id'), [lazyState]); @@ -68,7 +85,8 @@ const AllDomandeBeneficiarioTableAsync = ({ statuses }) => { const getCallback = (resp) => { if (resp.status === 'SUCCESS') { - const { body, totalRecords, + const { + body, totalRecords, //currentPage, totalPages, pageSize } = resp.data; setTotalRecordsNum(totalRecords); @@ -101,6 +119,14 @@ const AllDomandeBeneficiarioTableAsync = ({ statuses }) => {