From e759bc0f7e5e403af4acd07e9b4f5804bc812731 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Tue, 29 Oct 2024 10:17:48 +0100 Subject: [PATCH 1/3] - added newer flow for appl submissions; - re enabled appl submissions; --- src/helpers/getBandoLabel.js | 21 ++++ src/helpers/getBandoSeverity.js | 23 ++++- src/pages/BandoApplication/index.js | 142 ++++++++++++++++++++++------ src/service/application-service.js | 4 + 4 files changed, 160 insertions(+), 30 deletions(-) diff --git a/src/helpers/getBandoLabel.js b/src/helpers/getBandoLabel.js index 55c0c08..35a850e 100644 --- a/src/helpers/getBandoLabel.js +++ b/src/helpers/getBandoLabel.js @@ -2,6 +2,9 @@ import { __ } from '@wordpress/i18n'; const getBandoLabel = (status) => { switch (status) { + case 'ACTIVE': + return __('Attivo', 'gepafin'); + case 'SUBMIT': return __('Inviato', 'gepafin'); @@ -11,9 +14,27 @@ const getBandoLabel = (status) => { case 'READY_TO_PUBLISH': return __('Pronto', 'gepafin'); + case 'READY': + return __('Pronto', 'gepafin'); + case 'DRAFT': return __('Bozza', 'gepafin'); + case 'AWAITING': + return __('In attesa', 'gepafin'); + + case 'AWAIT': + return __('In attesa', 'gepafin'); + + case 'OPEN': + return __('Aperto', 'gepafin'); + + case 'ASSIGNED': + return __('Assegnato', 'gepafin'); + + case 'EVALUATION': + return __('Valutazione', 'gepafin'); + case 'EXPIRED': return __('Scaduto', 'gepafin'); diff --git a/src/helpers/getBandoSeverity.js b/src/helpers/getBandoSeverity.js index 89263be..d090c80 100644 --- a/src/helpers/getBandoSeverity.js +++ b/src/helpers/getBandoSeverity.js @@ -1,7 +1,8 @@ -import { __ } from '@wordpress/i18n'; - const getBandoSeverity = (status) => { switch (status) { + case 'ACTIVE': + return 'success'; + case 'SUBMIT': return 'success'; @@ -11,9 +12,27 @@ const getBandoSeverity = (status) => { case 'READY_TO_PUBLISH': return 'info'; + case 'READY': + return 'info'; + case 'DRAFT': return 'warning'; + case 'AWAITING': + return 'warning'; + + case 'AWAIT': + return 'warning'; + + case 'OPEN': + return 'warning'; + + case 'ASSIGNED': + return 'warning'; + + case 'EVALUATION': + return 'info'; + case 'EXPIRED': return 'closed'; diff --git a/src/pages/BandoApplication/index.js b/src/pages/BandoApplication/index.js index d12ab66..fbd4e4c 100644 --- a/src/pages/BandoApplication/index.js +++ b/src/pages/BandoApplication/index.js @@ -1,13 +1,13 @@ import React, { useState, useEffect, useRef, useMemo } from 'react'; import { __, sprintf } from '@wordpress/i18n'; import { useParams } from 'react-router-dom'; -import { head, is, pluck, isEmpty } from 'ramda'; +import { head, is, pluck, isEmpty, pathOr } from 'ramda'; import { useForm } from 'react-hook-form'; import { TZDate } from '@date-fns/tz'; import "quill/dist/quill.core.css"; // store -import { storeSet, useStore } from '../../store'; +import { storeSet, storeGet, useStore } from '../../store'; // api import ApplicationService from '../../service/application-service'; @@ -25,6 +25,7 @@ import { } from '../../helpers/validators'; import renderHtmlContent from '../../helpers/renderHtmlContent'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; +import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; // components import { Skeleton } from 'primereact/skeleton'; @@ -36,7 +37,7 @@ import ApplicationSteps from './ApplicationSteps'; import BlockingOverlay from '../../components/BlockingOverlay'; import { Dialog } from 'primereact/dialog'; import FileuploadApplicationSignedPdf from '../../components/FileuploadApplicationSignedPdf'; -import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; + import { defaultMaxFileSize } from '../../configData'; const BandoApplication = () => { @@ -47,7 +48,6 @@ const BandoApplication = () => { const [bandoTitle, setBandoTitle] = useState(''); const [formId, setFormId] = useState(''); const [totalSteps, setTotalSteps] = useState(0); - //const [completedSteps, setCompletedSteps] = useState(0); const [visibleConfirmation, setVisibleConfirmation] = useState(false); const [applicationStatus, setApplicationStatus] = useState(''); const [activeStep, setActiveStep] = useState(1); @@ -86,6 +86,14 @@ const BandoApplication = () => { const activeStepIndex = activeStep - 1; const values = getValues(); + const onValidate = () => { + const applId = getApplicationId(); + storeSet.main.setAsyncRequest(); + formMsgs.current.clear(); + + ApplicationService.validateApplication(applId, {}, validateApplicationCallback, errValidateApplicationCallback); + }; + const onSubmit = () => { const applId = getApplicationId(); storeSet.main.setAsyncRequest(); @@ -150,6 +158,26 @@ const BandoApplication = () => { } } + const validateApplicationCallback = (data) => { + if (data.status === 'SUCCESS') { + if (data.data.status) { + setApplicationStatus(data.data.status); // ask why not 'applicationStatus'? + } + } + storeSet.main.unsetAsyncRequest(); + } + + const errValidateApplicationCallback = (data) => { + if (toast.current) { + toast.current.show({ + severity: 'error', + summary: '', + detail: data.message + }); + } + storeSet.main.unsetAsyncRequest(); + } + const saveDraft = (saveAndMove = '') => { trigger(); @@ -268,18 +296,60 @@ const BandoApplication = () => { setApplicationStatus(data.data.applicationStatus) setActiveStep(data.data.currentStep); + const chosenCompanyId = storeGet.main.chosenCompanyId(); + const companies = storeGet.main.companies(); + const company = head(companies.filter(o => o.id === chosenCompanyId)); + let formDataInitial = {}; + let dynamicData = { + company: {}, + user: {} + }; + + if (company) { + dynamicData = Object.keys(company).reduce((acc, cur) => { + if ([ + 'companyName', 'vatNumber', 'codiceFiscale', 'address', 'phoneNumber', + 'city', 'province', 'cap', 'country', 'pec', 'email', 'contactName', 'contactEmail' + ].includes(cur)) { + acc.company[cur] = company[cur]; + } + return acc; + }, dynamicData); + } + + const userData = storeGet.main.userData(); + Object.keys(userData).reduce((acc, cur) => { + if ([ + 'email', 'firstName', 'lastName', 'phoneNumber', 'codiceFiscale' + ].includes(cur)) { + acc.user[cur] = userData[cur]; + } + return acc; + }, dynamicData); + + if (data.data.applicationFormResponse.content) { + data.data.applicationFormResponse.content.map((o) => { + if (o.dynamicData && !isEmpty(o.dynamicData)) { + formDataInitial[o.id] = pathOr('', o.dynamicData.split('.'), dynamicData); + } + }) + } + if (data.data.applicationFormResponse.formFields) { const submitData = data.data.applicationFormResponse.formFields.map((o) => ({ fieldId: o.fieldId, fieldValue: o.fieldValue })); - const formDataInitial = submitData.reduce((acc, cur) => { - acc[cur.fieldId] = cur.fieldValue; + formDataInitial = submitData.reduce((acc, cur) => { + if (cur.fieldValue) { + acc[cur.fieldId] = cur.fieldValue; + } return acc; - }, {}); - reset(); - setFormInitialData(formDataInitial); + }, formDataInitial); } + + reset(); + setFormInitialData(formDataInitial); } storeSet.main.unsetAsyncRequest(); } @@ -333,9 +403,8 @@ const BandoApplication = () => { icon="pi pi-arrow-right" iconPos="right"/> : null}