diff --git a/package.json b/package.json
index 9b1eeda..1fc4577 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
"@babel/preset-react": "7.24.7",
"@date-fns/tz": "1.1.2",
"@emotion/styled": "11.13.0",
+ "@number-flow/react": "^0.2.0",
"@tanstack/react-table": "^8.20.5",
"@wordpress/i18n": "5.8.0",
"@wordpress/react-i18n": "4.8.0",
diff --git a/src/components/TopBarProfileMenu/index.js b/src/components/TopBarProfileMenu/index.js
index 32bfac6..548f56a 100644
--- a/src/components/TopBarProfileMenu/index.js
+++ b/src/components/TopBarProfileMenu/index.js
@@ -55,7 +55,7 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
command: () => {
navigate('/profilo-aziendale')
},
- enable: !intersection(permissions, ['MANAGE_TENDERS']).length && companies.length > 0
+ enable: intersection(permissions, ['APPLY_CALLS']).length && companies.length > 0
},
{
label: __('Seleziona azienda', 'gepafin'),
@@ -67,7 +67,7 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
command: () => {
navigate('/agguingi-azienda')
},
- enable: !intersection(permissions, ['MANAGE_TENDERS']).length
+ enable: intersection(permissions, ['APPLY_CALLS']).length
},
{
separator: true,
diff --git a/src/helpers/getBandoLabel.js b/src/helpers/getBandoLabel.js
index 55c0c08..585def9 100644
--- a/src/helpers/getBandoLabel.js
+++ b/src/helpers/getBandoLabel.js
@@ -14,6 +14,9 @@ const getBandoLabel = (status) => {
case 'DRAFT':
return __('Bozza', 'gepafin');
+ case 'AWAITING':
+ return __('In attesa', 'gepafin');
+
case 'EXPIRED':
return __('Scaduto', 'gepafin');
diff --git a/src/helpers/getBandoSeverity.js b/src/helpers/getBandoSeverity.js
index 89263be..f0b2dad 100644
--- a/src/helpers/getBandoSeverity.js
+++ b/src/helpers/getBandoSeverity.js
@@ -14,6 +14,9 @@ const getBandoSeverity = (status) => {
case 'DRAFT':
return 'warning';
+ case 'AWAITING':
+ return 'warning';
+
case 'EXPIRED':
return 'closed';
diff --git a/src/layouts/DefaultLayout/components/AppSidebar/index.js b/src/layouts/DefaultLayout/components/AppSidebar/index.js
index 61a4484..c7672cf 100644
--- a/src/layouts/DefaultLayout/components/AppSidebar/index.js
+++ b/src/layouts/DefaultLayout/components/AppSidebar/index.js
@@ -40,6 +40,13 @@ const AppSidebar = () => {
id: 4,
enable: intersection(permissions, ['VIEW_CALLS']).length
},
+ {
+ label: __('Domande da valutare', 'gepafin'),
+ icon: 'pi pi-calendar-clock',
+ href: '/valutazioni',
+ id: 4,
+ enable: intersection(permissions, ['EVALUATE_APPLICATIONS']).length
+ },
{
label: __('Gestione Utenti', 'gepafin'),
icon: 'pi pi-users',
diff --git a/src/pages/Bandi/components/AllBandiTable/index.js b/src/pages/Bandi/components/AllBandiTable/index.js
index cc4191b..a636cd9 100644
--- a/src/pages/Bandi/components/AllBandiTable/index.js
+++ b/src/pages/Bandi/components/AllBandiTable/index.js
@@ -31,12 +31,12 @@ import { Link } from 'react-router-dom';
const AllBandiTable = () => {
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
- const [loading, setLoading] = useState(false);
+ const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [globalFilterValue, setGlobalFilterValue] = useState('');
const [statuses, setStatuses] = useState([]);
useEffect(() => {
- storeSet.main.setAsyncRequest();
+ setLocalAsyncRequest(true);
BandoService.getBandi(getCallback, errGetCallbacks);
}, []);
@@ -46,12 +46,11 @@ const AllBandiTable = () => {
setStatuses(uniq(data.data.map(o => o.status)))
initFilters();
}
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const errGetCallbacks = (data) => {
- console.log('errGetCallbacks', data)
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const getFormattedBandiData = (data) => {
@@ -136,7 +135,7 @@ const AllBandiTable = () => {
return(
-
{
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
- const [loading, setLoading] = useState(false);
+ const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [globalFilterValue, setGlobalFilterValue] = useState('');
const [statuses, setStatuses] = useState([]);
useEffect(() => {
- // TODO
- /*const items = [
- {
- name: 'Bando Innovazione 2024',
- start_date: '2024-08-08T00:00:00+00:00',
- end_date: '2024-08-30T00:00:00+00:00',
- submissions: 24,
- status: 'PUBLISH',
- id: 11
- },
- {
- name: 'Bando Sostenibilità 2024',
- start_date: '2024-07-28T00:00:00+00:00',
- end_date: '2024-08-15T00:00:00+00:00',
- submissions: 35,
- status: 'PUBLISH',
- id: 9
- },
- {
- name: 'Bando A',
- start_date: '2024-06-28T00:00:00+00:00',
- end_date: '2024-06-15T00:00:00+00:00',
- submissions: 2,
- status: 'EXPIRED',
- id: 2
- }
- ]
- setItems(getFormattedBandiData(items));
- setStatuses(uniq(items.map(o => o.status)))
- setLoading(false);
- initFilters();*/
-
- storeSet.main.setAsyncRequest();
+ setLocalAsyncRequest(true);
BandoService.getBandi(getCallback, errGetCallbacks);
}, []);
@@ -79,12 +47,11 @@ const LatestBandiTable = () => {
setStatuses(uniq(data.data.map(o => o.status)))
initFilters();
}
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const errGetCallbacks = (data) => {
- console.log('errGetCallbacks', data)
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const getFormattedBandiData = (data) => {
@@ -179,13 +146,13 @@ const LatestBandiTable = () => {
return(
-
setFilters(e.filters)}>
-
{
const navigate = useNavigate();
@@ -67,27 +69,52 @@ const Dashboard = () => {
{__('Bandi attivi', 'gepafin')}
- {getStatValue('numberOfActiveCalls', 0)}
+
{__('Utenti registrati', 'gepafin')}
- {getStatValue('numberOfResgisteredUsers', 0)}
+
{__('Domande in pre-istruttoria', 'gepafin')}
- {getStatValue('numberOfSubmittedApplications', 0)}
+
{__('Domande in bozza', 'gepafin')}
- {getStatValue('numberOfDraftApplications', 0)}
+
{__('Aziende', 'gepafin')}
- {getStatValue('numberOfCompany', 0)}
+
{__('Totale finanziamenti attivi', 'gepafin')}
- €{formatToMillions(getStatValue('totalActiveFinancing', 0))}
+
@@ -95,10 +122,17 @@ const Dashboard = () => {
-
{__('Ultimi Bandi Pubblicati', 'gepafin')}
+ {__('Ultimi bandi pubblicati', 'gepafin')}
+
+
+
+
{__('Ultime domande pubblicate', 'gepafin')}
+
+
+
{/*
diff --git a/src/pages/DashboardBeneficiario/components/LatestBandiTable/index.js b/src/pages/DashboardBeneficiario/components/LatestBandiTable/index.js
index b852369..f48b208 100644
--- a/src/pages/DashboardBeneficiario/components/LatestBandiTable/index.js
+++ b/src/pages/DashboardBeneficiario/components/LatestBandiTable/index.js
@@ -1,6 +1,7 @@
import React, { useState, useEffect} from 'react';
import { __ } from '@wordpress/i18n';
import { uniq } from 'ramda';
+import { Link } from 'react-router-dom';
// tools
import getBandoLabel from '../../../../helpers/getBandoLabel';
@@ -25,7 +26,6 @@ import { Button } from 'primereact/button';
import { Calendar } from 'primereact/calendar';
import { Tag } from 'primereact/tag';
import ProperBandoLabel from '../../../../components/ProperBandoLabel';
-import { Link } from 'react-router-dom';
const LatestBandiTable = () => {
@@ -43,7 +43,7 @@ const LatestBandiTable = () => {
const getCallback = (data) => {
if (data.status === 'SUCCESS') {
const newItems = data.data.filter(o => o.status === 'PUBLISH');
- setItems(getFormattedBandiData(newItems));
+ setItems(getFormattedData(newItems));
setStatuses(uniq(data.data.map(o => o.status)))
initFilters();
}
@@ -55,7 +55,7 @@ const LatestBandiTable = () => {
storeSet.main.unsetAsyncRequest();
}
- const getFormattedBandiData = (data) => {
+ const getFormattedData = (data) => {
return [...(data || [])].map((d) => {
d.start_date = new Date(d.dates[0]);
d.end_date = new Date(d.dates[1]);
@@ -121,18 +121,10 @@ const LatestBandiTable = () => {
return
options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />;
};
- const balanceFilterTemplate = (options) => {
- return options.filterCallback(e.value, options.index)} />;
- };
-
const statusBodyTemplate = (rowData) => {
return ;
};
- const statusFilterTemplate = (options) => {
- return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select One" className="p-column-filter" showClear />;
- };
-
const statusItemTemplate = (option) => {
return ;
};
@@ -153,7 +145,7 @@ const LatestBandiTable = () => {
header={header}
emptyMessage={__('Nessun dato disponibile', 'gepafin')}
onFilter={(e) => setFilters(e.filters)}>
-
{
- const isAsyncRequest = useStore().main.isAsyncRequest();
+ const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
const [globalFilterValue, setGlobalFilterValue] = useState('');
const [statuses, setStatuses] = useState([]);
useEffect(() => {
- storeSet.main.setAsyncRequest();
+ setLocalAsyncRequest(true);
ApplicationService.getApplications(getApplCallback, errGetApplCallback)
}, []);
@@ -45,12 +45,11 @@ const MyLatestSubmissionsTable = () => {
initFilters();
}
}
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const errGetApplCallback = (data) => {
- set404FromErrorResponse(data);
- storeSet.main.unsetAsyncRequest();
+ setLocalAsyncRequest(false);
}
const getFormattedBandiData = (data) => {
@@ -164,13 +163,13 @@ const MyLatestSubmissionsTable = () => {
return (
-
setFilters(e.filters)}>
-
{
{__('Domande attive', 'gepafin')}
- {getStatValue('numberOfApplications', 0)}
+
{__('Bandi osservati', 'gepafin')}
- {getStatValue('numberOfCalls', 0)}
+
{__('Documenti da integrare', 'gepafin')}
- {getStatValue('numberOfIntegratedDocuments', 0)}
+
diff --git a/src/pages/DashboardInstructor/components/MyEvaluationsTable/index.js b/src/pages/DashboardInstructor/components/MyEvaluationsTable/index.js
new file mode 100644
index 0000000..413b41c
--- /dev/null
+++ b/src/pages/DashboardInstructor/components/MyEvaluationsTable/index.js
@@ -0,0 +1,189 @@
+import React, { useState, useEffect } from 'react';
+import { __ } from '@wordpress/i18n';
+import { Link } from 'react-router-dom';
+
+// store
+import { useStore } from '../../../../store';
+
+// tools
+//import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
+import ProperBandoLabel from '../../../../components/ProperBandoLabel';
+
+// api
+//import ApplicationService from '../../../../service/application-service';
+
+// components
+import { FilterMatchMode, FilterOperator } from 'primereact/api';
+import { DataTable } from 'primereact/datatable';
+import { Column } from 'primereact/column';
+import { InputText } from 'primereact/inputtext';
+import { IconField } from 'primereact/iconfield';
+import { InputIcon } from 'primereact/inputicon';
+import { Button } from 'primereact/button';
+import { Calendar } from 'primereact/calendar';
+
+
+const MyEvaluationsTable = () => {
+ const isAsyncRequest = useStore().main.isAsyncRequest();
+ const [items, setItems] = useState(null);
+ const [filters, setFilters] = useState(null);
+ const [globalFilterValue, setGlobalFilterValue] = useState('');
+
+ useEffect(() => {
+ const demoItems = [
+ {
+ id: 1,
+ callTitle: 'Bando 1',
+ appliedDate: '2024-10-01',
+ callEndDate: '2025-11-25',
+ status: 'AWAITING'
+ },
+ {
+ id: 2,
+ callTitle: 'Bando 2',
+ appliedDate: '2024-08-11',
+ callEndDate: '2027-09-23',
+ status: 'AWAITING'
+ }
+ ];
+ setItems(getFormattedData(demoItems));
+ /*storeSet.main.setAsyncRequest();
+ ApplicationService.getApplications(getApplCallback, errGetApplCallback)*/
+ }, []);
+
+ /*const getApplCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ if (data.data.length) {
+ setItems(getFormattedBandiData(data.data));
+ setStatuses(uniq(items.map(o => o.status)))
+ initFilters();
+ }
+ }
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ const errGetApplCallback = (data) => {
+ set404FromErrorResponse(data);
+ storeSet.main.unsetAsyncRequest();
+ }*/
+
+ const getFormattedData = (data) => {
+ return [...(data || [])].map((d) => {
+ d.appliedDate = new Date(d.appliedDate);
+ d.callEndDate = new Date(d.callEndDate);
+
+ return d;
+ });
+ };
+
+ const formatDate = (value) => {
+ return value.toLocaleDateString('it-IT', {
+ day: '2-digit',
+ month: '2-digit',
+ year: 'numeric'
+ });
+ };
+
+ const clearFilter = () => {
+ initFilters();
+ };
+
+ const onGlobalFilterChange = (e) => {
+ const value = e.target.value;
+ let _filters = { ...filters };
+
+ _filters['global'].value = value;
+
+ setFilters(_filters);
+ setGlobalFilterValue(value);
+ };
+
+ const initFilters = () => {
+ setFilters({
+ global: { value: null, matchMode: FilterMatchMode.CONTAINS },
+ callTitle: {
+ operator: FilterOperator.AND,
+ constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }]
+ },
+ appliedDate: {
+ operator: FilterOperator.AND,
+ constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }]
+ },
+ callEndDate: {
+ operator: FilterOperator.AND,
+ constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }]
+ }
+ });
+ setGlobalFilterValue('');
+ };
+
+ const renderHeader = () => {
+ return (
+
+
+
+
+
+
+
+ );
+ };
+
+ const dateAppliedBodyTemplate = (rowData) => {
+ return formatDate(rowData.appliedDate);
+ };
+
+ const dateEndBodyTemplate = (rowData) => {
+ return formatDate(rowData.callEndDate);
+ };
+
+ const dateFilterTemplate = (options) => {
+ return options.filterCallback(e.value, options.index)}
+ dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999"/>;
+ };
+
+ const statusBodyTemplate = (rowData) => {
+ return ;
+ };
+
+ const actionsBodyTemplate = (rowData) => {
+ return
+
+
+ }
+
+ const header = renderHeader();
+
+ return (
+
+ setFilters(e.filters)}>
+
+
+
+
+
+
+
+
+ )
+}
+
+export default MyEvaluationsTable;
\ No newline at end of file
diff --git a/src/pages/DashboardInstructor/index.js b/src/pages/DashboardInstructor/index.js
new file mode 100644
index 0000000..641b24a
--- /dev/null
+++ b/src/pages/DashboardInstructor/index.js
@@ -0,0 +1,76 @@
+import React, { useEffect, useState } from 'react';
+import { __ } from '@wordpress/i18n';
+import { useNavigate } from 'react-router-dom';
+import { head, pathOr } from 'ramda';
+
+// store
+import { useStore } from '../../store';
+
+// api
+//import DashboardService from '../../service/dashboard-service';
+
+// components
+//import LatestBandiTable from './components/LatestBandiTable';
+//import MyLatestSubmissionsTable from './components/MyLatestSubmissionsTable';
+import { Button } from 'primereact/button';
+import MyEvaluationsTable from './components/MyEvaluationsTable';
+
+const DashboardInstructor = () => {
+ const navigate = useNavigate();
+ //const [mainStats, setMainStats] = useState({});
+
+ const goToAllEvaluations = () => {
+ navigate('/valutazioni');
+ }
+
+ return(
+
+
+
{__('Dashboard', 'gepafin')}
+
+
+ {/*
+
+
+
{__('Panoramica di Sistema', 'gepafin')}
+
+
+ {__('Domande attive', 'gepafin')}
+ {getStatValue('numberOfApplications', 0)}
+
+
+ {__('Bandi osservati', 'gepafin')}
+ {getStatValue('numberOfCalls', 0)}
+
+
+ {__('Documenti da integrare', 'gepafin')}
+ {getStatValue('numberOfIntegratedDocuments', 0)}
+
+
+
*/}
+
+
+
+
+
{__('Coda di lavoro', 'gepafin')}
+
+
+
+
+
+
+ {__('Azioni rapide', 'gepafin')}
+
+
+
+
+ )
+}
+
+export default DashboardInstructor;
\ No newline at end of file
diff --git a/src/pages/Evaluations/index.js b/src/pages/Evaluations/index.js
new file mode 100644
index 0000000..f5913b7
--- /dev/null
+++ b/src/pages/Evaluations/index.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import { __ } from '@wordpress/i18n';
+
+// components
+import MyEvaluationsTable from '../DashboardInstructor/components/MyEvaluationsTable';
+
+const Bandi = () => {
+ return(
+
+
+
{__('Domande da valutare', 'gepafin')}
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Bandi;
\ No newline at end of file
diff --git a/src/pages/Profile/index.js b/src/pages/Profile/index.js
index 35fbd56..d7b3474 100644
--- a/src/pages/Profile/index.js
+++ b/src/pages/Profile/index.js
@@ -129,88 +129,7 @@ const Profile = () => {
-
{__('Consensi', 'gepafin')}
-
-
-
-
- {__('Dichiaro di aver preso visione, prima dell\'accesso al portale https://bandi.gepafin.it, dell\' "Informativa Privacy" all\'interno dell\'Appendice 10 dell\'Avviso secondo il Regolamento UE 2016/679 relativo alla protezione delle persone fisiche con riguardo al trattamento dei dati personale, nonché alla libera circolazione di tali dati e che abroga la Direttiva 95/46 CE.', 'gepafin')}
-
-
-
-
-
-
- {__('Termini e condizioni', 'gepafin')}
-
-
-
-
-
-
- {__('Invio di materiale pubblicitario, vendita diretta, compimento di ricerche di mercato o comunicazione commerciale riguardanti promozione e vendita di prodotti e servizi della Gepafin, mediante modalità di contatto automatizzate (posta elettronica, PEC, messaggi tramite canali informatici, network ed applicazioni web) e tradizionali (come posta cartacea e chiamate telefoniche con operatore)', 'gepafin')}
-
-
-
-
-
-
- {__('Elaborazione, in forma elettronica, dei dati relativi ai rapporti e servizi forniti, per l’analisi di comportamenti e preferenze della clientela, da utilizzare a scopo commerciale, per la individuazione ed offerta di prodotti e servizi di suo interesse', 'gepafin')}
-
-
-
-
-
-
- {__('Comunicazione dei miei dati ad altre società in ambito bancario, finanziario od assicurativo e enti pubblici che li tratteranno per invio di materiale pubblicitario, vendita diretta, compimento di ricerche di mercato o comunicazione commerciale riguardanti loro prodotti o servizi, mediante le modalità automatizzate e tradizionali di comunicazione sopra indicate', 'gepafin')}
-
-
-
-
-
-
{__('Utenti Associati', 'gepafin')}
+
{__('Impostazioni', 'gepafin')}
{
+ const isAsyncRequest = useStore().main.isAsyncRequest();
+ const userData = useStore().main.userData();
+ const toast = useRef(null);
+
+ const {
+ control,
+ handleSubmit,
+ formState: { errors }
+ } = useForm({
+ defaultValues: useMemo(() => {
+ return userData;
+ }, [userData]),
+ mode: 'onChange'
+ });
+
+ const onSubmit = (formData) => {
+ storeSet.main.setAsyncRequest();
+
+ UserService.updateUser(userData.id, formData, updateCallback, updateError);
+ };
+
+ const updateCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ storeSet.main.userData(data.data);
+ if (toast.current) {
+ toast.current.show({
+ severity: 'success',
+ summary: '',
+ detail: __('L\'utente è stato aggiornato!', 'gepafin')
+ });
+ }
+ }
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ const updateError = (data) => {
+ set404FromErrorResponse(data);
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ return (
+
+
+
{__('Profilo utente', 'gepafin')}
+
+
+
+
+
+
+
+
+)
+
+}
+
+export default ProfileBeneficiario;
\ No newline at end of file
diff --git a/src/pages/Users/components/AllUsersTable/index.js b/src/pages/Users/components/AllUsersTable/index.js
index b0972df..643ab95 100644
--- a/src/pages/Users/components/AllUsersTable/index.js
+++ b/src/pages/Users/components/AllUsersTable/index.js
@@ -152,7 +152,7 @@ const AllUsersTable = () => {
header={header}
emptyMessage={__('Nessun dato disponibile', 'gepafin')}
onFilter={(e) => setFilters(e.filters)}>
-
diff --git a/src/routes.js b/src/routes.js
index 7bb4124..8e36701 100644
--- a/src/routes.js
+++ b/src/routes.js
@@ -25,6 +25,9 @@ import ProfileCompany from './pages/ProfileCompany';
import Users from './pages/Users';
import AddCompany from './pages/AddCompany';
import ResetPassword from './pages/ResetPassword';
+import DashboardInstructor from './pages/DashboardInstructor';
+import ProfileBeneficiario from './pages/ProfileBeneficiario';
+import Evaluations from './pages/Evaluations';
const routes = ({ role, chosenCompanyId }) => {
@@ -34,62 +37,82 @@ const routes = ({ role, chosenCompanyId }) => {
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
+ }/>
+
+ {'ROLE_SUPER_ADMIN' === role ? : null}
+ {'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
- {'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role && chosenCompanyId > 0 ? : }
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
{'ROLE_SUPER_ADMIN' === role ? : null}
{'ROLE_BENEFICIARY' === role ? : null}
+ {'ROLE_PRE_INSTRUCTOR' === role ? : null}
}/>
}/>