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