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

Commit 5c9e23a

Browse files
SORMAS-Foundation#2898 - Added distinct counting to tasks and samples, fixed filters for external lab officers
1 parent fd24fcb commit 5c9e23a

4 files changed

Lines changed: 46 additions & 37 deletions

File tree

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

Lines changed: 4 additions & 5 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;
@@ -690,13 +689,13 @@ public long count(SampleCriteria sampleCriteria) {
690689
Predicate criteriaFilter = sampleService.buildCriteriaFilter(sampleCriteria, cb, joins);
691690
filter = AbstractAdoService.and(cb, filter, criteriaFilter);
692691
}
692+
693693
if (filter != null) {
694694
cq.where(filter);
695695
}
696-
cq.distinct(true);
697-
cq.select(cb.count(root));
698-
Long count = em.createQuery(cq).getSingleResult();
699-
return count;
696+
697+
cq.select(cb.countDistinct(root));
698+
return em.createQuery(cq).getSingleResult();
700699
}
701700

702701
@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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,7 @@ public long count(TaskCriteria taskCriteria) {
354354
cq.where(filter);
355355
}
356356

357-
cq.distinct(true);
358-
cq.select(cb.count(task));
357+
cq.select(cb.countDistinct(task));
359358
return em.createQuery(cq).getSingleResult();
360359
}
361360

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
@@ -136,18 +136,31 @@ public SampleGrid(SampleCriteria criteria) {
136136
}
137137

138138
if (criteria.getSampleAssociationType() == SampleAssociationType.CASE) {
139-
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
140-
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
139+
if (getColumn(SampleIndexDto.ASSOCIATED_CONTACT) != null) {
140+
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
141+
}
142+
if (getColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT) != null) {
143+
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
144+
}
141145
}
142146
if (criteria.getSampleAssociationType() == SampleAssociationType.CONTACT) {
143147
removeColumn(SampleIndexDto.EPID_NUMBER);
144-
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
145-
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
148+
149+
if (getColumn(SampleIndexDto.ASSOCIATED_CASE) != null) {
150+
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
151+
}
152+
if (getColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT) != null) {
153+
removeColumn(SampleIndexDto.ASSOCIATED_EVENT_PARTICIPANT);
154+
}
146155
}
147156
if (criteria.getSampleAssociationType() == SampleAssociationType.EVENT_PARTICIPANT) {
148157
removeColumn(SampleIndexDto.EPID_NUMBER);
149-
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
150-
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
158+
if (getColumn(SampleIndexDto.ASSOCIATED_CASE) != null) {
159+
removeColumn(SampleIndexDto.ASSOCIATED_CASE);
160+
}
161+
if (getColumn(SampleIndexDto.ASSOCIATED_CONTACT) != null) {
162+
removeColumn(SampleIndexDto.ASSOCIATED_CONTACT);
163+
}
151164
}
152165

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

0 commit comments

Comments
 (0)