From c3edbdfa5d2e3efabfea9969f1bc4cf0f4da25ff Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Fri, 27 Mar 2026 12:09:36 +0530 Subject: [PATCH] fix: amm-2132 duplicate stock entry issue fix --- .../repo/stockEntry/ItemStockEntryRepo.java | 2 ++ .../service/stockEntry/StockEntryServiceImpl.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/com/iemr/inventory/repo/stockEntry/ItemStockEntryRepo.java b/src/main/java/com/iemr/inventory/repo/stockEntry/ItemStockEntryRepo.java index 94671b2c..915c2cb7 100644 --- a/src/main/java/com/iemr/inventory/repo/stockEntry/ItemStockEntryRepo.java +++ b/src/main/java/com/iemr/inventory/repo/stockEntry/ItemStockEntryRepo.java @@ -113,5 +113,7 @@ List findByEntryTypeIDAndSyncFacilityIDAndEntryType(Long vanSeri @Query("update ItemStockEntry p set p.vanSerialNo=p.itemStockEntryID where p.vanSerialNo is null and p.itemStockEntryID>0") Integer updateItemStockEntryVanSerialNo(); + boolean existsByFacilityIDAndItemIDAndBatchNoAndExpiryDateAndEntryTypeAndDeletedFalse( + Integer facilityID, Integer itemID, String batchNo, Date expiryDate, String entryType); } diff --git a/src/main/java/com/iemr/inventory/service/stockEntry/StockEntryServiceImpl.java b/src/main/java/com/iemr/inventory/service/stockEntry/StockEntryServiceImpl.java index 5e13dc91..7cdf86b8 100644 --- a/src/main/java/com/iemr/inventory/service/stockEntry/StockEntryServiceImpl.java +++ b/src/main/java/com/iemr/inventory/service/stockEntry/StockEntryServiceImpl.java @@ -90,6 +90,21 @@ public PhysicalStockEntry savePhysicalStockEntry(PhysicalStockEntry physicalStoc stock.setSyncFacilityID(physicalStockEntry.getFacilityID()); }); + // Duplicate check: reject if an identical stock line already exists + for (ItemStockEntry stock : physicalStockEntry.getItemStockEntry()) { + Integer facilityID = stock.getFacilityID() != null + ? stock.getFacilityID() + : physicalStockEntry.getFacilityID(); + if (itemStockEntryRepo.existsByFacilityIDAndItemIDAndBatchNoAndExpiryDateAndEntryTypeAndDeletedFalse( + facilityID, stock.getItemID(), stock.getBatchNo(), + stock.getExpiryDate(), "physicalStockEntry")) { + throw new InventoryException( + "Duplicate stock entry: Item ID " + stock.getItemID() + + " with batch '" + stock.getBatchNo() + + "' already exists for this facility."); + } + } + itemStockEntryRepo.saveAll(physicalStockEntry.getItemStockEntry()); physicalStockEntryRepo.updatePhysicalStockEntryVanSerialNo();