From 5b23603c4cc82e080e2b76e203568f309e1def23 Mon Sep 17 00:00:00 2001 From: hilpitome Date: Mon, 15 Jan 2024 19:29:39 +0300 Subject: [PATCH] generate tasks after adding or updating stock item --- .../opensrp/repository/PlanRepository.java | 2 ++ .../postgres/PlanRepositoryImpl.java | 11 ++++++- .../custom/CustomPlanMetadataMapper.java | 3 ++ .../custom/xml/CustomPlanMetadataMapper.xml | 28 +++++++++++++++++- .../org/opensrp/service/StockService.java | 29 ++++++++++++++++++- 5 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opensrp/repository/PlanRepository.java b/src/main/java/org/opensrp/repository/PlanRepository.java index 1d8d7f41e..56d1ed975 100644 --- a/src/main/java/org/opensrp/repository/PlanRepository.java +++ b/src/main/java/org/opensrp/repository/PlanRepository.java @@ -14,6 +14,8 @@ public interface PlanRepository extends BaseRepository, PlanDao { List getPlansByServerVersionAndOperationalAreas(Long serverVersion, List operationalAreaIds, boolean experimental); + List getPlansByServerVersionAndOperationalAreasAndStatus(Long serverVersion, List operationalAreaIds, + boolean experimental, PlanDefinition.PlanStatus status); /** * This method searches for plans using a list of provided diff --git a/src/main/java/org/opensrp/repository/postgres/PlanRepositoryImpl.java b/src/main/java/org/opensrp/repository/postgres/PlanRepositoryImpl.java index b0190f6ff..5919cc914 100644 --- a/src/main/java/org/opensrp/repository/postgres/PlanRepositoryImpl.java +++ b/src/main/java/org/opensrp/repository/postgres/PlanRepositoryImpl.java @@ -147,7 +147,16 @@ public List getPlansByServerVersionAndOperationalAreas(Long serv PlanExample planExample = new PlanExample(); planExample.createCriteria().andServerVersionGreaterThanOrEqualTo(serverVersion).andDateDeletedIsNull().andExperimentalEqualTo(experimental); List plans = planMetadataMapper.selectMany(planExample, operationalAreaIds, 0, DEFAULT_FETCH_SIZE); - + return convert(plans); + } + + public List getPlansByServerVersionAndOperationalAreasAndStatus(Long serverVersion, List operationalAreaIds, boolean experimental, + PlanDefinition.PlanStatus status) { + PlanExample planExample = new PlanExample(); + planExample.createCriteria().andServerVersionGreaterThanOrEqualTo(serverVersion).andDateDeletedIsNull() + .andExperimentalEqualTo(experimental); + List plans = planMetadataMapper.selectManyByStatus(planExample, operationalAreaIds, 0, DEFAULT_FETCH_SIZE, status.value()); + return convert(plans); } diff --git a/src/main/java/org/opensrp/repository/postgres/mapper/custom/CustomPlanMetadataMapper.java b/src/main/java/org/opensrp/repository/postgres/mapper/custom/CustomPlanMetadataMapper.java index d04fa1ef5..9c4c6f40d 100644 --- a/src/main/java/org/opensrp/repository/postgres/mapper/custom/CustomPlanMetadataMapper.java +++ b/src/main/java/org/opensrp/repository/postgres/mapper/custom/CustomPlanMetadataMapper.java @@ -10,5 +10,8 @@ public interface CustomPlanMetadataMapper extends PlanMetadataMapper { List selectMany(@Param("example") PlanExample planExample, @Param("operationalAreaIds") List operationalAreaIds, @Param("offset") int offset, @Param("limit") int limit); + + List selectManyByStatus(@Param("example") PlanExample planExample, @Param("operationalAreaIds") List operationalAreaIds, @Param("offset") int offset, + @Param("limit") int limit, @Param("status") String status); } diff --git a/src/main/java/org/opensrp/repository/postgres/mapper/custom/xml/CustomPlanMetadataMapper.xml b/src/main/java/org/opensrp/repository/postgres/mapper/custom/xml/CustomPlanMetadataMapper.xml index 7eb3dc98b..05f5fbd7b 100644 --- a/src/main/java/org/opensrp/repository/postgres/mapper/custom/xml/CustomPlanMetadataMapper.xml +++ b/src/main/java/org/opensrp/repository/postgres/mapper/custom/xml/CustomPlanMetadataMapper.xml @@ -60,4 +60,30 @@ LIMIT #{limit} OFFSET #{offset} - \ No newline at end of file + + + diff --git a/src/main/java/org/opensrp/service/StockService.java b/src/main/java/org/opensrp/service/StockService.java index 2797068df..8caa66c1f 100755 --- a/src/main/java/org/opensrp/service/StockService.java +++ b/src/main/java/org/opensrp/service/StockService.java @@ -8,13 +8,14 @@ import org.joda.time.DateTime; import org.smartregister.domain.Inventory; import org.smartregister.domain.ProductCatalogue; +import org.smartregister.domain.PhysicalLocation; +import org.smartregister.domain.PlanDefinition; import org.smartregister.domain.Stock; import org.opensrp.dto.CsvBulkImportDataSummary; import org.opensrp.dto.FailedRecordSummary; import org.opensrp.repository.StocksRepository; import org.opensrp.search.StockSearchBean; import org.opensrp.validator.InventoryDataValidator; -import org.smartregister.domain.PhysicalLocation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,6 +49,11 @@ public class StockService { private PhysicalLocationService physicalLocationService; private InventoryDataValidator inventoryDataValidator; + + @Autowired + private PlanService planService; + @Autowired + private TaskGenerator taskGenerator; private static Logger logger = LogManager.getLogger(StockService.class.toString()); @@ -177,6 +183,27 @@ public void addInventory(Inventory inventory, String userName) { return; } allStocks.add(stock); + // Go up the location tree to get the operational area. + //TODO Make process configurable + PhysicalLocation servicePoint = physicalLocationService.getLocation(stock.getLocationId(), false, false); + if(servicePoint == null || servicePoint.getProperties() == null || servicePoint.getProperties().getParentId() == null) return; + logger.info("Service Point %s"+servicePoint.getProperties().getName()); + + PhysicalLocation district = physicalLocationService.getLocation(servicePoint.getProperties().getParentId(), false, false); + if(district == null || district.getProperties() == null || district.getProperties().getParentId() == null) return; + + logger.info("District %s"+district.getProperties().getName()); + String regionId = district.getProperties().getParentId(); + if(regionId==null) return; + + logger.info("RegionID %s"+regionId); + List plans = planService.getPlanRepository().getPlansByServerVersionAndOperationalAreasAndStatus(0L, + Collections.singletonList(regionId), false, PlanDefinition.PlanStatus.ACTIVE); + for (PlanDefinition plan : + plans) { + logger.info("processng tasks for planID "+plan.getIdentifier()); + taskGenerator.processPlanEvaluation(plan, null,userName); + } } public void updateInventory(Inventory inventory, String userName) {