From b17be34188cb1b651475ebbeaae11234ca59098a Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Mon, 30 Jun 2025 20:45:20 +0530 Subject: [PATCH 1/7] fix:user enumeration --- .../controller/users/IEMRAdminController.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java index d8a43b35..48d10fb3 100644 --- a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java +++ b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java @@ -519,7 +519,7 @@ public String superUserAuthenticate( response.setResponse(responseObj.toString()); } catch (Exception e) { logger.error("userAuthenticate failed with error " + e.getMessage(), e); - response.setError(5000, "Authentication failed. Please try again later."); // Generic fallback + response.setError(e); } logger.info("userAuthenticate response " + response.toString()); return response.toString(); @@ -620,10 +620,10 @@ public String forgetPassword( if (mUsers == null || mUsers.size() <= 0) { logger.error("User not found"); - throw new IEMRException("Request failed, please try again later"); + throw new IEMRException("If the username is valid, you will be asked a security question"); } else if (mUsers.size() > 1) { logger.error("More than 1 user found"); - throw new IEMRException("Request failed. Please retry again"); + throw new IEMRException("If the username is valid, you will be asked a security question"); } else if (mUsers.size() == 1) { List> quesAnsList = new ArrayList<>(); @@ -645,7 +645,7 @@ public String forgetPassword( } } catch (Exception e) { logger.error("forgetPassword failed with error " + e.getMessage(), e); - response.setError(5000, "ForgetPassword failed."); + response.setError(e); } logger.info("forgetPassword response " + response.toString()); return response.toString(); @@ -734,7 +734,7 @@ public String changePassword( response.setResponse(changeReqResult); } catch (Exception e) { logger.error("changePassword failed with error " + e.getMessage(), e); - response.setError(5000, "Password change failed. Please try again later."); + response.setError(e); } logger.info("changePassword response " + response.toString()); return response.toString(); @@ -752,7 +752,7 @@ public String saveUserSecurityQuesAns( response.setResponse(responseData); } catch (Exception e) { logger.error("saveUserSecurityQuesAns failed with error " + e.getMessage(), e); - response.setError(5000, "Failed to save security questions. Please try again later."); + response.setError(e); } logger.info("saveUserSecurityQuesAns response " + response.toString()); return response.toString(); @@ -1058,7 +1058,7 @@ public String userAuthenticateByEncryption( response.setResponse(responseObj.toString()); } catch (Exception e) { logger.error("userAuthenticateByEncryption failed with error " + e.getMessage(), e); - response.setError(5000, "Request failed. Please try again."); + response.setError(e); } logger.info("userAuthenticateByEncryption response " + response.toString()); return response.toString(); @@ -1076,7 +1076,7 @@ public String getrolewrapuptime(@PathVariable("roleID") Integer roleID) { } response.setResponse(test.toString()); } catch (Exception e) { - response.setError(5000, "Request failed. Please try again."); + response.setError(e); } return response.toString(); } @@ -1104,7 +1104,7 @@ public String validateSecurityQuestionAndAnswer( throw new IEMRException("Invalid Request"); } catch (Exception e) { logger.error("validateSecurityQuestionAndAnswer failed: {}", e.toString()); - response.setError(5000, "Request failed. Please try again."); + response.setError(5000, e.getMessage()); } logger.info("validateSecurityQuestionAndAnswer API response" + response.toString()); return response.toString(); @@ -1160,7 +1160,7 @@ public String userAuthenticateBhavya( response.setResponse(responseObj.toString()); } catch (Exception e) { logger.error("userAuthenticate failed with error " + e.getMessage(), e); - response.setError(5000, "Authentication failed. Please try again."); + response.setError(e); } logger.info("userAuthenticate response " + response.toString()); return response.toString(); From ac2cdda208cfdc68393ca08181d780c5dc9378f4 Mon Sep 17 00:00:00 2001 From: SR20290919 Date: Fri, 27 Jun 2025 16:54:41 +0530 Subject: [PATCH 2/7] linking of subcategory to multiple files --- .../data/kmfilemanager/KMFileManager.java | 6 +- .../KMFileManagerRepository.java | 4 + .../KMFileManagerServiceImpl.java | 76 ++++++++++++++++++ .../service/services/CommonServiceImpl.java | 77 ++++++++++++++----- 4 files changed, 143 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java b/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java index 6630f367..6409837f 100644 --- a/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java +++ b/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java @@ -110,7 +110,11 @@ public class KMFileManager { @Transient @Expose private Integer categoryID; - @Transient +// @Transient +// @Expose +// private Integer subCategoryID; + + @Column(name = "SubCategoryID") // πŸ”΄ DB-mapped field to associate files with a subcategory @Expose private Integer subCategoryID; @Transient diff --git a/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java b/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java index aad6a98f..615c841b 100644 --- a/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java +++ b/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java @@ -74,5 +74,9 @@ ArrayList getKMFileLists(@Param("providerServiceMapID") Integer p @Query("select kmFileManager.fileName, kmFileManager.fileExtension from KMFileManager kmFileManager " + "where kmFileManager.fileUID = :fileUID") List getFileNameByUID(@Param("fileUID") String fileUID); + + //newChange + @Query("SELECT km FROM KMFileManager km WHERE km.subCategoryID = :subCategoryID AND km.deleted = false") + List getFilesBySubCategoryID(@Param("subCategoryID") Integer subCategoryID); } diff --git a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java index 1a86fad0..df34dd5b 100644 --- a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java +++ b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java @@ -125,6 +125,78 @@ public String addKMFile(String request) throws IOException, NoSuchAlgorithmExcep return kmFileManagers.toString(); } +// private ArrayList addKMFile(Iterable kmFileManagers) +// throws IOException, NoSuchAlgorithmException { +// ArrayList savedFileManagers = new ArrayList(); +// FileOutputStream newFile = null; +// FileInputStream fis = null; +// try +// { +// for (KMFileManager kmFileManager : kmFileManagers) { +// if (kmFileManager.getFileName() != null && kmFileManager.getProviderServiceMapID() != null +// && kmFileManager.getFileContent() != null) { +// kmFileManager.setFileName(kmFileManager.getFileName().replace("`", "").replace("'", "").replace("$", "") +// .replace("\\", "").replace("/", "").replace("~", "").replace("`", "").replace("!", "") +// .replace("@", "").replace("#", "").replace("$", "").replace("%", "").replace("^", "") +// .replace("&", "").replace("*", "").replace("(", "").replace(")", "").replace("{", "") +// .replace("}", "").replace("[", "").replace("]", "").replace("|", "").replace("\\", "") +// .replace(":", "").replace(";", "").replace("-", "").replace("_", "").replace("+", "") +// .replace("=", "").replace("\"", "").replace("'", "")); +// String tempFilePath = ConfigProperties.getPropertyByName("tempFilePath"); +// newFile = new FileOutputStream(tempFilePath + "/" + kmFileManager.getFileName()); +// newFile.write(Base64.getDecoder().decode(kmFileManager.getFileContent())); +// newFile.flush(); +// newFile.close(); +// fis = new FileInputStream(tempFilePath + "/" + kmFileManager.getFileName()); +// String checksum = DigestUtils.md5DigestAsHex(fis); +// fis.close(); +// logger.info("File is " + kmFileManager.getFileName()); +// logger.info("File size is " + new File(tempFilePath + "/" + kmFileManager.getFileName()).length()); +// logger.info("File checksum is " + checksum); +// logger.info("File checksum length is " + checksum.length()); +// kmFileManager.setFileCheckSum(checksum); +// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_PENDING); +// String version = getFileVersion(kmFileManager); +// kmFileManager.setVersionNo(version); +// String documentPath = kmFileManager.getProviderServiceMapID() + "/"; +// if (kmFileManager.getCategoryID() != null) { +// documentPath += kmFileManager.getCategoryID() + "/"; +// } +// if (kmFileManager.getSubCategoryID() != null) { +// documentPath += kmFileManager.getSubCategoryID() + "/"; +// } +// if (kmFileManager.getVanID() != null) +// documentPath += kmFileManager.getVanID() + "/"; +// +// documentPath += version + "/"; +// documentPath += kmFileManager.getFileName(); +// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_STARTED); +// String uuid = kmService.createDocument(documentPath, tempFilePath + "/" + kmFileManager.getFileName()); +// if (uuid != null) { +// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_COMPLETED); +// kmFileManager.setFileUID(uuid); +// savedFileManagers.add(kmFileManagerRepository.save(kmFileManager)); +// if (kmFileManager.getSubCategoryID() != null) { +// updateSubcategoryFilePath(kmFileManager); +// } +// } +// } +// } +// } +// catch(Exception e) +// { +// logger.error("error " + e.getMessage()); +// } +// finally +// { +// if(newFile !=null) +// newFile.close(); +// if(fis !=null) +// fis.close(); +// } +// return savedFileManagers; +// } + private ArrayList addKMFile(Iterable kmFileManagers) throws IOException, NoSuchAlgorithmException { ArrayList savedFileManagers = new ArrayList(); @@ -175,6 +247,9 @@ private ArrayList addKMFile(Iterable kmFileManager if (uuid != null) { kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_COMPLETED); kmFileManager.setFileUID(uuid); + + kmFileManager.setSubCategoryID(kmFileManager.getSubCategoryID()); + savedFileManagers.add(kmFileManagerRepository.save(kmFileManager)); if (kmFileManager.getSubCategoryID() != null) { updateSubcategoryFilePath(kmFileManager); @@ -197,6 +272,7 @@ private ArrayList addKMFile(Iterable kmFileManager return savedFileManagers; } + private void updateSubcategoryFilePath(KMFileManager kmFileManager) { subCategoryRepository.updateFilePath(kmFileManager.getSubCategoryID(), kmFileManager.getFileUID()); } diff --git a/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java b/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java index fe081acb..e1010cf6 100644 --- a/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java +++ b/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java @@ -57,6 +57,7 @@ import com.iemr.common.utils.exception.IEMRException; import com.iemr.common.utils.mapper.InputMapper; import com.iemr.common.data.common.DocFileManager; +import com.iemr.common.data.kmfilemanager.KMFileManager; @Service @PropertySource("classpath:/application.properties") @@ -133,29 +134,67 @@ public Iterable getCategories() { return categoriesList; } +// @Override +// public Iterable getSubCategories(String request) throws IEMRException, JsonMappingException, JsonProcessingException { +// ObjectMapper objectMapper = new ObjectMapper(); +// SubCategoryDetails subCategoryDetails = objectMapper.readValue(request, SubCategoryDetails.class); +// List subCategoriesList = new ArrayList(); +// ArrayList lists = subCategoryRepository.findByCategoryID(subCategoryDetails.getCategoryID()); +// for (Object[] objects : lists) { +// if (objects != null && objects.length > 1) { +// String SubCatFilePath = (String) objects[2]; +// String fileUIDAsURI = null; +// String fileNameWithExtension = null; +// if(SubCatFilePath!=null) { +// fileUIDAsURI=getFilePath(SubCatFilePath); +// List fileNameList = kmFileManagerRepository.getFileNameByUID(SubCatFilePath); +// Object[] fileobjects = fileNameList.get(0); +// fileNameWithExtension= (String)fileobjects[0]+ (String) fileobjects[1]; +// } +// subCategoriesList.add(new SubCategoryDetails((Integer) objects[0], (String) objects[1], SubCatFilePath, fileUIDAsURI, fileNameWithExtension)); +// } +// } +// return subCategoriesList; +// } + + //newChange @Override public Iterable getSubCategories(String request) throws IEMRException, JsonMappingException, JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); - SubCategoryDetails subCategoryDetails = objectMapper.readValue(request, SubCategoryDetails.class); - List subCategoriesList = new ArrayList(); - ArrayList lists = subCategoryRepository.findByCategoryID(subCategoryDetails.getCategoryID()); - for (Object[] objects : lists) { - if (objects != null && objects.length > 1) { - String SubCatFilePath = (String) objects[2]; - String fileUIDAsURI = null; - String fileNameWithExtension = null; - if(SubCatFilePath!=null) { - fileUIDAsURI=getFilePath(SubCatFilePath); - List fileNameList = kmFileManagerRepository.getFileNameByUID(SubCatFilePath); - Object[] fileobjects = fileNameList.get(0); - fileNameWithExtension= (String)fileobjects[0]+ (String) fileobjects[1]; - } - subCategoriesList.add(new SubCategoryDetails((Integer) objects[0], (String) objects[1], SubCatFilePath, fileUIDAsURI, fileNameWithExtension)); - } - } - return subCategoriesList; + ObjectMapper objectMapper = new ObjectMapper(); + SubCategoryDetails subCategoryDetails = objectMapper.readValue(request, SubCategoryDetails.class); + List subCategoriesList = new ArrayList<>(); + ArrayList lists = subCategoryRepository.findByCategoryID(subCategoryDetails.getCategoryID()); + + for (Object[] objects : lists) { + if (objects != null && objects.length > 1) { + Integer subCatId = (Integer) objects[0]; + String subCatName = (String) objects[1]; + + // Fetch all files under this subcategory from KMFileManager + List files = kmFileManagerRepository.getFilesBySubCategoryID(subCatId); + ArrayList fileList = new ArrayList<>(files); + + String fileURL = null; + String fileNameWithExtension = null; + + if (!fileList.isEmpty()) { + KMFileManager firstFile = fileList.get(0); // Just for representative file URL and name + fileURL = getFilePath(firstFile.getFileUID()); + fileNameWithExtension = firstFile.getFileName() + firstFile.getFileExtension(); + } + + SubCategoryDetails subCategory = new SubCategoryDetails(subCatId, subCatName); + subCategory.setFileManger(fileList); // Attach all files here + subCategory.setFileURL(fileURL); // Representative file URL + subCategory.setFileNameWithExtension(fileNameWithExtension); // Representative file name+ext + + subCategoriesList.add(subCategory); + } + } + return subCategoriesList; } + private String getFilePath(String fileUID) { String fileUIDAsURI = null; From c1021eaadf0b00fc67d918bf8ca0891208aff976 Mon Sep 17 00:00:00 2001 From: SR20290919 Date: Fri, 27 Jun 2025 16:57:50 +0530 Subject: [PATCH 3/7] removed commented code --- .../KMFileManagerServiceImpl.java | 71 ------------------- .../service/services/CommonServiceImpl.java | 22 ------ 2 files changed, 93 deletions(-) diff --git a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java index df34dd5b..7a24c6da 100644 --- a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java +++ b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java @@ -125,77 +125,6 @@ public String addKMFile(String request) throws IOException, NoSuchAlgorithmExcep return kmFileManagers.toString(); } -// private ArrayList addKMFile(Iterable kmFileManagers) -// throws IOException, NoSuchAlgorithmException { -// ArrayList savedFileManagers = new ArrayList(); -// FileOutputStream newFile = null; -// FileInputStream fis = null; -// try -// { -// for (KMFileManager kmFileManager : kmFileManagers) { -// if (kmFileManager.getFileName() != null && kmFileManager.getProviderServiceMapID() != null -// && kmFileManager.getFileContent() != null) { -// kmFileManager.setFileName(kmFileManager.getFileName().replace("`", "").replace("'", "").replace("$", "") -// .replace("\\", "").replace("/", "").replace("~", "").replace("`", "").replace("!", "") -// .replace("@", "").replace("#", "").replace("$", "").replace("%", "").replace("^", "") -// .replace("&", "").replace("*", "").replace("(", "").replace(")", "").replace("{", "") -// .replace("}", "").replace("[", "").replace("]", "").replace("|", "").replace("\\", "") -// .replace(":", "").replace(";", "").replace("-", "").replace("_", "").replace("+", "") -// .replace("=", "").replace("\"", "").replace("'", "")); -// String tempFilePath = ConfigProperties.getPropertyByName("tempFilePath"); -// newFile = new FileOutputStream(tempFilePath + "/" + kmFileManager.getFileName()); -// newFile.write(Base64.getDecoder().decode(kmFileManager.getFileContent())); -// newFile.flush(); -// newFile.close(); -// fis = new FileInputStream(tempFilePath + "/" + kmFileManager.getFileName()); -// String checksum = DigestUtils.md5DigestAsHex(fis); -// fis.close(); -// logger.info("File is " + kmFileManager.getFileName()); -// logger.info("File size is " + new File(tempFilePath + "/" + kmFileManager.getFileName()).length()); -// logger.info("File checksum is " + checksum); -// logger.info("File checksum length is " + checksum.length()); -// kmFileManager.setFileCheckSum(checksum); -// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_PENDING); -// String version = getFileVersion(kmFileManager); -// kmFileManager.setVersionNo(version); -// String documentPath = kmFileManager.getProviderServiceMapID() + "/"; -// if (kmFileManager.getCategoryID() != null) { -// documentPath += kmFileManager.getCategoryID() + "/"; -// } -// if (kmFileManager.getSubCategoryID() != null) { -// documentPath += kmFileManager.getSubCategoryID() + "/"; -// } -// if (kmFileManager.getVanID() != null) -// documentPath += kmFileManager.getVanID() + "/"; -// -// documentPath += version + "/"; -// documentPath += kmFileManager.getFileName(); -// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_STARTED); -// String uuid = kmService.createDocument(documentPath, tempFilePath + "/" + kmFileManager.getFileName()); -// if (uuid != null) { -// kmFileManager.setKmUploadStatus(KM_UPLOADSTATUS_COMPLETED); -// kmFileManager.setFileUID(uuid); -// savedFileManagers.add(kmFileManagerRepository.save(kmFileManager)); -// if (kmFileManager.getSubCategoryID() != null) { -// updateSubcategoryFilePath(kmFileManager); -// } -// } -// } -// } -// } -// catch(Exception e) -// { -// logger.error("error " + e.getMessage()); -// } -// finally -// { -// if(newFile !=null) -// newFile.close(); -// if(fis !=null) -// fis.close(); -// } -// return savedFileManagers; -// } private ArrayList addKMFile(Iterable kmFileManagers) throws IOException, NoSuchAlgorithmException { diff --git a/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java b/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java index e1010cf6..ff6f83e9 100644 --- a/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java +++ b/src/main/java/com/iemr/common/service/services/CommonServiceImpl.java @@ -134,28 +134,6 @@ public Iterable getCategories() { return categoriesList; } -// @Override -// public Iterable getSubCategories(String request) throws IEMRException, JsonMappingException, JsonProcessingException { -// ObjectMapper objectMapper = new ObjectMapper(); -// SubCategoryDetails subCategoryDetails = objectMapper.readValue(request, SubCategoryDetails.class); -// List subCategoriesList = new ArrayList(); -// ArrayList lists = subCategoryRepository.findByCategoryID(subCategoryDetails.getCategoryID()); -// for (Object[] objects : lists) { -// if (objects != null && objects.length > 1) { -// String SubCatFilePath = (String) objects[2]; -// String fileUIDAsURI = null; -// String fileNameWithExtension = null; -// if(SubCatFilePath!=null) { -// fileUIDAsURI=getFilePath(SubCatFilePath); -// List fileNameList = kmFileManagerRepository.getFileNameByUID(SubCatFilePath); -// Object[] fileobjects = fileNameList.get(0); -// fileNameWithExtension= (String)fileobjects[0]+ (String) fileobjects[1]; -// } -// subCategoriesList.add(new SubCategoryDetails((Integer) objects[0], (String) objects[1], SubCatFilePath, fileUIDAsURI, fileNameWithExtension)); -// } -// } -// return subCategoriesList; -// } //newChange @Override From 3b8f46f8119b18a28a81a72c544ef6050c4024e6 Mon Sep 17 00:00:00 2001 From: SR20290919 Date: Mon, 30 Jun 2025 12:14:36 +0530 Subject: [PATCH 4/7] removed commented code --- .../com/iemr/common/data/kmfilemanager/KMFileManager.java | 5 +---- .../repository/kmfilemanager/KMFileManagerRepository.java | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java b/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java index 6409837f..ed7f0b84 100644 --- a/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java +++ b/src/main/java/com/iemr/common/data/kmfilemanager/KMFileManager.java @@ -110,11 +110,8 @@ public class KMFileManager { @Transient @Expose private Integer categoryID; -// @Transient -// @Expose -// private Integer subCategoryID; - @Column(name = "SubCategoryID") // πŸ”΄ DB-mapped field to associate files with a subcategory + @Column(name = "SubCategoryID") @Expose private Integer subCategoryID; @Transient diff --git a/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java b/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java index 615c841b..f1e8187d 100644 --- a/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java +++ b/src/main/java/com/iemr/common/repository/kmfilemanager/KMFileManagerRepository.java @@ -75,7 +75,7 @@ ArrayList getKMFileLists(@Param("providerServiceMapID") Integer p + "where kmFileManager.fileUID = :fileUID") List getFileNameByUID(@Param("fileUID") String fileUID); - //newChange + @Query("SELECT km FROM KMFileManager km WHERE km.subCategoryID = :subCategoryID AND km.deleted = false") List getFilesBySubCategoryID(@Param("subCategoryID") Integer subCategoryID); From fd8084be757c2d8bf3de385f0afa809705a6cbd3 Mon Sep 17 00:00:00 2001 From: Amoghavarsh <93114621+5Amogh@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:01:57 +0530 Subject: [PATCH 5/7] fix: AMM-1677 - rendering only grievances who have consent (#244) --- .../com/iemr/common/dto/grivance/GrievanceWorklistDTO.java | 6 ++++-- .../service/grievance/GrievanceHandlingServiceImpl.java | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java b/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java index b8184162..6364b7f6 100644 --- a/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java +++ b/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java @@ -39,13 +39,14 @@ public class GrievanceWorklistDTO implements Serializable { private String age; private Boolean retryNeeded; private Integer callCounter; - private Timestamp lastCall; + private Timestamp lastCall; + private Boolean beneficiaryConsent; public GrievanceWorklistDTO(String complaintID,Long grievanceId, String subjectOfComplaint, String complaint, Long beneficiaryRegID, Integer providerServiceMapID,String primaryNumber,String severety,String state, Integer userId, Boolean deleted, String createdBy, Timestamp createdDate, Timestamp lastModDate, Boolean isCompleted,String firstName, String lastName, String gender, String district, Long beneficiaryID, String age, - Boolean retryNeeded, Integer callCounter, Timestamp lastCall) { + Boolean retryNeeded, Integer callCounter, Timestamp lastCall, Boolean beneficiaryConsent) { super(); this.complaintID = complaintID; this.grievanceId = grievanceId; @@ -71,6 +72,7 @@ public GrievanceWorklistDTO(String complaintID,Long grievanceId, String subjectO this.retryNeeded = retryNeeded; this.callCounter = callCounter; this.lastCall = lastCall; + this.beneficiaryConsent = beneficiaryConsent; } diff --git a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java index 68e8e76e..ed643417 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java @@ -296,7 +296,7 @@ public List getFormattedGrievanceData(String request) thro // Loop through the worklist data and format the response for (Object[] row : worklistData) { - if (row == null || row.length < 22) + if (row == null || row.length < 24) { logger.warn("invalid row data received"); continue; @@ -334,7 +334,8 @@ public List getFormattedGrievanceData(String request) thro ageFormatted, (Boolean) row[21], // retryNeeded (Integer) row[22], // callCounter - (Timestamp) row[13] //lastCall + (Timestamp) row[13], // lastCall + (Boolean) row[23] //beneficiaryConsent ); From dfe02729774ea8273080cfbea2b8879cb1729350 Mon Sep 17 00:00:00 2001 From: Amoghavarsh <93114621+5Amogh@users.noreply.github.com> Date: Fri, 4 Jul 2025 16:44:08 +0530 Subject: [PATCH 6/7] fix: AMM-1701 callcounter issue fix (#254) * fix: AMM-1677 - rendering only grievances who have consent * fix: AMM-1701 callcounter issue fix --- .../grievance/GrievanceDataSyncImpl.java | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/iemr/common/service/grievance/GrievanceDataSyncImpl.java b/src/main/java/com/iemr/common/service/grievance/GrievanceDataSyncImpl.java index 5a05b94f..35c9b57b 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceDataSyncImpl.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceDataSyncImpl.java @@ -579,41 +579,48 @@ public String completeGrievanceCall(String request) throws Exception { // Logic for reattempt based on call group type and call type boolean isRetryNeeded = grievanceCallStatus.getRetryNeeded(); - if ((null != grievanceCallStatus.getComplaintResolution() - && grievanceCallStatus.getComplaintResolution().equalsIgnoreCase("Resolved")) || (callGroupType.equalsIgnoreCase("Valid") && (callType.equalsIgnoreCase("Valid") || callType.equals("Test Call")))) { + boolean isResolved = grievanceCallStatus.getComplaintResolution() != null + && grievanceCallStatus.getComplaintResolution().equalsIgnoreCase("Resolved"); + boolean isValidGroup = callGroupType.equalsIgnoreCase("Valid") + && (callType.equalsIgnoreCase("Valid") || callType.equals("Test Call")); + boolean isInvalidGroup = callGroupType.equalsIgnoreCase("Invalid") + && (callType.equalsIgnoreCase("Wrong Number") || callType.equalsIgnoreCase("Invalid Call")); + + if (isResolved) { + // 1) Any resolved call β†’ complete, no retry isRetryNeeded = false; updateCount = grievanceDataRepo.updateCompletedStatusInCall(true, false, complaintID, userID, beneficiaryRegID); - } - else if (callGroupType.equalsIgnoreCase("Invalid") && (callType.equalsIgnoreCase("Wrong Number") || callType.equalsIgnoreCase("Invalid Call"))) { + + } else if (isValidGroup) { + // 2) Valid but not resolved β†’ leave open, retry allowed + isRetryNeeded = true; + updateCount = grievanceDataRepo.updateCompletedStatusInCall(false, true, complaintID, userID, beneficiaryRegID); + + } else if (isInvalidGroup) { + // 3) Invalid calls β†’ complete, no retry isRetryNeeded = false; - updateCount = grievanceDataRepo.updateCompletedStatusInCall(true, isRetryNeeded, complaintID, userID, - beneficiaryRegID); - }else { + updateCount = grievanceDataRepo.updateCompletedStatusInCall(true, false, complaintID, userID, beneficiaryRegID); + + } else { + // 4) All other cases (e.g. unreachable) β†’ leave open, retry allowed isRetryNeeded = true; - updateCount = grievanceDataRepo.updateCompletedStatusInCall(false, isRetryNeeded, complaintID, - userID, beneficiaryRegID); + updateCount = grievanceDataRepo.updateCompletedStatusInCall(false, true, complaintID, userID, beneficiaryRegID); } - // Check if max attempts (3) are reached + + //Call counter update if (isRetryNeeded && grievanceCallStatus.getCallCounter() < grievanceAllocationRetryConfiguration) { grievanceCallStatus.setCallCounter(grievanceCallStatus.getCallCounter() + 1); - updateCallCounter = grievanceDataRepo.updateCallCounter(grievanceCallStatus.getCallCounter(), - isRetryNeeded, grievanceCallRequest.getComplaintID(), - grievanceCallRequest.getBeneficiaryRegID(), - grievanceCallRequest.getUserID()); - if (updateCallCounter > 0) - response = "Successfully closing call"; - else { - response = "failure in closing call"; - } - } else if (grievanceCallStatus.getCallCounter() == grievanceAllocationRetryConfiguration) { - // Max attempts reached, no further reattempt + updateCallCounter = grievanceDataRepo.updateCallCounter( + grievanceCallStatus.getCallCounter(), true, complaintID, beneficiaryRegID, userID); + response = (updateCallCounter > 0) ? "Successfully closing call" : "failure in closing call"; + + } else if (grievanceCallStatus.getCallCounter() >= grievanceAllocationRetryConfiguration) { + // Max attempts reached β†’ treated as β€œcomplete” isRetryNeeded = false; - // isCompleted = true; - updateCount = grievanceDataRepo.updateCompletedStatusInCall(isCompleted, isRetryNeeded, complaintID, - userID, beneficiaryRegID); - response = "max_attempts_reached"; // Indicate that max attempts are reached + updateCount = grievanceDataRepo.updateCompletedStatusInCall(true, false, complaintID, userID, beneficiaryRegID); + response = "max_attempts_reached"; - }else if(updateCount > 0) { + } else if (updateCount > 0) { response = "Successfully closing call"; } From 46d61c0b20f43d4e5ffcb989a88408dd578cb798 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Tue, 8 Jul 2025 15:38:24 +0530 Subject: [PATCH 7/7] fix: username or password error mesage shown with failed attempt --- .../controller/users/IEMRAdminController.java | 4 +- .../users/IEMRAdminUserServiceImpl.java | 59 +++++++++++++++---- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java index 48d10fb3..28c7e4b9 100644 --- a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java +++ b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java @@ -620,10 +620,10 @@ public String forgetPassword( if (mUsers == null || mUsers.size() <= 0) { logger.error("User not found"); - throw new IEMRException("If the username is valid, you will be asked a security question"); + throw new IEMRException("If the username is registered, you will be asked a security question"); } else if (mUsers.size() > 1) { logger.error("More than 1 user found"); - throw new IEMRException("If the username is valid, you will be asked a security question"); + throw new IEMRException("If the username is registered, you will be asked a security question"); } else if (mUsers.size() == 1) { List> quesAnsList = new ArrayList<>(); diff --git a/src/main/java/com/iemr/common/service/users/IEMRAdminUserServiceImpl.java b/src/main/java/com/iemr/common/service/users/IEMRAdminUserServiceImpl.java index 591180bd..99112bdf 100644 --- a/src/main/java/com/iemr/common/service/users/IEMRAdminUserServiceImpl.java +++ b/src/main/java/com/iemr/common/service/users/IEMRAdminUserServiceImpl.java @@ -225,11 +225,6 @@ public List userAuthenticate(String userName, String password) throws Exce List users = iEMRUserRepositoryCustom.findByUserNameNew(userName); if (users.size() != 1) { throw new IEMRException("Invalid username or password"); - } else { - if (users.get(0).getDeleted()) - throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); - else if (users.get(0).getStatusID() > 2) - throw new IEMRException("Your account is not active. Please contact administrator"); } int failedAttempt = 0; if (failedLoginAttempt != null) @@ -241,6 +236,11 @@ else if (users.get(0).getStatusID() > 2) int validatePassword; validatePassword = securePassword.validatePassword(password, user.getPassword()); if (validatePassword == 1) { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + int iterations = 1001; char[] chars = password.toCharArray(); byte[] salt = getSalt(); @@ -254,12 +254,27 @@ else if (users.get(0).getStatusID() > 2) iEMRUserRepositoryCustom.save(user); } else if (validatePassword == 2) { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + iEMRUserRepositoryCustom.save(user); } else if (validatePassword == 3) { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + iEMRUserRepositoryCustom.save(user); } else if (validatePassword == 0) { - if (user.getFailedAttempt() + 1 >= failedAttempt) { + if (user.getFailedAttempt() + 1 < failedAttempt) { + user.setFailedAttempt(user.getFailedAttempt() + 1); + user = iEMRUserRepositoryCustom.save(user); + logger.warn("User Password Wrong"); + throw new IEMRException("Invalid username or password"); + } else if (user.getFailedAttempt() + 1 >= failedAttempt) { user.setFailedAttempt(user.getFailedAttempt() + 1); user.setDeleted(true); user = iEMRUserRepositoryCustom.save(user); @@ -277,6 +292,11 @@ else if (users.get(0).getStatusID() > 2) "Your account has been locked due to multiple failed login attempts. Please contact administrator."); } } else { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + if (user.getFailedAttempt() != 0) { user.setFailedAttempt(0); user = iEMRUserRepositoryCustom.save(user); @@ -310,11 +330,6 @@ public User superUserAuthenticate(String userName, String password) throws Excep if (users.size() != 1) { throw new IEMRException("Invalid username or password"); - } else { - if (users.get(0).getDeleted()) - throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); - else if (users.get(0).getStatusID() > 2) - throw new IEMRException("Your account is not active. Please contact administrator"); } int failedAttempt = 0; if (failedLoginAttempt != null) @@ -326,6 +341,11 @@ else if (users.get(0).getStatusID() > 2) int validatePassword; validatePassword = securePassword.validatePassword(password, user.getPassword()); if (validatePassword == 1) { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + int iterations = 1001; char[] chars = password.toCharArray(); byte[] salt = getSalt(); @@ -339,10 +359,20 @@ else if (users.get(0).getStatusID() > 2) iEMRUserRepositoryCustom.save(user); } else if (validatePassword == 2) { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + iEMRUserRepositoryCustom.save(user); } else if (validatePassword == 0) { - if (user.getFailedAttempt() + 1 >= failedAttempt) { + if (user.getFailedAttempt() + 1 < failedAttempt) { + user.setFailedAttempt(user.getFailedAttempt() + 1); + user = iEMRUserRepositoryCustom.save(user); + logger.warn("User Password Wrong"); + throw new IEMRException("Invalid username or password"); + } else if (user.getFailedAttempt() + 1 >= failedAttempt) { user.setFailedAttempt(user.getFailedAttempt() + 1); user.setDeleted(true); user = iEMRUserRepositoryCustom.save(user); @@ -360,6 +390,11 @@ else if (users.get(0).getStatusID() > 2) "Your account has been locked due to multiple failed login attempts. Please contact administrator."); } } else { + if (users.get(0).getDeleted()) + throw new IEMRException("Your account is locked or de-activated. Please contact administrator"); + else if (users.get(0).getStatusID() > 2) + throw new IEMRException("Your account is not active. Please contact administrator"); + if (user.getFailedAttempt() != 0) { user.setFailedAttempt(0); user = iEMRUserRepositoryCustom.save(user);