Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 6321b38

Browse files
author
barnabartha
committed
SORMAS-Foundation#3253 - refactor sms component to use existing text field wrapper
- count of cases with missing contact info to be done in batch
1 parent b3fdfb4 commit 6321b38

16 files changed

Lines changed: 86 additions & 81 deletions

File tree

sormas-api/src/main/java/de/symeda/sormas/api/caze/CaseFacade.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ List<DashboardQuarantineDataDto> getQuarantineDataForDashBoard(
180180

181181
void sendMessage(List<String> caseUuids, String subject, String messageContent, MessageType... messageTypes);
182182

183-
long countCasesWithMissingMessageType(List<String> caseUuids, MessageType messageType);
183+
long countCasesWithMissingContactInformation(List<String> caseUuids, MessageType messageType);
184184

185185
List<ManualMessageLogDto> getMessageLog(String caseUuid, MessageType messageType);
186186
}

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Captions.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ public interface Captions {
169169
String campaignNewCampaign = "campaignNewCampaign";
170170
String campaignSearch = "campaignSearch";
171171
String campaignValidateForms = "campaignValidateForms";
172+
String cancel = "cancel";
172173
String caseActiveCases = "caseActiveCases";
173174
String caseAllCases = "caseAllCases";
174175
String caseArchivedCases = "caseArchivedCases";
@@ -394,6 +395,7 @@ public interface Captions {
394395
String caseSearchSpecificCase = "caseSearchSpecificCase";
395396
String caseTransferCase = "caseTransferCase";
396397
String caseTransferCases = "caseTransferCases";
398+
String characters = "characters";
397399
String city = "city";
398400
String ClinicalVisit = "ClinicalVisit";
399401
String ClinicalVisit_bloodPressure = "ClinicalVisit.bloodPressure";
@@ -740,6 +742,7 @@ public interface Captions {
740742
String DocumentTemplate_QuarantineOrder_templates = "DocumentTemplate.QuarantineOrder.templates";
741743
String DocumentTemplate_uploadTemplate = "DocumentTemplate.uploadTemplate";
742744
String documentUploadDocument = "documentUploadDocument";
745+
String email = "email";
743746
String EpiData = "EpiData";
744747
String EpiData_areaInfectedAnimals = "EpiData.areaInfectedAnimals";
745748
String EpiData_contactWithSourceCaseKnown = "EpiData.contactWithSourceCaseKnown";
@@ -1072,6 +1075,8 @@ public interface Captions {
10721075
String notAvailableShort = "notAvailableShort";
10731076
String notSpecified = "notSpecified";
10741077
String numberOfCharacters = "numberOfCharacters";
1078+
String numberOfMessages = "numberOfMessages";
1079+
String numberOfMissingPhoneNumbers = "numberOfMissingPhoneNumbers";
10751080
String options = "options";
10761081
String outbreakAffectedDistricts = "outbreakAffectedDistricts";
10771082
String outbreakNoOutbreak = "outbreakNoOutbreak";
@@ -1368,11 +1373,14 @@ public interface Captions {
13681373
String sampleSamplesList = "sampleSamplesList";
13691374
String sampleShipped = "sampleShipped";
13701375
String sampleSpecimenNotAdequate = "sampleSpecimenNotAdequate";
1376+
String send = "send";
1377+
String sendingSms = "sendingSms";
13711378
String sendSMS = "sendSMS";
13721379
String sentBy = "sentBy";
13731380
String sex = "sex";
13741381
String showPlacesOnMap = "showPlacesOnMap";
13751382
String singleDayEventDate = "singleDayEventDate";
1383+
String sms = "sms";
13761384
String sormasToSormasCaseNotShared = "sormasToSormasCaseNotShared";
13771385
String sormasToSormasContactNotShared = "sormasToSormasContactNotShared";
13781386
String sormasToSormasDialogTitle = "sormasToSormasDialogTitle";

sormas-api/src/main/java/de/symeda/sormas/api/i18n/Strings.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ public interface Strings {
1919
String between = "between";
2020
String bpm = "bpm";
2121
String by = "by";
22-
String cancel = "cancel";
23-
String characters = "characters";
2422
String classificationAllOf = "classificationAllOf";
2523
String classificationClassificationRules = "classificationClassificationRules";
2624
String classificationConfirmed = "classificationConfirmed";
@@ -130,7 +128,6 @@ public interface Strings {
130128
String DiseaseNetworkDiagram_subheading = "DiseaseNetworkDiagram.subheading";
131129
String done = "done";
132130
String edit = "edit";
133-
String email = "email";
134131
String enterSMS = "enterSMS";
135132
String entityAction = "entityAction";
136133
String entityActions = "entityActions";
@@ -784,8 +781,6 @@ public interface Strings {
784781
String numberFive = "numberFive";
785782
String numberFour = "numberFour";
786783
String numberNine = "numberNine";
787-
String numberOfMessages = "numberOfMessages";
788-
String numberOfMissingPhoneNumbers = "numberOfMissingPhoneNumbers";
789784
String numberOne = "numberOne";
790785
String numberSeven = "numberSeven";
791786
String numberSix = "numberSix";
@@ -860,9 +855,6 @@ public interface Strings {
860855
String quarterShort = "quarterShort";
861856
String reportedBy = "reportedBy";
862857
String reportedOn = "reportedOn";
863-
String send = "send";
864-
String sendingSms = "sendingSms";
865-
String sms = "sms";
866858
String step = "step";
867859
String SurvnetGateway_notificationEntryNotSent = "SurvnetGateway.notificationEntryNotSent";
868860
String SurvnetGateway_notificationEntrySent = "SurvnetGateway.notificationEntrySent";

sormas-api/src/main/java/de/symeda/sormas/api/user/UserReferenceDto.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,18 @@
2121

2222
import de.symeda.sormas.api.ReferenceDto;
2323
import de.symeda.sormas.api.utils.DataHelper;
24+
import de.symeda.sormas.api.utils.PersonalData;
25+
import de.symeda.sormas.api.utils.SensitiveData;
2426

2527
public class UserReferenceDto extends ReferenceDto {
2628

2729
private static final long serialVersionUID = -8558187171374254398L;
2830

31+
@PersonalData(mandatoryField = true)
32+
@SensitiveData(mandatoryField = true)
2933
private String firstName;
34+
@PersonalData(mandatoryField = true)
35+
@SensitiveData(mandatoryField = true)
3036
private String lastName;
3137

3238
public UserReferenceDto() {

sormas-api/src/main/resources/captions.properties

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1969,4 +1969,11 @@ sendSMS=Send SMS
19691969
sentBy=Sent by
19701970
noSmsSentForCase=No SMS sent to case person
19711971
noPhoneNumberForCasePerson=Case person has no phone number
1972-
1972+
sms = SMS
1973+
email = Email
1974+
send = Send
1975+
cancel = Cancel
1976+
sendingSms = Send new SMS
1977+
numberOfMissingPhoneNumbers = Number of selected cases without phone number: %s
1978+
characters = Characters: %d / 160
1979+
numberOfMessages = Nr. of messages: %d

sormas-api/src/main/resources/strings.properties

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -923,12 +923,4 @@ SurvnetGateway.notificationErrorSending = Error when sending entry
923923
warningDashboardMapTooManyMarkers = There are %d places to display and it is possible that your browser will freeze while displaying them.
924924

925925
# Messaging
926-
sms = SMS
927-
email = Email
928-
send = Send
929-
cancel = Cancel
930-
sendingSms = Send new SMS
931-
numberOfMissingPhoneNumbers = Number of selected cases without phone number: %s
932926
enterSMS = Please enter your SMS message here:
933-
characters = Characters:
934-
numberOfMessages = Nr. of messages:

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.Map;
3535
import java.util.Optional;
3636
import java.util.Random;
37+
import java.util.concurrent.atomic.AtomicLong;
3738
import java.util.function.Function;
3839
import java.util.stream.Collectors;
3940
import java.util.stream.Stream;
@@ -3103,13 +3104,17 @@ public void sendMessage(List<String> caseUuids, String subject, String messageCo
31033104
}
31043105

31053106
@Override
3106-
public long countCasesWithMissingMessageType(List<String> caseUuids, MessageType messageType) {
3107+
public long countCasesWithMissingContactInformation(List<String> caseUuids, MessageType messageType) {
31073108

3108-
return caseService.count((cb, root) -> {
3109-
final Join<Object, Object> personJoin = root.join(Case.PERSON, JoinType.LEFT);
3109+
final AtomicLong totalCount = new AtomicLong();
3110+
3111+
IterableHelper.executeBatched(caseUuids, ModelConstants.PARAMETER_LIMIT, e -> totalCount.addAndGet(caseService.count((cb, root) -> {
3112+
final Join<Case, Person> personJoin = root.join(Case.PERSON, JoinType.LEFT);
31103113
final String messageTypeColumn = messageType == MessageType.EMAIL ? Person.EMAIL_ADDRESS : Person.PHONE;
31113114
return cb.and(root.get(Case.UUID).in(caseUuids), cb.isNull(personJoin.get(messageTypeColumn)));
3112-
});
3115+
})));
3116+
3117+
return totalCount.get();
31133118
}
31143119

31153120
@Override

sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/ManualMessageLogService.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public ManualMessageLogService() {
2929

3030
@Override
3131
public Predicate createUserFilter(CriteriaBuilder cb, CriteriaQuery cq, From<?, ManualMessageLog> from) {
32-
return null;
32+
throw new UnsupportedOperationException();
3333
}
3434

3535
public List<ManualMessageLog> getByCaseUuid(@NotNull String caseUuid, MessageType messageType) {
@@ -38,16 +38,13 @@ public List<ManualMessageLog> getByCaseUuid(@NotNull String caseUuid, MessageTyp
3838
final CriteriaQuery<ManualMessageLog> cq = cb.createQuery(ManualMessageLog.class);
3939
final Root<ManualMessageLog> manualMessageLogRoot = cq.from(ManualMessageLog.class);
4040

41-
final Subquery<Person> casePersonSubQuery = cq.subquery(Person.class);
42-
final Root<Case> caseRoot = casePersonSubQuery.from(Case.class);
43-
casePersonSubQuery.where(cb.equal(caseRoot.get(Case.UUID), caseUuid));
44-
casePersonSubQuery.select(caseRoot.get(Case.PERSON));
41+
final Subquery<Person> casePersonIdSubQuery = cq.subquery(Person.class);
42+
final Root<Case> caseRoot = casePersonIdSubQuery.from(Case.class);
43+
casePersonIdSubQuery.where(cb.equal(caseRoot.get(Case.UUID), caseUuid));
44+
casePersonIdSubQuery.select(caseRoot.get(Case.PERSON).get(Person.ID));
4545

46-
Predicate filter = createUserFilter(cb, cq, manualMessageLogRoot);
47-
filter = AbstractAdoService.and(
48-
cb,
49-
filter,
50-
cb.equal(manualMessageLogRoot.get(ManualMessageLog.RECIPIENT_PERSON), casePersonSubQuery),
46+
Predicate filter = cb.and(
47+
cb.equal(manualMessageLogRoot.get(ManualMessageLog.RECIPIENT_PERSON).get(Person.ID), casePersonIdSubQuery),
5148
cb.equal(manualMessageLogRoot.get(ManualMessageLog.MESSAGE_TYPE), messageType));
5249

5350
cq.where(filter);

sormas-backend/src/main/java/de/symeda/sormas/backend/common/messaging/MessagingService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,14 @@ private void sendMessage(
138138
String emailAddress,
139139
String phoneNumber,
140140
String recipientUuid,
141-
final String recipient,
141+
final String recipientType,
142142
MessageType... messageTypes)
143143
throws NotificationDeliveryFailedException {
144144
for (MessageType messageType : messageTypes) {
145145
if (messageType == MessageType.EMAIL && DataHelper.isNullOrEmpty(emailAddress)) {
146-
logger.info(String.format("Tried to send an email to a " + recipient + " without an email address (UUID: %s).", recipientUuid));
146+
logger.info(String.format("Tried to send an email to a " + recipientType + " without an email address (UUID: %s).", recipientUuid));
147147
} else if (messageType == MessageType.SMS && DataHelper.isNullOrEmpty(phoneNumber)) {
148-
logger.info(String.format("Tried to send an SMS to a " + recipient + " without a phone number (UUID: %s).", recipientUuid));
148+
logger.info(String.format("Tried to send an SMS to a " + recipientType + " without a phone number (UUID: %s).", recipientUuid));
149149
} else {
150150
try {
151151
if (messageType == MessageType.EMAIL) {

sormas-backend/src/main/resources/sql/sormas_schema.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5909,7 +5909,8 @@ CREATE TABLE manualmessagelog
59095909
messagetype character varying(255) NOT NULL,
59105910
sentdate timestamp NOT NULL,
59115911
sendinguser_id bigint NOT NULL,
5912-
recipientperson_id bigint NOT NULL
5912+
recipientperson_id bigint NOT NULL,
5913+
PRIMARY KEY (id)
59135914
);
59145915

59155916
ALTER TABLE manualmessagelog OWNER TO sormas_user;

0 commit comments

Comments
 (0)