From 736ac8072fc9d263b5dd2cfa81c898bff9a40c5a Mon Sep 17 00:00:00 2001
From: Arturo Buono
Date: Tue, 30 Jan 2024 17:09:57 +0100
Subject: [PATCH] fix(allineamento): updates 20240130
---
.../cardCommunity.scss} | 0
.../cardCommunity.tsx} | 26 +-
.../src/components/Comments/comment.tsx | 18 +-
.../components/Comments/commentSection.tsx | 2 +-
.../DocumentDetail/sectionDetail.tsx | 20 +-
.../src/components/MocksWave3/Mocks.tsx | 2 +-
.../src/components/ReportCard/ReportCard.tsx | 8 +-
.../searchBarOptionsCitizen.tsx | 40 +-
fe-piattaforma/src/components/index.ts | 2 +
.../src/consts/monthsMapForFiscalCode.ts | 27 +-
.../Surveys/components/jsonFormRender.tsx | 2 +-
.../Entities/modals/Category/categoryForm.tsx | 2 +-
.../Entities/modals/manageComment.tsx | 4 +-
.../Entities/modals/manageReport.tsx | 2 +-
.../Entities/modals/manageTopic.tsx | 8 +-
.../forum.scss => Community/community.scss} | 0
.../forum.tsx => Community/community.tsx} | 11 +-
.../communityDetails.tsx} | 22 +-
.../pages/common/HomeSearch/homeSearch.tsx | 5 +-
.../NotificationIcon/NotificationIcon.tsx | 10 +-
.../components/Notifications/notification.tsx | 4 +-
.../userPublishedContentsPage.tsx | 5 +-
.../pages/facilitator/Categories/category.tsx | 6 +-
.../communityWidget.tsx} | 24 +-
.../src/pages/facilitator/Home/home.tsx | 4 +-
.../src/pages/facilitator/Survey/survey.tsx | 6 +-
.../pages/forms/formForum/formCreateTopic.tsx | 2 +-
.../formProjects/formProjectGeneralInfo.tsx | 2 +-
.../formServices/ExistingCitizenInfo.tsx | 3 +-
.../formServices/formServiceCitizenFull.tsx | 26 +-
.../models/newUserValuesFormCitizen.model.ts | 23 +-
.../services/servicesThunk.ts | 13 +-
.../administrativeArea/user/userThunk.ts | 4 +
.../forum/categories/categoriesThunk.ts | 2 +-
.../src/redux/features/forum/forumThunk.ts | 52 +-
.../src/redux/features/user/userSlice.ts | 7 +
.../src/redux/features/user/userThunk.ts | 19 +-
fe-piattaforma/src/routes/index.tsx | 14 +-
.../src/styles/common/_components.scss | 2 +-
fe-piattaforma/src/styles/main.scss | 2 +-
fe-piattaforma/src/utils/common.ts | 2 +-
fe-piattaforma/src/utils/mockHelper.ts | 184 +-
fe-piattaforma/src/utils/sessionHelper.ts | 4 +-
fe-piattaforma/webpack/webpack.common.js | 8 +-
.../repdgt/surveymgmt/dto/CittadinoDto.java | 2 +
.../surveymgmt/mapper/ServizioMapper.java | 26 +-
.../projection/CittadinoProjection.java | 5 +-
.../projection/GetCittadinoProjection.java | 16 +-
.../repository/CittadinoRepository.java | 156 +-
.../repository/ServizioSqlRepository.java | 438 +++--
.../ServizioXCittadinoRepository.java | 22 +-
.../ConsensoTrattamentoDatiRequest.java | 4 +
.../service/CittadiniServizioService.java | 1547 +++++++++--------
.../service/QuestionarioCompilatoService.java | 7 +-
.../service/ServizioSqlService.java | 325 ++--
55 files changed, 1600 insertions(+), 1577 deletions(-)
rename fe-piattaforma/src/components/{CardForum/cardForum.scss => CardCommunity/cardCommunity.scss} (100%)
rename fe-piattaforma/src/components/{CardForum/cardForum.tsx => CardCommunity/cardCommunity.tsx} (82%)
rename fe-piattaforma/src/pages/common/{Forum/forum.scss => Community/community.scss} (100%)
rename fe-piattaforma/src/pages/common/{Forum/forum.tsx => Community/community.tsx} (96%)
rename fe-piattaforma/src/pages/common/{Forum/forumDetails.tsx => Community/communityDetails.tsx} (91%)
rename fe-piattaforma/src/pages/facilitator/Home/components/{ForumWidget/forumWidget.tsx => CommunityWidget/communityWidget.tsx} (87%)
diff --git a/fe-piattaforma/src/components/CardForum/cardForum.scss b/fe-piattaforma/src/components/CardCommunity/cardCommunity.scss
similarity index 100%
rename from fe-piattaforma/src/components/CardForum/cardForum.scss
rename to fe-piattaforma/src/components/CardCommunity/cardCommunity.scss
diff --git a/fe-piattaforma/src/components/CardForum/cardForum.tsx b/fe-piattaforma/src/components/CardCommunity/cardCommunity.tsx
similarity index 82%
rename from fe-piattaforma/src/components/CardForum/cardForum.tsx
rename to fe-piattaforma/src/components/CardCommunity/cardCommunity.tsx
index 6c6219d00..a185d29fc 100644
--- a/fe-piattaforma/src/components/CardForum/cardForum.tsx
+++ b/fe-piattaforma/src/components/CardCommunity/cardCommunity.tsx
@@ -2,13 +2,13 @@ import clsx from 'clsx';
import { CardText, CardTitle, Col, Icon } from 'design-react-kit';
import React, { memo } from 'react';
import Heart from '/public/assets/img/hollow-grey-heart.png';
-import './cardForum.scss';
+import './cardCommunity.scss';
import { useNavigate } from 'react-router-dom';
import PublishingAuthority from '../CardDocument/PublishingAuthority';
import { formatDate } from '../../utils/datesHelper';
import { ForumCardsI } from '../CardShowcase/cardShowcase';
-const CardForum: React.FC = (props) => {
+const CardCommunity: React.FC = (props) => {
const {
id,
title,
@@ -23,14 +23,14 @@ const CardForum: React.FC = (props) => {
const navigate = useNavigate();
const navigateTo = () => {
- navigate(`/forum/${id}`);
+ navigate(`/community/${id}`);
};
return (
= (props) => {
>
{category_label ? (
-
+
{category_label}
{/* — */}
@@ -66,13 +66,13 @@ const CardForum: React.FC = (props) => {
{title ? (
{title}
) : null}
{description ? (
-
+
{description}
) : null}
@@ -87,7 +87,7 @@ const CardForum: React.FC = (props) => {
'align-items-center'
)}
>
-
+
{date && formatDate(date, 'shortDate')}
@@ -106,7 +106,7 @@ const CardForum: React.FC = (props) => {
aria-label='Likes'
aria-hidden
/>
- {likes}
+ {likes}
= (props) => {
aria-label='Comments'
aria-hidden
/>
- {comment_count}
+
+ {comment_count}
+
= (props) => {
aria-label='Views'
aria-hidden
/>
- {views}
+ {views}
@@ -141,4 +143,4 @@ const CardForum: React.FC
= (props) => {
);
};
-export default memo(CardForum);
+export default memo(CardCommunity);
diff --git a/fe-piattaforma/src/components/Comments/comment.tsx b/fe-piattaforma/src/components/Comments/comment.tsx
index 3677c4804..79c42b20f 100644
--- a/fe-piattaforma/src/components/Comments/comment.tsx
+++ b/fe-piattaforma/src/components/Comments/comment.tsx
@@ -44,7 +44,7 @@ export interface CommentI {
isAnswer?: boolean;
thread?: boolean;
noBorder?: boolean;
- section: 'board' | 'forum' | 'documents';
+ section: 'board' | 'community' | 'documents';
onDeleteComment?: () => void;
onEditComment?: () => void;
reported: 0 | 1;
@@ -134,7 +134,7 @@ const Comment: React.FC = (props) => {
hasUserPermission([
section === 'board'
? 'del.news'
- : section === 'forum'
+ : section === 'community'
? 'del.topic'
: section === 'documents'
? 'del.doc'
@@ -148,7 +148,7 @@ const Comment: React.FC = (props) => {
hasUserPermission([
section === 'board'
? 'upd.news'
- : section === 'forum'
+ : section === 'community'
? 'upd.topic'
: section === 'documents'
? 'upd.doc'
@@ -162,7 +162,7 @@ const Comment: React.FC = (props) => {
hasUserPermission([
section === 'board'
? 'rprt.news'
- : section === 'forum'
+ : section === 'community'
? 'rprt.topic'
: section === 'documents'
? 'rprt.doc'
@@ -327,20 +327,20 @@ const Comment: React.FC = (props) => {
replies={
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- section === 'forum' && replies !== '[]'
+ section === 'community' && replies !== '[]'
? replies?.length
: undefined
}
- views={section === 'forum' ? views : undefined}
+ views={section === 'community' ? views : undefined}
onShowReplies={
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
- section === 'forum' && replies !== '[]' && replies?.length
+ section === 'community' && replies !== '[]' && replies?.length
? () => setShowReplies((prev) => !prev)
: undefined
}
isReply={isReply}
- showReplies={section === 'forum' ? showReplies : undefined}
+ showReplies={section === 'community' ? showReplies : undefined}
likes={likes}
user_like={user_like}
onLike={async () => {
@@ -355,7 +355,7 @@ const Comment: React.FC = (props) => {
}
}}
onComment={
- section === 'forum'
+ section === 'community'
? () =>
dispatch(
openModal({
diff --git a/fe-piattaforma/src/components/Comments/commentSection.tsx b/fe-piattaforma/src/components/Comments/commentSection.tsx
index 2ec288e15..814b21739 100644
--- a/fe-piattaforma/src/components/Comments/commentSection.tsx
+++ b/fe-piattaforma/src/components/Comments/commentSection.tsx
@@ -8,7 +8,7 @@ import SectionTitle from '../SectionTitle/sectionTitle';
import Comment from './comment';
interface commentSectionI {
- section: 'board' | 'forum' | 'documents';
+ section: 'board' | 'community' | 'documents';
}
const CommentSection: React.FC = ({ section }) => {
diff --git a/fe-piattaforma/src/components/DocumentDetail/sectionDetail.tsx b/fe-piattaforma/src/components/DocumentDetail/sectionDetail.tsx
index 51610ca3b..25b9d367e 100644
--- a/fe-piattaforma/src/components/DocumentDetail/sectionDetail.tsx
+++ b/fe-piattaforma/src/components/DocumentDetail/sectionDetail.tsx
@@ -48,7 +48,7 @@ export interface CardDocumentDetailI {
user_like?: boolean;
likes?: number;
views?: number;
- section?: 'forum' | 'documents';
+ section?: 'community' | 'documents';
isDocument?: boolean | undefined;
onDeleteClick?: () => void;
onEditClick?: () => void;
@@ -138,7 +138,7 @@ const SectionDetail: React.FC = (props) => {
hasUserPermission([
section === 'documents' || isDocument
? 'del.doc'
- : section === 'forum'
+ : section === 'community'
? 'del.topic'
: 'hidden',
]) ||
@@ -146,7 +146,7 @@ const SectionDetail: React.FC = (props) => {
hasUserPermission([
section === 'documents' || isDocument
? 'new.doc'
- : section === 'forum'
+ : section === 'community'
? 'new.topic'
: 'hidden',
]))
@@ -157,7 +157,7 @@ const SectionDetail: React.FC = (props) => {
hasUserPermission([
section === 'documents' || isDocument
? 'upd.doc'
- : section === 'forum'
+ : section === 'community'
? 'upd.topic'
: 'hidden',
]) ||
@@ -165,7 +165,7 @@ const SectionDetail: React.FC = (props) => {
hasUserPermission([
section === 'documents' || isDocument
? 'new.doc'
- : section === 'forum'
+ : section === 'community'
? 'new.topic'
: 'hidden',
]))
@@ -176,7 +176,7 @@ const SectionDetail: React.FC = (props) => {
hasUserPermission([
section === 'documents' || isDocument
? 'rprt.doc'
- : section === 'forum'
+ : section === 'community'
? 'rprt.topic'
: 'hidden',
])
@@ -392,7 +392,7 @@ const SectionDetail: React.FC = (props) => {
) : null}
= (props) => {
downloads={downloads}
user_like={user_like}
onLike={
- section === 'forum'
+ section === 'community'
? async () => {
if (id) {
if (user_like as boolean) {
@@ -422,7 +422,7 @@ const SectionDetail: React.FC = (props) => {
})
);
}
- userId && dispatch(GetItemDetail(id, userId, 'forum'));
+ userId && dispatch(GetItemDetail(id, userId, 'community'));
}
}
: undefined
@@ -434,7 +434,7 @@ const SectionDetail: React.FC = (props) => {
payload: {
title: 'Aggiungi commento',
action: 'comment',
- entity: section === 'forum' ? 'forum' : 'document',
+ entity: section === 'community' ? 'community' : 'document',
category: category_label || category,
textLabel: 'Digita qui sotto il testo',
},
diff --git a/fe-piattaforma/src/components/MocksWave3/Mocks.tsx b/fe-piattaforma/src/components/MocksWave3/Mocks.tsx
index 10a034e5f..11b4f31d3 100644
--- a/fe-piattaforma/src/components/MocksWave3/Mocks.tsx
+++ b/fe-piattaforma/src/components/MocksWave3/Mocks.tsx
@@ -10,7 +10,7 @@ export const DocumentCardMock = {
comment: 12,
};
-export const ForumPropsMock = [
+export const CommunityPropsMock = [
{
title: 'La Digital Skills and Jobs Platform: un anno da festeggiare',
description:
diff --git a/fe-piattaforma/src/components/ReportCard/ReportCard.tsx b/fe-piattaforma/src/components/ReportCard/ReportCard.tsx
index c6ef1e78f..71506169f 100644
--- a/fe-piattaforma/src/components/ReportCard/ReportCard.tsx
+++ b/fe-piattaforma/src/components/ReportCard/ReportCard.tsx
@@ -34,7 +34,7 @@ interface ReportCardI {
comment_post_date?: string;
item_id: string;
item_title?: string;
- item_type: 'board_item' | 'forum_item' | 'document_item';
+ item_type: 'board_item' | 'community_item' | 'document_item';
reason: string;
date: string;
}
@@ -91,7 +91,7 @@ const ReportCard: React.FC = ({
switch (item_type) {
case 'board_item':
return short ? 'news' : 'la news';
- case 'forum_item':
+ case 'community_item':
return short ? 'topic' : 'il topic';
case 'document_item':
return short ? 'documento' : 'il documento';
@@ -264,8 +264,8 @@ const ReportCard: React.FC = ({
case 'board_item':
navigate(`/bacheca/${item_id}`);
break;
- case 'forum_item':
- navigate(`/forum/${item_id}`);
+ case 'community_item':
+ navigate(`/community/${item_id}`);
break;
case 'document_item':
navigate(`/documenti/${item_id}`);
diff --git a/fe-piattaforma/src/components/SearchBarOptionsCitizen/searchBarOptionsCitizen.tsx b/fe-piattaforma/src/components/SearchBarOptionsCitizen/searchBarOptionsCitizen.tsx
index 7bee96d23..5a753164f 100644
--- a/fe-piattaforma/src/components/SearchBarOptionsCitizen/searchBarOptionsCitizen.tsx
+++ b/fe-piattaforma/src/components/SearchBarOptionsCitizen/searchBarOptionsCitizen.tsx
@@ -10,8 +10,9 @@ import Input from '../Form/input';
import { setCitizenSearchResults } from '../../redux/features/citizensArea/citizensAreaSlice';
import { SearchValue } from '../../pages/forms/models/searchValue.model';
import { Buffer } from 'buffer';
-import { mappaMesi } from '../../consts/monthsMapForFiscalCode';
import { emitNotify } from '../../redux/features/notification/notificationSlice';
+import moment from 'moment';
+import { Parser, Validator } from '@marketto/codice-fiscale-utils';
interface SearchBarOptionsI {
setCurrentStep: (value: string) => void;
@@ -45,20 +46,7 @@ const SearchBarOptionsCitizen: React.FC = ({
const [mustValidateCf, setMustValidateCf] = useState(true);
const isMaggiorenne = useCallback((cf: string): boolean => {
- const today: Date = new Date();
- const rangeCentury: number = parseInt(
- today.getFullYear().toString().substring(2)
- );
- const isFemale: boolean = cf.charAt(9) >= '4';
- const dayOfBirth: number =
- parseInt(cf.substring(9, 11)) - (isFemale ? 40 : 0);
- const century: number = parseInt(cf.substring(6, 8));
- const yearOfBirth: number =
- century <= rangeCentury ? 2000 + century : 1900 + century;
- const month: number = mappaMesi.get(cf.charAt(8).toUpperCase()) as number;
- const dateOfBirth: Date = new Date(yearOfBirth, month, dayOfBirth);
- const age: number = today.getFullYear() - dateOfBirth.getFullYear();
- return age > 18;
+ return moment().diff(Parser.cfToBirthDate(cf), 'years', false) >= 18;
}, []);
const dispatchNotify = useCallback(
@@ -72,9 +60,20 @@ const SearchBarOptionsCitizen: React.FC = ({
const isValidFiscalCode = useCallback(
(query: string) => {
- const isValid: boolean =
- /^[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]$/i.test(query);
- if (isValid) {
+ const fiscalCodeValid = Validator.codiceFiscale(query).valid;
+ const fiscalCodeLengthCorrect = query.length === 16;
+
+ if (!fiscalCodeValid && fiscalCodeLengthCorrect) {
+ dispatchNotify(
+ 1,
+ 'ERRORE',
+ 'error',
+ 'Il codice fiscale inserito non è valido',
+ 'medium'
+ );
+ return false;
+ }
+ if (fiscalCodeValid) {
const isAdult = isMaggiorenne(query);
if (!isAdult) {
dispatchNotify(
@@ -87,9 +86,10 @@ const SearchBarOptionsCitizen: React.FC = ({
}
return isAdult;
}
- return isValid;
+
+ return false;
},
- [dispatch, isMaggiorenne]
+ [dispatchNotify, isMaggiorenne]
);
const onRadioChange = useCallback(
diff --git a/fe-piattaforma/src/components/index.ts b/fe-piattaforma/src/components/index.ts
index d46a84477..6aac3f5ff 100644
--- a/fe-piattaforma/src/components/index.ts
+++ b/fe-piattaforma/src/components/index.ts
@@ -1,5 +1,6 @@
import Accordion from './Accordion/accordion';
import Card from './Card/card';
+import CardCommunity from './CardCommunity/cardCommunity';
import CardCounter from './CardCounter/cardCounter';
import CardProfile from './CardProfile/cardProfile';
import CardStatusAction from './CardStatusAction/cardStatusAction';
@@ -47,6 +48,7 @@ export {
Breadcrumb,
ButtonsBar,
Card,
+ CardCommunity,
CardCounter,
CardProfile,
CardStatusAction,
diff --git a/fe-piattaforma/src/consts/monthsMapForFiscalCode.ts b/fe-piattaforma/src/consts/monthsMapForFiscalCode.ts
index 86b3f5174..e1b85e6ad 100644
--- a/fe-piattaforma/src/consts/monthsMapForFiscalCode.ts
+++ b/fe-piattaforma/src/consts/monthsMapForFiscalCode.ts
@@ -1,14 +1,15 @@
export const mappaMesi = new Map([
- ['A', 1],
- ['B', 2],
- ['C', 3],
- ['D', 4],
- ['E', 5],
- ['H', 6],
- ['L', 7],
- ['M', 8],
- ['P', 9],
- ['R', 10],
- ['S', 11],
- ['T', 12],
-]);
+ ['A', 1],
+ ['B', 2],
+ ['C', 3],
+ ['D', 4],
+ ['E', 5],
+ ['H', 6],
+ ['L', 7],
+ ['M', 8],
+ ['P', 9],
+ ['R', 10],
+ ['S', 11],
+ ['T', 12],
+ ]);
+
\ No newline at end of file
diff --git a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/Surveys/components/jsonFormRender.tsx b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/Surveys/components/jsonFormRender.tsx
index d389aa7be..257cc7edb 100644
--- a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/Surveys/components/jsonFormRender.tsx
+++ b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/Surveys/components/jsonFormRender.tsx
@@ -257,7 +257,7 @@ const JsonFormRender: React.FC = (props) => {
? 'ml-2 mb-3'
: ''
}
- customMandatoryText='* Selezionare almeno una risposta'
+ customMandatoryText='Rispondere ad almeno una delle seguenti domande'
>
= (props) => {
label='Sezione'
options={[
{ label: 'Bacheca', value: 'board_categories' },
- { label: 'Forum', value: 'forum_categories' },
+ { label: 'Forum', value: 'community_categories' },
{ label: 'Documenti', value: 'document_categories' },
]}
placeholder='Seleziona la sezione'
diff --git a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageComment.tsx b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageComment.tsx
index 3e89bafa1..66342c950 100644
--- a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageComment.tsx
+++ b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageComment.tsx
@@ -60,7 +60,7 @@ const ManageComment: React.FC = ({
// @ts-ignore
if (res) {
userId &&
- dispatch(GetItemDetail(id, userId, payload.entity || 'forum'));
+ dispatch(GetItemDetail(id, userId, payload.entity || 'community'));
dispatch(
ActionTracker({
target: 'tnd',
@@ -68,7 +68,7 @@ const ManageComment: React.FC = ({
event_type:
payload.entity === 'board'
? 'NEWS'
- : payload.entity === 'forum'
+ : payload.entity === 'community'
? 'TOPIC'
: 'DOCUMENTI',
category: payload.category_label || payload.category,
diff --git a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageReport.tsx b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageReport.tsx
index 0e081a1c1..35f21f62e 100644
--- a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageReport.tsx
+++ b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageReport.tsx
@@ -43,7 +43,7 @@ const ManageReport: React.FC = ({
if (newReport.trim() !== '' && payload) {
switch (payload.entity) {
case 'board':
- case 'forum':
+ case 'community':
case 'document':
if (id && userId) {
await dispatch(CreateItemReport(id, newReport));
diff --git a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageTopic.tsx b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageTopic.tsx
index f9e0af2ab..30a0f6b60 100644
--- a/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageTopic.tsx
+++ b/fe-piattaforma/src/pages/administrator/AdministrativeArea/Entities/modals/manageTopic.tsx
@@ -95,13 +95,13 @@ const ManageTopic: React.FC = ({
// @ts-ignore
!newFormValues?.attachment?.data,
},
- 'forum'
+ 'community'
)
);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
if (res) {
- userId && dispatch(GetItemDetail(id, userId, 'forum'));
+ userId && dispatch(GetItemDetail(id, userId, 'community'));
setNewFormValues({});
setStep('confirm');
}
@@ -120,7 +120,7 @@ const ManageTopic: React.FC = ({
? 'Ente gestore di programma'
: '-',
},
- 'forum'
+ 'community'
)
);
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -170,7 +170,7 @@ const ManageTopic: React.FC = ({
onClick: () => {
resetModal();
dispatch(closeModal());
- newNodeId && navigate(`/forum/${newNodeId}`);
+ newNodeId && navigate(`/community/${newNodeId}`);
},
},
secondaryCTA: null,
diff --git a/fe-piattaforma/src/pages/common/Forum/forum.scss b/fe-piattaforma/src/pages/common/Community/community.scss
similarity index 100%
rename from fe-piattaforma/src/pages/common/Forum/forum.scss
rename to fe-piattaforma/src/pages/common/Community/community.scss
diff --git a/fe-piattaforma/src/pages/common/Forum/forum.tsx b/fe-piattaforma/src/pages/common/Community/community.tsx
similarity index 96%
rename from fe-piattaforma/src/pages/common/Forum/forum.tsx
rename to fe-piattaforma/src/pages/common/Community/community.tsx
index 31679fa14..75be1cde4 100644
--- a/fe-piattaforma/src/pages/common/Forum/forum.tsx
+++ b/fe-piattaforma/src/pages/common/Community/community.tsx
@@ -2,7 +2,7 @@ import clsx from 'clsx';
import {Container} from 'design-react-kit';
import React, {useEffect, useState} from 'react';
import {useDispatch} from 'react-redux';
-import {EmptySection, Paginator} from '../../../components';
+import {EmptySection, Paginator, CardCommunity} from '../../../components';
import {DropdownFilterI, FilterI,} from '../../../components/DropdownFilter/dropdownFilter';
import ForumLayout from '../../../components/ForumLayout/ForumLayout';
import {setPublishedContent} from '../../../redux/features/app/appSlice';
@@ -20,14 +20,13 @@ import {openModal} from '../../../redux/features/modal/modalSlice';
import {useAppSelector} from '../../../redux/hooks';
import ManageTopic from '../../administrator/AdministrativeArea/Entities/modals/manageTopic';
/* import { ForumPropsMock } from '../../facilitator/Home/components/ForumWidget/forumWidget'; */
-import './forum.scss';
+import './community.scss';
import {
selectEntityPagination,
setEntityPagination,
} from '../../../redux/features/administrativeArea/administrativeAreaSlice';
import {formFieldI} from '../../../utils/formHelper';
import useGuard from '../../../hooks/guard';
-import CardForum from '../../../components/CardForum/cardForum';
// for dropdown filters, don't change
const categoryDropdownLabel = 'categories';
@@ -37,7 +36,7 @@ const TopicCta = {
iconCta: 'it-plus',
};
-const Forum = () => {
+const Community = () => {
const topicsList = useAppSelector(selectTopicsList);
const filtersList = useAppSelector(selectFilters);
const dropdownFilterOptions = useAppSelector(selectFilterOptions);
@@ -190,7 +189,7 @@ community.'
'align-cards'
)}
>
-
+
))
) : (
@@ -217,4 +216,4 @@ community.'
);
};
-export default Forum;
+export default Community;
diff --git a/fe-piattaforma/src/pages/common/Forum/forumDetails.tsx b/fe-piattaforma/src/pages/common/Community/communityDetails.tsx
similarity index 91%
rename from fe-piattaforma/src/pages/common/Forum/forumDetails.tsx
rename to fe-piattaforma/src/pages/common/Community/communityDetails.tsx
index b92935414..44c7e003d 100644
--- a/fe-piattaforma/src/pages/common/Forum/forumDetails.tsx
+++ b/fe-piattaforma/src/pages/common/Community/communityDetails.tsx
@@ -31,7 +31,7 @@ import { setInfoIdsBreadcrumb } from '../../../redux/features/app/appSlice';
import DeleteForumModal from '../../../components/General/DeleteForumEntity/DeleteForumEntity';
import { Loader } from '../../../components';
-const ForumDetails = () => {
+const CommunityDetails = () => {
const navigate = useNavigate();
const dispatch = useDispatch();
const topicDetails = useAppSelector(selectTopicDetail);
@@ -41,7 +41,7 @@ const ForumDetails = () => {
const getItemDetails = async () => {
if (id && userId) {
- const res = await dispatch(GetItemDetail(id, userId, 'forum'));
+ const res = await dispatch(GetItemDetail(id, userId, 'community'));
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
if (res) {
@@ -62,7 +62,7 @@ const ForumDetails = () => {
})
);
} else {
- navigate('/forum', { replace: true });
+ navigate('/community', { replace: true });
}
}
};
@@ -86,7 +86,7 @@ const ForumDetails = () => {
const backButton = (
{!device.mediaIsPhone && (
-
+
Vai agli argomenti
)}
@@ -98,7 +98,7 @@ const ForumWidget = () => {
'align-cards'
)}
>
-
+
))}
@@ -108,7 +108,7 @@ const ForumWidget = () => {
{formatSlides(
topicsList.slice(
0,
- forumPagination[getMediaQueryDevice(device)]
+ communityPagination[getMediaQueryDevice(device)]
),
carouselPagination[getMediaQueryDevice(device)]
).map((el, i) => (
@@ -121,7 +121,7 @@ const ForumWidget = () => {
key={`card-${i}-${index}`}
className='flex-grow-0 my-2'
>
-
+
))}
@@ -134,7 +134,7 @@ const ForumWidget = () => {
{device.mediaIsPhone && (
@@ -143,4 +143,4 @@ const ForumWidget = () => {
);
};
-export default ForumWidget;
+export default CommunityWidget;
diff --git a/fe-piattaforma/src/pages/facilitator/Home/home.tsx b/fe-piattaforma/src/pages/facilitator/Home/home.tsx
index 1b2627507..47cf96119 100644
--- a/fe-piattaforma/src/pages/facilitator/Home/home.tsx
+++ b/fe-piattaforma/src/pages/facilitator/Home/home.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import HeroHome from './components/HeroHome/HeroHome';
import BachecaDigitaleWidget from './components/BachecaDigitaleWidget/bachecaDigitaleWidget';
-import ForumWidget from './components/ForumWidget/forumWidget';
+import CommunityWidget from './components/CommunityWidget/communityWidget';
import { Container } from 'design-react-kit';
import DocumentsWidget from './components/DocumentiWidget/documentiWidget';
import useGuard from '../../../hooks/guard';
@@ -23,7 +23,7 @@ const Home: React.FC = () => {
{hasUserPermission(['list.topic']) ? (
) : null}
diff --git a/fe-piattaforma/src/pages/facilitator/Survey/survey.tsx b/fe-piattaforma/src/pages/facilitator/Survey/survey.tsx
index feb5d6c26..43e32a72a 100644
--- a/fe-piattaforma/src/pages/facilitator/Survey/survey.tsx
+++ b/fe-piattaforma/src/pages/facilitator/Survey/survey.tsx
@@ -2,7 +2,7 @@ import React, { memo } from 'react';
import { Col, Container } from 'design-react-kit';
import PageTitle from '../../../components/PageTitle/pageTitle';
import FiltersAside from '../../../components/FiltersAside/filtersAside';
-// import CardForum from '../../../components/CardForum/cardForum';
+// import CardCommunity from '../../../components/CardCommunity/cardCommunity';
import { CardStatusAction, SearchBar } from '../../../components';
import API from '../../../utils/apiHelper';
@@ -43,7 +43,7 @@ const arrayBreadcrumb = [
},
];
-// const ForumPropsMock = {
+// const CommunityPropsMock = {
// title: 'SPID',
// community: 'Servizi online',
// text: 'Ciao e benvenuti nella sezione di SPID!',
@@ -103,7 +103,7 @@ const Survey = () => {
- {/* */}
+ {/* */}
);
diff --git a/fe-piattaforma/src/pages/forms/formForum/formCreateTopic.tsx b/fe-piattaforma/src/pages/forms/formForum/formCreateTopic.tsx
index 3b80012e9..0576fed78 100644
--- a/fe-piattaforma/src/pages/forms/formForum/formCreateTopic.tsx
+++ b/fe-piattaforma/src/pages/forms/formForum/formCreateTopic.tsx
@@ -66,7 +66,7 @@ const FormCreateTopic: React.FC = (props) => {
useAppSelector(selectTopicDetail);
useEffect(() => {
- dispatch(GetCategoriesList({ type: 'forum_categories' }));
+ dispatch(GetCategoriesList({ type: 'community_categories' }));
dispatch(GetTagsList());
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
diff --git a/fe-piattaforma/src/pages/forms/formProjects/formProjectGeneralInfo.tsx b/fe-piattaforma/src/pages/forms/formProjects/formProjectGeneralInfo.tsx
index 721e0e77d..87a47e2ad 100644
--- a/fe-piattaforma/src/pages/forms/formProjects/formProjectGeneralInfo.tsx
+++ b/fe-piattaforma/src/pages/forms/formProjects/formProjectGeneralInfo.tsx
@@ -325,7 +325,7 @@ const form = newForm([
type: 'text',
id: 'short-name',
required: true,
- maximum: 25,
+ //maximum: 25,
//minimum: 6,
}),
newFormField({
diff --git a/fe-piattaforma/src/pages/forms/formServices/ExistingCitizenInfo.tsx b/fe-piattaforma/src/pages/forms/formServices/ExistingCitizenInfo.tsx
index defad3d83..1038d29d4 100644
--- a/fe-piattaforma/src/pages/forms/formServices/ExistingCitizenInfo.tsx
+++ b/fe-piattaforma/src/pages/forms/formServices/ExistingCitizenInfo.tsx
@@ -29,5 +29,4 @@ export default function ExistingCitizenInfo() {
);
-};
-
+};
\ No newline at end of file
diff --git a/fe-piattaforma/src/pages/forms/formServices/formServiceCitizenFull.tsx b/fe-piattaforma/src/pages/forms/formServices/formServiceCitizenFull.tsx
index af24d2183..00d98c590 100644
--- a/fe-piattaforma/src/pages/forms/formServices/formServiceCitizenFull.tsx
+++ b/fe-piattaforma/src/pages/forms/formServices/formServiceCitizenFull.tsx
@@ -8,6 +8,7 @@ import withFormHandler, {
import { selectQuestionarioTemplateSnapshot } from '../../../redux/features/administrativeArea/administrativeAreaSlice';
import { selectEntityDetail } from '../../../redux/features/citizensArea/citizensAreaSlice';
import { useAppSelector } from '../../../redux/hooks';
+import { Parser } from '@marketto/codice-fiscale-utils';
import {
formFieldI,
FormHelper,
@@ -19,8 +20,8 @@ import { generateForm } from '../../../utils/jsonFormHelper';
import { RegexpType } from '../../../utils/validator';
import { FormCitizenI } from '../formCitizen';
import { citizenFormDropdownOptions } from '../constantsFormCitizen';
-import { mappaMesi } from '../../../consts/monthsMapForFiscalCode';
import { OptionType } from '../../../components/Form/select';
+import moment from 'moment';
interface FormEnteGestoreProgettoFullInterface
extends withFormHandlerProps,
@@ -92,8 +93,7 @@ const FormServiceCitizenFull: React.FC = (
}, [formData]);
const decodeGenderFromFiscalCode = useCallback((cf: string) => {
- const mese = parseInt(cf.substring(9, 11), 10);
- return mese <= 31 ? 'M' : 'F';
+ return Parser.cfToGender(cf) as string;
}, []);
const determineAgeGroup = useCallback((age: number): string => {
@@ -110,25 +110,7 @@ const FormServiceCitizenFull: React.FC = (
const decodeAgeFromFiscalCode = useCallback(
(cf: string) => {
- const today = new Date();
- const rangeCentury = parseInt(
- today.getFullYear().toString().substring(2)
- );
- const isFemale = cf.charAt(9) >= '4';
- const dayOfBirth = parseInt(cf.substring(9, 11)) - (isFemale ? 40 : 0);
- const century = parseInt(cf.substring(6, 8));
- const yearOfBirth =
- century <= rangeCentury ? 2000 + century : 1900 + century;
- const month = mappaMesi.get(cf.charAt(8).toUpperCase()) as number;
- const dateOfBirth = new Date(yearOfBirth, month, dayOfBirth);
- const age = today.getFullYear() - dateOfBirth.getFullYear();
- if (
- today.getMonth() < dateOfBirth.getMonth() ||
- (today.getMonth() === dateOfBirth.getMonth() &&
- today.getDate() < dateOfBirth.getDate())
- ) {
- return determineAgeGroup(age - 1);
- }
+ const age = moment().diff(Parser.cfToBirthDate(cf), 'years', false);
return determineAgeGroup(age);
},
[determineAgeGroup]
diff --git a/fe-piattaforma/src/pages/forms/models/newUserValuesFormCitizen.model.ts b/fe-piattaforma/src/pages/forms/models/newUserValuesFormCitizen.model.ts
index 95bb8c4d5..36798fb8b 100644
--- a/fe-piattaforma/src/pages/forms/models/newUserValuesFormCitizen.model.ts
+++ b/fe-piattaforma/src/pages/forms/models/newUserValuesFormCitizen.model.ts
@@ -1,12 +1,13 @@
export const NewUserValuesFormCitizen = [
- 'codiceFiscale',
- 'codiceFiscaleNonDisponibile',
- 'tipoDocumento',
- 'numeroDocumento',
- 'genere',
- 'fasciaDiEtaId',
- 'titoloStudio',
- 'statoOccupazionale',
- 'provinciaDiDomicilio',
- 'cittadinanza',
-] as const;
+ 'codiceFiscale',
+ 'codiceFiscaleNonDisponibile',
+ 'tipoDocumento',
+ 'numeroDocumento',
+ 'genere',
+ 'fasciaDiEtaId',
+ 'titoloStudio',
+ 'statoOccupazionale',
+ 'provinciaDiDomicilio',
+ 'cittadinanza',
+ ] as const;
+
\ No newline at end of file
diff --git a/fe-piattaforma/src/redux/features/administrativeArea/services/servicesThunk.ts b/fe-piattaforma/src/redux/features/administrativeArea/services/servicesThunk.ts
index 83a7f4d06..1840b5f07 100644
--- a/fe-piattaforma/src/redux/features/administrativeArea/services/servicesThunk.ts
+++ b/fe-piattaforma/src/redux/features/administrativeArea/services/servicesThunk.ts
@@ -386,17 +386,22 @@ export const AssociateCitizenToService =
try {
dispatch({ ...AssociateCitizenToServiceAction });
dispatch(showLoader());
- const { idProgramma, idProgetto, idEnte, codiceFiscale, codiceRuolo } =
+ const { idProgramma, idProgetto, idEnte, cfUtenteLoggato, codiceRuoloUtenteLoggato } =
getUserHeaders();
+ const newBody = {
+ ...payload.body,
+ cfUtenteLoggato,
+ codiceRuoloUtenteLoggato
+ }
const res = await API.post(
`${process?.env?.QUESTIONARIO_CITTADINO}servizio/cittadino/${payload.idServizio}`,
{
- ...payload.body,
+ ...newBody,
idProgramma,
idProgetto,
idEnte,
- cfUtenteLoggato: codiceFiscale,
- codiceRuoloUtenteLoggato: codiceRuolo,
+ cfUtenteLoggato,
+ codiceRuoloUtenteLoggato,
}
);
if (res) {
diff --git a/fe-piattaforma/src/redux/features/administrativeArea/user/userThunk.ts b/fe-piattaforma/src/redux/features/administrativeArea/user/userThunk.ts
index 521685834..7ab5f434c 100644
--- a/fe-piattaforma/src/redux/features/administrativeArea/user/userThunk.ts
+++ b/fe-piattaforma/src/redux/features/administrativeArea/user/userThunk.ts
@@ -83,7 +83,9 @@ export const GetFilterValuesUtenti =
getUserHeaders();
const body = {
cfUtente: codiceFiscale,
+ cfUtenteLoggato: codiceFiscale,
codiceRuolo: codiceRuolo,
+ codiceRuoloUtenteLoggato: codiceRuolo,
filtroRequest: { ...filters },
idProgramma,
idEnte,
@@ -117,7 +119,9 @@ export const GetUserDetails =
getUserHeaders();
const body = {
cfUtente: codiceFiscale,
+ cfUtenteLoggato: codiceFiscale,
codiceRuolo,
+ codiceRuoloUtenteLoggato: codiceRuolo,
idProgramma,
idProgetto,
idEnte,
diff --git a/fe-piattaforma/src/redux/features/forum/categories/categoriesThunk.ts b/fe-piattaforma/src/redux/features/forum/categories/categoriesThunk.ts
index ece38ea59..ffa494efa 100644
--- a/fe-piattaforma/src/redux/features/forum/categories/categoriesThunk.ts
+++ b/fe-piattaforma/src/redux/features/forum/categories/categoriesThunk.ts
@@ -17,7 +17,7 @@ export const GetCategoriesList =
type?:
| 'all'
| 'board_categories'
- | 'forum_categories'
+ | 'community_categories'
| 'document_categories';
keys?: string | undefined;
}) =>
diff --git a/fe-piattaforma/src/redux/features/forum/forumThunk.ts b/fe-piattaforma/src/redux/features/forum/forumThunk.ts
index 47592ae1e..c85a624f1 100644
--- a/fe-piattaforma/src/redux/features/forum/forumThunk.ts
+++ b/fe-piattaforma/src/redux/features/forum/forumThunk.ts
@@ -29,21 +29,15 @@ export const proxyCall = async (
const { idProgramma, idProgetto, idEnte } = getUserHeaders();
const codiceFiscale = JSON.parse(getSessionValues('user')).codiceFiscale;
const codiceRuolo = JSON.parse(getSessionValues('profile')).codiceRuolo;
- body = {
+ return await API.post(`${process?.env?.NOTIFICHE}drupal/forward`, {
+ url: `/api${url}`,
+ metodoHttp: httpMethod,
cfUtenteLoggato: codiceFiscale,
codiceRuoloUtenteLoggato: codiceRuolo,
- };
- const pass = false;
- if (body && body.cfUtenteLoggato && pass) {
- return await API.post(`${process?.env?.NOTIFICHE}drupal/forward`, {
- url: `/api${url}`,
- metodoHttp: httpMethod,
- cfUtenteLoggato: codiceFiscale,
- codiceRuoloUtenteLoggato: codiceRuolo,
- profilo: { idProgramma, idProgetto, idEnte },
- ...filePayload,
- });
- }
+ profilo: { idProgramma, idProgetto, idEnte },
+ ...filePayload,
+ body: body ? JSON.stringify(body) : null,
+ });
};
const GetNewsFiltersAction = {
@@ -229,7 +223,7 @@ export const GetTopicsFilters =
),
};
const queryParameters = transformFiltersToQueryParams(body);
- const res = await proxyCall(`/forum/filters${queryParameters}`, 'GET');
+ const res = await proxyCall(`/community/filters${queryParameters}`, 'GET');
if (res?.data?.data) {
dispatch(
setForumFilterOptions(
@@ -284,7 +278,7 @@ export const GetTopicsList =
...forcedFilters,
}).replace('sort', 'sort_by');
//.replace('categories', 'category')
- const res = await proxyCall(`/forum/items${queryParamFilters}`, 'GET');
+ const res = await proxyCall(`/community/items${queryParamFilters}`, 'GET');
if (updateStore) {
if (res?.data?.data) {
dispatch(setTopicsList(res.data.data.items || []));
@@ -467,7 +461,7 @@ const GetItemsListAction = {
type: 'forum/GetItemsList',
};
export const GetItemsList =
- (entity: 'board' | 'forum' | 'document') =>
+ (entity: 'board' | 'community' | 'document') =>
async (dispatch: Dispatch, select: Selector) => {
try {
dispatch(showLoader());
@@ -497,7 +491,7 @@ export const GetItemsList =
case 'board':
dispatch(setNewsList(res.data.data.items));
break;
- case 'forum':
+ case 'community':
dispatch(setTopicsList(res.data.data.items));
break;
case 'document':
@@ -529,7 +523,7 @@ export const GetItemsBySearch =
'GET'
),
proxyCall(
- `/search/forum/items?keys=${search}&page=0&items_per_page=24`,
+ `/search/community/items?keys=${search}&page=0&items_per_page=24`,
'GET'
),
proxyCall(
@@ -550,7 +544,7 @@ export const GetItemsBySearch =
setTopicsList(
(res[1]?.data?.data?.items || []).filter(
({ item_type }: { item_type: string }) =>
- item_type === 'forum_item'
+ item_type === 'community_item'
)
)
);
@@ -585,7 +579,7 @@ export const GetItemsByUser = () => async (dispatch: Dispatch) => {
'GET'
),
proxyCall(
- `/user/${idUtente}/items?item_type=forum_item&page=0&items_per_page=24`,
+ `/user/${idUtente}/items?item_type=community_item&page=0&items_per_page=24`,
'GET'
),
proxyCall(
@@ -604,7 +598,7 @@ export const GetItemsByUser = () => async (dispatch: Dispatch) => {
dispatch(
setTopicsList(
(res[1]?.data.data.items || []).filter(
- ({ item_type }: { item_type: string }) => item_type === 'forum_item'
+ ({ item_type }: { item_type: string }) => item_type === 'community_item'
)
)
);
@@ -629,7 +623,7 @@ const GetItemDetailsAction = {
};
export const GetItemDetail =
- (itemId: string, userId: string, entity: 'board' | 'forum' | 'document') =>
+ (itemId: string, userId: string, entity: 'board' | 'community' | 'document') =>
async (dispatch: Dispatch) => {
try {
dispatch(showLoader());
@@ -644,7 +638,7 @@ export const GetItemDetail =
case 'board':
dispatch(setNewsDetail(res.data.data.items[0]));
break;
- case 'forum':
+ case 'community':
dispatch(setTopicDetail(res.data.data.items[0]));
break;
case 'document':
@@ -734,7 +728,7 @@ const CreateItemAction = {
};
export const CreateItem =
- (payload: any, entity: 'board' | 'forum' | 'document') =>
+ (payload: any, entity: 'board' | 'community' | 'document') =>
async (dispatch: Dispatch) => {
try {
dispatch(showLoader());
@@ -780,7 +774,7 @@ const UpdateItemAction = {
};
export const UpdateItem =
- (itemId: string, payload: any, entity: 'board' | 'forum' | 'document') =>
+ (itemId: string, payload: any, entity: 'board' | 'community' | 'document') =>
async (dispatch: Dispatch) => {
try {
dispatch(showLoader());
@@ -961,7 +955,7 @@ interface ActionTrackerI {
event_type?: 'TOPIC' | 'NEWS' | 'DOCUMENTI';
event_value?: 'Y' | 'N' | undefined;
category?: string | undefined;
- codiceRuolo?: string;
+ codiceRuoloUtenteLoggato?: string;
idProgramma?: string;
}
@@ -971,7 +965,7 @@ const newActionTracker = ({
event_value,
target,
category,
- codiceRuolo,
+ codiceRuoloUtenteLoggato,
idProgramma,
}: ActionTrackerI) => ({
event: (target === 'chat' || target === 'wd'
@@ -980,7 +974,7 @@ const newActionTracker = ({
)?.toLowerCase(),
event_type: (target === 'tnd' ? event_type : null)?.toLowerCase(),
event_value: event_value || null,
- role_code: codiceRuolo || null,
+ role_code: codiceRuoloUtenteLoggato || null,
category: category?.toString() || null,
program_id: idProgramma?.toString() || null,
});
@@ -1002,7 +996,7 @@ export const ActionTracker =
} = select((state: RootState) => state);
const body = newActionTracker({
...payload,
- codiceRuolo,
+ codiceRuoloUtenteLoggato: codiceRuolo,
idProgramma,
});
let BE_url = process?.env?.REACT_APP_BE_BASE_URL;
diff --git a/fe-piattaforma/src/redux/features/user/userSlice.ts b/fe-piattaforma/src/redux/features/user/userSlice.ts
index 9a4d8be1b..6b1dcdbc0 100644
--- a/fe-piattaforma/src/redux/features/user/userSlice.ts
+++ b/fe-piattaforma/src/redux/features/user/userSlice.ts
@@ -19,6 +19,7 @@ export interface UserStateI {
email?: string;
role?: string;
codiceFiscale: string;
+ cfUtenteLoggato: string;
profiliUtente: UserProfileI[];
integrazione: boolean;
mostraBio: boolean;
@@ -38,6 +39,7 @@ export interface UserStateI {
profilo?: UserProfileI | null;
ruoli: {
codiceRuolo: string;
+ codiceRuoloUtenteLoggato: string;
permessi: [];
}[];
}
@@ -64,6 +66,7 @@ const initialStateLogged: UserStateI = {
cognome: 'Rossi',
role: 'DTD',
codiceFiscale: 'UTENTE1',
+ cfUtenteLoggato: 'UTENTE1',
email: 'mario.rossi@mail.com',
integrazione: true,
profiliUtente: [],
@@ -115,6 +118,7 @@ export const userSlice = createSlice({
},
setUserProfile: (state, action: PayloadAction) => {
const payload = { ...action.payload, saveSession: undefined };
+ payload['codiceRuoloUtenteLoggato'] = payload.codiceRuolo;
state.idProgramma = action.payload.idProgramma;
state.idProgetto = [action.payload.idProgetto];
state.idEnte = action.payload.idEnte;
@@ -147,6 +151,9 @@ export const userSlice = createSlice({
});
},
login: (state) => {
+ if(state.user){
+ state.user['cfUtenteLoggato'] = state?.user?.codiceFiscale;
+ }
setSessionValues('user', state.user);
setSessionValues('profile', state.profilo);
if (isActiveProvisionalLogin) {
diff --git a/fe-piattaforma/src/redux/features/user/userThunk.ts b/fe-piattaforma/src/redux/features/user/userThunk.ts
index ed5496586..fcd75accd 100644
--- a/fe-piattaforma/src/redux/features/user/userThunk.ts
+++ b/fe-piattaforma/src/redux/features/user/userThunk.ts
@@ -23,8 +23,8 @@ import { transformFiltersToQueryParams } from '../../../utils/common';
import { setEntityPagination } from '../administrativeArea/administrativeAreaSlice';
export const getUserHeaders = () => {
- const { codiceFiscale, id: idUtente } = JSON.parse(getSessionValues('user'));
- const { codiceRuolo, idProgramma, idProgetto, idEnte } = JSON.parse(
+ const { codiceFiscale, id: idUtente, cfUtenteLoggato } = JSON.parse(getSessionValues('user'));
+ const { codiceRuolo, idProgramma, idProgetto, idEnte, codiceRuoloUtenteLoggato } = JSON.parse(
getSessionValues('profile')
);
@@ -33,6 +33,8 @@ export const getUserHeaders = () => {
? codiceFiscale?.toUpperCase()
: undefined,
codiceRuolo: isActiveProvisionalLogin ? codiceRuolo : undefined,
+ cfUtenteLoggato,
+ codiceRuoloUtenteLoggato,
idProgramma,
idProgetto,
idUtente,
@@ -115,23 +117,16 @@ export const SelectUserRole =
if (codiceFiscale && profile?.codiceRuolo) {
const { codiceRuolo, idProgramma, idProgetto, idEnte } = profile;
setSessionValues('profile', profile);
- if(isActiveProvisionalLogin) {
- request = {
- cfUtenteLoggato: codiceFiscale,
- codiceRuoloUtenteLoggato: codiceRuolo,
- idProgramma,
- idProgetto,
- idEnte,
- }
- } else {
request = {
cfUtente: codiceFiscale,
+ cfUtenteLoggato: codiceFiscale,
codiceRuolo: codiceRuolo,
+ codiceRuoloUtenteLoggato: codiceRuolo,
idProgramma,
idProgetto,
idEnte,
}
- }
+
}
const res = await API.post(`${process?.env?.GESTIONE_UTENTE}contesto/sceltaProfilo`, request);
if (res) {
diff --git a/fe-piattaforma/src/routes/index.tsx b/fe-piattaforma/src/routes/index.tsx
index 22a24250d..420226100 100644
--- a/fe-piattaforma/src/routes/index.tsx
+++ b/fe-piattaforma/src/routes/index.tsx
@@ -68,9 +68,11 @@ const SurveyOnline = lazy(
// WAVE 3
const Reports = lazy(() => import('../pages/common/Reports/reports'));
-const Forum = lazy(() => import('../pages/common/Forum/forum'));
+const Community = lazy(() => import('../pages/common/Community/community'));
const Category = lazy(() => import('../pages/facilitator/Categories/category'));
-const ForumDetails = lazy(() => import('../pages/common/Forum/forumDetails'));
+const CommunityDetails = lazy(
+ () => import('../pages/common/Community/communityDetails')
+);
/**
The "routes.tsx" file is now useless, lazy loading is implemented for every
@@ -142,18 +144,18 @@ const AppRoutes: React.FC = () => {
/>
}>
-
+
}
/>
-
+
}
/>
diff --git a/fe-piattaforma/src/styles/common/_components.scss b/fe-piattaforma/src/styles/common/_components.scss
index c018d6878..2982eed55 100644
--- a/fe-piattaforma/src/styles/common/_components.scss
+++ b/fe-piattaforma/src/styles/common/_components.scss
@@ -35,5 +35,5 @@
@import '../../components/ReportFlow/reportFlowCard.scss';
@import '../../components/Comments/comment.scss';
@import '../../components/ReportCard/reportCard.scss';
-@import '../../pages/common/Forum/forum';
+@import '../../pages/common/Community/community.scss';
// @import '../../pages/facilitator/Home/components/BachecaDigitaleWidget/bachecaDigitaleWidget.scss'
diff --git a/fe-piattaforma/src/styles/main.scss b/fe-piattaforma/src/styles/main.scss
index 8819e840f..8d4d7620d 100644
--- a/fe-piattaforma/src/styles/main.scss
+++ b/fe-piattaforma/src/styles/main.scss
@@ -16,7 +16,7 @@
&:focus,
&:focus:not(.focus--mouse):not([data-focus-mouse='true']) {
- box-shadow: none !important;
+ box-shadow: none !important;
}
}
diff --git a/fe-piattaforma/src/utils/common.ts b/fe-piattaforma/src/utils/common.ts
index 6748633e5..89a859eb8 100644
--- a/fe-piattaforma/src/utils/common.ts
+++ b/fe-piattaforma/src/utils/common.ts
@@ -238,7 +238,7 @@ export const MenuRoutes = [
}),
newMenuItem({
label: 'Forum',
- path: '/forum',
+ path: '/community',
id: 'tab-forum',
visible: ['tab.comm'],
}),
diff --git a/fe-piattaforma/src/utils/mockHelper.ts b/fe-piattaforma/src/utils/mockHelper.ts
index cb84afb10..752c5d3d1 100644
--- a/fe-piattaforma/src/utils/mockHelper.ts
+++ b/fe-piattaforma/src/utils/mockHelper.ts
@@ -1,7 +1,7 @@
/* https://github.com/ctimmerm/axios-mock-adapter */
/* eslint-disable @typescript-eslint/ban-ts-comment */
import MockAdapter from 'axios-mock-adapter';
-import {AxiosInstance} from 'axios';
+import { AxiosInstance } from 'axios';
//const shouldUseMock = process.env.NODE_ENV === 'development'
const shouldUseMock = true;
@@ -13,30 +13,30 @@ export const initMock = (apiInstance: AxiosInstance) => {
});
/*mockInstance.onPut('/programma').reply(() => {
- return [500];
- });*/
+ return [500];
+ });*/
/*mockInstance.onPost('/programma').reply(() => {
- return [201];
- });*/
+ return [201];
+ });*/
/*mockInstance.onPost('/programma/all').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaProgrammi.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/listaProgrammi.json');
+ return [200, response];
+ });*/
/* mockInstance.onPost('/progetto/all').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaProgetti.json');
- return [200, response];
- }); */
+ // @ts-ignore
+ const response = await import('/mock/listaProgetti.json');
+ return [200, response];
+ }); */
/*mockInstance.onPost('/ente/all').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaEnti.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/listaEnti.json');
+ return [200, response];
+ });*/
// mockInstance.onPost('/utente/all').reply(async () => {
// // @ts-ignore
@@ -63,40 +63,40 @@ export const initMock = (apiInstance: AxiosInstance) => {
});
/*mockInstance.onPost('/programma/policies/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/policyDropdown.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/policyDropdown.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onPost('/programma/stati/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/statiDropdown.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/statiDropdown.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onPost('/progetto/policies/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/policyDropdown.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/policyDropdown.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onPost('/progetto/programmi/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/programmiDropdown.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/programmiDropdown.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onPost('/progetto/stati/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/statiDropdown.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/statiDropdown.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onPost('/ente/profili/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/profiloDropdown.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/profiloDropdown.json');
+ return [200, response];
+ });*/
mockInstance.onPost('/ente/stati/dropdown').reply(async () => {
// @ts-ignore
@@ -105,16 +105,16 @@ export const initMock = (apiInstance: AxiosInstance) => {
});
/*mockInstance.onPost('/ente/progetti/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/progettiDropdown.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/progettiDropdown.json');
+ return [200, response];
+ });*/
/*mockInstance.onPost('/ente/programmi/dropdown').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/programmiDropdown.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/programmiDropdown.json');
+ return [200, response];
+ });*/
// mockInstance.onPost('/utente/ruoli/dropdown').reply(async () => {
// // @ts-ignore
@@ -177,34 +177,34 @@ export const initMock = (apiInstance: AxiosInstance) => {
// });
/*mockInstance.onGet('/ruolo?tipologiaRuoli=NP').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaRuoli.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/listaRuoli.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onGet('/ruolo/all').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaRuoli.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/listaRuoli.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onGet('/ruolo/DTD').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/roleDetails.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/roleDetails.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onGet('/gruppo/all').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaRuoliGruppi.json');
- return [200, response.data];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/listaRuoliGruppi.json');
+ return [200, response.data];
+ });*/
/*mockInstance.onGet('/programma/idProgramma').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/programmaMock.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/programmaMock.json');
+ return [200, response];
+ });*/
mockInstance
.onGet('/ente/321321/gestoreProgramma/prova')
@@ -232,10 +232,10 @@ export const initMock = (apiInstance: AxiosInstance) => {
});
/*mockInstance.onGet('/progetto/idProgetto').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/progettoMock.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/progettoMock.json');
+ return [200, response];
+ });*/
mockInstance.onGet('/ente/project1/partner/all').reply(async () => {
// @ts-ignore
@@ -254,12 +254,12 @@ export const initMock = (apiInstance: AxiosInstance) => {
return [200, response];
});
/*
- mockInstance.onGet('/programmi/321321/projects').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/listaProgetti.json');
- return [200, response];
- });
- */
+ mockInstance.onGet('/programmi/321321/projects').reply(async () => {
+ // @ts-ignore
+ const response = await import('/mock/listaProgetti.json');
+ return [200, response];
+ });
+*/
mockInstance.onGet('/utente/idUtente').reply(async () => {
// @ts-ignore
const response = await import('/mock/userMock.json');
@@ -345,23 +345,23 @@ export const initMock = (apiInstance: AxiosInstance) => {
});
/*mockInstance.onPost('/contesto').reply(async () => {
- // @ts-ignore
- const response = await import('/mock/userContext.json');
- return [200, response];
- });*/
+ // @ts-ignore
+ const response = await import('/mock/userContext.json');
+ return [200, response];
+ });*/
/*mockInstance.onPost('/contesto/confermaIntegrazione').reply(async () => {
- return [200];
- });*/
+ return [200];
+ });*/
/*mockInstance.onPost('/contesto/sceltaProfilo').reply(async () => {
- return [200];
- });*/
+ return [200];
+ });*/
/*mockInstance.onGet('/open-data/count/download').reply(async () => {
- // @ts-ignore
- return [200, Math.floor(Math.random() * 9999)];
- });*/
+ // @ts-ignore
+ return [200, Math.floor(Math.random() * 9999)];
+ });*/
mockInstance
@@ -407,13 +407,13 @@ export const initMock = (apiInstance: AxiosInstance) => {
return [200, response];
});
- mockInstance.onGet('/forum/items').reply(async () => {
+ mockInstance.onGet('/community/items').reply(async () => {
// @ts-ignore
const response = await import('/mock/topicsList.json');
return [200, response];
});
- mockInstance.onGet('/forum/item/id/user/userId').reply(async () => {
+ mockInstance.onGet('/community/item/id/user/userId').reply(async () => {
// @ts-ignore
const response = await import('/mock/topicMock.json');
return [200, response];
diff --git a/fe-piattaforma/src/utils/sessionHelper.ts b/fe-piattaforma/src/utils/sessionHelper.ts
index 4bdfd4d62..3e46c783f 100644
--- a/fe-piattaforma/src/utils/sessionHelper.ts
+++ b/fe-piattaforma/src/utils/sessionHelper.ts
@@ -1,4 +1,4 @@
-import { RefreshSPIDToken } from "../redux/features/auth/authThunk";
+import { RefreshSPIDToken } from '../redux/features/auth/authThunk';
export const getSessionValues = (key: string) => {
return sessionStorage.getItem(key) || '{}';
@@ -41,7 +41,7 @@ const refreshSession = async (currentSession: {
};
export const validateSession = () => {
- const currentSession = getSessionValues('auth') !== 'fguhbjinokj8765d578t9yvghugyftr646tg' ? JSON.parse(getSessionValues('auth')) : getSessionValues('auth');
+ const currentSession = JSON.parse(getSessionValues('auth'));
if (currentSession?.refresh_token) {
const diff =
Math.abs(new Date().getTime() - currentSession.session_timestamp) / 1000;
diff --git a/fe-piattaforma/webpack/webpack.common.js b/fe-piattaforma/webpack/webpack.common.js
index 05659632d..737f40f8d 100644
--- a/fe-piattaforma/webpack/webpack.common.js
+++ b/fe-piattaforma/webpack/webpack.common.js
@@ -11,8 +11,12 @@ const config = {
rules: [
{
test: /\.tsx?$/,
- use: 'ts-loader',
- exclude: /node_modules/,
+ use: {
+ loader: 'ts-loader',
+ options: {
+ transpileOnly: true
+ }
+ }
},
{
test: /\.(s[ac]ss|js|ts)/,
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/dto/CittadinoDto.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/dto/CittadinoDto.java
index f2266f9fa..1d408943a 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/dto/CittadinoDto.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/dto/CittadinoDto.java
@@ -3,6 +3,8 @@
import lombok.Getter;
import lombok.Setter;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
import java.util.Date;
@Getter
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/mapper/ServizioMapper.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/mapper/ServizioMapper.java
index f8255e9a4..acf19f1f4 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/mapper/ServizioMapper.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/mapper/ServizioMapper.java
@@ -29,11 +29,11 @@ public class ServizioMapper {
private UtenteService utenteService;
@Autowired
private SedeService sedeService;
-
+
/**
* Mappa ServizioRequest in SezioneQ3Collection
*
- * */
+ */
public SezioneQ3Collection toCollectionFrom(@NotNull final ServizioRequest servizioRequest) {
final SezioneQ3Collection sezioneQ3Collection = new SezioneQ3Collection();
sezioneQ3Collection.setSezioneQ3Compilato(new JsonObject(servizioRequest.getSezioneQuestionarioCompilatoQ3()));
@@ -43,34 +43,36 @@ public SezioneQ3Collection toCollectionFrom(@NotNull final ServizioRequest servi
/**
* Mappa List in List
*
- * */
+ */
public List toResourceFrom(@NotNull final List serviziEntity) {
return serviziEntity.stream()
- .map(this::toResourceFrom)
- .collect(Collectors.toList());
+ .map(this::toResourceFrom)
+ .collect(Collectors.toList());
}
-
+
/**
* Mappa ServizioEntity in ServizioResource
*
- * */
+ */
public ServizioResource toResourceFrom(
@NotNull final ServizioEntity servizioEntity) {
final ServizioResource servizioResource = new ServizioResource();
servizioResource.setId(String.valueOf(servizioEntity.getId()));
servizioResource.setNomeServizio(servizioEntity.getNome());
- servizioResource.setListaTipologiaServizi(servizioEntity.getListaTipologiaServizi().stream().map(tipologiaServizio -> tipologiaServizio.getTitolo()).collect(Collectors.toList()));
- if(servizioEntity.getDataServizio() != null ) {
+ servizioResource.setListaTipologiaServizi(servizioEntity.getListaTipologiaServizi().stream()
+ .map(tipologiaServizio -> tipologiaServizio.getTitolo()).collect(Collectors.toList()));
+ if (servizioEntity.getDataServizio() != null) {
servizioResource.setDataServizio(simpleDateFormat.format(servizioEntity.getDataServizio()));
- }
+ }
final String codiceFiscaleFacilitatore = servizioEntity.getIdEnteSedeProgettoFacilitatore().getIdFacilitatore();
final UtenteEntity facilitatore = this.utenteService.getUtenteByCodiceFiscale(codiceFiscaleFacilitatore);
final String nominativoFacilitatore = String.format("%s %s", facilitatore.getCognome(), facilitatore.getNome());
servizioResource.setNominativoFacilitatore(nominativoFacilitatore);
servizioResource.setDurataServizio(servizioEntity.getDurataServizio());
servizioResource.setStato(servizioEntity.getStato());
- servizioResource.setNomeSede(sedeService.getById(servizioEntity.getIdEnteSedeProgettoFacilitatore().getIdSede()).getNome());
+ servizioResource.setNomeSede(
+ sedeService.getById(servizioEntity.getIdEnteSedeProgettoFacilitatore().getIdSede()).getNome());
return servizioResource;
}
-
+
}
\ No newline at end of file
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/CittadinoProjection.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/CittadinoProjection.java
index ba807fcd5..08c1d25b6 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/CittadinoProjection.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/CittadinoProjection.java
@@ -1,5 +1,6 @@
package it.pa.repdgt.surveymgmt.projection;
+
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.Date;
@@ -7,12 +8,10 @@
public interface CittadinoProjection {
public Long getId();
+
@Temporal(TemporalType.DATE)
public Date getDataUltimoAggiornamento();
-
public String getCodiceFiscale();
-
public Long getNumeroServizi();
-
public Long getNumeroQuestionariCompilati();
}
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/GetCittadinoProjection.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/GetCittadinoProjection.java
index d04d7464c..fae3311ec 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/GetCittadinoProjection.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/projection/GetCittadinoProjection.java
@@ -1,21 +1,21 @@
package it.pa.repdgt.surveymgmt.projection;
public interface GetCittadinoProjection {
- public Long getId();
+ public Long getId();
- public String getCodiceFiscale();
+ public String getCodiceFiscale();
- public String getNumeroDocumento();
+ public String getNumeroDocumento();
- public String getGenere();
+ public String getGenere();
- public Integer getFasciaDiEta();
+ public Integer getFasciaDiEta();
- public String getTitoloStudio();
+ public String getTitoloStudio();
- public String getStatoOccupazionale();
+ public String getStatoOccupazionale();
- public String getProvinciaDiDomicilio();
+ public String getProvinciaDiDomicilio();
public String getCittadinanza();
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/CittadinoRepository.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/CittadinoRepository.java
index 9790db0dc..f3a8a88ea 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/CittadinoRepository.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/CittadinoRepository.java
@@ -15,30 +15,37 @@
@Repository
public interface CittadinoRepository extends JpaRepository {
- @Query(value = "SELECT cit.id AS id, cit.data_ora_aggiornamento AS dataUltimoAggiornamento, cit.codice_fiscale AS codiceFiscale, COUNT(DISTINCT qc_servizi.servizio_id) AS numeroServizi, COUNT(DISTINCT CASE WHEN qc_quest_compilati.stato = 'COMPILATO' AND qc_quest_compilati.id_facilitatore = :codiceFiscaleUtenteLoggato THEN qc_quest_compilati.id END) AS numeroQuestionariCompilati FROM cittadino cit LEFT JOIN (SELECT qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id, MAX(qc.stato) AS stato FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE s.id_facilitatore = :codiceFiscaleUtenteLoggato AND (COALESCE(:idsSedi) IS NULL OR s.id_sede IN (:idsSedi)) GROUP BY qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id) qc_servizi ON cit.id = qc_servizi.id_cittadino LEFT JOIN (SELECT qc.id_cittadino, qc.id, MAX(qc.stato) AS stato, s.id_facilitatore FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE qc.stato = 'COMPILATO' AND qc.servizio_id IN (SELECT id FROM servizio WHERE id_facilitatore = :codiceFiscaleUtenteLoggato) GROUP BY qc.id_cittadino, qc.id, s.id_facilitatore) qc_quest_compilati ON cit.id = qc_quest_compilati.id_cittadino WHERE (:criterioRicerca IS NULL OR UPPER(cit.codice_fiscale) = UPPER(:criterioRicerca) OR UPPER(cit.num_documento) = UPPER(:criterioRicerca)) GROUP BY cit.id, cit.data_ora_aggiornamento, cit.codice_fiscale HAVING numeroServizi >= 1 ORDER BY dataUltimoAggiornamento DESC", nativeQuery = true)
+ @Query(value = "SELECT cit.id AS id, cit.data_ora_aggiornamento AS dataUltimoAggiornamento, cit.codice_fiscale AS codiceFiscale, COUNT(DISTINCT qc_servizi.servizio_id) AS numeroServizi, COUNT(DISTINCT CASE WHEN qc_quest_compilati.stato = 'COMPILATO' AND qc_quest_compilati.id_facilitatore = :codiceFiscaleUtenteLoggato THEN qc_quest_compilati.id END) AS numeroQuestionariCompilati FROM cittadino cit LEFT JOIN (SELECT qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id, MAX(qc.stato) AS stato FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE s.id_facilitatore = :codiceFiscaleUtenteLoggato AND (COALESCE(:idsSedi) IS NULL OR s.id_sede IN (:idsSedi)) GROUP BY qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id) qc_servizi ON cit.id = qc_servizi.id_cittadino LEFT JOIN (SELECT qc.id_cittadino, qc.id, MAX(qc.stato) AS stato, s.id_facilitatore FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE qc.stato = 'COMPILATO' AND qc.servizio_id IN (SELECT id FROM servizio WHERE id_facilitatore = :codiceFiscaleUtenteLoggato) GROUP BY qc.id_cittadino, qc.id, s.id_facilitatore) qc_quest_compilati ON cit.id = qc_quest_compilati.id_cittadino WHERE (:criterioRicerca IS NULL OR UPPER(cit.codice_fiscale) = UPPER(:criterioRicerca) OR UPPER(cit.num_documento) = UPPER(:criterioRicerca)) GROUP BY cit.id, cit.data_ora_aggiornamento, cit.codice_fiscale HAVING numeroServizi >= 1 ORDER BY dataUltimoAggiornamento DESC",
+ nativeQuery = true)
List findAllCittadiniByFiltro(
- @Param("criterioRicerca") String criterioRicerca,
- @Param("idsSedi") List idsSedi,
- @Param("codiceFiscaleUtenteLoggato") String codiceFiscaleUtenteLoggato);
+ @Param("criterioRicerca") String criterioRicerca,
+ @Param("idsSedi") List idsSedi,
+ @Param("codiceFiscaleUtenteLoggato") String codiceFiscaleUtenteLoggato
+ );
@Query(value = "SELECT cittadini.conteggio_id from (SELECT DISTINCT qc_cittadino.id_cittadino as id,qc_cittadino.codice_fiscale as codiceFiscale,count_servizi.conteggio as numeroServizi,count_quest_compilati.conteggio as numeroQuestionariCompilati,count(qc_cittadino.id_cittadino) as conteggio_id FROM (SELECT DISTINCT qc.id_cittadino,c.codice_fiscale,c.num_documento,count(qc.id_cittadino) FROM questionario_compilato qc INNER JOIN cittadino c ON c.id=qc.id_cittadino INNER JOIN servizio s ON qc.servizio_id=s.id WHERE s.id_facilitatore=:codiceFiscaleUtenteLoggato AND COALESCE(:idsSedi) IS NULL OR sede_id IN (:idsSedi)) AS qc_cittadino INNER JOIN (SELECT id_cittadino,count(servizio_id) as conteggio FROM questionario_compilato WHERE 1=1 GROUP BY id_cittadino) AS count_servizi ON count_servizi.id_cittadino=qc_cittadino.id_cittadino LEFT JOIN (SELECT id_cittadino,count(*) as conteggio FROM questionario_compilato WHERE stato='COMPILATO' GROUP BY id_cittadino) AS count_quest_compilati ON count_quest_compilati.id_cittadino=qc_cittadino.id_cittadino WHERE (:criterioRicerca IS NULL OR UPPER(qc_cittadino.CODICE_FISCALE)=UPPER(:criterioRicerca) OR UPPER(qc_cittadino.NUM_DOCUMENTO)=UPPER(:criterioRicerca))) as cittadini", nativeQuery = true)
Integer conteggioCittadini(
- @Param("criterioRicerca") String criterioRicerca,
- @Param("idsSedi") List idsSedi,
- @Param("codiceFiscaleUtenteLoggato") String codiceFiscaleUtenteLoggato);
-
- @Query(value = "SELECT cit.id AS id, cit.data_ora_aggiornamento AS dataUltimoAggiornamento, cit.codice_fiscale AS codiceFiscale, COUNT(DISTINCT qc_servizi.servizio_id) AS numeroServizi, COUNT(DISTINCT CASE WHEN qc_quest_compilati.stato = 'COMPILATO' AND qc_quest_compilati.id_facilitatore = :codiceFiscaleUtenteLoggato THEN qc_quest_compilati.id END) AS numeroQuestionariCompilati FROM cittadino cit LEFT JOIN (SELECT qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id, MAX(qc.stato) AS stato FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE s.id_facilitatore = :codiceFiscaleUtenteLoggato AND (COALESCE(:idsSedi) IS NULL OR s.id_sede IN (:idsSedi)) GROUP BY qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id) qc_servizi ON cit.id = qc_servizi.id_cittadino LEFT JOIN (SELECT qc.id_cittadino, qc.id, MAX(qc.stato) AS stato, s.id_facilitatore FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE qc.stato = 'COMPILATO' AND qc.servizio_id IN (SELECT id FROM servizio WHERE id_facilitatore = :codiceFiscaleUtenteLoggato) GROUP BY qc.id_cittadino, qc.id, s.id_facilitatore) qc_quest_compilati ON cit.id = qc_quest_compilati.id_cittadino WHERE (:criterioRicerca IS NULL OR UPPER(cit.codice_fiscale) = UPPER(:criterioRicerca) OR UPPER(cit.num_documento) = UPPER(:criterioRicerca)) GROUP BY cit.id, cit.data_ora_aggiornamento, cit.codice_fiscale HAVING numeroServizi >= 1 ORDER BY dataUltimoAggiornamento DESC LIMIT :currPage, :pageSize", nativeQuery = true)
+ @Param("criterioRicerca") String criterioRicerca,
+ @Param("idsSedi") List idsSedi,
+ @Param("codiceFiscaleUtenteLoggato") String codiceFiscaleUtenteLoggato
+ );
+
+ @Query(value = "SELECT cit.id AS id, MAX(qc_servizi.data_ora_aggiornamento) AS dataUltimoAggiornamento, cit.codice_fiscale AS codiceFiscale, COUNT(DISTINCT qc_servizi.servizio_id) AS numeroServizi, COUNT(DISTINCT CASE WHEN qc_quest_compilati.stato = 'COMPILATO' AND qc_quest_compilati.id_facilitatore = :codiceFiscaleUtenteLoggato THEN qc_quest_compilati.id END) AS numeroQuestionariCompilati FROM cittadino cit LEFT JOIN (SELECT qc.id_cittadino, qc.data_ora_aggiornamento, qc.servizio_id, MAX(qc.stato) AS stato FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE s.id_facilitatore = :codiceFiscaleUtenteLoggato AND (COALESCE(:idsSedi) IS NULL OR s.id_sede IN (:idsSedi)) GROUP BY qc.id_cittadino, qc.servizio_id, qc.data_ora_aggiornamento) qc_servizi ON cit.id = qc_servizi.id_cittadino LEFT JOIN (SELECT qc.id_cittadino, qc.id, MAX(qc.stato) AS stato, s.id_facilitatore, MAX(qc.data_ora_aggiornamento) AS data_ora_aggiornamento FROM questionario_compilato qc INNER JOIN servizio s ON qc.servizio_id = s.id WHERE qc.stato = 'COMPILATO' AND qc.servizio_id IN (SELECT id FROM servizio WHERE id_facilitatore = :codiceFiscaleUtenteLoggato) GROUP BY qc.id_cittadino, qc.id, s.id_facilitatore) qc_quest_compilati ON cit.id = qc_quest_compilati.id_cittadino WHERE (:criterioRicerca IS NULL OR UPPER(cit.codice_fiscale) = UPPER(:criterioRicerca) OR UPPER(cit.num_documento) = UPPER(:criterioRicerca)) GROUP BY cit.id, cit.codice_fiscale HAVING numeroServizi >= 1 ORDER BY dataUltimoAggiornamento DESC LIMIT :currPage, :pageSize",
+ nativeQuery = true)
List findAllCittadiniPaginatiByFiltro(
- @Param("criterioRicerca") String criterioRicerca,
- @Param("idsSedi") List idsSedi,
+ @Param("criterioRicerca") String criterioRicerca,
+ @Param("idsSedi") List idsSedi,
@Param("codiceFiscaleUtenteLoggato") String codiceFiscaleUtenteLoggato,
- @Param("currPage") Integer currPage,
- @Param("pageSize") Integer pageSize);
+ @Param("currPage") Integer currPage,
+ @Param("pageSize") Integer pageSize
+ );
- @Query(value = "SELECT s.id as idServizio, s.nome as nomeServizio, s.id_progetto as idProgetto, s.id_facilitatore as codiceFiscaleFacilitatore, qc.id as idQuestionarioCompilato, qc.stato as statoQuestionarioCompilato, s.id_ente as idEnte,sede.nome as nomeSede, sede.provincia as provincia FROM servizio s INNER JOIN servizio_x_cittadino sxc ON s.id = sxc.id_servizio AND s.id_facilitatore = :idFacilitatore AND sxc.id_cittadino = :idCittadino LEFT JOIN sede sede ON s.id_sede = sede.id LEFT JOIN questionario_compilato qc ON qc.id_cittadino = :idCittadino AND qc.facilitatore_id = :idFacilitatore AND sxc.id_servizio = qc.servizio_id ORDER BY s.nome", nativeQuery = true)
+ @Query(value = "SELECT s.id as idServizio, s.nome as nomeServizio, s.id_progetto as idProgetto, s.id_facilitatore as codiceFiscaleFacilitatore, qc.id as idQuestionarioCompilato, qc.stato as statoQuestionarioCompilato, s.id_ente as idEnte,sede.nome as nomeSede, sede.provincia as provincia FROM servizio s INNER JOIN servizio_x_cittadino sxc ON s.id = sxc.id_servizio AND s.id_facilitatore = :idFacilitatore AND sxc.id_cittadino = :idCittadino LEFT JOIN sede sede ON s.id_sede = sede.id LEFT JOIN questionario_compilato qc ON qc.id_cittadino = :idCittadino AND qc.facilitatore_id = :idFacilitatore AND sxc.id_servizio = qc.servizio_id ORDER BY s.nome"
+ ,nativeQuery = true)
List findDettaglioServiziSchedaCittadino(
@Param("idCittadino") Long idCittadino,
- @Param("idFacilitatore") String idFacilitatore);
+ @Param("idFacilitatore") String idFacilitatore
+ );
@Query(value = "SELECT "
+ " sede.provincia as provincia"
@@ -54,82 +61,91 @@ List findDettaglioServiziSchedaCitta
+ " s.id_sede = sede.id "
+ " WHERE "
+ " qc.id_cittadino = :idCittadino "
- + " LIMIT 1", nativeQuery = true)
+ + " LIMIT 1",
+ nativeQuery = true)
String findProvinciaByIdCittadino(@Param("idCittadino") Long idCittadino);
Optional findByCodiceFiscale(String codiceFiscale);
-
+
Optional findByNumeroDocumento(String numeroDocumento);
@Query(value = " "
- + " SELECT "
- + " * "
- + " FROM "
- + " cittadino cit "
- + " WHERE 1=1 "
- + " AND ("
- + " (:codiceFiscale IS NOT NULL AND :codiceFiscale <> '' AND cit.CODICE_FISCALE = :codiceFiscale)"
- + " OR (:numeroDocumento IS NOT NULL AND :numeroDocumento <> '' AND cit.NUM_DOCUMENTO = :numeroDocumento)"
- + " )", nativeQuery = true)
+ + " SELECT "
+ + " * "
+ + " FROM "
+ + " cittadino cit "
+ + " WHERE 1=1 "
+ + " AND ("
+ + " (:codiceFiscale IS NOT NULL AND :codiceFiscale <> '' AND cit.CODICE_FISCALE = :codiceFiscale)"
+ + " OR (:numeroDocumento IS NOT NULL AND :numeroDocumento <> '' AND cit.NUM_DOCUMENTO = :numeroDocumento)"
+ + " )",
+ nativeQuery=true)
Optional findByCodiceFiscaleOrNumeroDocumento(
- @Param(value = "codiceFiscale") String codiceFiscale,
- @Param(value = "numeroDocumento") String numeroDocumento);
+ @Param(value = "codiceFiscale") String codiceFiscale,
+ @Param(value = "numeroDocumento") String numeroDocumento
+ );
@Query(value = " "
- + " SELECT "
- + " cit.TIPO_CONFERIMENTO_CONSENSO "
- + " FROM "
- + " cittadino cit "
- + " WHERE 1=1 "
- + " AND cit.CODICE_FISCALE = :codiceFiscaleCittadino "
- + " ", nativeQuery = true)
+ + " SELECT "
+ + " cit.TIPO_CONFERIMENTO_CONSENSO "
+ + " FROM "
+ + " cittadino cit "
+ + " WHERE 1=1 "
+ + " AND cit.CODICE_FISCALE = :codiceFiscaleCittadino "
+ + " ",
+ nativeQuery = true)
String findConsensoByCodiceFiscaleCittadino(
- @Param(value = "codiceFiscaleCittadino") String codiceFiscaleCittadino);
+ @Param(value = "codiceFiscaleCittadino") String codiceFiscaleCittadino
+ );
@Query(value = " "
- + " SELECT "
- + " cit.TIPO_CONFERIMENTO_CONSENSO "
- + " FROM "
- + " cittadino cit "
- + " WHERE 1=1 "
- + " AND cit.NUM_DOCUMENTO = :numeroDocumento "
- + " ", nativeQuery = true)
+ + " SELECT "
+ + " cit.TIPO_CONFERIMENTO_CONSENSO "
+ + " FROM "
+ + " cittadino cit "
+ + " WHERE 1=1 "
+ + " AND cit.NUM_DOCUMENTO = :numeroDocumento "
+ + " ",
+ nativeQuery = true)
String findConsensoByNumDocumentoCittadino(
- @Param(value = "numeroDocumento") String numeroDocumento);
+ @Param(value = "numeroDocumento") String numeroDocumento
+ );
@Query(value = " "
- + " SELECT "
- + " * "
- + " FROM "
- + " cittadino cit "
- + " WHERE ( "
- + " ( cit.codice_fiscale <> '' AND cit.codice_fiscale = :codiceFiscale ) "
- + " OR ( cit.num_documento <> '' AND cit.num_documento = :numeroDocumento ) "
- + " ) "
- + " AND cit.id <> :id"
- + " ", nativeQuery = true)
+ + " SELECT "
+ + " * "
+ + " FROM "
+ + " cittadino cit "
+ + " WHERE ( "
+ + " ( cit.codice_fiscale <> '' AND cit.codice_fiscale = :codiceFiscale ) "
+ + " OR ( cit.num_documento <> '' AND cit.num_documento = :numeroDocumento ) "
+ + " ) "
+ + " AND cit.id <> :id"
+ + " ",
+ nativeQuery = true)
List findCittadinoByCodiceFiscaleOrNumeroDocumentoAndIdDiverso(
@Param(value = "codiceFiscale") String codiceFiscale,
- @Param(value = "numeroDocumento") String numeroDocumento,
+ @Param(value = "numeroDocumento") String numeroDocumento,
@Param(value = "id") Long id);
@Query(value = " "
- + " SELECT "
- + " count( distinct(sxc.id_cittadino) ) "
- + " FROM "
- + " servizio_x_cittadino sxc "
- + " INNER JOIN servizio s"
- + " ON s.id = sxc.id_servizio "
- + " WHERE "
- + " 1=1"
- + " AND s.id_facilitatore = :cfUtenteLoggato "
- + " AND sxc.id_cittadino = :idCittadino "
- + " AND s.id_ente = :idEnte "
- + " AND s.id_progetto = :idProgetto "
- + " ", nativeQuery = true)
+ + " SELECT "
+ + " count( distinct(sxc.id_cittadino) ) "
+ + " FROM "
+ + " servizio_x_cittadino sxc "
+ + " INNER JOIN servizio s"
+ + " ON s.id = sxc.id_servizio "
+ + " WHERE "
+ + " 1=1"
+ + " AND s.id_facilitatore = :cfUtenteLoggato "
+ + " AND sxc.id_cittadino = :idCittadino "
+ + " AND s.id_ente = :idEnte "
+ + " AND s.id_progetto = :idProgetto "
+ + " ",
+ nativeQuery = true)
int isCittadinoAssociatoAFacVol(
@Param(value = "idCittadino") Long idCittadino,
- @Param(value = "cfUtenteLoggato") String cfUtenteLoggato,
- @Param(value = "idEnte") Long idEnte,
+ @Param(value = "cfUtenteLoggato") String cfUtenteLoggato,
+ @Param(value = "idEnte") Long idEnte,
@Param(value = "idProgetto") Long idProgetto);
}
\ No newline at end of file
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java
index 3507d503b..8a591567f 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioSqlRepository.java
@@ -10,7 +10,7 @@
import it.pa.repdgt.shared.entity.ServizioEntity;
public interface ServizioSqlRepository extends JpaRepository {
-
+
@Query(value = ""
+ " SELECT "
+ " s.* "
@@ -18,8 +18,7 @@ public interface ServizioSqlRepository extends JpaRepository findByFacilitatoreAndIdServizio(
@Param(value = "idFacilitatore") String idFacilitatore,
@Param(value = "idServizio") Long idServizio);
@@ -35,234 +34,214 @@ Optional findByFacilitatoreAndIdServizio(
+ " AND sxc.id_servizio <> :idServizio "
+ " AND sxc.id_cittadino = :idCittadino "
+ " ORDER BY sxc.data_ora_creazione DESC"
- + " LIMIT 1",
- nativeQuery = true)
+ + " LIMIT 1", nativeQuery = true)
Optional findServizioByCittadinoNotEqual(
@Param(value = "idServizio") Long idServizio,
- @Param(value = "idCittadino") Long idCittadino
- );
-
+ @Param(value = "idCittadino") Long idCittadino);
+
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " ",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " ", nativeQuery = true)
List findAllServiziByFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro
- );
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro);
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN progetto progetto "
- + " ON progetto.ID = s.ID_PROGETTO "
- + " INNER JOIN programma programma "
- + " ON programma.ID = progetto.ID_PROGRAMMA "
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " AND ( programma.POLICY = 'SCD' ) "
- + " ORDER BY nome",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN progetto progetto "
+ + " ON progetto.ID = s.ID_PROGETTO "
+ + " INNER JOIN programma programma "
+ + " ON programma.ID = progetto.ID_PROGRAMMA "
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " AND ( programma.POLICY = 'SCD' ) "
+ + " ORDER BY nome", nativeQuery = true)
List findAllServiziByPolicySCDAndFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro
- );
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro);
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN ente_sede_progetto_facilitatore espf "
- + " ON espf.ID_FACILITATORE = s.ID_FACILITATORE "
- + " INNER JOIN progetto progetto "
- + " ON progetto.ID = s.ID_PROGETTO "
- + " INNER JOIN programma programma "
- + " ON programma.ID = progetto.ID_PROGRAMMA"
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( UPPER( espf.ID_FACILITATORE ) = UPPER( :codiceFiscaleUtente ) ) "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
- + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " AND s.ID_ENTE = :idEnte"
- + " ORDER BY s.nome",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN ente_sede_progetto_facilitatore espf "
+ + " ON espf.ID_FACILITATORE = s.ID_FACILITATORE "
+ + " INNER JOIN progetto progetto "
+ + " ON progetto.ID = s.ID_PROGETTO "
+ + " INNER JOIN programma programma "
+ + " ON programma.ID = progetto.ID_PROGRAMMA"
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( UPPER( espf.ID_FACILITATORE ) = UPPER( :codiceFiscaleUtente ) ) "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
+ + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " AND s.ID_ENTE = :idEnte"
+ + " ORDER BY s.nome", nativeQuery = true)
List findAllServiziByFacilitatoreOVolontarioAndFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
- @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
- @Param(value = "idEnte") Long idEnte,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro,
- @Param(value = "codiceFiscaleUtente") String codiceFiscaleUtente
- );
-
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
+ @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
+ @Param(value = "idEnte") Long idEnte,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro,
+ @Param(value = "codiceFiscaleUtente") String codiceFiscaleUtente);
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN progetto progetto "
- + " ON progetto.ID = s.ID_PROGETTO "
- + " INNER JOIN programma programma "
- + " ON programma.ID = progetto.ID_PROGRAMMA "
- + " INNER JOIN referente_delegati_gestore_programma rdgp "
- + " ON rdgp.ID_PROGRAMMA = programma.ID AND rdgp.ID_ENTE = programma.ID_ENTE_GESTORE_PROGRAMMA "
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " ORDER BY s.nome",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN progetto progetto "
+ + " ON progetto.ID = s.ID_PROGETTO "
+ + " INNER JOIN programma programma "
+ + " ON programma.ID = progetto.ID_PROGRAMMA "
+ + " INNER JOIN referente_delegati_gestore_programma rdgp "
+ + " ON rdgp.ID_PROGRAMMA = programma.ID AND rdgp.ID_ENTE = programma.ID_ENTE_GESTORE_PROGRAMMA "
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " ORDER BY s.nome", nativeQuery = true)
List findAllServiziByReferenteODelegatoGestoreProgrammaAndFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro
- );
-
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro);
+
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN progetto progetto "
- + " ON progetto.ID = s.ID_PROGETTO "
- + " INNER JOIN programma programma "
- + " ON programma.ID = progetto.ID_PROGRAMMA "
- + " INNER JOIN referente_delegati_gestore_progetto rdgp "
- + " ON rdgp.ID_PROGETTO = progetto.ID AND rdgp.ID_ENTE = progetto.ID_ENTE_GESTORE_PROGETTO "
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
- + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " ORDER BY s.nome",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN progetto progetto "
+ + " ON progetto.ID = s.ID_PROGETTO "
+ + " INNER JOIN programma programma "
+ + " ON programma.ID = progetto.ID_PROGRAMMA "
+ + " INNER JOIN referente_delegati_gestore_progetto rdgp "
+ + " ON rdgp.ID_PROGETTO = progetto.ID AND rdgp.ID_ENTE = progetto.ID_ENTE_GESTORE_PROGETTO "
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
+ + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " ORDER BY s.nome", nativeQuery = true)
List findAllServiziByReferenteODelegatoGestoreProgettoAndFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
- @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro
- );
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
+ @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro);
@Query(value = " "
- + " SELECT "
- + " DISTINCT s.* "
- + " FROM "
- + " servizio s "
- + " INNER JOIN progetto progetto "
- + " ON progetto.ID = s.ID_PROGETTO "
- + " INNER JOIN programma programma "
- + " ON programma.ID = progetto.ID_PROGRAMMA "
- + " INNER JOIN referente_delegati_partner rdgp "
- + " ON rdgp.ID_PROGETTO = progetto.ID"
- + " INNER JOIN tipologia_servizio ts "
- + " ON ts.servizio_id = s.id"
- + " WHERE 1=1 "
- + " AND ( "
- + " :criterioRicercaServizio IS NULL "
- + " OR s.ID LIKE :criterioRicercaServizio "
- + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
- + " ) "
- + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
- + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
- + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
- + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
- + " AND rdgp.ID_ENTE = :idEnte"
- + " ORDER BY s.nome",
- nativeQuery = true)
+ + " SELECT "
+ + " DISTINCT s.* "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN progetto progetto "
+ + " ON progetto.ID = s.ID_PROGETTO "
+ + " INNER JOIN programma programma "
+ + " ON programma.ID = progetto.ID_PROGRAMMA "
+ + " INNER JOIN referente_delegati_partner rdgp "
+ + " ON rdgp.ID_PROGETTO = progetto.ID"
+ + " INNER JOIN tipologia_servizio ts "
+ + " ON ts.servizio_id = s.id"
+ + " WHERE 1=1 "
+ + " AND ( "
+ + " :criterioRicercaServizio IS NULL "
+ + " OR s.ID LIKE :criterioRicercaServizio "
+ + " OR UPPER(s.NOME) LIKE UPPER( :criterioRicercaServizio ) "
+ + " ) "
+ + " AND ( COALESCE( :idsProgrammaFiltro ) IS NULL OR programma.ID IN ( :idsProgrammaFiltro ) ) "
+ + " AND ( COALESCE( :idsProgettoFiltro ) IS NULL OR progetto.ID IN ( :idsProgettoFiltro ) ) "
+ + " AND ( COALESCE( :tipologieServizi ) IS NULL OR ts.titolo IN ( :tipologieServizi ) ) "
+ + " AND ( COALESCE( :statiServizioFiltro ) IS NULL OR s.stato IN ( :statiServizioFiltro ) ) "
+ + " AND rdgp.ID_ENTE = :idEnte"
+ + " ORDER BY s.nome", nativeQuery = true)
List findAllServiziByReferenteODelegatoEntePartnerAndFiltro(
- @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
- @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
- @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
- @Param(value = "idEnte") Long idEnte,
- @Param(value = "tipologieServizi") List tipologieServizi,
- @Param(value = "statiServizioFiltro") List statiServizioFiltro
- );
-
-
+ @Param(value = "criterioRicercaServizio") String criterioRicercaServizio,
+ @Param(value = "idsProgrammaFiltro") List idsProgrammaFiltro,
+ @Param(value = "idsProgettoFiltro") List idsProgettoFiltro,
+ @Param(value = "idEnte") Long idEnte,
+ @Param(value = "tipologieServizi") List tipologieServizi,
+ @Param(value = "statiServizioFiltro") List statiServizioFiltro);
@Query(value = " "
- + " SELECT "
- + " CONCAT(u.cognome, ' ', u.nome) as nominativoFacilitatore "
- + " FROM "
- + " servizio s "
- + " INNER JOIN utente u "
- + " ON u.codice_fiscale = s.id_facilitatore "
- + " WHERE 1=1 "
- + " AND s.id_facilitatore = :idFacilitatore "
- + " AND s.id = :idServizio"
- + " ",
- nativeQuery = true)
+ + " SELECT "
+ + " CONCAT(u.cognome, ' ', u.nome) as nominativoFacilitatore "
+ + " FROM "
+ + " servizio s "
+ + " INNER JOIN utente u "
+ + " ON u.codice_fiscale = s.id_facilitatore "
+ + " WHERE 1=1 "
+ + " AND s.id_facilitatore = :idFacilitatore "
+ + " AND s.id = :idServizio"
+ + " ", nativeQuery = true)
String findNominativoFacilitatoreByIdFacilitatoreAndIdServizio(
- @Param(value="idFacilitatore") String idFacilitatore,
- @Param(value="idServizio") Long idServizio
- );
+ @Param(value = "idFacilitatore") String idFacilitatore,
+ @Param(value = "idServizio") Long idServizio);
Optional findByNome(String nomeServizio);
-
+
@Query(value = " "
- + " SELECT "
- + " s.*"
- + " FROM "
- + " servizio s "
- + " WHERE 1=1 "
- + " AND s.id <> :idServizio "
- + " AND s.nome = :nomeServizio"
- + " ",
- nativeQuery = true)
- Optional findByNomeUpdate(@Param(value="nomeServizio")String nomeServizio,
- @Param(value="idServizio") Long idServizio);
+ + " SELECT "
+ + " s.*"
+ + " FROM "
+ + " servizio s "
+ + " WHERE 1=1 "
+ + " AND s.id <> :idServizio "
+ + " AND s.nome = :nomeServizio"
+ + " ", nativeQuery = true)
+ Optional findByNomeUpdate(@Param(value = "nomeServizio") String nomeServizio,
+ @Param(value = "idServizio") Long idServizio);
@Query(value = "SELECT DISTINCT "
+ " s.id_sede "
@@ -275,13 +254,12 @@ Optional findByNomeUpdate(@Param(value="nomeServizio")String nom
+ " AND "
+ " s.id_progetto = :idProgetto "
+ " AND "
- + " s.id_ente = :idEnte ",
- nativeQuery = true)
+ + " s.id_ente = :idEnte ", nativeQuery = true)
List findIdsSediFacilitatoreConServiziAndCittadiniCensitiByCodFiscaleAndIdProgettoAndIdEnte(
- @Param("codiceFiscaleUtente") String codiceFiscaleUtenteLoggato,
+ @Param("codiceFiscaleUtente") String codiceFiscaleUtenteLoggato,
@Param("idProgetto") Long idProgetto,
- @Param("idEnte") Long idEnte);
-
+ @Param("idEnte") Long idEnte);
+
@Query(value = ""
+ " SELECT "
+ " count(*) "
@@ -291,15 +269,13 @@ List findIdsSediFacilitatoreConServiziAndCittadiniCensitiByCodFiscaleAnd
+ " AND s.id = :idServizio"
+ " AND s.id_progetto = :idProgetto "
+ " AND s.id_ente = :idEnte "
- + " AND s.id_facilitatore = :cfUtenteLoggato ",
- nativeQuery = true)
+ + " AND s.id_facilitatore = :cfUtenteLoggato ", nativeQuery = true)
int isServizioAssociatoAUtenteProgettoEnte(
- @Param("idServizio") Long idServizio,
+ @Param("idServizio") Long idServizio,
@Param("idProgetto") Long idProgetto,
@Param("idEnte") Long idEnte,
- @Param("cfUtenteLoggato") String cfUtenteLoggato
- );
-
+ @Param("cfUtenteLoggato") String cfUtenteLoggato);
+
@Query(value = ""
+ " SELECT "
+ " count(*) "
@@ -307,13 +283,11 @@ int isServizioAssociatoAUtenteProgettoEnte(
+ " servizio s "
+ " WHERE 1=1"
+ " AND s.id = :idServizio"
- + " AND s.id_progetto = :idProgetto ",
- nativeQuery = true)
+ + " AND s.id_progetto = :idProgetto ", nativeQuery = true)
int isServizioAssociatoARegpDegp(
- @Param("idServizio") Long idServizio,
- @Param("idProgetto") Long idProgetto
- );
-
+ @Param("idServizio") Long idServizio,
+ @Param("idProgetto") Long idProgetto);
+
@Query(value = ""
+ " SELECT "
+ " count(*) "
@@ -323,22 +297,18 @@ int isServizioAssociatoARegpDegp(
+ " AND s.id = :idServizio"
+ " AND s.id_progetto = :idProgetto "
+ " AND s.id_ente = :idEnte "
- + "",
- nativeQuery = true)
+ + "", nativeQuery = true)
int isServizioAssociatoAReppDepp(
- @Param("idServizio") Long idServizio,
+ @Param("idServizio") Long idServizio,
@Param("idProgetto") Long idProgetto,
- @Param("idEnte") Long idEnte
- );
-
+ @Param("idEnte") Long idEnte);
+
@Query(value = ""
+ " select * "
+ "from servizio s "
+ "inner join questionario_compilato qc "
+ "on s.id = qc.servizio_id "
- + "where qc.id = :idQuestionarioCompilato",
- nativeQuery = true)
+ + "where qc.id = :idQuestionarioCompilato", nativeQuery = true)
Optional findServizioByQuestionarioCompilato(
- @Param(value = "idQuestionarioCompilato") String idQuestionarioCompilato
- );
+ @Param(value = "idQuestionarioCompilato") String idQuestionarioCompilato);
}
\ No newline at end of file
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioXCittadinoRepository.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioXCittadinoRepository.java
index 8eeb40e35..33483f0ff 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioXCittadinoRepository.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/repository/ServizioXCittadinoRepository.java
@@ -11,17 +11,15 @@
public interface ServizioXCittadinoRepository extends JpaRepository {
@Query(value = " "
- + " SELECT "
- + " COUNT(*)"
- + " FROM "
- + " servizio_x_cittadino sxc "
- + " WHERE 1=1 "
- + " AND sxc.ID_SERVIZIO = :idServizio "
- + " AND sxc.ID_CITTADINO = :idCittadino "
- + " ",
- nativeQuery = true)
+ + " SELECT "
+ + " COUNT(*)"
+ + " FROM "
+ + " servizio_x_cittadino sxc "
+ + " WHERE 1=1 "
+ + " AND sxc.ID_SERVIZIO = :idServizio "
+ + " AND sxc.ID_CITTADINO = :idCittadino "
+ + " ", nativeQuery = true)
int findCittadinoByIdServizioAndIdCittadino(
- @Param(value = "idServizio") Long idServizio,
- @Param(value = "idCittadino") Long idCittadino
- );
+ @Param(value = "idServizio") Long idServizio,
+ @Param(value = "idCittadino") Long idCittadino);
}
\ No newline at end of file
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/request/ConsensoTrattamentoDatiRequest.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/request/ConsensoTrattamentoDatiRequest.java
index 5aae5317e..15071ddc1 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/request/ConsensoTrattamentoDatiRequest.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/request/ConsensoTrattamentoDatiRequest.java
@@ -2,6 +2,10 @@
import java.io.Serializable;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+import it.pa.repdgt.shared.entityenum.ConsensoTrattamentoDatiEnum;
import lombok.Getter;
import lombok.Setter;
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/CittadiniServizioService.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/CittadiniServizioService.java
index d46902e7e..5dd4f265a 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/CittadiniServizioService.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/CittadiniServizioService.java
@@ -52,777 +52,778 @@
@Validated
public class CittadiniServizioService implements DomandeStrutturaQ1AndQ2Constants {
- Map mappaMesi = new HashMap<>();
-
- @PostConstruct
- public void init() {
- mappaMesi.put("A", Calendar.JANUARY);
- mappaMesi.put("B", Calendar.FEBRUARY);
- mappaMesi.put("C", Calendar.MARCH);
- mappaMesi.put("D", Calendar.APRIL);
- mappaMesi.put("E", Calendar.MAY);
- mappaMesi.put("H", Calendar.JUNE);
- mappaMesi.put("L", Calendar.JULY);
- mappaMesi.put("M", Calendar.AUGUST);
- mappaMesi.put("P", Calendar.SEPTEMBER);
- mappaMesi.put("R", Calendar.OCTOBER);
- mappaMesi.put("S", Calendar.NOVEMBER);
- mappaMesi.put("T", Calendar.DECEMBER);
- }
-
- private static final String FORMATO_DATA_PATTERN = "dd-MM-yyyy";
-
- private static final Integer RANGE_SECOLO = 23;
- private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(FORMATO_DATA_PATTERN);
-
- private static final String CF_REGX = "^[A-Z]{6}[0-9]{2}[A-Z]{1}[0-9]{2}[A-Z]{1}[0-9]{3}[A-Z]{1}$";
-
- @Autowired
- private CittadinoService cittadinoService;
- @Autowired
- private ServizioSqlService servizioSqlService;
- @Autowired
- private CittadinoServizioRepository cittadinoServizioRepository;
- @Autowired
- private CittadinoRepository cittadinoRepository;
- @Autowired
- private ServizioXCittadinoRepository servizioXCittadinoRepository;
- @Autowired
- private FasciaDiEtaRepository fasciaDiEtaRepository;
- @Autowired
- private SezioneQ3Respository sezioneQ3Respository;
- @Autowired
- private QuestionarioCompilatoMongoRepository questionarioCompilatoMongoService;
- @Autowired
- private QuestionarioCompilatoRepository questionarioCompilatoSqlRepository;
- @Autowired
- private EmailService emailService;
- @Autowired
- private QuestionarioInviatoOnlineRepository questionarioInviatoOnlineRepository;
- @Autowired
- private ServizioSqlRepository servizioSqlRepository;
-
- @LogMethod
- @LogExecutionTime
- public CittadinoServizioBean getAllCittadiniServizioByProfilazioneAndFiltroPaginati(
- Long idServizio,
- @NotNull @Valid final SceltaProfiloParam profilazione,
- @NotNull @Valid final FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
- Integer currPage,
- Integer pageSize) {
- CittadinoServizioBean bean = new CittadinoServizioBean();
- // Recupero codiceFiscale e codiceRuolo con cui si è profilato l'utente loggato
- // alla piattaforma
- final String codiceFiscaleUtenteLoggato = profilazione.getCfUtenteLoggato().trim();
-
- // Verifico se il facilitatore è il creatore di quel servizio
- if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(codiceFiscaleUtenteLoggato, idServizio)
- .isPresent()) {
- final String messaggioErrore = String.format(
- "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
- codiceFiscaleUtenteLoggato);
- throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
- }
-
- // Recupero tutti i cittadini del servizion con id idServizio in base ai filtri
- // selezionati
- final List listaCittadiniServizio = this.getAllServiziByProfilazioneAndFiltro(
- idServizio,
- filtroListaCittadiniServizio,
- currPage,
- pageSize);
-
- bean.setListaCittadiniServizio(listaCittadiniServizio);
- bean.setNumCittadini(listaCittadiniServizio.size());
- bean.setNumQuestionariCompilati(
- listaCittadiniServizio.stream()
- .filter(c -> StatoQuestionarioEnum.COMPILATO.toString()
- .equalsIgnoreCase(c.getStatoQuestionario()))
- .count());
- return bean;
- }
-
- private List getAllServiziByProfilazioneAndFiltro(
- Long idServizio,
- @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
- @NotNull Integer currPage,
- @NotNull Integer pageSize) {
- String criterioRicercaCittadinoServizioLike = null;
- String criterioRicercaCittadinoServizio = null;
- if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
- criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
- criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
- }
-
- return cittadinoServizioRepository.findAllCittadiniServizioPaginatiByFiltro(
- idServizio,
- criterioRicercaCittadinoServizio,
- filtroListaCittadiniServizio.getStatiQuestionario());
- }
-
- @LogMethod
- @LogExecutionTime
- public Integer countCittadiniServizioByFiltro(
- Long idServizio,
- @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio) {
- String criterioRicercaCittadinoServizioLike = null;
- String criterioRicercaCittadinoServizio = null;
- if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
- criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
- criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
- }
- return cittadinoServizioRepository.findAllCittadiniServizioByFiltro(
- idServizio,
- criterioRicercaCittadinoServizio,
- filtroListaCittadiniServizio.getStatiQuestionario()).size();
- }
-
- @LogMethod
- @LogExecutionTime
- public List getAllStatiQuestionarioCittadinoServizioDropdown(
- Long idServizio,
- final FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
- SceltaProfiloParam sceltaProfilo) {
- // Verifico se il facilitatore è il creatore di quel servizio
- if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(sceltaProfilo.getCfUtenteLoggato(), idServizio)
- .isPresent()) {
- final String messaggioErrore = String.format(
- "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
- sceltaProfilo.getCfUtenteLoggato());
- throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
- }
- return filtroListaCittadiniServizio.getStatiQuestionario().isEmpty()
- ? this.getAllStatiQuestionarioByProfilazioneAndFiltro(idServizio, filtroListaCittadiniServizio)
- : this.getAllStatiQuestionarioByProfilazioneAndFiltro(idServizio, filtroListaCittadiniServizio)
- .containsAll(filtroListaCittadiniServizio.getStatiQuestionario())
- ? filtroListaCittadiniServizio.getStatiQuestionario()
- : new ArrayList<>();
- }
-
- @LogMethod
- @LogExecutionTime
- public List getAllStatiQuestionarioByProfilazioneAndFiltro(
- Long idServizio,
- @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio) {
- String criterioRicercaCittadinoServizioLike = null;
- String criterioRicercaCittadinoServizio = null;
- if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
- criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
- criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
- }
-
- return cittadinoServizioRepository.getAllStatiQuestionarioCittadinoServizioDropdown(idServizio,
- criterioRicercaCittadinoServizio);
- }
-
- @LogMethod
- @LogExecutionTime
- public List getAllCittadiniByCodFiscOrNumDoc(String tipoDocumento,
- @NotNull String criterioRicerca) {
- return cittadinoServizioRepository.getAllCittadiniByCodFiscOrNumDoc(tipoDocumento, criterioRicerca);
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public CittadinoEntity creaNuovoCittadino(
- @NotNull final Long idServizio,
- @NotNull final NuovoCittadinoServizioRequest nuovoCittadinoRequest) throws ParseException {
- String codiceFiscaleDecrypted;
- if (nuovoCittadinoRequest.getCodiceFiscale() != null && !nuovoCittadinoRequest.getCodiceFiscale().isEmpty()) {
- codiceFiscaleDecrypted = decryptFromBase64(nuovoCittadinoRequest.getCodiceFiscale());
- if (codiceFiscaleDecrypted.length() != 16)
- throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
- "Il codice fiscale deve essere composto da 16 caratteri");
- if (!isCittadinoMaggiorenne(codiceFiscaleDecrypted))
- throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Il cittadino non è maggiorenne");
- }
- // Verifico se il facilitatore è il creatore di quel servizio
- if (!this.servizioSqlRepository
- .findByFacilitatoreAndIdServizio(nuovoCittadinoRequest.getCfUtenteLoggato(), idServizio).isPresent()) {
- final String messaggioErrore = String.format(
- "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
- nuovoCittadinoRequest.getCfUtenteLoggato());
- throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
- }
- final Optional optionalCittadinoDBFetch = this.cittadinoService
- .getCittadinoByCodiceFiscaleOrNumeroDocumento(
- nuovoCittadinoRequest.getCodiceFiscaleNonDisponibile(),
- nuovoCittadinoRequest.getCodiceFiscale(),
- nuovoCittadinoRequest.getNumeroDocumento());
-
- if (nuovoCittadinoRequest.getNuovoCittadino() && optionalCittadinoDBFetch.isPresent()) {
- final String messaggioErrore = String.format(
- "Cittadino già esistente",
- optionalCittadinoDBFetch.get().getCodiceFiscale(),
- optionalCittadinoDBFetch.get().getNumeroDocumento());
- throw new CittadinoException(messaggioErrore, CodiceErroreEnum.U07);
- }
- CittadinoEntity cittadino = new CittadinoEntity();
- if (optionalCittadinoDBFetch.isPresent()) {
- cittadino = optionalCittadinoDBFetch.get();
- } else {
- mapNuovoCittadinoRequestToCittadino(cittadino, nuovoCittadinoRequest);
- }
- // verifico se già esiste il cittadino per quel determinato servizio
- // e in caso affermativo sollevo eccezione
- if (this.esisteCittadinoByIdServizioAndIdCittadino(idServizio, cittadino.getId())) {
- final String messaggioErrore = String.format(
- "Cittadino già esistente sul Servizio con id=%s",
- cittadino.getCodiceFiscale(),
- cittadino.getNumeroDocumento(),
- idServizio);
- throw new CittadinoException(messaggioErrore, CodiceErroreEnum.U23);
- }
- cittadino.setDataOraAggiornamento(new Date());
- cittadino = cittadinoRepository.save(cittadino);
- // associo il cittadino al servizio
- this.associaCittadinoAServizio(idServizio, cittadino);
-
- // recupero il servizio
- ServizioEntity servizioDBFetch = servizioSqlService.getServizioById(idServizio);
-
- if (StatoEnum.NON_ATTIVO.getValue().equals(servizioDBFetch.getStato()))
- servizioDBFetch.setStato(StatoEnum.ATTIVO.getValue());
-
- // creo il questionario in stato NON_INVIATO
- this.creaQuestionarioNonInviato(servizioDBFetch, cittadino);
-
- return cittadino;
- }
-
- private CittadinoEntity mapNuovoCittadinoRequestToCittadino(CittadinoEntity cittadino,
- NuovoCittadinoServizioRequest nuovoCittadinoRequest) {
- if (nuovoCittadinoRequest.getCodiceFiscale() != null)
- cittadino.setCodiceFiscale(nuovoCittadinoRequest.getCodiceFiscale());
- if (nuovoCittadinoRequest.getNumeroDocumento() != null) {
- cittadino.setTipoDocumento(nuovoCittadinoRequest.getTipoDocumento());
- cittadino.setNumeroDocumento(nuovoCittadinoRequest.getNumeroDocumento());
- }
- cittadino.setFasciaDiEta(fasciaDiEtaRepository.getReferenceById(nuovoCittadinoRequest.getFasciaDiEtaId()));
- cittadino.setCittadinanza(nuovoCittadinoRequest.getCittadinanza());
- cittadino.setGenere(nuovoCittadinoRequest.getGenere());
- cittadino.setDataOraCreazione(new Date());
- cittadino.setOccupazione(nuovoCittadinoRequest.getStatoOccupazionale());
- cittadino.setTitoloDiStudio(nuovoCittadinoRequest.getTitoloStudio());
- cittadino.setProvinciaDiDomicilio(nuovoCittadinoRequest.getProvinciaDiDomicilio());
- return cittadino;
- }
-
- public boolean isCittadinoMaggiorenne(String codiceFiscale) {
- try {
- Date dataDiNascita = estraiDataDiNascita(codiceFiscale);
- return isMaggiorenne(dataDiNascita);
- } catch (ParseException e) {
- throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Errore nella data di nascita");
- }
- }
-
- private String decryptFromBase64(String encryptedData) {
- try {
- return new String(Base64.getDecoder().decode(encryptedData));
- } catch (Exception e) {
- throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Il codice fiscale inviato non è corretto");
- }
- }
-
- private Date estraiDataDiNascita(String codiceFiscaleDecrypted) throws ParseException {
- boolean isFemmina = codiceFiscaleDecrypted.charAt(9) >= '4';
- int giornoDiNascita = Integer.parseInt(codiceFiscaleDecrypted.substring(9, 11)) - (isFemmina ? 40 : 0);
- int secolo = Integer.parseInt(codiceFiscaleDecrypted.substring(6, 8));
- int annoDiNascita = (secolo <= RANGE_SECOLO) ? 2000 + secolo : 1900 + secolo;
- Calendar cal = Calendar.getInstance();
- cal.set(annoDiNascita, mappaMesi.get(String.valueOf(codiceFiscaleDecrypted.charAt(8)).toUpperCase()),
- giornoDiNascita);
- return cal.getTime();
- }
-
- private boolean isMaggiorenne(Date dataNascita) {
- Date oggi = new Date();
- Calendar cal = Calendar.getInstance();
- cal.setTime(dataNascita);
- cal.add(Calendar.YEAR, 18);
- return oggi.after(cal.getTime());
- }
-
- public boolean esisteCittadinoByIdServizioAndIdCittadino(@NotNull final Long idServizio,
- @NotNull final Long idCittadino) {
- return this.servizioXCittadinoRepository.findCittadinoByIdServizioAndIdCittadino(idServizio, idCittadino) > 0;
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public void associaCittadinoAServizio(@NotNull final Long idServizio, @NotNull final CittadinoEntity cittadino) {
- ServizioXCittadinoEntity servizioXCittadino = new ServizioXCittadinoEntity();
- ServizioCittadinoKey key = new ServizioCittadinoKey(cittadino.getId(), idServizio);
- servizioXCittadino.setId(key);
- servizioXCittadino.setDataOraAggiornamento(new Date());
- servizioXCittadino.setDataOraCreazione(new Date());
- servizioXCittadinoRepository.save(servizioXCittadino);
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public void creaQuestionarioNonInviato(@NotNull final ServizioEntity servizioDBFetch,
- @NotNull final CittadinoEntity cittadino) {
-
- // creo il template questionario compilato per Mongo
- QuestionarioCompilatoCollection questionarioCompilatoCreato = creoQuestionarioCompilatoCollection(
- cittadino,
- servizioDBFetch);
-
- // salvo il questionario compilato su MySql
- this.salvaQuestionarioCompilatoSql(cittadino, servizioDBFetch, questionarioCompilatoCreato);
-
- // salvo il questionario Compilato su Mongo
- this.questionarioCompilatoMongoService.save(questionarioCompilatoCreato);
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public QuestionarioCompilatoCollection creoQuestionarioCompilatoCollection(
- CittadinoEntity cittadino,
- ServizioEntity servizio) {
- final String idQuestionarioTemplateQ3AssociatoAlServizio = servizio.getIdTemplateCompilatoQ3();
- final Optional SezioneQuestionarioQ3DBFetch = sezioneQ3Respository
- .findById(idQuestionarioTemplateQ3AssociatoAlServizio);
-
- if (!SezioneQuestionarioQ3DBFetch.isPresent()) {
- final String messaggioErrore = String.format(
- "Servizio con id={} non ha associato templateQ3 con id={} associato. "
- + "Verifica che il templateQ3 con id={} esiste su MongoDB",
- servizio.getId(), idQuestionarioTemplateQ3AssociatoAlServizio,
- idQuestionarioTemplateQ3AssociatoAlServizio);
- throw new QuestionarioCompilatoException(messaggioErrore, CodiceErroreEnum.QT08);
- }
-
- List sezioniQuestionarioTemplateIstanze = new ArrayList<>();
-
- String jsonStringSezioneQ1 = this.creaSezioneQuestionarioQ1ByCittadino(cittadino);
-
- // creo questionario compilato inserendo sezione: Q1 (Anagrafica Cittadino), Q3
- // (Anagrafica Servizio)
- QuestionarioCompilatoCollection questionarioCompilato = new QuestionarioCompilatoCollection();
- questionarioCompilato.setIdQuestionarioCompilato(UUID.randomUUID().toString());
- DatiIstanza q1 = new DatiIstanza();
- q1.setDomandaRisposta(new JsonObject(jsonStringSezioneQ1));
-
- String jsonStringSezioneQ2 = this.creaSezioneQuestionarioQ2ByCittadino(cittadino.getId(), servizio.getId());
- DatiIstanza q2 = new DatiIstanza();
- q2.setDomandaRisposta(new JsonObject(jsonStringSezioneQ2));
-
- DatiIstanza q3 = new DatiIstanza();
- q3.setDomandaRisposta(SezioneQuestionarioQ3DBFetch.get().getSezioneQ3Compilato());
- sezioniQuestionarioTemplateIstanze.add(q1);
- sezioniQuestionarioTemplateIstanze.add(q2);
- sezioniQuestionarioTemplateIstanze.add(q3);
- questionarioCompilato.setSezioniQuestionarioTemplateIstanze(sezioniQuestionarioTemplateIstanze);
- questionarioCompilato.setDataOraCreazione(new Date());
- questionarioCompilato.setDataOraUltimoAggiornamento(new Date());
-
- return questionarioCompilato;
- }
-
- @LogMethod
- @LogExecutionTime
- public String creaSezioneQuestionarioQ1ByCittadino(@NotNull final CittadinoEntity cittadino) {
- return String.format(SEZIONE_Q1_TEMPLATE,
- ID_DOMANDA_CODICE_FISCALE, cittadino.getCodiceFiscale(),
- ID_DOMANDA_CODICE_FISCALE_NON_DISPONIBILE, cittadino.getCodiceFiscale() == null
- || cittadino.getCodiceFiscale().isEmpty(),
- ID_DOMANDA_TIPO_DOCUMENTO, cittadino.getTipoDocumento(),
- ID_DOMANDA_NUMERO_DOCUMENTO, cittadino.getNumeroDocumento(),
- ID_DOMANDA_GENERE, cittadino.getGenere(),
- ID_DOMANDA_FASCIA_DI_ETA, cittadino.getFasciaDiEta().getFascia(),
- ID_DOMANDA_TITOLO_DI_STUDIO, cittadino.getTitoloDiStudio(),
- ID_DOMANDA_STATO_OCCUPAZIONALE, cittadino.getOccupazione(),
- ID_DOMANDA_PROVINCIA, cittadino.getProvinciaDiDomicilio(),
- ID_DOMANDA_CITTADINANZA, cittadino.getCittadinanza());
- }
-
- @LogMethod
- @LogExecutionTime
- public String creaSezioneQuestionarioQ2ByCittadino(@NotNull final Long idCittadino,
- @NotNull final Long idServizio) {
- Optional primoServizio = servizioSqlService.getPrimoServizioByIdCittadino(idServizio,
- idCittadino);
- Boolean esistePrimoServizio = primoServizio.isPresent();
-
- String tipologiaServiziString = "";
-
- if (esistePrimoServizio) {
- List tipologiaServiziList = primoServizio.get().getListaTipologiaServizi();
-
- if (tipologiaServiziList != null && tipologiaServiziList.size() > 0) {
- StringBuilder tipologiaServiziStringBuilder = new StringBuilder();
- tipologiaServiziList.forEach(tipologiaServizio -> {
- if (tipologiaServizio.getTitolo() != null) {
- tipologiaServiziStringBuilder.append(tipologiaServizio.getTitolo().concat(", "));
- }
- });
- tipologiaServiziString = tipologiaServiziStringBuilder.substring(0,
- tipologiaServiziStringBuilder.length() - 2);
- }
- }
- final String jsonStringSezioneQ2 = String.format(SEZIONE_Q2_TEMPLATE,
- ID_DOMANDA_PRIMA_VOLTA, esistePrimoServizio ? "No" : "Sì",
- ID_DOMANDA_TIPO_PRIMO_SERVIZIO, esistePrimoServizio ? tipologiaServiziString : "");
-
- return jsonStringSezioneQ2;
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public void salvaQuestionarioCompilatoSql(
- @NotNull final CittadinoEntity cittadino,
- @NotNull final ServizioEntity servizio,
- @NotNull final QuestionarioCompilatoCollection questionarioCompilatoCollection) {
- QuestionarioCompilatoEntity questCompilatoMySql;
- questCompilatoMySql = new QuestionarioCompilatoEntity();
- questCompilatoMySql.setId(questionarioCompilatoCollection.getIdQuestionarioCompilato());
- questCompilatoMySql.setDataOraCreazione(new Date());
- questCompilatoMySql.setCittadino(cittadino);
- questCompilatoMySql.setDataOraAggiornamento(new Date());
- questCompilatoMySql.setIdEnte(servizio.getIdEnteSedeProgettoFacilitatore().getIdEnte());
- questCompilatoMySql.setIdFacilitatore(servizio.getIdEnteSedeProgettoFacilitatore().getIdFacilitatore());
- questCompilatoMySql.setIdProgetto(servizio.getIdEnteSedeProgettoFacilitatore().getIdProgetto());
- questCompilatoMySql.setIdSede(servizio.getIdEnteSedeProgettoFacilitatore().getIdSede());
- questCompilatoMySql.setIdServizio(servizio.getId());
- questCompilatoMySql.setStato(StatoQuestionarioEnum.NON_COMPILATO.toString());
- questCompilatoMySql.setIdQuestionarioTemplate(servizio.getIdQuestionarioTemplateSnapshot());
-
- this.questionarioCompilatoSqlRepository.save(questCompilatoMySql);
-
- }
-
- @LogMethod
- @LogExecutionTime
- @Transactional(rollbackOn = Exception.class)
- public List caricaCittadiniSuServizio(MultipartFile fileCittadiniCSV, Long idServizio,
- String codiceFiscaleUtenteLoggato) {
- List esiti = new ArrayList<>();
-
- if (this.servizioSqlService.getServizioById(idServizio) == null) {
- throw new ServizioException("Servizio con id " + idServizio + " non esistente", CodiceErroreEnum.S09);
- }
-
- // Verifico se il facilitatore è il creatore di quel servizio
- if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(codiceFiscaleUtenteLoggato, idServizio)
- .isPresent()) {
- final String messaggioErrore = String.format(
- "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
- codiceFiscaleUtenteLoggato);
- throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
- }
-
- try {
- // estraggo i cittadini dal file csv
- List cittadiniUpload = CSVServizioUtil
- .excelToCittadini(fileCittadiniCSV.getInputStream());
- for (CittadinoUploadBean cittadinoUpload : cittadiniUpload) {
- if (this.checkPassCittadinoUpload(cittadinoUpload)) {
- Pattern pattern = Pattern.compile(CF_REGX);
- String cf = cittadinoUpload.getCodiceFiscale();
- Matcher matcher = pattern.matcher(cf != null ? cf : "");
- if ((cf != null
- && !("").equals(cf)
- && matcher.find())
- || (cf == null)) {
- bonificaRecordUpload(cittadinoUpload);
- Optional optionalCittadinoDBFetch = this.cittadinoService
- .getByCodiceFiscaleOrNumeroDocumento(cittadinoUpload.getCodiceFiscale(),
- cittadinoUpload.getNumeroDocumento());
-
- CittadinoEntity cittadino = new CittadinoEntity();
- // se il cittadino non esiste già a sistema
- if (!optionalCittadinoDBFetch.isPresent()) {
- try {
- popolaCittadino(cittadino, cittadinoUpload);
- inserisciCittadino(cittadino, idServizio);
- cittadinoUpload.setEsito("UPLOAD - OK");
- } catch (NumberFormatException e) {
- cittadinoUpload.setEsito("UPLOAD - KO - ANNO DI NASCITA IN FORMATO NON VALIDO");
- }
- } else {
- CittadinoEntity cittadinoDBFetch = optionalCittadinoDBFetch.get();
- // verifico se già esiste il cittadino per quel determinato servizio
- // e in caso affermativo aggiungo KO
- if (this.esisteCittadinoByIdServizioAndIdCittadino(idServizio, cittadinoDBFetch.getId())) {
- cittadinoUpload.setEsito(String.format(
- "UPLOAD - KO - CITTADINO GIA' ESISTENTE SUL SERVIZIO",
- cittadinoDBFetch.getCodiceFiscale(),
- cittadinoDBFetch.getNumeroDocumento(),
- idServizio));
- } else {
- cittadino.setId(cittadinoDBFetch.getId());
- try {
- popolaCittadino(cittadino, cittadinoUpload);
- inserisciCittadino(cittadino, idServizio);
- cittadinoUpload.setEsito("UPLOAD - OK");
- } catch (NumberFormatException e) {
- cittadinoUpload.setEsito("UPLOAD - KO - ANNO DI NASCITA IN FORMATO NON VALIDO");
- }
- }
- }
- } else {
- cittadinoUpload.setEsito("UPLOAD - KO - FORMATO CF NON VALIDO");
- }
- }
- esiti.add(cittadinoUpload);
- }
-
- return esiti;
- } catch (IOException e) {
- throw new ServizioException("Impossibile effettuare upload lista cittadini", e, CodiceErroreEnum.CIT01);
- }
- }
-
- private boolean checkPassCittadinoUpload(CittadinoUploadBean cittadinoUpload) {
- final String codiceFiscale = cittadinoUpload.getCodiceFiscale();
- final String numeroDocumento = cittadinoUpload.getNumeroDocumento();
- final String tipoDocumento = cittadinoUpload.getTipoDocumento();
- if ((codiceFiscale == null || "".equals(codiceFiscale.trim())) &&
- (numeroDocumento == null || "".equals(numeroDocumento.trim())) &&
- (tipoDocumento == null || "".equals(tipoDocumento.trim()))) {
- cittadinoUpload.setEsito(
- "UPLOAD - KO - CODICE FISCALE, NUMERO DOCUMENTO, TIPO DOCUMENTO NON POSSONO ESSERE TUTTI CONTEMPORANEMENTE NON VALORIZZATI");
- return false;
- }
- if (cittadinoUpload.getGenere() == null || "".equals(cittadinoUpload.getGenere().trim())) {
- cittadinoUpload.setEsito("UPLOAD - KO - GENERE DEVE ESSERE VALORIZZATO");
- return false;
- }
- if (cittadinoUpload.getFasciaDiEtaId() == null || "".equals(cittadinoUpload.getFasciaDiEtaId())) {
- cittadinoUpload.setEsito("UPLOAD - KO - FASCIA_ETA DEVE ESSERE VALORIZZATO");
- return false;
- }
- if (cittadinoUpload.getTitoloStudio() == null || "".equals(cittadinoUpload.getTitoloStudio().trim())) {
- cittadinoUpload.setEsito("UPLOAD - KO - TITOLO_STUDIO DEVE ESSERE VALORIZZATO");
- return false;
- }
- if (cittadinoUpload.getStatoOccupazionale() == null
- || "".equals(cittadinoUpload.getStatoOccupazionale().trim())) {
- cittadinoUpload.setEsito("UPLOAD - KO - STATO_OCCUPAZIONALE DEVE ESSERE VALORIZZATO");
- return false;
- }
- if (cittadinoUpload.getCittadinanza() == null || "".equals(cittadinoUpload.getCittadinanza().trim())) {
- cittadinoUpload.setEsito("UPLOAD - KO - CITTADINANZA DEVE ESSERE VALORIZZATO");
- return false;
- }
- return true;
- }
-
- private void bonificaRecordUpload(CittadinoUploadBean cittadinoUpload) {
- if (cittadinoUpload.getFasciaDiEtaId() != null)
- cittadinoUpload.setFasciaDiEtaId(cittadinoUpload.getFasciaDiEtaId().replace("'", "’"));
- if (cittadinoUpload.getCittadinanza() != null)
- cittadinoUpload.setCittadinanza(cittadinoUpload.getCittadinanza().replace("'", "’"));
- if (cittadinoUpload.getCodiceFiscale() != null)
- cittadinoUpload.setCodiceFiscale(cittadinoUpload.getCodiceFiscale().replace("'", "’"));
- if (cittadinoUpload.getGenere() != null)
- cittadinoUpload.setGenere(cittadinoUpload.getGenere().replace("'", "’"));
- if (cittadinoUpload.getNumeroDocumento() != null)
- cittadinoUpload.setNumeroDocumento(cittadinoUpload.getNumeroDocumento().replace("'", "’"));
- if (cittadinoUpload.getStatoOccupazionale() != null)
- cittadinoUpload.setStatoOccupazionale(cittadinoUpload.getStatoOccupazionale().replace("'", "’"));
- if (cittadinoUpload.getTipoDocumento() != null)
- cittadinoUpload.setTipoDocumento(cittadinoUpload.getTipoDocumento().replace("'", "’"));
- if (cittadinoUpload.getTitoloStudio() != null)
- cittadinoUpload.setTitoloStudio(cittadinoUpload.getTitoloStudio().replace("'", "’"));
- }
-
- public void inserisciCittadino(CittadinoEntity cittadino, Long idServizio) {
- cittadino = cittadinoRepository.save(cittadino);
-
- // associo il cittadino al servizio
- this.associaCittadinoAServizio(idServizio, cittadino);
-
- // recupero il servizio
- ServizioEntity servizioDBFetch = servizioSqlService.getServizioById(idServizio);
-
- if (StatoEnum.NON_ATTIVO.getValue().equals(servizioDBFetch.getStato())) {
- servizioDBFetch.setStato(StatoEnum.ATTIVO.getValue());
- servizioSqlRepository.save(servizioDBFetch);
- }
-
- // creo il questionario in stato NON_INVIATO
- this.creaQuestionarioNonInviato(servizioDBFetch, cittadino);
-
- }
-
- public void popolaCittadino(CittadinoEntity cittadino, CittadinoUploadBean cittadinoUpload) {
- cittadino.setCodiceFiscale(cittadinoUpload.getCodiceFiscale());
- cittadino.setTipoDocumento(cittadinoUpload.getTipoDocumento());
- cittadino.setNumeroDocumento(cittadinoUpload.getNumeroDocumento());
- cittadino.setDataOraCreazione(new Date());
- cittadino.setDataOraAggiornamento(new Date());
-
- cittadino
- .setFasciaDiEta(fasciaDiEtaRepository.findById(Long.valueOf(cittadinoUpload.getFasciaDiEtaId())).get());
- cittadino.setCittadinanza(cittadinoUpload.getCittadinanza());
- cittadino.setGenere(cittadinoUpload.getGenere());
- cittadino.setOccupazione(cittadinoUpload.getStatoOccupazionale());
- cittadino.setTitoloDiStudio(cittadinoUpload.getTitoloStudio());
- }
-
- /*
- * @LogMethod
- *
- * @LogExecutionTime
- * public void inviaQuestionario(@NotNull final String idQuestionario, @NotNull
- * final Long idCittadino) {
- * QuestionarioCompilatoEntity questionarioCompilato =
- * questionarioCompilatoSqlRepository.findById(idQuestionario)
- * .orElseThrow(() -> new ServizioException("id questionario inesistente",
- * CodiceErroreEnum.Q01) );
- * CittadinoEntity cittadino = questionarioCompilato.getCittadino();
- *
- * if(cittadino == null || !idCittadino.equals(cittadino.getId())) {
- * throw new ServizioException("coppia cittadino - id questionario inesistente",
- * CodiceErroreEnum.Q01);
- * }
- * inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(idQuestionario,
- * questionarioCompilato, cittadino);
- * }
- */
-
- /*
- * @LogMethod
- *
- * @LogExecutionTime
- *
- * @Transactional(rollbackOn = Exception.class)
- * public void inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(
- * final String idQuestionario,
- * QuestionarioCompilatoEntity questionarioCompilato,
- * CittadinoEntity cittadino) {
- * if(questionarioCompilato.getStato().equals(StatoQuestionarioEnum.COMPILATO.
- * getValue()))
- * throw new ServizioException("Il questionario risulta già compilato",
- * CodiceErroreEnum.Q02);
- * //inviaLinkAnonimo(cittadino,idQuestionario);
- * questionarioCompilato.setStato(StatoQuestionarioEnum.INVIATO.getValue());
- * questionarioCompilatoSqlRepository.save(questionarioCompilato);
- * }
- */
-
- /*
- * @LogMethod
- *
- * @LogExecutionTime
- *
- * @Transactional(rollbackOn = Exception.class)
- * public void inviaLinkAnonimo(CittadinoEntity cittadino,String idQuestionario)
- * {
- * new Thread( () -> {
- * try {
- * String token = this.generaToken(cittadino, idQuestionario);
- * //recuper nome e data servizio
- * ServizioEntity servizio =
- * servizioSqlRepository.findServizioByQuestionarioCompilato(idQuestionario).get
- * ();
- * SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
- * String[] argsTemplate = new String[] { cittadino.getNome(),
- * servizio.getNome(), sdf.format(servizio.getDataServizio()), idQuestionario,
- * token};
- *
- * // stacco un thread per invio email
- * this.emailService.inviaEmail(
- * cittadino.getEmail(),
- * EmailTemplateEnum.QUESTIONARIO_ONLINE,
- * argsTemplate
- * );
- * } catch(Exception ex) {
- * log.error("Impossibile inviare la mail al cittadino con id={}.",
- * cittadino.getId());
- * log.error("{}", ex);
- * throw new ServizioException("Impossibile inviare la mail", ex,
- * CodiceErroreEnum.E01);
- * }
- * }).start();
- * }
- */
-
- @Transactional(rollbackOn = Exception.class)
- @LogMethod
- @LogExecutionTime
- public String generaToken(CittadinoEntity cittadino, String idQuestionarioCompilato) {
- // Recupera QuestionarioInviato a partire dal questionario compialato e codice
- // fiscale/numDocumento cittadino se esiste.
- // Altrimenti crea un QuestionarioInviato ex-novo
- QuestionarioInviatoOnlineEntity invioQuestionario = questionarioInviatoOnlineRepository
- .findByIdQuestionarioCompilatoAndCodiceFiscale(idQuestionarioCompilato, cittadino.getCodiceFiscale())
- .orElse(null);
-
- if (invioQuestionario == null) {
- invioQuestionario = questionarioInviatoOnlineRepository
- .findByIdQuestionarioCompilatoAndNumDocumento(idQuestionarioCompilato,
- cittadino.getNumeroDocumento())
- .orElse(new QuestionarioInviatoOnlineEntity());
- }
-
- invioQuestionario.setCodiceFiscale(cittadino.getCodiceFiscale());
- invioQuestionario.setNumDocumento(cittadino.getNumeroDocumento());
- invioQuestionario.setIdQuestionarioCompilato(idQuestionarioCompilato);
-
- String token = UUID.randomUUID().toString();
- invioQuestionario.setToken(token);
- invioQuestionario.setDataOraCreazione(new Date());
-
- questionarioInviatoOnlineRepository.save(invioQuestionario);
-
- return token;
- }
-
- /*
- * @Transactional
- *
- * @LogMethod
- *
- * @LogExecutionTime
- * public void inviaQuestionarioATuttiCittadiniNonAncoraInviatoByServizio(Long
- * idServizio, String codiceFiscaleUtenteLoggato)
- * {
- * // Verifico se il facilitatore è il creatore di quel servizio
- * if( !this.servizioSqlRepository.findByFacilitatoreAndIdServizio(
- * codiceFiscaleUtenteLoggato, idServizio).isPresent() ) {
- * final String messaggioErrore = String.
- * format("Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'"
- * ,codiceFiscaleUtenteLoggato);
- * throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
- * }
- *
- * // recupero tutti i questionari compilati con STATO = NON INVIATO per quel
- * servizio
- * List questionarioCompilatoList =
- * this.questionarioCompilatoSqlRepository.findByIdServizioAndStato(idServizio,
- * StatoQuestionarioEnum.NON_INVIATO.toString());
- *
- * questionarioCompilatoList
- * .stream()
- * .forEach(questionarioCompilato -> {
- * String idQuestionarioCompilato = questionarioCompilato.getId();
- * CittadinoEntity cittadinoAssociatoQuestionarioCompilato =
- * questionarioCompilato.getCittadino();
- * this.inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(
- * idQuestionarioCompilato, questionarioCompilato,
- * cittadinoAssociatoQuestionarioCompilato);
- * });
- * }
- */
-
- public boolean checkPermessoIdQuestionarioCompilato(SceltaProfiloParam sceltaProfilo, String idQuestionario) {
- switch (sceltaProfilo.getCodiceRuoloUtenteLoggato()) {
- case "FAC":
- case "VOL":
- Long servizioId = questionarioCompilatoSqlRepository.findById(idQuestionario).get().getIdServizio();
- return servizioSqlRepository.findById(servizioId).get().getIdEnteSedeProgettoFacilitatore()
- .getIdFacilitatore().equals(sceltaProfilo.getCfUtenteLoggato());
- }
- return false;
- }
+ Map mappaMesi = new HashMap<>();
+
+ @PostConstruct
+ public void init() {
+ mappaMesi.put("A", Calendar.JANUARY);
+ mappaMesi.put("B", Calendar.FEBRUARY);
+ mappaMesi.put("C", Calendar.MARCH);
+ mappaMesi.put("D", Calendar.APRIL);
+ mappaMesi.put("E", Calendar.MAY);
+ mappaMesi.put("H", Calendar.JUNE);
+ mappaMesi.put("L", Calendar.JULY);
+ mappaMesi.put("M", Calendar.AUGUST);
+ mappaMesi.put("P", Calendar.SEPTEMBER);
+ mappaMesi.put("R", Calendar.OCTOBER);
+ mappaMesi.put("S", Calendar.NOVEMBER);
+ mappaMesi.put("T", Calendar.DECEMBER);
+ }
+
+ private static final String FORMATO_DATA_PATTERN = "dd-MM-yyyy";
+
+ private static final Integer RANGE_SECOLO = 23;
+ private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(FORMATO_DATA_PATTERN);
+
+ private static final String CF_REGX = "^[A-Z]{6}[0-9]{2}[A-Z]{1}[0-9]{2}[A-Z]{1}[0-9]{3}[A-Z]{1}$";
+
+ @Autowired
+ private CittadinoService cittadinoService;
+ @Autowired
+ private ServizioSqlService servizioSqlService;
+ @Autowired
+ private CittadinoServizioRepository cittadinoServizioRepository;
+ @Autowired
+ private CittadinoRepository cittadinoRepository;
+ @Autowired
+ private ServizioXCittadinoRepository servizioXCittadinoRepository;
+ @Autowired
+ private FasciaDiEtaRepository fasciaDiEtaRepository;
+ @Autowired
+ private SezioneQ3Respository sezioneQ3Respository;
+ @Autowired
+ private QuestionarioCompilatoMongoRepository questionarioCompilatoMongoService;
+ @Autowired
+ private QuestionarioCompilatoRepository questionarioCompilatoSqlRepository;
+ @Autowired
+ private EmailService emailService;
+ @Autowired
+ private QuestionarioInviatoOnlineRepository questionarioInviatoOnlineRepository;
+ @Autowired
+ private ServizioSqlRepository servizioSqlRepository;
+
+ @LogMethod
+ @LogExecutionTime
+ public CittadinoServizioBean getAllCittadiniServizioByProfilazioneAndFiltroPaginati(
+ Long idServizio,
+ @NotNull @Valid final SceltaProfiloParam profilazione,
+ @NotNull @Valid final FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
+ Integer currPage,
+ Integer pageSize) {
+ CittadinoServizioBean bean = new CittadinoServizioBean();
+ // Recupero codiceFiscale e codiceRuolo con cui si è profilato l'utente loggato
+ // alla piattaforma
+ final String codiceFiscaleUtenteLoggato = profilazione.getCfUtenteLoggato().trim();
+
+ // Verifico se il facilitatore è il creatore di quel servizio
+ if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(codiceFiscaleUtenteLoggato, idServizio)
+ .isPresent()) {
+ final String messaggioErrore = String.format(
+ "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
+ codiceFiscaleUtenteLoggato);
+ throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
+ }
+
+ // Recupero tutti i cittadini del servizion con id idServizio in base ai filtri
+ // selezionati
+ final List listaCittadiniServizio = this.getAllServiziByProfilazioneAndFiltro(
+ idServizio,
+ filtroListaCittadiniServizio,
+ currPage,
+ pageSize);
+
+ bean.setListaCittadiniServizio(listaCittadiniServizio);
+ bean.setNumCittadini(listaCittadiniServizio.size());
+ bean.setNumQuestionariCompilati(
+ listaCittadiniServizio.stream()
+ .filter(c -> StatoQuestionarioEnum.COMPILATO.toString()
+ .equalsIgnoreCase(c.getStatoQuestionario()))
+ .count());
+ return bean;
+ }
+
+ private List getAllServiziByProfilazioneAndFiltro(
+ Long idServizio,
+ @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
+ @NotNull Integer currPage,
+ @NotNull Integer pageSize) {
+ String criterioRicercaCittadinoServizioLike = null;
+ String criterioRicercaCittadinoServizio = null;
+ if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
+ criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
+ criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
+ }
+
+ return cittadinoServizioRepository.findAllCittadiniServizioPaginatiByFiltro(
+ idServizio,
+ criterioRicercaCittadinoServizio,
+ filtroListaCittadiniServizio.getStatiQuestionario());
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public Integer countCittadiniServizioByFiltro(
+ Long idServizio,
+ @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio) {
+ String criterioRicercaCittadinoServizioLike = null;
+ String criterioRicercaCittadinoServizio = null;
+ if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
+ criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
+ criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
+ }
+ return cittadinoServizioRepository.findAllCittadiniServizioByFiltro(
+ idServizio,
+ criterioRicercaCittadinoServizio,
+ filtroListaCittadiniServizio.getStatiQuestionario()).size();
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public List getAllStatiQuestionarioCittadinoServizioDropdown(
+ Long idServizio,
+ final FiltroListaCittadiniServizioParam filtroListaCittadiniServizio,
+ SceltaProfiloParam sceltaProfilo) {
+ // Verifico se il facilitatore è il creatore di quel servizio
+ if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(sceltaProfilo.getCfUtenteLoggato(), idServizio)
+ .isPresent()) {
+ final String messaggioErrore = String.format(
+ "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
+ sceltaProfilo.getCfUtenteLoggato());
+ throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
+ }
+ return filtroListaCittadiniServizio.getStatiQuestionario().isEmpty()
+ ? this.getAllStatiQuestionarioByProfilazioneAndFiltro(idServizio, filtroListaCittadiniServizio)
+ : this.getAllStatiQuestionarioByProfilazioneAndFiltro(idServizio, filtroListaCittadiniServizio)
+ .containsAll(filtroListaCittadiniServizio.getStatiQuestionario())
+ ? filtroListaCittadiniServizio.getStatiQuestionario()
+ : new ArrayList<>();
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public List getAllStatiQuestionarioByProfilazioneAndFiltro(
+ Long idServizio,
+ @NotNull @Valid FiltroListaCittadiniServizioParam filtroListaCittadiniServizio) {
+ String criterioRicercaCittadinoServizioLike = null;
+ String criterioRicercaCittadinoServizio = null;
+ if (filtroListaCittadiniServizio.getCriterioRicerca() != null) {
+ criterioRicercaCittadinoServizio = filtroListaCittadiniServizio.getCriterioRicerca();
+ criterioRicercaCittadinoServizioLike = "%".concat(criterioRicercaCittadinoServizio).concat("%");
+ }
+
+ return cittadinoServizioRepository.getAllStatiQuestionarioCittadinoServizioDropdown(idServizio,
+ criterioRicercaCittadinoServizio);
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public List getAllCittadiniByCodFiscOrNumDoc(String tipoDocumento,
+ @NotNull String criterioRicerca) {
+ return cittadinoServizioRepository.getAllCittadiniByCodFiscOrNumDoc(tipoDocumento, criterioRicerca);
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public CittadinoEntity creaNuovoCittadino(
+ @NotNull final Long idServizio,
+ @NotNull final NuovoCittadinoServizioRequest nuovoCittadinoRequest) {
+ String codiceFiscaleDecrypted;
+ if (nuovoCittadinoRequest.getCodiceFiscale() != null && !nuovoCittadinoRequest.getCodiceFiscale().isEmpty()) {
+ codiceFiscaleDecrypted = decryptFromBase64(nuovoCittadinoRequest.getCodiceFiscale());
+ if (codiceFiscaleDecrypted.length() != 16)
+ throw new ResponseStatusException(HttpStatus.BAD_REQUEST,
+ "Il codice fiscale deve essere composto da 16 caratteri");
+ if (!isCittadinoMaggiorenne(codiceFiscaleDecrypted))
+ throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Il cittadino non è maggiorenne");
+ }
+ // Verifico se il facilitatore è il creatore di quel servizio
+ if (!this.servizioSqlRepository
+ .findByFacilitatoreAndIdServizio(nuovoCittadinoRequest.getCfUtenteLoggato(), idServizio).isPresent()) {
+ final String messaggioErrore = String.format(
+ "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
+ nuovoCittadinoRequest.getCfUtenteLoggato());
+ throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
+ }
+ final Optional optionalCittadinoDBFetch = this.cittadinoService
+ .getCittadinoByCodiceFiscaleOrNumeroDocumento(
+ nuovoCittadinoRequest.getCodiceFiscaleNonDisponibile(),
+ nuovoCittadinoRequest.getCodiceFiscale(),
+ nuovoCittadinoRequest.getNumeroDocumento());
+ CittadinoEntity cittadino = new CittadinoEntity();
+ if (optionalCittadinoDBFetch.isPresent()) {
+ if (nuovoCittadinoRequest.getNuovoCittadino()) {
+ final String messaggioErrore = String.format(
+ "Cittadino già esistente",
+ optionalCittadinoDBFetch.get().getCodiceFiscale(),
+ optionalCittadinoDBFetch.get().getNumeroDocumento());
+ throw new CittadinoException(messaggioErrore, CodiceErroreEnum.U07);
+ }
+ cittadino = optionalCittadinoDBFetch.get();
+ } else {
+ mapNuovoCittadinoRequestToCittadino(cittadino, nuovoCittadinoRequest);
+ }
+ // verifico se già esiste il cittadino per quel determinato servizio
+ // e in caso affermativo sollevo eccezione
+ if (this.esisteCittadinoByIdServizioAndIdCittadino(idServizio, cittadino.getId())) {
+ final String messaggioErrore = String.format(
+ "Cittadino già esistente sul Servizio con id=%s",
+ cittadino.getCodiceFiscale(),
+ cittadino.getNumeroDocumento(),
+ idServizio);
+ throw new CittadinoException(messaggioErrore, CodiceErroreEnum.U23);
+ }
+ cittadino.setDataOraAggiornamento(new Date());
+ cittadino = cittadinoRepository.save(cittadino);
+ // associo il cittadino al servizio
+ this.associaCittadinoAServizio(idServizio, cittadino);
+
+ // recupero il servizio
+ ServizioEntity servizioDBFetch = servizioSqlService.getServizioById(idServizio);
+
+ if (StatoEnum.NON_ATTIVO.getValue().equals(servizioDBFetch.getStato()))
+ servizioDBFetch.setStato(StatoEnum.ATTIVO.getValue());
+
+ // creo il questionario in stato NON_INVIATO
+ this.creaQuestionarioNonInviato(servizioDBFetch, cittadino);
+
+ return cittadino;
+ }
+
+ private CittadinoEntity mapNuovoCittadinoRequestToCittadino(CittadinoEntity cittadino,
+ NuovoCittadinoServizioRequest nuovoCittadinoRequest) {
+ if (nuovoCittadinoRequest.getCodiceFiscale() != null)
+ cittadino.setCodiceFiscale(nuovoCittadinoRequest.getCodiceFiscale());
+ if (nuovoCittadinoRequest.getNumeroDocumento() != null) {
+ cittadino.setTipoDocumento(nuovoCittadinoRequest.getTipoDocumento());
+ cittadino.setNumeroDocumento(nuovoCittadinoRequest.getNumeroDocumento());
+ }
+ if (fasciaDiEtaRepository.existsById(nuovoCittadinoRequest.getFasciaDiEtaId())) {
+ cittadino.setFasciaDiEta(fasciaDiEtaRepository.getReferenceById(nuovoCittadinoRequest.getFasciaDiEtaId()));
+ }
+ cittadino.setCittadinanza(nuovoCittadinoRequest.getCittadinanza());
+ cittadino.setGenere(nuovoCittadinoRequest.getGenere());
+ cittadino.setDataOraCreazione(new Date());
+ cittadino.setOccupazione(nuovoCittadinoRequest.getStatoOccupazionale());
+ cittadino.setTitoloDiStudio(nuovoCittadinoRequest.getTitoloStudio());
+ cittadino.setProvinciaDiDomicilio(nuovoCittadinoRequest.getProvinciaDiDomicilio());
+ return cittadino;
+ }
+
+ public boolean isCittadinoMaggiorenne(String codiceFiscale) {
+ try {
+ Date dataDiNascita = estraiDataDiNascita(codiceFiscale);
+ return isMaggiorenne(dataDiNascita);
+ } catch (ParseException e) {
+ throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Errore nella data di nascita");
+ }
+ }
+
+ private String decryptFromBase64(String encryptedData) {
+ try {
+ return new String(Base64.getDecoder().decode(encryptedData));
+ } catch (Exception e) {
+ throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Il codice fiscale inviato non è corretto");
+ }
+ }
+
+ private Date estraiDataDiNascita(String codiceFiscaleDecrypted) throws ParseException {
+ boolean isFemmina = codiceFiscaleDecrypted.charAt(9) >= '4';
+ int giornoDiNascita = Integer.parseInt(codiceFiscaleDecrypted.substring(9, 11)) - (isFemmina ? 40 : 0);
+ int secolo = Integer.parseInt(codiceFiscaleDecrypted.substring(6, 8));
+ int annoDiNascita = (secolo <= RANGE_SECOLO) ? 2000 + secolo : 1900 + secolo;
+ Calendar cal = Calendar.getInstance();
+ cal.set(annoDiNascita, mappaMesi.get(String.valueOf(codiceFiscaleDecrypted.charAt(8)).toUpperCase()),
+ giornoDiNascita);
+ return cal.getTime();
+ }
+
+ private boolean isMaggiorenne(Date dataNascita) {
+ Date oggi = new Date();
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(dataNascita);
+ cal.add(Calendar.YEAR, 18);
+ return oggi.after(cal.getTime());
+ }
+
+ public boolean esisteCittadinoByIdServizioAndIdCittadino(@NotNull final Long idServizio,
+ @NotNull final Long idCittadino) {
+ return this.servizioXCittadinoRepository.findCittadinoByIdServizioAndIdCittadino(idServizio, idCittadino) > 0;
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public void associaCittadinoAServizio(@NotNull final Long idServizio, @NotNull final CittadinoEntity cittadino) {
+ ServizioXCittadinoEntity servizioXCittadino = new ServizioXCittadinoEntity();
+ ServizioCittadinoKey key = new ServizioCittadinoKey(cittadino.getId(), idServizio);
+ servizioXCittadino.setId(key);
+ servizioXCittadino.setDataOraAggiornamento(new Date());
+ servizioXCittadino.setDataOraCreazione(new Date());
+ servizioXCittadinoRepository.save(servizioXCittadino);
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public void creaQuestionarioNonInviato(@NotNull final ServizioEntity servizioDBFetch,
+ @NotNull final CittadinoEntity cittadino) {
+
+ // creo il template questionario compilato per Mongo
+ QuestionarioCompilatoCollection questionarioCompilatoCreato = creoQuestionarioCompilatoCollection(
+ cittadino,
+ servizioDBFetch);
+
+ // salvo il questionario compilato su MySql
+ this.salvaQuestionarioCompilatoSql(cittadino, servizioDBFetch, questionarioCompilatoCreato);
+
+ // salvo il questionario Compilato su Mongo
+ this.questionarioCompilatoMongoService.save(questionarioCompilatoCreato);
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public QuestionarioCompilatoCollection creoQuestionarioCompilatoCollection(
+ CittadinoEntity cittadino,
+ ServizioEntity servizio) {
+ final String idQuestionarioTemplateQ3AssociatoAlServizio = servizio.getIdTemplateCompilatoQ3();
+ final Optional SezioneQuestionarioQ3DBFetch = sezioneQ3Respository
+ .findById(idQuestionarioTemplateQ3AssociatoAlServizio);
+
+ if (!SezioneQuestionarioQ3DBFetch.isPresent()) {
+ final String messaggioErrore = String.format(
+ "Servizio con id={} non ha associato templateQ3 con id={} associato. "
+ + "Verifica che il templateQ3 con id={} esiste su MongoDB",
+ servizio.getId(), idQuestionarioTemplateQ3AssociatoAlServizio,
+ idQuestionarioTemplateQ3AssociatoAlServizio);
+ throw new QuestionarioCompilatoException(messaggioErrore, CodiceErroreEnum.QT08);
+ }
+
+ List sezioniQuestionarioTemplateIstanze = new ArrayList<>();
+
+ String jsonStringSezioneQ1 = this.creaSezioneQuestionarioQ1ByCittadino(cittadino);
+
+ // creo questionario compilato inserendo sezione: Q1 (Anagrafica Cittadino), Q3
+ // (Anagrafica Servizio)
+ QuestionarioCompilatoCollection questionarioCompilato = new QuestionarioCompilatoCollection();
+ questionarioCompilato.setIdQuestionarioCompilato(UUID.randomUUID().toString());
+ DatiIstanza q1 = new DatiIstanza();
+ q1.setDomandaRisposta(new JsonObject(jsonStringSezioneQ1));
+
+ String jsonStringSezioneQ2 = this.creaSezioneQuestionarioQ2ByCittadino(cittadino.getId(), servizio.getId());
+ DatiIstanza q2 = new DatiIstanza();
+ q2.setDomandaRisposta(new JsonObject(jsonStringSezioneQ2));
+
+ DatiIstanza q3 = new DatiIstanza();
+ q3.setDomandaRisposta(SezioneQuestionarioQ3DBFetch.get().getSezioneQ3Compilato());
+ sezioniQuestionarioTemplateIstanze.add(q1);
+ sezioniQuestionarioTemplateIstanze.add(q2);
+ sezioniQuestionarioTemplateIstanze.add(q3);
+ questionarioCompilato.setSezioniQuestionarioTemplateIstanze(sezioniQuestionarioTemplateIstanze);
+ questionarioCompilato.setDataOraCreazione(new Date());
+ questionarioCompilato.setDataOraUltimoAggiornamento(new Date());
+
+ return questionarioCompilato;
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public String creaSezioneQuestionarioQ1ByCittadino(@NotNull final CittadinoEntity cittadino) {
+ return String.format(SEZIONE_Q1_TEMPLATE,
+ ID_DOMANDA_CODICE_FISCALE, cittadino.getCodiceFiscale(),
+ ID_DOMANDA_CODICE_FISCALE_NON_DISPONIBILE, cittadino.getCodiceFiscale() == null
+ || cittadino.getCodiceFiscale().isEmpty(),
+ ID_DOMANDA_TIPO_DOCUMENTO, cittadino.getTipoDocumento(),
+ ID_DOMANDA_NUMERO_DOCUMENTO, cittadino.getNumeroDocumento(),
+ ID_DOMANDA_GENERE, cittadino.getGenere(),
+ ID_DOMANDA_FASCIA_DI_ETA, cittadino.getFasciaDiEta().getFascia(),
+ ID_DOMANDA_TITOLO_DI_STUDIO, cittadino.getTitoloDiStudio(),
+ ID_DOMANDA_STATO_OCCUPAZIONALE, cittadino.getOccupazione(),
+ ID_DOMANDA_PROVINCIA, cittadino.getProvinciaDiDomicilio(),
+ ID_DOMANDA_CITTADINANZA, cittadino.getCittadinanza());
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ public String creaSezioneQuestionarioQ2ByCittadino(@NotNull final Long idCittadino,
+ @NotNull final Long idServizio) {
+ Optional primoServizio = servizioSqlService.getPrimoServizioByIdCittadino(idServizio,
+ idCittadino);
+ Boolean esistePrimoServizio = primoServizio.isPresent();
+
+ String tipologiaServiziString = "";
+
+ if (esistePrimoServizio) {
+ List tipologiaServiziList = primoServizio.get().getListaTipologiaServizi();
+
+ if (tipologiaServiziList != null && tipologiaServiziList.size() > 0) {
+ StringBuilder tipologiaServiziStringBuilder = new StringBuilder();
+ tipologiaServiziList.forEach(tipologiaServizio -> {
+ if (tipologiaServizio.getTitolo() != null) {
+ tipologiaServiziStringBuilder.append(tipologiaServizio.getTitolo().concat(", "));
+ }
+ });
+ tipologiaServiziString = tipologiaServiziStringBuilder.substring(0,
+ tipologiaServiziStringBuilder.length() - 2);
+ }
+ }
+ final String jsonStringSezioneQ2 = String.format(SEZIONE_Q2_TEMPLATE,
+ ID_DOMANDA_PRIMA_VOLTA, esistePrimoServizio ? "No" : "Sì",
+ ID_DOMANDA_TIPO_PRIMO_SERVIZIO, esistePrimoServizio ? tipologiaServiziString : "");
+
+ return jsonStringSezioneQ2;
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public void salvaQuestionarioCompilatoSql(
+ @NotNull final CittadinoEntity cittadino,
+ @NotNull final ServizioEntity servizio,
+ @NotNull final QuestionarioCompilatoCollection questionarioCompilatoCollection) {
+ QuestionarioCompilatoEntity questCompilatoMySql;
+ questCompilatoMySql = new QuestionarioCompilatoEntity();
+ questCompilatoMySql.setId(questionarioCompilatoCollection.getIdQuestionarioCompilato());
+ questCompilatoMySql.setDataOraCreazione(new Date());
+ questCompilatoMySql.setCittadino(cittadino);
+ questCompilatoMySql.setDataOraAggiornamento(new Date());
+ questCompilatoMySql.setIdEnte(servizio.getIdEnteSedeProgettoFacilitatore().getIdEnte());
+ questCompilatoMySql.setIdFacilitatore(servizio.getIdEnteSedeProgettoFacilitatore().getIdFacilitatore());
+ questCompilatoMySql.setIdProgetto(servizio.getIdEnteSedeProgettoFacilitatore().getIdProgetto());
+ questCompilatoMySql.setIdSede(servizio.getIdEnteSedeProgettoFacilitatore().getIdSede());
+ questCompilatoMySql.setIdServizio(servizio.getId());
+ questCompilatoMySql.setStato(StatoQuestionarioEnum.NON_COMPILATO.toString());
+ questCompilatoMySql.setIdQuestionarioTemplate(servizio.getIdQuestionarioTemplateSnapshot());
+
+ this.questionarioCompilatoSqlRepository.save(questCompilatoMySql);
+
+ }
+
+ @LogMethod
+ @LogExecutionTime
+ @Transactional(rollbackOn = Exception.class)
+ public List caricaCittadiniSuServizio(MultipartFile fileCittadiniCSV, Long idServizio,
+ String codiceFiscaleUtenteLoggato) {
+ List esiti = new ArrayList<>();
+
+ if (this.servizioSqlService.getServizioById(idServizio) == null) {
+ throw new ServizioException("Servizio con id " + idServizio + " non esistente", CodiceErroreEnum.S09);
+ }
+
+ // Verifico se il facilitatore è il creatore di quel servizio
+ if (!this.servizioSqlRepository.findByFacilitatoreAndIdServizio(codiceFiscaleUtenteLoggato, idServizio)
+ .isPresent()) {
+ final String messaggioErrore = String.format(
+ "Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'",
+ codiceFiscaleUtenteLoggato);
+ throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
+ }
+
+ try {
+ // estraggo i cittadini dal file csv
+ List cittadiniUpload = CSVServizioUtil
+ .excelToCittadini(fileCittadiniCSV.getInputStream());
+ for (CittadinoUploadBean cittadinoUpload : cittadiniUpload) {
+ if (this.checkPassCittadinoUpload(cittadinoUpload)) {
+ Pattern pattern = Pattern.compile(CF_REGX);
+ String cf = cittadinoUpload.getCodiceFiscale();
+ Matcher matcher = pattern.matcher(cf != null ? cf : "");
+ if ((cf != null
+ && !("").equals(cf)
+ && matcher.find())
+ || (cf == null)) {
+ bonificaRecordUpload(cittadinoUpload);
+ Optional optionalCittadinoDBFetch = this.cittadinoService
+ .getByCodiceFiscaleOrNumeroDocumento(cittadinoUpload.getCodiceFiscale(),
+ cittadinoUpload.getNumeroDocumento());
+
+ CittadinoEntity cittadino = new CittadinoEntity();
+ // se il cittadino non esiste già a sistema
+ if (!optionalCittadinoDBFetch.isPresent()) {
+ try {
+ popolaCittadino(cittadino, cittadinoUpload);
+ inserisciCittadino(cittadino, idServizio);
+ cittadinoUpload.setEsito("UPLOAD - OK");
+ } catch (NumberFormatException e) {
+ cittadinoUpload.setEsito("UPLOAD - KO - ANNO DI NASCITA IN FORMATO NON VALIDO");
+ }
+ } else {
+ CittadinoEntity cittadinoDBFetch = optionalCittadinoDBFetch.get();
+ // verifico se già esiste il cittadino per quel determinato servizio
+ // e in caso affermativo aggiungo KO
+ if (this.esisteCittadinoByIdServizioAndIdCittadino(idServizio, cittadinoDBFetch.getId())) {
+ cittadinoUpload.setEsito(String.format(
+ "UPLOAD - KO - CITTADINO GIA' ESISTENTE SUL SERVIZIO",
+ cittadinoDBFetch.getCodiceFiscale(),
+ cittadinoDBFetch.getNumeroDocumento(),
+ idServizio));
+ } else {
+ cittadino.setId(cittadinoDBFetch.getId());
+ try {
+ popolaCittadino(cittadino, cittadinoUpload);
+ inserisciCittadino(cittadino, idServizio);
+ cittadinoUpload.setEsito("UPLOAD - OK");
+ } catch (NumberFormatException e) {
+ cittadinoUpload.setEsito("UPLOAD - KO - ANNO DI NASCITA IN FORMATO NON VALIDO");
+ }
+ }
+ }
+ } else {
+ cittadinoUpload.setEsito("UPLOAD - KO - FORMATO CF NON VALIDO");
+ }
+ }
+ esiti.add(cittadinoUpload);
+ }
+
+ return esiti;
+ } catch (IOException e) {
+ throw new ServizioException("Impossibile effettuare upload lista cittadini", e, CodiceErroreEnum.CIT01);
+ }
+ }
+
+ private boolean checkPassCittadinoUpload(CittadinoUploadBean cittadinoUpload) {
+ final String codiceFiscale = cittadinoUpload.getCodiceFiscale();
+ final String numeroDocumento = cittadinoUpload.getNumeroDocumento();
+ final String tipoDocumento = cittadinoUpload.getTipoDocumento();
+ if ((codiceFiscale == null || "".equals(codiceFiscale.trim())) &&
+ (numeroDocumento == null || "".equals(numeroDocumento.trim())) &&
+ (tipoDocumento == null || "".equals(tipoDocumento.trim()))) {
+ cittadinoUpload.setEsito(
+ "UPLOAD - KO - CODICE FISCALE, NUMERO DOCUMENTO, TIPO DOCUMENTO NON POSSONO ESSERE TUTTI CONTEMPORANEMENTE NON VALORIZZATI");
+ return false;
+ }
+ if (cittadinoUpload.getGenere() == null || "".equals(cittadinoUpload.getGenere().trim())) {
+ cittadinoUpload.setEsito("UPLOAD - KO - GENERE DEVE ESSERE VALORIZZATO");
+ return false;
+ }
+ if (cittadinoUpload.getFasciaDiEtaId() == null || "".equals(cittadinoUpload.getFasciaDiEtaId())) {
+ cittadinoUpload.setEsito("UPLOAD - KO - FASCIA_ETA DEVE ESSERE VALORIZZATO");
+ return false;
+ }
+ if (cittadinoUpload.getTitoloStudio() == null || "".equals(cittadinoUpload.getTitoloStudio().trim())) {
+ cittadinoUpload.setEsito("UPLOAD - KO - TITOLO_STUDIO DEVE ESSERE VALORIZZATO");
+ return false;
+ }
+ if (cittadinoUpload.getStatoOccupazionale() == null
+ || "".equals(cittadinoUpload.getStatoOccupazionale().trim())) {
+ cittadinoUpload.setEsito("UPLOAD - KO - STATO_OCCUPAZIONALE DEVE ESSERE VALORIZZATO");
+ return false;
+ }
+ if (cittadinoUpload.getCittadinanza() == null || "".equals(cittadinoUpload.getCittadinanza().trim())) {
+ cittadinoUpload.setEsito("UPLOAD - KO - CITTADINANZA DEVE ESSERE VALORIZZATO");
+ return false;
+ }
+ return true;
+ }
+
+ private void bonificaRecordUpload(CittadinoUploadBean cittadinoUpload) {
+ if (cittadinoUpload.getFasciaDiEtaId() != null)
+ cittadinoUpload.setFasciaDiEtaId(cittadinoUpload.getFasciaDiEtaId().replace("'", "’"));
+ if (cittadinoUpload.getCittadinanza() != null)
+ cittadinoUpload.setCittadinanza(cittadinoUpload.getCittadinanza().replace("'", "’"));
+ if (cittadinoUpload.getCodiceFiscale() != null)
+ cittadinoUpload.setCodiceFiscale(cittadinoUpload.getCodiceFiscale().replace("'", "’"));
+ if (cittadinoUpload.getGenere() != null)
+ cittadinoUpload.setGenere(cittadinoUpload.getGenere().replace("'", "’"));
+ if (cittadinoUpload.getNumeroDocumento() != null)
+ cittadinoUpload.setNumeroDocumento(cittadinoUpload.getNumeroDocumento().replace("'", "’"));
+ if (cittadinoUpload.getStatoOccupazionale() != null)
+ cittadinoUpload.setStatoOccupazionale(cittadinoUpload.getStatoOccupazionale().replace("'", "’"));
+ if (cittadinoUpload.getTipoDocumento() != null)
+ cittadinoUpload.setTipoDocumento(cittadinoUpload.getTipoDocumento().replace("'", "’"));
+ if (cittadinoUpload.getTitoloStudio() != null)
+ cittadinoUpload.setTitoloStudio(cittadinoUpload.getTitoloStudio().replace("'", "’"));
+ }
+
+ public void inserisciCittadino(CittadinoEntity cittadino, Long idServizio) {
+ cittadino = cittadinoRepository.save(cittadino);
+
+ // associo il cittadino al servizio
+ this.associaCittadinoAServizio(idServizio, cittadino);
+
+ // recupero il servizio
+ ServizioEntity servizioDBFetch = servizioSqlService.getServizioById(idServizio);
+
+ if (StatoEnum.NON_ATTIVO.getValue().equals(servizioDBFetch.getStato())) {
+ servizioDBFetch.setStato(StatoEnum.ATTIVO.getValue());
+ servizioSqlRepository.save(servizioDBFetch);
+ }
+
+ // creo il questionario in stato NON_INVIATO
+ this.creaQuestionarioNonInviato(servizioDBFetch, cittadino);
+
+ }
+
+ public void popolaCittadino(CittadinoEntity cittadino, CittadinoUploadBean cittadinoUpload) {
+ cittadino.setCodiceFiscale(cittadinoUpload.getCodiceFiscale());
+ cittadino.setTipoDocumento(cittadinoUpload.getTipoDocumento());
+ cittadino.setNumeroDocumento(cittadinoUpload.getNumeroDocumento());
+ cittadino.setDataOraCreazione(new Date());
+ cittadino.setDataOraAggiornamento(new Date());
+
+ cittadino
+ .setFasciaDiEta(fasciaDiEtaRepository.findById(Long.valueOf(cittadinoUpload.getFasciaDiEtaId())).get());
+ cittadino.setCittadinanza(cittadinoUpload.getCittadinanza());
+ cittadino.setGenere(cittadinoUpload.getGenere());
+ cittadino.setOccupazione(cittadinoUpload.getStatoOccupazionale());
+ cittadino.setTitoloDiStudio(cittadinoUpload.getTitoloStudio());
+ }
+
+ /*
+ * @LogMethod
+ *
+ * @LogExecutionTime
+ * public void inviaQuestionario(@NotNull final String idQuestionario, @NotNull
+ * final Long idCittadino) {
+ * QuestionarioCompilatoEntity questionarioCompilato =
+ * questionarioCompilatoSqlRepository.findById(idQuestionario)
+ * .orElseThrow(() -> new ServizioException("id questionario inesistente",
+ * CodiceErroreEnum.Q01) );
+ * CittadinoEntity cittadino = questionarioCompilato.getCittadino();
+ *
+ * if(cittadino == null || !idCittadino.equals(cittadino.getId())) {
+ * throw new ServizioException("coppia cittadino - id questionario inesistente",
+ * CodiceErroreEnum.Q01);
+ * }
+ * inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(idQuestionario,
+ * questionarioCompilato, cittadino);
+ * }
+ */
+
+ /*
+ * @LogMethod
+ *
+ * @LogExecutionTime
+ *
+ * @Transactional(rollbackOn = Exception.class)
+ * public void inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(
+ * final String idQuestionario,
+ * QuestionarioCompilatoEntity questionarioCompilato,
+ * CittadinoEntity cittadino) {
+ * if(questionarioCompilato.getStato().equals(StatoQuestionarioEnum.COMPILATO.
+ * getValue()))
+ * throw new ServizioException("Il questionario risulta già compilato",
+ * CodiceErroreEnum.Q02);
+ * //inviaLinkAnonimo(cittadino,idQuestionario);
+ * questionarioCompilato.setStato(StatoQuestionarioEnum.INVIATO.getValue());
+ * questionarioCompilatoSqlRepository.save(questionarioCompilato);
+ * }
+ */
+
+ /*
+ * @LogMethod
+ *
+ * @LogExecutionTime
+ *
+ * @Transactional(rollbackOn = Exception.class)
+ * public void inviaLinkAnonimo(CittadinoEntity cittadino,String idQuestionario)
+ * {
+ * new Thread( () -> {
+ * try {
+ * String token = this.generaToken(cittadino, idQuestionario);
+ * //recuper nome e data servizio
+ * ServizioEntity servizio =
+ * servizioSqlRepository.findServizioByQuestionarioCompilato(idQuestionario).get
+ * ();
+ * SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+ * String[] argsTemplate = new String[] { cittadino.getNome(),
+ * servizio.getNome(), sdf.format(servizio.getDataServizio()), idQuestionario,
+ * token};
+ *
+ * // stacco un thread per invio email
+ * this.emailService.inviaEmail(
+ * cittadino.getEmail(),
+ * EmailTemplateEnum.QUESTIONARIO_ONLINE,
+ * argsTemplate
+ * );
+ * } catch(Exception ex) {
+ * log.error("Impossibile inviare la mail al cittadino con id={}.",
+ * cittadino.getId());
+ * log.error("{}", ex);
+ * throw new ServizioException("Impossibile inviare la mail", ex,
+ * CodiceErroreEnum.E01);
+ * }
+ * }).start();
+ * }
+ */
+
+ @Transactional(rollbackOn = Exception.class)
+ @LogMethod
+ @LogExecutionTime
+ public String generaToken(CittadinoEntity cittadino, String idQuestionarioCompilato) {
+ // Recupera QuestionarioInviato a partire dal questionario compialato e codice
+ // fiscale/numDocumento cittadino se esiste.
+ // Altrimenti crea un QuestionarioInviato ex-novo
+ QuestionarioInviatoOnlineEntity invioQuestionario = questionarioInviatoOnlineRepository
+ .findByIdQuestionarioCompilatoAndCodiceFiscale(idQuestionarioCompilato, cittadino.getCodiceFiscale())
+ .orElse(null);
+
+ if (invioQuestionario == null) {
+ invioQuestionario = questionarioInviatoOnlineRepository
+ .findByIdQuestionarioCompilatoAndNumDocumento(idQuestionarioCompilato,
+ cittadino.getNumeroDocumento())
+ .orElse(new QuestionarioInviatoOnlineEntity());
+ }
+
+ invioQuestionario.setCodiceFiscale(cittadino.getCodiceFiscale());
+ invioQuestionario.setNumDocumento(cittadino.getNumeroDocumento());
+ invioQuestionario.setIdQuestionarioCompilato(idQuestionarioCompilato);
+
+ String token = UUID.randomUUID().toString();
+ invioQuestionario.setToken(token);
+ invioQuestionario.setDataOraCreazione(new Date());
+
+ questionarioInviatoOnlineRepository.save(invioQuestionario);
+
+ return token;
+ }
+
+ /*
+ * @Transactional
+ *
+ * @LogMethod
+ *
+ * @LogExecutionTime
+ * public void inviaQuestionarioATuttiCittadiniNonAncoraInviatoByServizio(Long
+ * idServizio, String codiceFiscaleUtenteLoggato)
+ * {
+ * // Verifico se il facilitatore è il creatore di quel servizio
+ * if( !this.servizioSqlRepository.findByFacilitatoreAndIdServizio(
+ * codiceFiscaleUtenteLoggato, idServizio).isPresent() ) {
+ * final String messaggioErrore = String.
+ * format("Servizio non accessibile per l'utente con codice fiscale '%s in quanto non risulta il creatore del servizio'"
+ * ,codiceFiscaleUtenteLoggato);
+ * throw new ServizioException(messaggioErrore, CodiceErroreEnum.A02);
+ * }
+ *
+ * // recupero tutti i questionari compilati con STATO = NON INVIATO per quel
+ * servizio
+ * List questionarioCompilatoList =
+ * this.questionarioCompilatoSqlRepository.findByIdServizioAndStato(idServizio,
+ * StatoQuestionarioEnum.NON_INVIATO.toString());
+ *
+ * questionarioCompilatoList
+ * .stream()
+ * .forEach(questionarioCompilato -> {
+ * String idQuestionarioCompilato = questionarioCompilato.getId();
+ * CittadinoEntity cittadinoAssociatoQuestionarioCompilato =
+ * questionarioCompilato.getCittadino();
+ * this.inviaLinkAnonimoAndAggiornaStatoQuestionarioCompilato(
+ * idQuestionarioCompilato, questionarioCompilato,
+ * cittadinoAssociatoQuestionarioCompilato);
+ * });
+ * }
+ */
+
+ public boolean checkPermessoIdQuestionarioCompilato(SceltaProfiloParam sceltaProfilo, String idQuestionario) {
+ switch (sceltaProfilo.getCodiceRuoloUtenteLoggato()) {
+ case "FAC":
+ case "VOL":
+ Long servizioId = questionarioCompilatoSqlRepository.findById(idQuestionario).get().getIdServizio();
+ return servizioSqlRepository.findById(servizioId).get().getIdEnteSedeProgettoFacilitatore()
+ .getIdFacilitatore().equals(sceltaProfilo.getCfUtenteLoggato());
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/QuestionarioCompilatoService.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/QuestionarioCompilatoService.java
index 2aeee5bfa..7b2ec6d74 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/QuestionarioCompilatoService.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/QuestionarioCompilatoService.java
@@ -70,7 +70,7 @@ public QuestionarioCompilatoCollection getQuestionarioCompilatoById(
.orElseThrow(() -> new ResourceNotFoundException(messaggioErrore, CodiceErroreEnum.C01));
}
- public void invioEmail(){
+ public void invioEmail() {
String[] argomenti = new String[0];
emailService.inviaEmail("indirizzo@email.com", EmailTemplateEnum.CONSENSO, argomenti);
}
@@ -156,9 +156,10 @@ public void compilaQuestionario(
@LogMethod
@LogExecutionTime
public void valorizzaIPrimiTreQuestionari(String idQuestionario,
- QuestionarioCompilatoRequest questionarioCompilatoRequest) {
+ QuestionarioCompilatoRequest questionarioCompilatoRequest) {
QuestionarioCompilatoCollection questionarioCompilatoCollection = getQuestionarioCompilatoById(idQuestionario);
- QuestionarioCompilatoCollection.DatiIstanza dato = questionarioCompilatoCollection.getSezioniQuestionarioTemplateIstanze().get(0);
+ QuestionarioCompilatoCollection.DatiIstanza dato = questionarioCompilatoCollection
+ .getSezioniQuestionarioTemplateIstanze().get(0);
questionarioCompilatoRequest.setSezioneQ1Questionario(dato.getDomandaRisposta().toString());
dato = questionarioCompilatoCollection.getSezioniQuestionarioTemplateIstanze().get(1);
questionarioCompilatoRequest.setSezioneQ2Questionario(dato.getDomandaRisposta().toString());
diff --git a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ServizioSqlService.java b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ServizioSqlService.java
index df83363b7..6187799ae 100644
--- a/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ServizioSqlService.java
+++ b/ms-questionario-cittadino/src/main/java/it/pa/repdgt/surveymgmt/service/ServizioSqlService.java
@@ -49,7 +49,7 @@ public class ServizioSqlService {
private TipologiaServizioRepository tipologiaServizioRepository;
@Autowired
private RuoloService ruoloService;
-
+
@LogMethod
@LogExecutionTime
public ServizioEntity getServizioById(@NotNull Long idServizio) {
@@ -57,67 +57,78 @@ public ServizioEntity getServizioById(@NotNull Long idServizio) {
return this.servizioSqlRepository.findById(idServizio)
.orElseThrow(() -> new ResourceNotFoundException(messaggioErrore, CodiceErroreEnum.C01));
}
-
+
/**
* Recupero tutti i servizi sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
- *
- * */
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
+ *
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByFiltro(
- final String criterioRicercaServizio,
+ final String criterioRicercaServizio,
final List tipologieServizi,
final List statiServizioFiltro) {
return this.servizioSqlRepository.findAllServiziByFiltro(
criterioRicercaServizio,
tipologieServizi,
- statiServizioFiltro
- );
+ statiServizioFiltro);
}
/**
- * Recupero solo i servizi associati a programmi con policy SCD sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
+ * Recupero solo i servizi associati a programmi con policy SCD sulla base dei
+ * filtri in input
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
*
- * */
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByPolicySCDAndFiltro(
final String criterioRicercaServizio,
- final List tipologieServizi,
+ final List tipologieServizi,
final List statiServizioFiltro) {
return this.servizioSqlRepository.findAllServiziByPolicySCDAndFiltro(
criterioRicercaServizio,
tipologieServizi,
- statiServizioFiltro
- );
+ statiServizioFiltro);
}
-
+
/**
- * Recupero solo i servizi dell'utente profilatosi come facilitatore/volontario sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
+ * Recupero solo i servizi dell'utente profilatosi come facilitatore/volontario
+ * sulla base dei filtri in input
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
* Nota:
- * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente facilitatore si è profilato
- * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente facilitatore si è profilato
- *
- * */
+ * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente
+ * facilitatore si è profilato
+ * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente facilitatore
+ * si è profilato
+ *
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByFacilitatoreOVolontarioAndFiltro(
final String criterioRicercaServizio,
- @NotEmpty final List idsProgrammaFiltro,
- @NotEmpty final List idsProgettoFiltro,
+ @NotEmpty final List idsProgrammaFiltro,
+ @NotEmpty final List idsProgettoFiltro,
final Long idEnte,
final List tipologieServizi,
final List statiServizioFiltro,
- final String codiceFiscaleUtente ) {
+ final String codiceFiscaleUtente) {
return this.servizioSqlRepository.findAllServiziByFacilitatoreOVolontarioAndFiltro(
criterioRicercaServizio,
idsProgrammaFiltro,
@@ -125,130 +136,147 @@ public List getAllServiziByFacilitatoreOVolontarioAndFiltro(
idEnte,
tipologieServizi,
statiServizioFiltro,
- codiceFiscaleUtente
- );
+ codiceFiscaleUtente);
}
/**
- * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato dell' ente getsore di programma sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
- *
+ * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato dell'
+ * ente getsore di programma sulla base dei filtri in input
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
+ *
* Nota:
- * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente referente/delegato dell'ente gestore di programma si è profilato
- *
- * */
+ * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente
+ * referente/delegato dell'ente gestore di programma si è profilato
+ *
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByReferenteODelegatoGestoreProgrammaAndFiltro(
final String criterioRicercaServizio,
- @NotEmpty final List idsProgrammaFiltro,
+ @NotEmpty final List idsProgrammaFiltro,
final List tipologieServizi,
- final List statiServizioFiltro ) {
+ final List statiServizioFiltro) {
return this.servizioSqlRepository.findAllServiziByReferenteODelegatoGestoreProgrammaAndFiltro(
criterioRicercaServizio,
idsProgrammaFiltro,
tipologieServizi,
- statiServizioFiltro
- );
+ statiServizioFiltro);
}
-
+
/**
- * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato dell'ente gestore di progetto sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
- *
+ * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato
+ * dell'ente gestore di progetto sulla base dei filtri in input
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
+ *
* Nota:
- * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente referente/delegato dell'ente gestore di progetto si è profilato
- * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente referente/delegato dell'ente gestore di progetto si è profilato
- *
- * */
+ * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente
+ * referente/delegato dell'ente gestore di progetto si è profilato
+ * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente
+ * referente/delegato dell'ente gestore di progetto si è profilato
+ *
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByReferenteODelegatoGestoreProgettoAndFiltro(
final String criterioRicercaServizio,
- @NotEmpty final List idsProgrammaFiltro,
- @NotEmpty final List idsProgettoFiltro,
+ @NotEmpty final List idsProgrammaFiltro,
+ @NotEmpty final List idsProgettoFiltro,
final List tipologieServizi,
- final List statiServizioFiltro ) {
+ final List statiServizioFiltro) {
return this.servizioSqlRepository.findAllServiziByReferenteODelegatoGestoreProgettoAndFiltro(
criterioRicercaServizio,
idsProgrammaFiltro,
idsProgettoFiltro,
tipologieServizi,
- statiServizioFiltro
- );
+ statiServizioFiltro);
}
/**
- * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato ente partner dell'ente gestore di progetto sulla base dei filtri in input
- * - criterioRicercaServizio - filtro della barra di ricerca nella sezione Servizi
- * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown della sezione Servizi
- * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon nella sezione Servizi
- *
+ * Recupero solo i servizi dell'utente profilatosi come Referente/Delegato ente
+ * partner dell'ente gestore di progetto sulla base dei filtri in input
+ * - criterioRicercaServizio - filtro della barra di ricerca nella sezione
+ * Servizi
+ * - tipologieServizi - tipologie servizio da filtrare scelti nella dropdown
+ * della sezione Servizi
+ * - statiServizioFiltro - stati serivizio da filtrare scelto nella dropdwon
+ * nella sezione Servizi
+ *
* Nota:
- * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente referente/delegato dell'ente partner si è profilato
- * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente referente/delegato dell'ente partner si è profilato
- *
- * */
+ * - idsProgrammaFiltro - conterrà l'unico programma con cui l'utente
+ * referente/delegato dell'ente partner si è profilato
+ * - idsProgettoFiltro - conterrà l'unico progetto con cui l'utente
+ * referente/delegato dell'ente partner si è profilato
+ *
+ */
@LogMethod
@LogExecutionTime
public List getAllServiziByReferenteODelegatoEntePartnerAndFiltro(
final String criterioRicercaServizio,
- @NotEmpty final List idsProgrammaFiltro,
+ @NotEmpty final List idsProgrammaFiltro,
@NotEmpty final List idsProgettoFiltro,
final Long idEnte,
final List tipologieServizi,
- final List statiServizioFiltro ) {
+ final List statiServizioFiltro) {
return this.servizioSqlRepository.findAllServiziByReferenteODelegatoEntePartnerAndFiltro(
criterioRicercaServizio,
idsProgrammaFiltro,
idsProgettoFiltro,
idEnte,
tipologieServizi,
- statiServizioFiltro
- );
+ statiServizioFiltro);
}
-
+
@LogMethod
@LogExecutionTime
@Transactional(rollbackOn = Exception.class)
public ServizioEntity salvaServizio(
@NotNull final ServizioRequest servizioRequest,
- @NotBlank final String idSezioneQ3Compilato ) {
+ @NotBlank final String idSezioneQ3Compilato) {
final ServizioEntity servizioEntity = this.creaServizio(servizioRequest, idSezioneQ3Compilato);
return this.servizioSqlRepository.save(servizioEntity);
}
-
+
@LogMethod
@LogExecutionTime
public ServizioEntity creaServizio(
@NotNull final ServizioRequest servizioRequest,
@NotNull final String idSezioneQ3Compilato) {
final Long idProgramma = servizioRequest.getIdProgramma();
-
+
// Recupero id template questionario associato al programma
- final List listaProgrammaXQuestionario = this.programmaXQuestionarioTemplateService.getByIdProgramma(idProgramma);
- if( listaProgrammaXQuestionario.isEmpty() ) {
- final String messaggioErrore = String.format("Impossibile creare servizio. Nessun questionario template associato al programma con id '%s'", idProgramma);
+ final List listaProgrammaXQuestionario = this.programmaXQuestionarioTemplateService
+ .getByIdProgramma(idProgramma);
+ if (listaProgrammaXQuestionario.isEmpty()) {
+ final String messaggioErrore = String.format(
+ "Impossibile creare servizio. Nessun questionario template associato al programma con id '%s'",
+ idProgramma);
throw new ServizioException(messaggioErrore, CodiceErroreEnum.S04);
}
-
+
final String idQuestinarioTemplate = listaProgrammaXQuestionario
- .get(0)
- .getProgrammaXQuestionarioTemplateKey()
- .getIdQuestionarioTemplate();
-
+ .get(0)
+ .getProgrammaXQuestionarioTemplateKey()
+ .getIdQuestionarioTemplate();
+
// Recupero ESP_FACILITATORE
final EnteSedeProgettoFacilitatoreKey idEnteSedeProgettoFacilitatore = new EnteSedeProgettoFacilitatoreKey();
idEnteSedeProgettoFacilitatore.setIdEnte(servizioRequest.getIdEnteServizio());
idEnteSedeProgettoFacilitatore.setIdSede(servizioRequest.getIdSedeServizio());
idEnteSedeProgettoFacilitatore.setIdProgetto(servizioRequest.getIdProgetto());
idEnteSedeProgettoFacilitatore.setIdFacilitatore(servizioRequest.getCfUtenteLoggato());
- final EnteSedeProgettoFacilitatoreEntity enteSedeProgettoFacilitatore = this.enteSedeProgettoFacilitatoreService.getById(idEnteSedeProgettoFacilitatore);
-
+ final EnteSedeProgettoFacilitatoreEntity enteSedeProgettoFacilitatore = this.enteSedeProgettoFacilitatoreService
+ .getById(idEnteSedeProgettoFacilitatore);
+
final ServizioEntity servizioEntity = new ServizioEntity();
servizioEntity.setNome(servizioRequest.getNomeServizio());
servizioEntity.setDataServizio(servizioRequest.getDataServizio());
@@ -260,19 +288,19 @@ public ServizioEntity creaServizio(
servizioEntity.setDataOraAggiornamento(servizioEntity.getDataOraCreazione());
servizioEntity.setStato(StatoEnum.NON_ATTIVO.getValue());
servizioEntity.setTipologiaServizio(String.join(", ", servizioRequest.getListaTipologiaServizi()));
-
+
final List listaTitoloTipologiaServizi = servizioRequest.getListaTipologiaServizi();
-
+
final List listaTipologiaServizi = new ArrayList<>();
listaTitoloTipologiaServizi
- .stream()
- .forEach(titoloTiplogiaServizio -> {
- TipologiaServizioEntity tipologiaServizio = new TipologiaServizioEntity();
- tipologiaServizio.setTitolo(titoloTiplogiaServizio);
- tipologiaServizio.setDataOraCreazione(new Date());
- tipologiaServizio.setServizio(servizioEntity);
- listaTipologiaServizi.add(tipologiaServizio);
- });
+ .stream()
+ .forEach(titoloTiplogiaServizio -> {
+ TipologiaServizioEntity tipologiaServizio = new TipologiaServizioEntity();
+ tipologiaServizio.setTitolo(titoloTiplogiaServizio);
+ tipologiaServizio.setDataOraCreazione(new Date());
+ tipologiaServizio.setServizio(servizioEntity);
+ listaTipologiaServizi.add(tipologiaServizio);
+ });
servizioEntity.setListaTipologiaServizi(listaTipologiaServizi);
return servizioEntity;
}
@@ -281,15 +309,14 @@ public ServizioEntity creaServizio(
@LogExecutionTime
@Transactional(rollbackOn = Exception.class)
public ServizioEntity aggiornaServizio(
- @NotNull final Long idServizio,
+ @NotNull final Long idServizio,
@NotNull final @Valid ServizioRequest servizioDaAggiornareRequest) {
final EnteSedeProgettoFacilitatoreKey enteSedeProgettoFacilitatoreAggiornato = new EnteSedeProgettoFacilitatoreKey(
- servizioDaAggiornareRequest.getIdEnteServizio(),
- servizioDaAggiornareRequest.getIdSedeServizio(),
- servizioDaAggiornareRequest.getIdProgetto(),
- servizioDaAggiornareRequest.getCfUtenteLoggato()
- );
-
+ servizioDaAggiornareRequest.getIdEnteServizio(),
+ servizioDaAggiornareRequest.getIdSedeServizio(),
+ servizioDaAggiornareRequest.getIdProgetto(),
+ servizioDaAggiornareRequest.getCfUtenteLoggato());
+
this.enteSedeProgettoFacilitatoreService.getById(enteSedeProgettoFacilitatoreAggiornato);
// Recupero servizio in MySql a partire dall'id e
@@ -297,55 +324,58 @@ public ServizioEntity aggiornaServizio(
final ServizioEntity servizioFecthDB = this.getServizioById(idServizio);
servizioFecthDB.setNome(servizioDaAggiornareRequest.getNomeServizio());
servizioFecthDB.setDataServizio(servizioDaAggiornareRequest.getDataServizio());
-
+
final List listaTitoloTipologiaServizi = servizioDaAggiornareRequest.getListaTipologiaServizi();
-
+
final List listaTipologiaServizi = new ArrayList<>();
listaTitoloTipologiaServizi
- .stream()
- .forEach(titoloTipologiaServizio -> {
- TipologiaServizioEntity tipologiaServizio = new TipologiaServizioEntity();
- tipologiaServizio.setTitolo(titoloTipologiaServizio);
- if(this.tipologiaServizioRepository.findByTitoloAndServizioId(titoloTipologiaServizio, idServizio).isPresent()) {
- TipologiaServizioEntity tipologiaServizioFetchDb = this.tipologiaServizioRepository.findByTitoloAndServizioId(titoloTipologiaServizio, idServizio).get();
- tipologiaServizio.setDataOraCreazione(tipologiaServizioFetchDb.getDataOraCreazione());
- }else {
- tipologiaServizio.setDataOraCreazione(new Date());
- }
- tipologiaServizio.setDataOraAggiornamento(new Date());
- tipologiaServizio.setServizio(servizioFecthDB);
- listaTipologiaServizi.add(tipologiaServizio);
- });
+ .stream()
+ .forEach(titoloTipologiaServizio -> {
+ TipologiaServizioEntity tipologiaServizio = new TipologiaServizioEntity();
+ tipologiaServizio.setTitolo(titoloTipologiaServizio);
+ if (this.tipologiaServizioRepository.findByTitoloAndServizioId(titoloTipologiaServizio, idServizio)
+ .isPresent()) {
+ TipologiaServizioEntity tipologiaServizioFetchDb = this.tipologiaServizioRepository
+ .findByTitoloAndServizioId(titoloTipologiaServizio, idServizio).get();
+ tipologiaServizio.setDataOraCreazione(tipologiaServizioFetchDb.getDataOraCreazione());
+ } else {
+ tipologiaServizio.setDataOraCreazione(new Date());
+ }
+ tipologiaServizio.setDataOraAggiornamento(new Date());
+ tipologiaServizio.setServizio(servizioFecthDB);
+ listaTipologiaServizi.add(tipologiaServizio);
+ });
this.tipologiaServizioRepository.deleteByIdServizio(idServizio);
-
+
servizioFecthDB.setListaTipologiaServizi(listaTipologiaServizi);
servizioFecthDB.setIdEnteSedeProgettoFacilitatore(enteSedeProgettoFacilitatoreAggiornato);
servizioFecthDB.setDataOraAggiornamento(new Date());
servizioFecthDB.setTipologiaServizio(String.join(", ", servizioDaAggiornareRequest.getListaTipologiaServizi()));
return this.servizioSqlRepository.save(servizioFecthDB);
}
-
+
@LogMethod
@LogExecutionTime
public List getEntiByFacilitatore(SceltaProfiloParam profilazioneParam) {
final String codiceFiscaleUtenteLoggato = profilazioneParam.getCfUtenteLoggato();
final String codiceRuoloUtenteLoggato = profilazioneParam.getCodiceRuoloUtenteLoggato().toString();
-
+
// Verifico se l'utente possiede il ruolo mandato nella richiesta
boolean hasRuoloUtente = this.ruoloService
- .getRuoliByCodiceFiscale(codiceFiscaleUtenteLoggato)
- .stream()
- .anyMatch(ruolo -> codiceRuoloUtenteLoggato.equalsIgnoreCase(ruolo.getCodice()));
-
- if(!hasRuoloUtente
+ .getRuoliByCodiceFiscale(codiceFiscaleUtenteLoggato)
+ .stream()
+ .anyMatch(ruolo -> codiceRuoloUtenteLoggato.equalsIgnoreCase(ruolo.getCodice()));
+
+ if (!hasRuoloUtente
|| (!codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.FACILITATORE) &&
- !codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.VOLONTARIO) )) {
- final String messaggioErrore = String.format("Ruolo non definito per l'utente con codice fiscale '%s'.\nOppure l'utente non è un FACILITATORE/VOLONTARIO",
+ !codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.VOLONTARIO))) {
+ final String messaggioErrore = String.format(
+ "Ruolo non definito per l'utente con codice fiscale '%s'.\nOppure l'utente non è un FACILITATORE/VOLONTARIO",
codiceFiscaleUtenteLoggato);
throw new QuestionarioTemplateException(messaggioErrore, CodiceErroreEnum.U06);
}
-
+
return this.enteSedeProgettoFacilitatoreService.getEntiByFacilitatore(profilazioneParam);
}
@@ -354,21 +384,22 @@ public List getEntiByFacilitatore(SceltaProfiloParam profilazion
public List getSediByFacilitatore(SceltaProfiloParam profilazioneParam) {
final String codiceFiscaleUtenteLoggato = profilazioneParam.getCfUtenteLoggato();
final String codiceRuoloUtenteLoggato = profilazioneParam.getCodiceRuoloUtenteLoggato().toString();
-
+
// Verifico se l'utente possiede il ruolo mandato nella richiesta
boolean hasRuoloUtente = this.ruoloService
- .getRuoliByCodiceFiscale(codiceFiscaleUtenteLoggato)
- .stream()
- .anyMatch(ruolo -> codiceRuoloUtenteLoggato.equalsIgnoreCase(ruolo.getCodice()));
+ .getRuoliByCodiceFiscale(codiceFiscaleUtenteLoggato)
+ .stream()
+ .anyMatch(ruolo -> codiceRuoloUtenteLoggato.equalsIgnoreCase(ruolo.getCodice()));
- if(!hasRuoloUtente
+ if (!hasRuoloUtente
|| (!codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.FACILITATORE) &&
- !codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.VOLONTARIO) )) {
- final String messaggioErrore = String.format("Ruolo non definito per l'utente con codice fiscale '%s'.\nOppure l'utente non è un FACILITATORE/VOLONTARIO",
+ !codiceRuoloUtenteLoggato.equalsIgnoreCase(RuoliUtentiConstants.VOLONTARIO))) {
+ final String messaggioErrore = String.format(
+ "Ruolo non definito per l'utente con codice fiscale '%s'.\nOppure l'utente non è un FACILITATORE/VOLONTARIO",
codiceFiscaleUtenteLoggato);
throw new QuestionarioTemplateException(messaggioErrore, CodiceErroreEnum.U06);
}
-
+
return this.enteSedeProgettoFacilitatoreService.getSediByFacilitatore(profilazioneParam);
}
@@ -377,7 +408,7 @@ public List getSediByFacilitatore(SceltaProfiloParam profilazion
public void cancellaServivio(@NotNull final ServizioEntity servizioEntity) {
this.servizioSqlRepository.delete(servizioEntity);
}
-
+
@LogMethod
@LogExecutionTime
public Optional getPrimoServizioByIdCittadino(@NotNull Long idServizio, @NotNull Long idCittadino) {
@@ -387,31 +418,35 @@ public Optional getPrimoServizioByIdCittadino(@NotNull Long idSe
@LogMethod
@LogExecutionTime
public String getNominativoFacilitatoreByIdFacilitatoreAndIdServizio(String idFacilitatore, Long idServizio) {
- return this.servizioSqlRepository.findNominativoFacilitatoreByIdFacilitatoreAndIdServizio(idFacilitatore, idServizio);
+ return this.servizioSqlRepository.findNominativoFacilitatoreByIdFacilitatoreAndIdServizio(idFacilitatore,
+ idServizio);
}
public Optional getServizioByNome(String nomeServizio) {
return this.servizioSqlRepository.findByNome(nomeServizio);
}
-
+
public Optional getServizioByNomeUpdate(String nomeServizio, Long idServizio) {
return this.servizioSqlRepository.findByNomeUpdate(nomeServizio, idServizio);
}
public List getIdsSediFacilitatoreConServiziAndCittadiniCensitiByCodFiscaleAndIdProgettoAndIdEnte(
String codiceFiscaleUtenteLoggato, Long idProgetto, Long idEnte) {
- return servizioSqlRepository.findIdsSediFacilitatoreConServiziAndCittadiniCensitiByCodFiscaleAndIdProgettoAndIdEnte(codiceFiscaleUtenteLoggato, idProgetto, idEnte);
+ return servizioSqlRepository
+ .findIdsSediFacilitatoreConServiziAndCittadiniCensitiByCodFiscaleAndIdProgettoAndIdEnte(
+ codiceFiscaleUtenteLoggato, idProgetto, idEnte);
}
public int isServizioAssociatoAUtenteProgettoEnte(@NotNull Long idServizio, Long idProgetto, Long idEnte,
@NotNull String cfUtenteLoggato) {
- return servizioSqlRepository.isServizioAssociatoAUtenteProgettoEnte(idServizio, idProgetto, idEnte, cfUtenteLoggato);
+ return servizioSqlRepository.isServizioAssociatoAUtenteProgettoEnte(idServizio, idProgetto, idEnte,
+ cfUtenteLoggato);
}
-
+
public int isServizioAssociatoARegpDegp(@NotNull Long idServizio, Long idProgetto) {
return servizioSqlRepository.isServizioAssociatoARegpDegp(idServizio, idProgetto);
}
-
+
public int isServizioAssociatoAReppDepp(@NotNull Long idServizio, Long idProgetto, Long idEnte) {
return servizioSqlRepository.isServizioAssociatoAReppDepp(idServizio, idProgetto, idEnte);
}