Skip to content

Commit 45fbef5

Browse files
authored
Merge pull request #13579 from SORMAS-Foundation/feature-13294_doctor_declarations_xml_esante_adapter
Fixed issue with samples creation always displaying for Doctor Declaration
2 parents d918ad3 + e18b06b commit 45fbef5

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

sormas-api/src/main/java/de/symeda/sormas/api/externalmessage/processing/AbstractMessageProcessingFlowBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ private FlowThen<ExternalMessageProcessingResult> doCreateEventParticipantAndSam
255255
});
256256
}
257257

258-
private FlowThen<ExternalMessageProcessingResult> doPickOrCreateSamplesFlow(
258+
protected FlowThen<ExternalMessageProcessingResult> doPickOrCreateSamplesFlow(
259259
Consumer<SampleSimilarityCriteria> addSampleSearchCriteria,
260260
BiFunction<Integer, ExternalMessageProcessingResult, CompletionStage<ProcessingResult<ExternalMessageProcessingResult>>> createSampleAndPathogenTests,
261261
FlowThen<ExternalMessageProcessingResult> flow) {

sormas-api/src/main/java/de/symeda/sormas/api/externalmessage/processing/doctordeclaration/AbstractDoctorDeclarationMessageProcessingFlow.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import java.util.ArrayList;
2020
import java.util.Date;
2121
import java.util.List;
22+
import java.util.concurrent.CompletionStage;
23+
import java.util.function.BiFunction;
24+
import java.util.function.Consumer;
2225
import java.util.regex.Pattern;
2326

2427
import org.apache.commons.lang3.StringUtils;
@@ -41,6 +44,7 @@
4144
import de.symeda.sormas.api.exposure.ExposureType;
4245
import de.symeda.sormas.api.externalmessage.ExternalMessageDto;
4346
import de.symeda.sormas.api.externalmessage.ExternalMessageStatus;
47+
import de.symeda.sormas.api.externalmessage.labmessage.SampleReportDto;
4448
import de.symeda.sormas.api.externalmessage.processing.AbstractMessageProcessingFlowBase;
4549
import de.symeda.sormas.api.externalmessage.processing.ExternalMessageMapper;
4650
import de.symeda.sormas.api.externalmessage.processing.ExternalMessageProcessingFacade;
@@ -51,13 +55,15 @@
5155
import de.symeda.sormas.api.infrastructure.facility.FacilityReferenceDto;
5256
import de.symeda.sormas.api.infrastructure.facility.FacilityType;
5357
import de.symeda.sormas.api.person.PersonDto;
58+
import de.symeda.sormas.api.sample.SampleSimilarityCriteria;
5459
import de.symeda.sormas.api.symptoms.SymptomsDto;
5560
import de.symeda.sormas.api.therapy.TherapyDto;
5661
import de.symeda.sormas.api.user.UserDto;
5762
import de.symeda.sormas.api.utils.DataHelper;
5863
import de.symeda.sormas.api.utils.DtoCopyHelper;
5964
import de.symeda.sormas.api.utils.YesNoUnknown;
6065
import de.symeda.sormas.api.utils.dataprocessing.ProcessingResult;
66+
import de.symeda.sormas.api.utils.dataprocessing.flow.FlowThen;
6167

6268
/**
6369
* Abstract class defining the flow of processing a lab message allowing to
@@ -78,6 +84,30 @@ public AbstractDoctorDeclarationMessageProcessingFlow(
7884
super(user, externalMessage, mapper, processingFacade);
7985
}
8086

87+
protected FlowThen<ExternalMessageProcessingResult> doPickOrCreateSamplesFlow(
88+
Consumer<SampleSimilarityCriteria> addSampleSearchCriteria,
89+
BiFunction<Integer, ExternalMessageProcessingResult, CompletionStage<ProcessingResult<ExternalMessageProcessingResult>>> createSampleAndPathogenTests,
90+
FlowThen<ExternalMessageProcessingResult> flow) {
91+
92+
// We use the non null safe sample reports list in case no samples reports were created following DD parsing
93+
final List<SampleReportDto> sampleReports = getExternalMessage().getSampleReports();
94+
95+
if (sampleReports == null || sampleReports.isEmpty()) {
96+
// Just do nothing
97+
return flow.then(ProcessingResult::asCompletedFuture);
98+
}
99+
100+
// The sample report is not null or empty, we need to check if any tests exists or there are just empty reports
101+
final boolean hasTests = sampleReports.stream().anyMatch(report -> report.getTestReports() != null && !report.getTestReports().isEmpty());
102+
if (!hasTests) {
103+
// Just do nothing
104+
return flow.then(ProcessingResult::asCompletedFuture);
105+
}
106+
107+
// Just proceed with the default implementation
108+
return super.doPickOrCreateSamplesFlow(addSampleSearchCriteria, createSampleAndPathogenTests, flow);
109+
}
110+
81111
/**
82112
* Marks the external message as processed and updates its status.
83113
*

0 commit comments

Comments
 (0)