diff --git a/pom.xml b/pom.xml
index d8cb7d6..dddb200 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
fr.insee.pearljam
pearljam-batch
- 3.9.0
+ 3.9.1
jar
pearljam-batch
PearlJam Batch
diff --git a/src/main/java/fr/insee/pearljam/batch/service/PilotageLauncherService.java b/src/main/java/fr/insee/pearljam/batch/service/PilotageLauncherService.java
index 743f987..e93d643 100644
--- a/src/main/java/fr/insee/pearljam/batch/service/PilotageLauncherService.java
+++ b/src/main/java/fr/insee/pearljam/batch/service/PilotageLauncherService.java
@@ -1,9 +1,7 @@
package fr.insee.pearljam.batch.service;
import fr.insee.pearljam.batch.Constants;
-import fr.insee.pearljam.batch.campaign.Campaign;
-import fr.insee.pearljam.batch.campaign.CommunicationTemplateType;
-import fr.insee.pearljam.batch.campaign.SurveyUnitType;
+import fr.insee.pearljam.batch.campaign.*;
import fr.insee.pearljam.batch.config.ApplicationConfig;
import fr.insee.pearljam.batch.dao.CampaignDao;
import fr.insee.pearljam.batch.dao.CommunicationTemplateDaoImpl;
@@ -36,6 +34,9 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.SQLException;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneOffset;
import java.util.*;
import java.util.stream.Collectors;
@@ -64,6 +65,9 @@ public class PilotageLauncherService {
private static final Logger logger = LogManager.getLogger(PilotageLauncherService.class);
private static final String CAMPAIGN_PATH_IN = "/campaign/campaign.xml";
+ @Value("${application.feature.sampleprocessing.allowwhenidentificationstarted}")
+ private boolean allowWhenIdentificationStarted;
+
/**
* Global function that structure the batch execution depends on batchOption
*
@@ -346,6 +350,18 @@ public BatchErrorCode loadSampleProcessing(String in, String processing) throws
for(Questionnaire questionnaire : questionnaires) {
String interrogationId = questionnaire.getIdInterrogation();
if (steps.contains(Constants.PILOTAGE)) {
+
+ try
+ {
+ isIntegrationFeasible(campaignId, interrogationId);
+ }
+ catch (BatchException e)
+ {
+ logger.log(Level.WARN, e.getMessage());
+ returnCode = BatchErrorCode.KO_FONCTIONAL_ERROR;
+ continue;
+ }
+
boolean pilotageValidate = campaignService.validateInput(mapPilotageSu.get(interrogationId), campaignId);
if(!pilotageValidate) {
logger.log(Level.WARN, "Interrogation {} is invalid", interrogationId);
@@ -399,6 +415,38 @@ public BatchErrorCode loadSampleProcessing(String in, String processing) throws
return returnCode;
}
+ private void isIntegrationFeasible(String campaignId, String interrogationId) throws BatchException {
+ if(allowWhenIdentificationStarted)
+ {
+ return;
+ }
+
+ Campaign campaign = campaignDao.findById(campaignId);
+ OrganizationalUnitsType organizationalUnitType = campaign.getOrganizationalUnits();
+
+
+ boolean afterIdentificationStarted = false;
+ if(organizationalUnitType != null)
+ {
+ LocalDate localDate = LocalDate.now();
+ afterIdentificationStarted = organizationalUnitType.getOrganizationalUnit().stream().anyMatch(
+ ou ->
+ {
+ long epochMilliSeconds = Long.parseLong(ou.getIdentificationPhaseStartDate());
+ LocalDate date = Instant.ofEpochMilli(epochMilliSeconds)
+ .atZone(ZoneOffset.UTC)
+ .toLocalDate();
+
+ return localDate.isAfter(date);
+ });
+ }
+
+ if(afterIdentificationStarted)
+ {
+ throw new BatchException(String.format("Can not integrate sample processing, idendification start date for %s already in the past", interrogationId));
+ }
+ }
+
private void moveFilesInOutFolders(BatchErrorCode returnCode) throws IOException, ValidateException {
if(new File(appConfig.folderIn() + CAMPAIGN_PATH_IN).exists()) {
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a01c6ba..f6809f4 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -78,4 +78,9 @@ api:
logging:
level:
- fr.insee.lunatic.utils.XslTransformation: WARN
\ No newline at end of file
+ fr.insee.lunatic.utils.XslTransformation: WARN
+
+application:
+ feature:
+ sampleprocessing:
+ allowwhenidentificationstarted: true
\ No newline at end of file
diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml
index 7b4041b..ab38bf6 100644
--- a/src/test/resources/application-test.yml
+++ b/src/test/resources/application-test.yml
@@ -76,4 +76,9 @@ api:
datacollection:
url: http://localhost:9999
bulk:
- size: 500
\ No newline at end of file
+ size: 500
+
+application:
+ feature:
+ sampleprocessing:
+ allowwhenidentificationstarted: true
\ No newline at end of file