Skip to content

Commit d576343

Browse files
authored
Merge pull request #64 from mozzy11/master
display un resulted Orders in the Report
2 parents 5d44fd7 + f5eca48 commit d576343

File tree

1 file changed

+48
-9
lines changed

1 file changed

+48
-9
lines changed

api/src/main/java/org/openmrs/module/labintegration/api/impl/LabIntegrationReportServiceImpl.java

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
import java.util.ArrayList;
1616
import java.util.Arrays;
1717
import java.util.Collections;
18+
import java.util.Comparator;
1819
import java.util.Date;
1920
import java.util.LinkedHashSet;
2021
import java.util.List;
2122
import java.util.Set;
23+
import java.util.stream.Collectors;
2224

2325
import static org.openmrs.module.labintegration.api.LabIntegrationReportsConstants.FREE_TEXT_RESULT_CONCEPT_ID;
2426
import static org.openmrs.module.labintegration.api.LabIntegrationReportsConstants.TESTS_ORDERED_CONCEPT_ID;
@@ -53,29 +55,66 @@ public List<Obs> getLabResults(Date startDate, Date endDate) {
5355
startDate, endDate, false, null);
5456

5557
Set<Person> persons = new LinkedHashSet<>(orders.size());
56-
Set<Concept> orderedTests = new LinkedHashSet<>(orders.size());
57-
Set<Encounter> orderEncounters = new LinkedHashSet<>(orders.size());
58+
Set<Concept> resultTests = new LinkedHashSet<>(orders.size());
59+
Set<Encounter> resultEncounters = new LinkedHashSet<>(orders.size());
5860

5961
for (Obs order : orders) {
6062
persons.add(order.getPerson());
61-
orderedTests.add(order.getConcept());
62-
orderEncounters.add(order.getEncounter());
63+
resultTests.add(order.getConcept());
64+
resultEncounters.add(order.getEncounter());
6365
}
6466

6567
// freeTextResults are used to capture results with errors or other issues, so may not correspond
6668
// directly to an ordered test
6769
Concept freeTextResults = conceptService.getConcept(FREE_TEXT_RESULT_CONCEPT_ID);
6870
if (freeTextResults != null) {
69-
orderedTests.add(freeTextResults);
71+
resultTests.add(freeTextResults);
72+
}
73+
List<Obs> testResults = obsService.getObservations(new ArrayList<>(persons), new ArrayList<>(resultEncounters),
74+
new ArrayList<>(resultTests), null, null, null, Arrays.asList("obsDatetime desc", "obsId asc"), null, null, null,
75+
null, false);
76+
77+
Set<Integer> resultEncounterIds = resultEncounters.stream().map(Encounter::getId).collect(Collectors.toSet());
78+
79+
// Unresulted Orders
80+
List<Obs> unresultedOrders = obsService.getObservations(null, null, Collections.singletonList(labOrderConcept), null,
81+
null, null, null, null, null, startDate, endDate, false, null);
82+
Set<Encounter> orderEncounters = new LinkedHashSet<>(unresultedOrders.size());
83+
Set<Person> orderPersons = new LinkedHashSet<>(unresultedOrders.size());
84+
for (Obs order : unresultedOrders) {
85+
if (!obsSelector.isValidTestType(order) || resultEncounterIds.contains(order.getEncounter().getId())) {
86+
continue;
87+
}
88+
89+
orderPersons.add(order.getPerson());
90+
orderEncounters.add(order.getEncounter());
7091
}
71-
List<Obs> testResults = obsService.getObservations(new ArrayList<>(persons), new ArrayList<>(orderEncounters),
72-
new ArrayList<>(orderedTests), null, null, null, Arrays.asList("obsDatetime desc", "obsId asc"), null, null,
73-
null, null, false);
92+
93+
List<Obs> orderResults = obsService.getObservations(new ArrayList<>(orderPersons), new ArrayList<>(orderEncounters),
94+
Collections.singletonList(labOrderConcept), null, null, null, Arrays.asList("obsDatetime desc", "obsId asc"),
95+
null, null, null, null, false);
7496

7597
if (testResults != null) {
76-
return testResults;
98+
if (orderResults != null) {
99+
List<Obs> displayOrders = orderResults.stream().filter(o -> obsSelector.isValidTestType(o))
100+
.map(o -> translateToDisplayResultTest(o)).collect(Collectors.toList());
101+
testResults.addAll(displayOrders);
102+
}
103+
return testResults.stream().sorted(Comparator.comparing(Obs::getId)).collect(Collectors.toList());
77104
}
78105

79106
return Collections.emptyList();
80107
}
108+
109+
private Obs translateToDisplayResultTest(Obs obs) {
110+
ConceptService conceptService = Context.getConceptService();
111+
Obs displayResult = new Obs();
112+
displayResult.setId(obs.getId());
113+
displayResult.setPerson(obs.getPerson());
114+
displayResult.setEncounter(obs.getEncounter());
115+
displayResult.setConcept(conceptService.getConcept(obs.getValueCoded().getId()));
116+
displayResult.setObsDatetime(null);
117+
displayResult.setValueText("");
118+
return displayResult;
119+
}
81120
}

0 commit comments

Comments
 (0)