import React, { useEffect, useMemo, useRef, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { isEmpty, pathOr, head } from 'ramda'; import { klona } from 'klona'; import { wrap } from 'object-path-immutable'; import { useForm } from 'react-hook-form'; // store import { storeSet, useStore, storeGet } from '../../store'; // api import CompanyService from '../../service/company-service'; // tools import { isPIVA, isEmail, isEmailPEC } from '../../helpers/validators'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; // components import { Messages } from 'primereact/messages'; import FormField from '../../components/FormField'; import { Button } from 'primereact/button'; import BlockingOverlay from '../../components/BlockingOverlay'; import { InputText } from 'primereact/inputtext'; import FileuploadDelega from '../../components/FileuploadDelega'; import { Toast } from 'primereact/toast'; import getFormatedFileSizeText from '../../helpers/getFormatedFileSizeText'; import { defaultMaxFileSize } from '../../configData'; const ProfileCompany = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const chosenCompanyId = useStore().main.chosenCompanyId(); const companies = useStore().main.companies(); const infoMsgs = useRef(null); const [formInitialData, setFormInitialData] = useState({}); const [delegaData, setDelegaData] = useState({}); const [delega, setDelega] = useState([]); const { delegaFirstName = '', delegaLastName = '', delegaCodiceFiscale = '' } = delegaData; const toast = useRef(null); const { control, handleSubmit, formState: { errors }, setValue, watch, reset } = useForm({ defaultValues: useMemo(() => { return formInitialData; }, [formInitialData]), mode: 'onChange' }); const isLegalRepresentant = watch('isLegalRepresentant') const setEmptyValues = () => { const formData = { cap: '', pec: '', email: '', city: '', codiceFiscale: '', address: '', companyName: '' } Object.keys(formData).map(k => setValue(k, formData[k])); } const onSubmit = (formData) => { infoMsgs.current.clear(); storeSet.main.setAsyncRequest(); CompanyService.updateCompany(formData.id, formData, updateCallback, updateError); }; const updateCallback = (data) => { if (data.status === 'SUCCESS') { const company = klona(data.data); const companies = storeGet.main.companies(); const existingCompany = head(companies.filter(o => o.id === company.id)); let newCompanies = []; if (existingCompany) { newCompanies = companies.map(o => o.id === company.id ? company : o) } else { newCompanies = [...companies, company]; storeSet.main.chosenCompanyId(company.id); console.log('set company 3', company.id) } storeSet.main.companies(newCompanies); if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: __('L\'azienda è stata aggiornata!', 'gepafin') }); } } storeSet.main.unsetAsyncRequest(); } const updateError = (data) => { set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const checkVatNumber = (e) => { infoMsgs.current.clear(); const isValid = isPIVA(e.target.value); if (isValid) { storeSet.main.setAsyncRequest(); CompanyService.checkVat(checkVatCallback, errCheckVatCallback, [['vatNumber', e.target.value]]) } else { setEmptyValues(); } } const checkVatCallback = (data) => { if (data.status === 'SUCCESS') { const resp = data.data.data; if (!isEmpty(resp)) { const { cap, cf, denominazione, piva, indirizzo, comune, dettaglio: { pec } } = resp; const formData = { cap, pec, email: pec, city: comune, codiceFiscale: cf, address: indirizzo, vatNumber: piva, companyName: denominazione } Object.keys(formData).map(k => setValue(k, formData[k])); } //setData(getFormattedBandiData(data.data)); } else { setEmptyValues(); } storeSet.main.unsetAsyncRequest(); } const errCheckVatCallback = (data) => { setEmptyValues(); set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const setDelegaFieldValue = (value, name) => { const newDelegaData = wrap(delegaData).set([name], value).value(); setDelegaData(newDelegaData) } const setDelegaFile = (name, value) => { setDelega(value); } const getDellegaCallback = (data) => { if (data.data) { setDelega([data.data]); } storeSet.main.unsetAsyncRequest(); } const errDellegaCallback = () => { setDelega([]); storeSet.main.unsetAsyncRequest(); } const downloadDelega = () => { storeSet.main.setAsyncRequest(); const data = { codiceFiscale: delegaCodiceFiscale, firstName: delegaFirstName, lastName: delegaLastName } CompanyService.downloadCompanyDelega(formInitialData.id, data, getDellegaDownloadCallback, errDellegaDownloadCallback) } const getDellegaDownloadCallback = (data) => { const pdfFile = new Blob([data], { type: 'application/octet-stream' }) const url = window.URL.createObjectURL(pdfFile); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'delega.docx'); document.body.appendChild(link); link.click(); link.remove(); storeSet.main.unsetAsyncRequest(); } const errDellegaDownloadCallback = () => { storeSet.main.unsetAsyncRequest(); } useEffect(() => { const newFormData = klona(formInitialData); Object.keys(newFormData).map(v => setValue(v, newFormData[v])); }, [formInitialData]); useEffect(() => { reset(); let chosenCompany = {}; if (chosenCompanyId) { chosenCompany = head(companies.filter(o => o.id === chosenCompanyId)); } if (!chosenCompany) { chosenCompany = pathOr({}, [0], companies); } const { cap, codiceFiscale, companyName, vatNumber, address, city, pec, email, contactName, contactEmail, isLegalRepresentant, id } = chosenCompany; const companyData = { id, cap, pec, email, city, codiceFiscale, address, vatNumber, companyName, contactName, contactEmail, isLegalRepresentant } setFormInitialData(companyData); }, [chosenCompanyId, companies]); useEffect(() => { if (formInitialData.id) { storeSet.main.setAsyncRequest(); CompanyService.getCompanyDelega(formInitialData.id, getDellegaCallback, errDellegaCallback); } }, [formInitialData]) return (

{__('Profilo aziendale', 'gepafin')}

{__('Informazioni aziendali', 'gepafin')}

{/**/}
{/**/}
{!isLegalRepresentant ?
{__('Compilazione Delega', 'gepafin')}

{__('Per procedere come delegato, compila il form seguente, scarica il documento della delega, fallo firmare dal rappresentante legale e ricaricalo.', 'gepafin')}

setDelegaFieldValue(e.target.value, 'delegaFirstName')}/>
setDelegaFieldValue(e.target.value, 'delegaLastName')}/>
setDelegaFieldValue(e.target.value, 'delegaCodiceFiscale')}/>
{/*
*/}
:
}
{__('Azioni rapide', 'gepafin')}
) } export default ProfileCompany;