diff --git a/src/pages/BandoEdit/components/BandoEditFormStep1/index.js b/src/pages/BandoEdit/components/BandoEditFormStep1/index.js index 04c7680..5c106ae 100644 --- a/src/pages/BandoEdit/components/BandoEditFormStep1/index.js +++ b/src/pages/BandoEdit/components/BandoEditFormStep1/index.js @@ -27,6 +27,7 @@ import { storeSet } from '../../../../store'; import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; import getTimeParsedFromString from '../../../../helpers/getTimeParsedFromString'; import formatDateString from '../../../../helpers/formatDateString'; +import EvaluationFormsService from '../../../../service/evaluation-forms-service'; const BandoEditFormStep1 = forwardRef(function ({ initialData, setInitialData, getFormErrors, status }, ref) { const navigate = useNavigate(); @@ -115,7 +116,12 @@ const BandoEditFormStep1 = forwardRef(function ({ initialData, setInitialData, g } const values = getValues(); if (!values.id && data.data.id) { - navigate(`/bandi/${data.data.id}`); + storeSet.main.setAsyncRequest(); + const sampleFormData = { + label: `Evaluation form for call #${data.data.id}`, + content: [] + } + EvaluationFormsService.createFormForCall(data.data.id, sampleFormData, createFormCallback, errCreateFormCallback) } else { setFormInitialData(data.data); setInitialData(data.data); @@ -135,6 +141,18 @@ const BandoEditFormStep1 = forwardRef(function ({ initialData, setInitialData, g storeSet.main.unsetAsyncRequest(); } + const createFormCallback = (resp) => { + if (resp.status === 'SUCCESS') { + navigate(`/bandi/${resp.data.callId}`); + } + storeSet.main.unsetAsyncRequest(); + } + + const errCreateFormCallback = (resp) => { + set404FromErrorResponse(resp); + storeSet.main.unsetAsyncRequest(); + } + const openPreview = () => { navigate(`/bandi/${values.id}/preview`); } diff --git a/src/pages/BandoEdit/components/BandoEditFormStep2/index.js b/src/pages/BandoEdit/components/BandoEditFormStep2/index.js index 7bae164..c649a6c 100644 --- a/src/pages/BandoEdit/components/BandoEditFormStep2/index.js +++ b/src/pages/BandoEdit/components/BandoEditFormStep2/index.js @@ -94,7 +94,11 @@ const BandoEditFormStep2 = forwardRef(function ({ initialData, setInitialData, g delete formData.endDate; storeSet.main.setAsyncRequest(); - BandoService.updateBandoStep2(formData.id, formData, createCallback, errCreateCallback); + if (values.evaluationVersion === 'V1') { + BandoService.updateBandoStep2(formData.id, formData, createCallback, errCreateCallback); + } else if (values.evaluationVersion === 'V2') { + BandoService.updateBandoStep2V2(formData.id, formData, createCallback, errCreateCallback); + } } const createCallback = (data) => { @@ -221,7 +225,8 @@ const BandoEditFormStep2 = forwardRef(function ({ initialData, setInitialData, g return (
- isEmpty(o.value) || isEmpty(o.score)).length === 0 || __('Non lasciare il valore vuoto', 'gepafin') } - }}/> + }}/> : null} - isEmpty(o.value)).length === 0 || __('Non lasciare il valore vuoto', 'gepafin') } }} - /> + /> : null}
diff --git a/src/pages/BandoEdit/components/BandoEditFormStep3/index.js b/src/pages/BandoEdit/components/BandoEditFormStep3/index.js new file mode 100644 index 0000000..0843da9 --- /dev/null +++ b/src/pages/BandoEdit/components/BandoEditFormStep3/index.js @@ -0,0 +1,147 @@ +import React, { forwardRef, useEffect, useRef, useState } from 'react'; +import { __ } from '@wordpress/i18n'; +import { useNavigate, useParams } from 'react-router-dom'; +import { klona } from 'klona'; +import { DndProvider } from 'react-dnd'; +import { HTML5Backend } from 'react-dnd-html5-backend'; + +// api +import EvaluationFormsService from '../../../../service/evaluation-forms-service'; +import FormsService from '../../../../service/forms-service'; + +// store +import { storeGet, storeSet } from '../../../../store'; + +// tools +import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; + +// components +import BandoEditFormActions from '../BandoEditFormActions'; +import { Toast } from 'primereact/toast'; +import FormBuilder from '../../../BandoFormsEdit/components/FormBuilder'; +import { elementItems } from '../../../../tempData'; + + +const BandoEditFormStep3 = forwardRef(function () { + const navigate = useNavigate(); + const { id } = useParams(); + const [formName, setFormName] = useState(''); + const [bandoStatus, setBandoStatus] = useState(''); + const toast = useRef(null); + + const getBandoId = () => { + const parsed = parseInt(id) + return !isNaN(parsed) ? parsed : 0; + } + + const onSaveDraft = () => { + const content = storeGet.main.formElements(); + const formId = storeGet.main.formId(); + const formData = { + label: formName, + content + } + + storeSet.main.setAsyncRequest(); + EvaluationFormsService.updateForm(formId, formData, updateFormCallback, errUpdateFormCallback) + } + + const updateFormCallback = (resp) => { + if (resp.status === 'SUCCESS') { + setBandoStatus(resp.data.callStatus); + if (toast.current) { + toast.current.show({ + severity: 'success', + summary: '', + detail: __('Il bando รจ stato aggiornato correttamente!', 'gepafin') + }); + } + } + storeSet.main.unsetAsyncRequest(); + } + + const errUpdateFormCallback = (resp) => { + set404FromErrorResponse(resp); + storeSet.main.unsetAsyncRequest(); + } + + const openPreview = () => { + const bandoId = getBandoId(); + navigate(`/bandi/${bandoId}/preview`); + } + + const openPreviewEvaluation = () => { + const bandoId = getBandoId(); + navigate(`/bandi/${bandoId}/preview-evaluation`); + } + + const getElementItemsCallback = (data) => { + if (data.status === 'SUCCESS') { + storeSet.main.elementItems(elementItems.sort((a, b) => a.sortOrder - b.sortOrder)); + //storeSet.main.elementItems(data.data.sort((a, b) => a.sortOrder - b.sortOrder)); + } + storeSet.main.unsetAsyncRequest(); + } + + const errGetElementItemsCallbacks = (data) => { + storeSet.main.unsetAsyncRequest(); + } + + const getFormCallback = (resp) => { + if (resp.status === 'SUCCESS') { + storeSet.main.formId(resp.data.id); + storeSet.main.formLabel(resp.data.label); + setFormName(resp.data.label); + setBandoStatus(resp.data.callStatus); + const elements = klona(resp.data.content); + storeSet.main.formElements(elements); + } + storeSet.main.unsetAsyncRequest(); + } + + const errGetFormCallback = (resp) => { + set404FromErrorResponse(resp); + storeSet.main.unsetAsyncRequest(); + } + + useEffect(() => { + storeSet.main.setAsyncRequest(); + EvaluationFormsService.getFormForCall(id, getFormCallback, errGetFormCallback) + }, [id]); + + useEffect(() => { + storeSet.main.setAsyncRequest(); + FormsService.getElementItems(getElementItemsCallback, errGetElementItemsCallbacks); + + return () => { + storeSet.main.formId(0); + storeSet.main.formElements([]); + } + }, []); + + return ( +
+
+ + + +
+ +
+ +
+ {__('Azioni', 'gepafin')} +
+ + + +
+ ) +}) + +export default BandoEditFormStep3; \ No newline at end of file diff --git a/src/pages/BandoEdit/index.js b/src/pages/BandoEdit/index.js index f9b0951..275fd61 100644 --- a/src/pages/BandoEdit/index.js +++ b/src/pages/BandoEdit/index.js @@ -23,6 +23,7 @@ import { Messages } from 'primereact/messages'; import FormsService from '../../service/forms-service'; import BlockingOverlay from '../../components/BlockingOverlay'; import { Toast } from 'primereact/toast'; +import BandoEditFormStep3 from './components/BandoEditFormStep3'; const BandoEdit = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); @@ -35,28 +36,45 @@ const BandoEdit = () => { const bandoMsgs = useRef(null); const toast = useRef(null); - const stepItems = [ - { - label: __('Testi', 'gepafin'), - command: () => { - if (activeStep === 0) { - return false + const stepItems = (evalProcessVer) => { + let steps = [ + { + label: __('Testi', 'gepafin'), + command: () => { + if (activeStep === 0) { + return false + } + bandoMsgs.current.clear(); + goToStep(0); } - bandoMsgs.current.clear(); - goToStep(0); - } - }, - { - label: __('Gestione', 'gepafin'), - command: () => { - if (activeStep === 1) { - return false + }, + { + label: __('Gestione', 'gepafin'), + command: () => { + if (activeStep === 1) { + return false + } + bandoMsgs.current.clear(); + goToStep(1); } - bandoMsgs.current.clear(); - goToStep(1); } + ]; + + if (evalProcessVer === 'V2') { + steps.push({ + label: __('Valutazione', 'gepafin'), + command: () => { + if (activeStep === 2) { + return false + } + bandoMsgs.current.clear(); + goToStep(2); + } + }) } - ]; + + return steps; + } const goToStep = (step) => { setActiveStep(step); @@ -238,7 +256,8 @@ const BandoEdit = () => { if (bandoId === 0) { setData({ - status: null + status: null, + evaluationVersion: 'V2' }); storeSet.main.unsetAsyncRequest(); @@ -274,7 +293,7 @@ const BandoEdit = () => { {!isEmpty(data) ? : null} @@ -293,6 +312,9 @@ const BandoEdit = () => { {activeStep === 1 ? : null} + {activeStep === 2 && data.evaluationVersion === 'V2' + ? + : null}

{__('Crea o modifica il Form compilabile dal Beneficiario', 'gepafin')}

diff --git a/src/pages/BandoFormsEdit/index.js b/src/pages/BandoFormsEdit/index.js index e26a69a..bf85ac9 100644 --- a/src/pages/BandoFormsEdit/index.js +++ b/src/pages/BandoFormsEdit/index.js @@ -110,7 +110,6 @@ const BandoFormsEdit = () => { const formCreateCallback = (data, shouldRedirect) => { if (data.status === 'SUCCESS') { - storeSet.main.unsetAsyncRequest(); const bandoId = getBandoId(); if (shouldRedirect) { navigate(`/bandi/${bandoId}/forms/${data.data.id}/preview`); @@ -127,6 +126,7 @@ const BandoFormsEdit = () => { }); } } + storeSet.main.unsetAsyncRequest(); } const errFormCreateCallback = (data) => { @@ -221,7 +221,7 @@ const BandoFormsEdit = () => { storeSet.main.unsetAsyncRequest(); } - const errGetElementItemsCallbacks = (data) => { + const errGetElementItemsCallback = (data) => { storeSet.main.unsetAsyncRequest(); } @@ -261,7 +261,7 @@ const BandoFormsEdit = () => { const bandoFormId = !isNaN(parsedFormId) ? parsedFormId : 0; storeSet.main.setAsyncRequest(); - FormsService.getElementItems(getElementItemsCallback, errGetElementItemsCallbacks); + FormsService.getElementItems(getElementItemsCallback, errGetElementItemsCallback); if (bandoFormId) { storeSet.main.setAsyncRequest(); diff --git a/src/service/bando-service.js b/src/service/bando-service.js index 5f616fb..3a38a80 100644 --- a/src/service/bando-service.js +++ b/src/service/bando-service.js @@ -32,6 +32,10 @@ export default class BandoService { NetworkService.put(`${API_BASE_URL}/call/step2/${id}`, body, callback, errCallback); }; + static updateBandoStep2V2 = (id, body, callback, errCallback) => { + NetworkService.put(`${API_BASE_URL}/call/step2-v2/${id}`, body, callback, errCallback); + }; + static updateBandoStatus = (id, callback, errCallback, queryParams) => { NetworkService.put(`${API_BASE_URL}/call/${id}/status`, {}, callback, errCallback, queryParams); }; diff --git a/src/service/evaluation-forms-service.js b/src/service/evaluation-forms-service.js new file mode 100644 index 0000000..dc5d048 --- /dev/null +++ b/src/service/evaluation-forms-service.js @@ -0,0 +1,26 @@ +import { NetworkService } from './network-service'; + +const API_BASE_URL = process.env.REACT_APP_API_EXECUTION_ADDRESS; + +export default class EvaluationFormsService { + + static getFormForCall = (id, callback, errCallback) => { + NetworkService.get(`${API_BASE_URL}/evaluationForm/call/${id}`, callback, errCallback); + }; + + static createFormForCall = (id, body, callback, errCallback) => { + NetworkService.post(`${API_BASE_URL}/evaluationForm/call/${id}`, body, callback, errCallback); + }; + + static updateForm = (id, body, callback, errCallback, queryParams) => { + NetworkService.put(`${API_BASE_URL}/evaluationForm/${id}`, body, callback, errCallback, queryParams); + }; + + static getFormById = (id, callback, errCallback) => { + NetworkService.get(`${API_BASE_URL}/evaluationForm/${id}`, callback, errCallback); + }; + + static deleteForm = (id, callback, errCallback) => { + NetworkService.delete(`${API_BASE_URL}/evaluationForm/${id}`, {}, callback, errCallback); + }; +}