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();