Skip to content

Commit 7ad6933

Browse files
Merge pull request #13330 from SORMAS-Foundation/13325-survey-token-code-not-appearing-in-body-of-email
13325 survey token code not appearing in body of email
2 parents 3d4d6ff + 208d762 commit 7ad6933

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/survey/SurveyTokenCriteria.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package de.symeda.sormas.api.survey;
1717

1818
import de.symeda.sormas.api.caze.CaseReferenceDto;
19+
import de.symeda.sormas.api.document.DocumentReferenceDto;
1920
import de.symeda.sormas.api.utils.IgnoreForUrl;
2021
import de.symeda.sormas.api.utils.criteria.BaseCriteria;
2122

@@ -33,6 +34,7 @@ public class SurveyTokenCriteria extends BaseCriteria {
3334
private CaseReferenceDto caseAssignedTo;
3435
private Boolean responseReceived;
3536
private Boolean tokenNotAssigned;
37+
private DocumentReferenceDto document;
3638

3739
@IgnoreForUrl
3840
public SurveyReferenceDto getSurvey() {
@@ -97,4 +99,17 @@ public Boolean getTokenNotAssigned() {
9799
public void setTokenNotAssigned(Boolean tokenNotAssigned) {
98100
this.tokenNotAssigned = tokenNotAssigned;
99101
}
102+
103+
public SurveyTokenCriteria document(DocumentReferenceDto document) {
104+
setDocument(document);
105+
return this;
106+
}
107+
108+
public DocumentReferenceDto getDocument() {
109+
return document;
110+
}
111+
112+
public void setDocument(DocumentReferenceDto document) {
113+
this.document = document;
114+
}
100115
}

sormas-backend/src/main/java/de/symeda/sormas/backend/externalemail/ExternalEmailFacadeEjb.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.HashMap;
2929
import java.util.List;
3030
import java.util.Map;
31+
import java.util.Properties;
3132
import java.util.Set;
3233
import java.util.stream.Collectors;
3334

@@ -38,6 +39,7 @@
3839
import javax.mail.MessagingException;
3940
import javax.validation.Valid;
4041

42+
import de.symeda.sormas.api.survey.SurveyTokenCriteria;
4143
import org.apache.commons.collections4.CollectionUtils;
4244
import org.apache.commons.io.FileUtils;
4345
import org.apache.commons.lang3.StringUtils;
@@ -102,6 +104,8 @@
102104
import de.symeda.sormas.backend.manualmessagelog.ManualMessageLogService;
103105
import de.symeda.sormas.backend.person.Person;
104106
import de.symeda.sormas.backend.person.PersonService;
107+
import de.symeda.sormas.backend.survey.SurveyToken;
108+
import de.symeda.sormas.backend.survey.SurveyTokenService;
105109
import de.symeda.sormas.backend.travelentry.services.TravelEntryService;
106110
import de.symeda.sormas.backend.user.User;
107111
import de.symeda.sormas.backend.user.UserService;
@@ -111,6 +115,7 @@ public class ExternalEmailFacadeEjb implements ExternalEmailFacade {
111115

112116
private static final Logger logger = LoggerFactory.getLogger(ExternalEmailFacadeEjb.class);
113117
public static final int ATTACHMENT_PASSWORD_LENGTH = 10;
118+
private static final String SURVEY_TOKEN_DOCUMENT_PLACEHOLDER = "surveyToken";
114119
// @formatter:off
115120
private static final Map<DocumentWorkflow, DocumentRelatedEntityType> DOCUMENT_WORKFLOW_DOCUMENT_RELATION_MAPPING = Map.of(
116121
DocumentWorkflow.CASE_EMAIL, DocumentRelatedEntityType.CASE,
@@ -158,6 +163,8 @@ public class ExternalEmailFacadeEjb implements ExternalEmailFacade {
158163
private ManualMessageLogService manualMessageLogService;
159164
@EJB
160165
private DocGenerationHelper docGenerationHelper;
166+
@EJB
167+
private SurveyTokenService surveyTokenService;
161168

162169
@Override
163170
public List<DocumentTemplateDto> getTemplates(DocumentWorkflow documentWorkflow) {
@@ -235,7 +242,22 @@ private void sendEmail(@Valid ExternalEmailOptionsDto options, boolean onlyLinke
235242
emailAttachments = attachmentService.createEncryptedPdfs(filesToBeEncryped, password);
236243
}
237244

238-
String generatedText = documentTemplateFacade.generateDocumentTxtFromEntities(options.getTemplate(), documentEntities, null);
245+
SurveyTokenCriteria surveyTokenCriteria = new SurveyTokenCriteria();
246+
if(options.getRootEntityReference() instanceof CaseReferenceDto){
247+
surveyTokenCriteria.caseAssignedTo((CaseReferenceDto) options.getRootEntityReference());
248+
if (options.getAttachedDocuments() != null && options.getAttachedDocuments().size() > 0) {
249+
DocumentReferenceDto documentRef = options.getAttachedDocuments().iterator().next();
250+
surveyTokenCriteria.document(documentRef);
251+
}
252+
}
253+
254+
Properties externalEmailProperties = new Properties();
255+
SurveyToken surveyToken = surveyTokenService.getToken(surveyTokenCriteria);
256+
if (surveyToken != null) {
257+
externalEmailProperties.setProperty(SURVEY_TOKEN_DOCUMENT_PLACEHOLDER, surveyToken.getToken());
258+
}
259+
260+
String generatedText = documentTemplateFacade.generateDocumentTxtFromEntities(options.getTemplate(), documentEntities, externalEmailProperties);
239261
EmailTemplateTexts emailTexts = splitTemplateContent(generatedText);
240262

241263
try {

sormas-backend/src/main/java/de/symeda/sormas/backend/survey/SurveyTokenService.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ public Predicate buildCriteriaFilter(SurveyTokenCriteria criteria, CriteriaBuild
6767
filter = CriteriaBuilderHelper.and(cb, filter, cb.equal(root.get(SurveyToken.RESPONSE_RECEIVED), Boolean.TRUE));
6868
}
6969

70+
if (criteria.getDocument() != null) {
71+
filter = CriteriaBuilderHelper.and(cb, filter, cb.equal(joins.getGeneratedDocument().get(Case.UUID), criteria.getDocument().getUuid()));
72+
}
73+
7074
return filter;
7175
}
7276

@@ -83,15 +87,28 @@ public SurveyToken getFirstUnusedToken(SurveyReferenceDto survey) {
8387
return QueryHelper.getFirstResult(em, cq);
8488
}
8589

90+
public SurveyToken getToken(SurveyTokenCriteria criteria) {
91+
CriteriaBuilder cb = em.getCriteriaBuilder();
92+
CriteriaQuery<SurveyToken> cq = cb.createQuery(SurveyToken.class);
93+
Root<SurveyToken> root = cq.from(SurveyToken.class);
94+
cq.select(root);
95+
Predicate filter = CriteriaBuilderHelper.and(cb, this.buildCriteriaFilter(criteria, cb, root, new SurveyTokenJoins(root)));
96+
if (filter != null) {
97+
cq.where(filter);
98+
}
99+
cq.orderBy(cb.desc(root.get(SurveyToken.ASSIGNMENT_DATE)));
100+
101+
return QueryHelper.getFirstResult(em, cq);
102+
}
103+
86104
public SurveyToken getBySurveyAndToken(SurveyReferenceDto survey, String token) {
87105
CriteriaBuilder cb = em.getCriteriaBuilder();
88106
CriteriaQuery<SurveyToken> cq = cb.createQuery(SurveyToken.class);
89107
Root<SurveyToken> root = cq.from(SurveyToken.class);
90108
SurveyTokenJoins joins = new SurveyTokenJoins(root);
91109

92110
cq.select(root);
93-
cq.where(cb.equal(joins.getSurvey().get(Survey.UUID), survey.getUuid()),
94-
cb.equal(root.get(SurveyToken.TOKEN), token));
111+
cq.where(cb.equal(joins.getSurvey().get(Survey.UUID), survey.getUuid()), cb.equal(root.get(SurveyToken.TOKEN), token));
95112

96113
return QueryHelper.getFirstResult(em, cq);
97114
}

0 commit comments

Comments
 (0)