2121import java .util .HashMap ;
2222import java .util .List ;
2323import java .util .Map ;
24+ import java .util .Optional ;
2425import java .util .stream .Collectors ;
2526
2627import javax .ejb .EJB ;
3940import de .symeda .sormas .api .bagexport .BAGExportCaseDto ;
4041import de .symeda .sormas .api .bagexport .BAGExportFacade ;
4142import de .symeda .sormas .api .person .PersonAddressType ;
43+ import de .symeda .sormas .api .sample .PathogenTestResultType ;
4244import de .symeda .sormas .api .utils .YesNoUnknown ;
4345import de .symeda .sormas .backend .caze .Case ;
4446import de .symeda .sormas .backend .location .Location ;
@@ -71,7 +73,7 @@ public List<BAGExportCaseDto> getCaseExportList(int first, int max) {
7173
7274 Join <Case , Person > person = caseCaseJoins .getPerson ();
7375
74- Expression <String > TODO = cb .literal (TODO_VALUE );
76+ Expression <String > mobileNumber = cb .literal (TODO_VALUE );
7577
7678 cq .multiselect (
7779 caseRoot .get (Case .CASE_ID_ISM ),
@@ -80,7 +82,7 @@ public List<BAGExportCaseDto> getCaseExportList(int first, int max) {
8082 person .get (Person .LAST_NAME ),
8183 person .get (Person .FIRST_NAME ),
8284 person .get (Person .PHONE ),
83- TODO ,
85+ mobileNumber ,
8486 person .get (Person .EMAIL_ADDRESS ),
8587 person .get (Person .SEX ),
8688 person .get (Person .BIRTHDATE_DD ),
@@ -136,7 +138,7 @@ public List<BAGExportCaseDto> getCaseExportList(int first, int max) {
136138 Root <Sample > samplesRoot = samplesCq .from (Sample .class );
137139
138140 Path <Object > caseIdExpr = samplesRoot .join (Sample .ASSOCIATED_CASE , JoinType .LEFT ).get (Case .ID );
139- samplesCq .where (caseIdExpr .in (caseIdIds )).orderBy (cb .desc (samplesRoot .get (Sample .REPORT_DATE_TIME )));
141+ samplesCq .where (caseIdExpr .in (caseIdIds )).orderBy (cb .asc (samplesRoot .get (Sample .REPORT_DATE_TIME )));
140142
141143 List <Sample > samplesList = em .createQuery (samplesCq ).setHint (ModelConstants .HINT_HIBERNATE_READ_ONLY , true ).getResultList ();
142144 samples .putAll (samplesList .stream ().collect (Collectors .groupingBy (s -> s .getAssociatedCase ().getId ())));
@@ -181,19 +183,31 @@ public List<BAGExportCaseDto> getCaseExportList(int first, int max) {
181183
182184 List <Sample > caseSamples = samples .get (caze .getCaseId ());
183185 if (caseSamples != null && caseSamples .size () > 0 ) {
184- Sample newestSample = caseSamples .get (0 );
185- caze .setSampleDate (newestSample .getSampleDateTime ());
186- newestSample .getPathogenTests ().stream ().max (Comparator .comparing (PathogenTest ::getTestDateTime )).ifPresent (pathogenTest -> {
187- caze .setLabReportDate (pathogenTest .getTestDateTime ());
188- caze .setTestType (pathogenTest .getTestType ());
189- caze .setTestResult (pathogenTest .getTestResult ());
190- });
186+ Sample firstSample = caseSamples .get (0 );
187+ caze .setSampleDate (firstSample .getSampleDateTime ());
188+
189+ List <PathogenTest > sortedTests =
190+ firstSample .getPathogenTests ().stream ().sorted (Comparator .comparing (PathogenTest ::getTestDateTime )).collect (Collectors .toList ());
191+
192+ Optional <PathogenTest > positiveTest =
193+ sortedTests .stream ().filter (t -> t .getTestResult () == PathogenTestResultType .POSITIVE ).findFirst ();
194+ if (positiveTest .isPresent ()) {
195+ setExportTestData (caze , positiveTest .get ());
196+ } else if (sortedTests .size () > 0 ) {
197+ setExportTestData (caze , sortedTests .get (0 ));
198+ }
191199 }
192200 });
193201
194202 return exportList ;
195203 }
196204
205+ private void setExportTestData (BAGExportCaseDto caze , PathogenTest test ) {
206+ caze .setLabReportDate (test .getTestDateTime ());
207+ caze .setTestType (test .getTestType ());
208+ caze .setTestResult (test .getTestResult ());
209+ }
210+
197211 @ LocalBean
198212 @ Stateless
199213 public static class BAGExportFacadeEjbLocal extends BAGExportFacadeEjb {
0 commit comments