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

Commit f8ecd56

Browse files
SORMAS-Foundation#2898 - Added distinct counting to tasks and samples, fixed filters for external lab officers
# Conflicts: # sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleFacadeEjb.java # sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java
1 parent ab5b86b commit f8ecd56

4 files changed

Lines changed: 46 additions & 35 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleFacadeEjb.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import de.symeda.sormas.backend.common.MessageType;
5151
import de.symeda.sormas.backend.common.MessagingService;
5252
import de.symeda.sormas.backend.common.NotificationDeliveryFailedException;
53-
import de.symeda.sormas.backend.common.QueryContext;
5453
import de.symeda.sormas.backend.contact.Contact;
5554
import de.symeda.sormas.backend.contact.ContactFacadeEjb;
5655
import de.symeda.sormas.backend.contact.ContactJurisdictionChecker;
@@ -697,12 +696,13 @@ public long count(SampleCriteria sampleCriteria) {
697696
Predicate criteriaFilter = sampleService.buildCriteriaFilter(sampleCriteria, cb, joins);
698697
filter = AbstractAdoService.and(cb, filter, criteriaFilter);
699698
}
699+
700700
if (filter != null) {
701701
cq.where(filter);
702702
}
703-
cq.select(cb.count(root));
704-
Long count = em.createQuery(cq).getSingleResult();
705-
return count;
703+
704+
cq.select(cb.countDistinct(root));
705+
return em.createQuery(cq).getSingleResult();
706706
}
707707

708708
@Override

sormas-backend/src/main/java/de/symeda/sormas/backend/sample/SampleService.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,6 @@
1717
*******************************************************************************/
1818
package de.symeda.sormas.backend.sample;
1919

20-
import java.math.BigInteger;
21-
import java.util.Date;
22-
import java.util.HashMap;
23-
import java.util.List;
24-
import java.util.Map;
25-
import java.util.stream.Collectors;
26-
27-
import javax.ejb.EJB;
28-
import javax.ejb.LocalBean;
29-
import javax.ejb.Stateless;
30-
import javax.persistence.NoResultException;
31-
import javax.persistence.Query;
32-
import javax.persistence.criteria.CriteriaBuilder;
33-
import javax.persistence.criteria.CriteriaQuery;
34-
import javax.persistence.criteria.Expression;
35-
import javax.persistence.criteria.From;
36-
import javax.persistence.criteria.Join;
37-
import javax.persistence.criteria.JoinType;
38-
import javax.persistence.criteria.Predicate;
39-
import javax.persistence.criteria.Root;
40-
41-
import org.apache.commons.collections.CollectionUtils;
42-
4320
import de.symeda.sormas.api.EntityRelevanceStatus;
4421
import de.symeda.sormas.api.sample.PathogenTestResultType;
4522
import de.symeda.sormas.api.sample.SampleAssociationType;
@@ -64,6 +41,27 @@
6441
import de.symeda.sormas.backend.region.Region;
6542
import de.symeda.sormas.backend.user.User;
6643
import de.symeda.sormas.backend.util.QueryHelper;
44+
import org.apache.commons.collections.CollectionUtils;
45+
46+
import javax.ejb.EJB;
47+
import javax.ejb.LocalBean;
48+
import javax.ejb.Stateless;
49+
import javax.persistence.NoResultException;
50+
import javax.persistence.Query;
51+
import javax.persistence.criteria.CriteriaBuilder;
52+
import javax.persistence.criteria.CriteriaQuery;
53+
import javax.persistence.criteria.Expression;
54+
import javax.persistence.criteria.From;
55+
import javax.persistence.criteria.Join;
56+
import javax.persistence.criteria.JoinType;
57+
import javax.persistence.criteria.Predicate;
58+
import javax.persistence.criteria.Root;
59+
import java.math.BigInteger;
60+
import java.util.Date;
61+
import java.util.HashMap;
62+
import java.util.List;
63+
import java.util.Map;
64+
import java.util.stream.Collectors;
6765

6866
@Stateless
6967
@LocalBean
@@ -304,7 +302,7 @@ public Predicate createUserFilterWithoutCase(CriteriaBuilder cb, SampleJoins joi
304302
// lab users can see samples assigned to their laboratory
305303
if (jurisdictionLevel == JurisdictionLevel.LABORATORY || jurisdictionLevel == JurisdictionLevel.EXTERNAL_LABORATORY) {
306304
if (currentUser.getLaboratory() != null) {
307-
filter = or(cb, filter, cb.equal(joins.getRoot().get(Sample.LAB), currentUser.getLaboratory()));
305+
filter = or(cb, filter, cb.equal(joins.getLab(), currentUser.getLaboratory()));
308306
}
309307
}
310308

sormas-backend/src/main/java/de/symeda/sormas/backend/task/TaskFacadeEjb.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public long count(TaskCriteria taskCriteria) {
354354
cq.where(filter);
355355
}
356356

357-
cq.select(cb.count(task));
357+
cq.select(cb.countDistinct(task));
358358
return em.createQuery(cq).getSingleResult();
359359
}
360360

sormas-ui/src/main/java/de/symeda/sormas/ui/samples/SampleGrid.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,31 @@ public SampleGrid(SampleCriteria criteria) {
129129
}
130130

131131
if (criteria.getSampleAssociationType() == SampleAssociationType.CASE) {
132-
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
133-
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
132+
if (getColumn(SampleIndexDto.ASSOCIATED_CONTACT) != null) {
133+
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
134+
}
135+
if (getColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT) != null) {
136+
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
137+
}
134138
}
135139
if (criteria.getSampleAssociationType() == SampleAssociationType.CONTACT) {
136140
removeColumn(SampleIndexDto.EPID_NUMBER);
137-
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
138-
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
141+
142+
if (getColumn(SampleIndexDto.ASSOCIATED_CASE) != null) {
143+
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
144+
}
145+
if (getColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT) != null) {
146+
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
147+
}
139148
}
140149
if (criteria.getSampleAssociationType() == SampleAssociationType.EVENT_PARTICIPANT) {
141150
removeColumn(SampleIndexDto.EPID_NUMBER);
142-
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
143-
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
151+
if (getColumn(SampleIndexDto.ASSOCIATED_CASE) != null) {
152+
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
153+
}
154+
if (getColumn(SampleIndexDto.ASSOCIATED_CONTACT) != null) {
155+
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
156+
}
144157
}
145158

146159
for (Column<SampleIndexDto, ?> column : getColumns()) {

0 commit comments

Comments
 (0)