diff --git a/src/App.js b/src/App.js
index 876cce0..451b994 100644
--- a/src/App.js
+++ b/src/App.js
@@ -8,6 +8,7 @@ import AuthenticationService from './service/authentication-service';
// store
import { useStore, storeSet } from './store';
+import CompanyService from './service/company-service';
const i18n = createI18n({}, 'gepafin');
@@ -17,6 +18,8 @@ function App() {
const callback = (data) => {
if (data.status === 'SUCCESS') {
storeSet.main.userData(data.data);
+ storeSet.main.setAsyncRequest();
+ CompanyService.getCompanyForUser(data.data.id, companyCallback, errCompanyCallback)
} else {
storeSet.main.doLogout();
}
@@ -28,6 +31,18 @@ function App() {
storeSet.main.unsetAsyncRequest();
}
+ const companyCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ storeSet.main.companies(data.data);
+ }
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ const errCompanyCallback = (data) => {
+ storeSet.main.doLogout();
+ storeSet.main.unsetAsyncRequest();
+ }
+
useEffect(() => {
storeSet.main.setAsyncRequest();
AuthenticationService.me(callback, errCallback);
diff --git a/src/assets/scss/components/appForm.scss b/src/assets/scss/components/appForm.scss
index caa1f36..06d11d3 100644
--- a/src/assets/scss/components/appForm.scss
+++ b/src/assets/scss/components/appForm.scss
@@ -150,4 +150,8 @@
border: 1px solid var(--menuitem-active-background);
}
}
+}
+
+.appForm__content {
+
}
\ No newline at end of file
diff --git a/src/assets/scss/components/layout.scss b/src/assets/scss/components/layout.scss
index 07fa909..36ed39b 100644
--- a/src/assets/scss/components/layout.scss
+++ b/src/assets/scss/components/layout.scss
@@ -12,8 +12,8 @@ body {
margin: 0;
font-family: "Montserrat", sans-serif;
- p, span:not(.p-button-label, .p-button-icon, .p-badge, .p-message-detail, .p-highlight),
- input, label:not(.p-error), textarea, a, li, h1, h2, h3, h4, h5, h6, div, th, td {
+ p, span:not(.p-button-label, .p-button-icon, .p-badge, .p-message-detail, .p-highlight, .p-inline-message-text),
+ input, label:not(.p-error), textarea, a, li, h1, h2, h3, h4, h5, h6, div:not(.p-inline-message, .p-toast-detail), th, td {
color: var(--global-textColor);
}
}
diff --git a/src/components/FormField/components/Datepicker/index.js b/src/components/FormField/components/Datepicker/index.js
index 6769409..c2a84f0 100644
--- a/src/components/FormField/components/Datepicker/index.js
+++ b/src/components/FormField/components/Datepicker/index.js
@@ -24,12 +24,12 @@ const Datepicker = ({
(
field.onChange(e.value)}
dateFormat="dd/mm/yy"
diff --git a/src/components/FormField/components/NumberInput/index.js b/src/components/FormField/components/NumberInput/index.js
index c26ceb7..93fb7a4 100644
--- a/src/components/FormField/components/NumberInput/index.js
+++ b/src/components/FormField/components/NumberInput/index.js
@@ -36,6 +36,7 @@ const NumberInput = ({
max={max}
locale={locale}
useGrouping={useGrouping}
+ maxFractionDigits={maxFractionDigits}
minFractionDigits={minFractionDigits}
className={classNames({ 'p-invalid': fieldState.invalid })}/>
)}/>
diff --git a/src/components/FormField/components/TextInput/index.js b/src/components/FormField/components/TextInput/index.js
index 5432a53..4646a0b 100644
--- a/src/components/FormField/components/TextInput/index.js
+++ b/src/components/FormField/components/TextInput/index.js
@@ -15,7 +15,8 @@ const TextInput = ({
icon = null,
placeholder = '',
inputtype = 'text',
- disabled = false
+ disabled = false,
+ onBlurFn = () => {}
}) => {
const input =
diff --git a/src/helpers/getNumberWithCurrency.js b/src/helpers/getNumberWithCurrency.js
index 6f0889b..c263122 100644
--- a/src/helpers/getNumberWithCurrency.js
+++ b/src/helpers/getNumberWithCurrency.js
@@ -5,7 +5,7 @@ const getNumberWithCurrency = (value, currency = 'EUR') => {
currency
})
- return formatter.format(value)
+ return value ? formatter.format(value) : formatter.format(0)
}
export default getNumberWithCurrency;
\ No newline at end of file
diff --git a/src/pages/BandoApplication/index.js b/src/pages/BandoApplication/index.js
index 308b60b..15ea3c1 100644
--- a/src/pages/BandoApplication/index.js
+++ b/src/pages/BandoApplication/index.js
@@ -1,9 +1,10 @@
-import React, { useState, useEffect, useCallback, useRef } from 'react';
+import React, { useState, useEffect, useRef } from 'react';
import { __, sprintf } from '@wordpress/i18n';
import { useParams } from 'react-router-dom';
import { klona } from 'klona';
import { head, range, is, pluck } from 'ramda';
import { useForm } from 'react-hook-form';
+import { TZDate } from '@date-fns/tz';
// store
import { storeSet, useStore } from '../../store';
@@ -22,15 +23,15 @@ import {
isUrl,
isMarcaDaBollo
} from '../../helpers/validators';
+import renderHtmlContent from '../../helpers/renderHtmlContent';
+import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
// components
import { Skeleton } from 'primereact/skeleton';
import { Button } from 'primereact/button';
import FormField from '../../components/FormField';
-import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import { Steps } from 'primereact/steps';
import { Toast } from 'primereact/toast';
-import { TZDate } from '@date-fns/tz';
import { Messages } from 'primereact/messages';
const BandoApplication = () => {
@@ -300,6 +301,7 @@ const BandoApplication = () => {
+
+ {__('Importo minimo per progetto', 'gepafin')}
+ {getNumberWithCurrency(data.amountMin)}
+
{__('Importo massimo per progetto', 'gepafin')}
{getNumberWithCurrency(data.amountMax)}
@@ -122,11 +126,11 @@ const BandoView = () => {
{__('Data apertura', 'gepafin')}
- {getDateFromISOstring(data.dates[0])}
+ {getDateFromISOstring(data.dates[0])} {data.startTime}
{__('Data chiusura', 'gepafin')}
- {getDateFromISOstring(data.dates[1])}
+ {getDateFromISOstring(data.dates[1])} {data.endTime}
@@ -246,8 +250,8 @@ const BandoView = () => {
{__('Contatti per Assistenza', 'gepafin')}
-
Email: bandi@gepafin.it
-
Telefono: +39 075 123 4567
+
Email: {data.email}
+ {!isNil(data.phoneNumber) ?
{__('Telefono', 'gepafin')}: +39 {data.phoneNumber}
: null}
diff --git a/src/pages/BandoViewBeneficiario/index.js b/src/pages/BandoViewBeneficiario/index.js
index 902ba8c..b8932d1 100644
--- a/src/pages/BandoViewBeneficiario/index.js
+++ b/src/pages/BandoViewBeneficiario/index.js
@@ -1,7 +1,7 @@
import React, { useState, useEffect, useRef } from 'react';
import { __, sprintf } from '@wordpress/i18n';
import { useNavigate, useParams } from 'react-router-dom';
-import { is, isEmpty } from 'ramda';
+import { is, isEmpty, pathOr, isNil } from 'ramda';
// store
import { storeSet, useStore } from '../../store';
@@ -9,6 +9,8 @@ import { storeSet, useStore } from '../../store';
// tools
import getNumberWithCurrency from '../../helpers/getNumberWithCurrency';
import getDateFromISOstring from '../../helpers/getDateFromISOstring';
+import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
+import renderHtmlContent from '../../helpers/renderHtmlContent';
// components
import { Skeleton } from 'primereact/skeleton';
@@ -16,21 +18,24 @@ import { Accordion } from 'primereact/accordion';
import { AccordionTab } from 'primereact/accordion';
import { InputTextarea } from 'primereact/inputtextarea';
import { Button } from 'primereact/button';
-import BandoService from '../../service/bando-service';
import { Messages } from 'primereact/messages';
-import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
+import { Message } from 'primereact/message';
+
+// api
+import BandoService from '../../service/bando-service';
import FaqItemService from '../../service/faq-item-service';
import ApplicationService from '../../service/application-service';
-import renderHtmlContent from '../../helpers/renderHtmlContent';
const BandoViewBeneficiario = () => {
const isAsyncRequest = useStore().main.isAsyncRequest();
+ const companies = useStore().main.companies();
const { id } = useParams();
const navigate = useNavigate();
const [data, setData] = useState({});
const [newQuestion, setNewQuestion] = useState('');
const [applicationObj, setApplicationObj] = useState(true);
const bandoMsgs = useRef(null);
+ const chosenCompanyId = pathOr(0, [0], companies);
const scaricaBando = () => {
@@ -212,6 +217,10 @@ const BandoViewBeneficiario = () => {
{__('Importo totale', 'gepafin')}
{getNumberWithCurrency(data.amount)}
+
+ {__('Importo minimo per progetto', 'gepafin')}
+ {getNumberWithCurrency(data.amountMin)}
+
{__('Importo massimo per progetto', 'gepafin')}
{getNumberWithCurrency(data.amountMax)}
@@ -221,11 +230,11 @@ const BandoViewBeneficiario = () => {
{__('Data apertura', 'gepafin')}
- {getDateFromISOstring(data.dates[0])}
+ {getDateFromISOstring(data.dates[0])} {data.startTime}
{__('Data chiusura', 'gepafin')}
- {getDateFromISOstring(data.dates[1])}
+ {getDateFromISOstring(data.dates[1])} {data.endTime}
@@ -311,6 +320,12 @@ const BandoViewBeneficiario = () => {
label={__('Salva', 'gepafin')}/>
+ {chosenCompanyId === 0
+ ? <>
+
+ >
+ : null}
+
{__('Download Documenti', 'gepafin')}
@@ -330,7 +345,7 @@ const BandoViewBeneficiario = () => {
icon="pi pi-download" iconPos="right"/>
@@ -348,8 +363,8 @@ const BandoViewBeneficiario = () => {
{__('Contatti per Assistenza', 'gepafin')}
-
Email: bandi@gepafin.it
-
Telefono: +39 075 123 4567
+
Email: {data.email}
+ {!isNil(data.phoneNumber) ?
{__('Telefono', 'gepafin')}: +39 {data.phoneNumber}
: null}
diff --git a/src/pages/ProfileCompany/index.js b/src/pages/ProfileCompany/index.js
index 8192a9f..db9bc78 100644
--- a/src/pages/ProfileCompany/index.js
+++ b/src/pages/ProfileCompany/index.js
@@ -1,5 +1,6 @@
import React, { useMemo, useRef } from 'react';
import { __ } from '@wordpress/i18n';
+import { isEmpty, isNil } from 'ramda';
// store
import { storeSet, useStore } from '../../store';
@@ -12,12 +13,15 @@ import { Button } from 'primereact/button';
import { useForm } from 'react-hook-form';
// api
-import UserService from '../../service/user-service';
-import getDateFromISOstring from '../../helpers/getDateFromISOstring';
+import CompanyService from '../../service/company-service';
+
+// tools
+import { isPIVA } from '../../helpers/validators';
+import BlockingOverlay from '../../components/BlockingOverlay';
const ProfileCompany = () => {
const isAsyncRequest = useStore().main.isAsyncRequest();
- const userData = useStore().main.userData();
+ const companies = useStore().main.companies();
const infoMsgs = useRef(null);
const {
@@ -27,8 +31,8 @@ const ProfileCompany = () => {
setValue
} = useForm({
defaultValues: useMemo(() => {
- return userData;
- }, [userData]),
+ return companies[0];
+ }, [companies]),
mode: 'onChange'
});
@@ -36,7 +40,11 @@ const ProfileCompany = () => {
infoMsgs.current.clear();
storeSet.main.setAsyncRequest();
- UserService.updateUser(formData, updateCallback, updateError);
+ if (isNil(formData.id)) {
+ CompanyService.createCompany(formData, updateCallback, updateError);
+ } else {
+ CompanyService.updateCompany(formData.id, formData, updateCallback, updateError);
+ }
};
const updateCallback = (data) => {
@@ -51,6 +59,47 @@ const ProfileCompany = () => {
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]])
+ }
+ }
+
+ 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
+ }
+ console.log('formData', formData);
+ Object.keys(formData).map(k => setValue(k, formData[k]));
+ }
+ //setData(getFormattedBandiData(data.data));
+ }
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ const errCheckVatCallback = (data) => {
+ set404FromErrorResponse(data);
+ storeSet.main.unsetAsyncRequest();
+ }
+
return (
@@ -61,25 +110,101 @@ const ProfileCompany = () => {