- added add company page;

- connected api for delega download, upload and deleting;
This commit is contained in:
Vitalii Kiiko
2024-10-09 17:33:06 +02:00
parent b139825b47
commit 8cac4ea23e
11 changed files with 547 additions and 71 deletions

View File

@@ -1,12 +1,19 @@
import React, { useEffect, useMemo, useRef, useState } from 'react';
import { __ } from '@wordpress/i18n';
import { isEmpty, isNil, pathOr, head } from 'ramda';
import { isEmpty, pathOr, head } from 'ramda';
import { klona } from 'klona';
import { wrap } from 'object-path-immutable';
// 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';
@@ -14,17 +21,11 @@ import { Button } from 'primereact/button';
import { useForm } from 'react-hook-form';
import BlockingOverlay from '../../components/BlockingOverlay';
import { InputText } from 'primereact/inputtext';
// api
import CompanyService from '../../service/company-service';
// tools
import { isPIVA, isCodiceFiscale, isEmail, isEmailPEC } from '../../helpers/validators';
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import FileuploadStandalone from '../../components/FileuploadStandalone';
import FileuploadDelega from '../../components/FileuploadDelega';
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({});
@@ -37,17 +38,13 @@ const ProfileCompany = () => {
handleSubmit,
formState: { errors },
setValue,
getValues,
watch,
register
} = useForm({
defaultValues: useMemo(() => {
return formInitialData;
}, [formInitialData]),
mode: 'onChange'
});
const values = getValues();
const emptyValues = Object.values(values).filter(v => isEmpty(v) || isNil(v)).length;
const isLegalRepresentant = watch('isLegalRepresentant')
const setEmptyValues = () => {
@@ -67,11 +64,7 @@ const ProfileCompany = () => {
infoMsgs.current.clear();
storeSet.main.setAsyncRequest();
if (isNil(formData.id)) {
CompanyService.createCompany(formData, updateCallback, updateError);
} else {
CompanyService.updateCompany(formData.id, formData, updateCallback, updateError);
}
CompanyService.updateCompany(formData.id, formData, updateCallback, updateError);
};
const updateCallback = (data) => {
@@ -148,9 +141,47 @@ const ProfileCompany = () => {
setDelegaData(newDelegaData)
}
const setDelegaFile = (data) => {
console.log('setDelegaFile', data)
setDelega(data);
const setDelegaFile = (name, value) => {
console.log('setDelegaFile', value)
setDelega(value);
}
const getDellegaCallback = (data) => {
console.log(data)
if (data.data) {
setDelega(data.data);
}
storeSet.main.unsetAsyncRequest();
}
const errDellegaCallback = () => {
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(() => {
@@ -159,9 +190,43 @@ const ProfileCompany = () => {
}, [formInitialData]);
useEffect(() => {
const chosenCompany = pathOr({}, [0], companies);
setFormInitialData(chosenCompany);
}, [companies]);
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 (
<div className="appPage">
@@ -179,7 +244,6 @@ const ProfileCompany = () => {
<div className="appForm__cols">
<FormField
type="textinput"
disabled={true}
fieldName="companyName"
label={__('Ragione Sociale', 'gepafin')}
control={control}
@@ -193,7 +257,7 @@ const ProfileCompany = () => {
<FormField
type="textinput"
fieldName="vatNumber"
disabled={!isNil(formInitialData.id)}
disabled={true}
label={__('P.IVA', 'gepafin')}
onBlurFn={checkVatNumber}
control={control}
@@ -215,7 +279,6 @@ const ProfileCompany = () => {
<div className="appForm__cols">
<FormField
type="textinput"
disabled={isNil(formInitialData.id)}
fieldName="pec"
label={__('Email PEC', 'gepafin')}
control={control}
@@ -230,7 +293,6 @@ const ProfileCompany = () => {
<FormField
type="textinput"
disabled={true}
fieldName="email"
label={__('Email', 'gepafin')}
control={control}
@@ -256,7 +318,6 @@ const ProfileCompany = () => {
<div className="appForm__cols">
<FormField
type="textinput"
disabled={true}
fieldName="address"
label={__('Indirizzo', 'gepafin')}
control={control}
@@ -266,7 +327,6 @@ const ProfileCompany = () => {
<FormField
type="textinput"
disabled={true}
fieldName="city"
label={__('Città', 'gepafin')}
control={control}
@@ -276,7 +336,6 @@ const ProfileCompany = () => {
<FormField
type="textinput"
disabled={true}
fieldName="cap"
label={__('CAP', 'gepafin')}
control={control}
@@ -288,7 +347,6 @@ const ProfileCompany = () => {
<div className="appForm__cols">
<FormField
type="textinput"
disabled={isNil(formInitialData.id)}
fieldName="contactName"
label={__('Nome di referente aziendale', 'gepafin')}
control={control}
@@ -379,6 +437,7 @@ const ProfileCompany = () => {
<div>
<Button
disabled={isEmpty(delegaCodiceFiscale) || isEmpty(delegaFirstName) || isEmpty(delegaLastName)}
onClick={downloadDelega}
type="button"
label={__('Genera documento Delega', 'gepafin')}
icon="pi pi-check" iconPos="right"/>
@@ -389,16 +448,15 @@ const ProfileCompany = () => {
{__('Carica documento Delega Firmato', 'gepafin')}
<span className="appForm__field--required">*</span>
</label>
<FileuploadStandalone
<FileuploadDelega
setDataFn={setDelegaFile}
fieldName="delega"
defaultValue={[delega]}
accept={['']}
defaultValue={delega}
accept={['.p7m,application/pkcs7-mime,application/x-pkcs7-mime']}
chooseLabel={__('Aggiungi documento', 'gepafin')}
multiple={false}
doctype="document"
sourceId={formInitialData.id}
source="call"
companyId={formInitialData.id}
/>
</div>