diff --git a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java index dcfea8f7..b422a240 100644 --- a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java +++ b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java @@ -87,7 +87,7 @@ public String allocateGrievances( @Operation(summary = "Allocated Grievance Records Count") @PostMapping(value = "/allocatedGrievanceRecordsCount", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") public String allocatedGrievanceRecordsCount(@Param(value = "{\"providerServiceMapID\":\"Service ID integer\", " - + "\"assignedUserID\":\"Optional - Integer user ID to whom grievances are assigned\"}") @RequestBody String request) { + + "\"userID\":\"Optional - Integer user ID to whom grievances are assigned\"}") @RequestBody String request) { OutputResponse response = new OutputResponse(); try { response.setResponse(grievanceHandlingService.allocatedGrievanceRecordsCount(request)); @@ -156,4 +156,27 @@ public ResponseEntity> getGrievanceOutboundWorklist(@ } + + @Operation(summary = "Save complaint resolution and remarks") + @PostMapping(value = "/saveComplaintResolution", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") + public String saveComplaintResolution( @Param(value = "{\"complaintID\":\"Complaint ID string\", " + + "\"complaintResolution\":\"Resolution text\", " + + "\"remarks\":\"Optional remarks\", " + + "\"beneficiaryRegID\":\"Beneficiary registration ID\", " + + "\"providerServiceMapID\":\"Provider service map ID\", " + + "\"userID\":\"Assigned user ID\", " + + "\"createdBy\":\"Creator of the complaint\", " + + "\"benCallID\":\"Beneficiary call ID\"}") + @RequestBody String request) { + OutputResponse response = new OutputResponse(); + try { + response.setResponse(grievanceHandlingService.saveComplaintResolution(request)); + } catch (Exception e) { + logger.error("saveComplaintResolution failed with error " + e.getMessage(), e); + response.setError(e); + } + return response.toString(); + } + + } diff --git a/src/main/java/com/iemr/common/data/grievance/GrievanceDetails.java b/src/main/java/com/iemr/common/data/grievance/GrievanceDetails.java index 1a39edf1..910ab886 100644 --- a/src/main/java/com/iemr/common/data/grievance/GrievanceDetails.java +++ b/src/main/java/com/iemr/common/data/grievance/GrievanceDetails.java @@ -16,6 +16,7 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; import lombok.Data; import lombok.NoArgsConstructor; @@ -81,7 +82,7 @@ public class GrievanceDetails { @Expose @Column(name = "userid") - private Integer assignedUserID; + private Integer userID; @Expose @Column(name = "isAllocated") @@ -106,6 +107,15 @@ public class GrievanceDetails { @Expose @Column(name = "PreferredLanguage") private String preferredLanguage; + + @Expose + @Column(name = "ComplaintResolution") + private String complaintResolution; + + @Expose + @Column(name = "Remarks") + @Size(max = 5000, message = "Remarks cannot exceed 5000 characters") + private String remarks; @Column(name = "Deleted", insertable = false, updatable = true) private Boolean deleted = false; @@ -161,7 +171,7 @@ public GrievanceDetails(Long gwid, Long grievanceId, Long beneficiaryRegID, Long Integer providerServiceMapID, String complaintID, String subjectOfComplaint, String complaint, String primaryNumber, String severety, String state, String agentID, Integer userid, Boolean isAllocated, Boolean retryNeeded, Boolean isRegistered, Integer callCounter, Integer preferredLanguageId, - String preferredLanguage, Boolean deleted, Character processed, String createdBy, Timestamp createdDate, + String preferredLanguage, String complaintResolution, String remarks, Boolean deleted, Character processed, String createdBy, Timestamp createdDate, String modifiedBy, Timestamp lastModDate, Integer vanSerialNo, Integer vanID, String vehicalNo, Integer parkingPlaceID, String syncedBy, Timestamp syncedDate, Boolean isCompleted) { super(); @@ -177,13 +187,15 @@ public GrievanceDetails(Long gwid, Long grievanceId, Long beneficiaryRegID, Long this.severety = severety; this.state = state; this.agentid = agentID; - this.assignedUserID = userid; + this.userID = userid; this.isAllocated = isAllocated; this.retryNeeded = retryNeeded; this.isRegistered = isRegistered; this.callCounter = callCounter; this.preferredLanguageId = preferredLanguageId; this.preferredLanguage = preferredLanguage; + this.complaintResolution = complaintResolution; + this.remarks = remarks; this.deleted = deleted; this.processed = processed; this.createdBy = createdBy; diff --git a/src/main/java/com/iemr/common/data/grievance/MoveToBinRequest.java b/src/main/java/com/iemr/common/data/grievance/MoveToBinRequest.java index 7c095ec1..52c391b7 100644 --- a/src/main/java/com/iemr/common/data/grievance/MoveToBinRequest.java +++ b/src/main/java/com/iemr/common/data/grievance/MoveToBinRequest.java @@ -6,7 +6,7 @@ public class MoveToBinRequest { private Integer providerServiceMapID; - private Integer assignedUserID; + private Integer userID; private String preferredLanguageName; private Boolean is1097; private Integer noOfCalls; diff --git a/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java b/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java index 151ab91d..f69c2ecd 100644 --- a/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java +++ b/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java @@ -27,40 +27,40 @@ List findGrievancesInDateRangeAndLanguage(@Param("startDate") @Modifying - @Query("UPDATE GrievanceDetails g SET g.isAllocated = true, g.assignedUserID = :assignedUserId WHERE g.grievanceId = :grievanceId") + @Query("UPDATE GrievanceDetails g SET g.isAllocated = true, g.userID = :userId WHERE g.grievanceId = :grievanceId") @Transactional public int allocateGrievance(@Param("grievanceId") Long grievanceId, - @Param("assignedUserId") Integer assignedUserId); + @Param("userId") Integer userId); @Query(nativeQuery = true, value = "SELECT PreferredLanguageId, PreferredLanguage, VanSerialNo, VanID, ParkingPlaceId, VehicalNo FROM db_identity.i_beneficiarydetails WHERE BeneficiaryRegID = :benRegId") public ArrayList getBeneficiaryGrievanceDetails(@Param("benRegId") Long benRegId); @Query("select grievance.preferredLanguage, count(distinct grievance.grievanceId) " + "from GrievanceDetails grievance " + "where grievance.providerServiceMapID = :providerServiceMapID " - + "and grievance.assignedUserID = :assignedUserID " + "and grievance.deleted = false " + + "and grievance.userID = :userID " + "and grievance.deleted = false " + "group by grievance.preferredLanguage") public Set fetchGrievanceRecordsCount(@Param("providerServiceMapID") Integer providerServiceMapID, - @Param("assignedUserID") Integer assignedUserID); + @Param("userID") Integer userID); - @Query("SELECT g FROM GrievanceDetails g WHERE g.assignedUserID = :assignedUserID AND g.preferredLanguage = :language AND g.isAllocated = true") - List findAllocatedGrievancesByUserAndLanguage(@Param("assignedUserID") Integer assignedUserID, + @Query("SELECT g FROM GrievanceDetails g WHERE g.userID = :userID AND g.preferredLanguage = :language AND g.isAllocated = true") + List findAllocatedGrievancesByUserAndLanguage(@Param("userID") Integer userID, @Param("language") String language); @Modifying - @Query("UPDATE GrievanceDetails g SET g.assignedUserID = :assignedUserID WHERE g.grievanceId = :grievanceId") + @Query("UPDATE GrievanceDetails g SET g.userID = :userID WHERE g.grievanceId = :grievanceId") @Transactional public int reallocateGrievance(@Param("grievanceId") Long grievanceId, - @Param("assignedUserID") Integer assignedUserID); + @Param("userID") Integer userID); - @Query("SELECT g FROM GrievanceDetails g WHERE g.assignedUserID = :assignedUserID " + @Query("SELECT g FROM GrievanceDetails g WHERE g.userID = :userID " + "AND g.preferredLanguage = :preferredLanguageName") - List findGrievancesByUserAndLanguage(@Param("assignedUserID") Integer assignedUserID, + List findGrievancesByUserAndLanguage(@Param("userID") Integer userID, @Param("preferredLanguageName") String language); @Modifying @Transactional - @Query("UPDATE GrievanceDetails g SET g.assignedUserID = NULL WHERE g.grievanceId = :grievanceId AND g.assignedUserID = :assignedUserID") - int unassignGrievance(@Param("grievanceId") Long grievanceId, @Param("assignedUserID") Integer assignedUserID); + @Query("UPDATE GrievanceDetails g SET g.userID = NULL WHERE g.grievanceId = :grievanceId AND g.userID = :userID") + int unassignGrievance(@Param("grievanceId") Long grievanceId, @Param("userID") Integer userID); @Modifying @Transactional @@ -70,5 +70,30 @@ int updateGrievanceAllocationStatus(@Param("grievanceId") Long grievanceId, @Query("Select grievance.preferredLanguage, count(grievance) from GrievanceDetails grievance where grievance.isAllocated=false group by grievance.preferredLanguage") public Set fetchUnallocatedGrievanceCount(); + + @Modifying + @Query("UPDATE GrievanceDetails g SET g.complaintResolution = :complaintResolution, g.remarks = :remarks, g.modifiedBy = :modifiedBy, " + + "WHERE g.complaintID = :complaintID AND g.beneficiaryRegID = :beneficiaryRegID AND g.providerServiceMapID = :providerServiceMapID" + + " AND g.userID = :userID") + @Transactional + int updateComplaintResolution(@Param("complaintResolution") String complaintResolution, + @Param("remarks") String remarks, + @Param("modifiedBy") String modifiedBy, + @Param("complaintID") String complaintID, + @Param("beneficiaryRegID") Long beneficiaryRegID, + @Param("providerServiceMapID") Integer providerServiceMapID, + @Param("userID") Integer userID); + + @Modifying + @Query("UPDATE GrievanceDetails g SET g.complaintResolution = :complaintResolution, g.modifiedBy = :modifiedBy, " + + "WHERE g.complaintID = :complaintID AND g.beneficiaryRegID = :beneficiaryRegID AND g.providerServiceMapID = :providerServiceMapID" + + " AND g.userID = :userID") + @Transactional + int updateComplaintResolution(@Param("complaintResolution") String complaintResolution, + @Param("modifiedBy") String modifiedBy, + @Param("complaintID") String complaintID, + @Param("beneficiaryRegID") Long beneficiaryRegID, + @Param("providerServiceMapID") Integer providerServiceMapID, + @Param("userID") Integer userID); } diff --git a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java index 1f8ecd6a..1eba9801 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java @@ -20,4 +20,7 @@ public interface GrievanceHandlingService { public List getFormattedGrievanceData(String request) throws Exception; + public String saveComplaintResolution(String request) throws Exception; + + } 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 f850f1f5..094183db 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java @@ -104,9 +104,9 @@ public String allocatedGrievanceRecordsCount(String request) throws IEMRExceptio GrievanceDetails grievanceRequest = InputMapper.gson().fromJson(request, GrievanceDetails.class); Integer providerServiceMapID = grievanceRequest.getProviderServiceMapID(); - Integer assignedUserID = grievanceRequest.getAssignedUserID(); + Integer userID = grievanceRequest.getUserID(); - Set resultSet = grievanceDataRepo.fetchGrievanceRecordsCount(providerServiceMapID, assignedUserID); + Set resultSet = grievanceDataRepo.fetchGrievanceRecordsCount(providerServiceMapID, userID); JSONObject result = new JSONObject(); result.put("All", 0); @@ -194,7 +194,7 @@ public String moveToBin(String request) throws Exception { // Step 2: Fetch grievances based on assigned user, language // condition List grievances = grievanceDataRepo.findGrievancesByUserAndLanguage( - moveToBinRequest.getAssignedUserID(), moveToBinRequest.getPreferredLanguageName()); + moveToBinRequest.getUserID(), moveToBinRequest.getPreferredLanguageName()); if (grievances.isEmpty()) { throw new Exception("No grievances found for the given user, language, and condition."); @@ -220,7 +220,7 @@ public String moveToBin(String request) throws Exception { int totalUnassigned = 0; for (GrievanceDetails grievance : grievancesToMove) { int rowsAffected = grievanceDataRepo.unassignGrievance(grievance.getGrievanceId(), - moveToBinRequest.getAssignedUserID()); + moveToBinRequest.getUserID()); if (rowsAffected > 0) { grievance.setIsAllocated(false); // Assuming there's a setter for this flag int updateFlagResult = grievanceDataRepo.updateGrievanceAllocationStatus(grievance.getGrievanceId(), @@ -228,14 +228,14 @@ public String moveToBin(String request) throws Exception { if (updateFlagResult > 0) { totalUnassigned++; logger.debug("Unassigned grievance ID {} from user ID {}", grievance.getGrievanceId(), - moveToBinRequest.getAssignedUserID()); + moveToBinRequest.getUserID()); } else { logger.error("Failed to unassign grievance ID {} from user ID {}", grievance.getGrievanceId(), - moveToBinRequest.getAssignedUserID()); + moveToBinRequest.getUserID()); } } else { logger.error("Failed to unassign grievance ID {} from user ID {}", grievance.getGrievanceId(), - moveToBinRequest.getAssignedUserID()); + moveToBinRequest.getUserID()); } } @@ -326,4 +326,65 @@ public List getFormattedGrievanceData(String request) thro return formattedGrievances; } + + /** + * Saves the complaint resolution and remarks for a grievance. + * + * @param request JSON string containing complaint resolution details + * @return Success message if the update is successful + */ + + @Transactional + public String saveComplaintResolution(String request) throws Exception { + // Parse the request JSON into a GrievanceDetails object + GrievanceDetails grievanceRequest = InputMapper.gson().fromJson(request, GrievanceDetails.class); + + if (grievanceRequest.getComplaintID() == null || grievanceRequest.getComplaintID().trim().isEmpty()) { + throw new IllegalArgumentException("ComplaintID is required"); + } + if (grievanceRequest.getComplaintResolution() == null || grievanceRequest.getComplaintResolution().trim().isEmpty()) { + throw new IllegalArgumentException("ComplaintResolution is required"); + } + if (grievanceRequest.getBeneficiaryRegID() == null) { + throw new IllegalArgumentException("BeneficiaryRegID is required"); + } + if (grievanceRequest.getProviderServiceMapID() == null) { + throw new IllegalArgumentException("ProviderServiceMapID is required"); + } + if (grievanceRequest.getUserID() == null) { + throw new IllegalArgumentException("AssignedUserID is required"); + } + if (grievanceRequest.getCreatedBy() == null) { + throw new IllegalArgumentException("CreatedBy is required"); + } + // Extract values from the request + String complaintID = grievanceRequest.getComplaintID(); + String complaintResolution = grievanceRequest.getComplaintResolution(); + String remarks = grievanceRequest.getRemarks(); + Long beneficiaryRegID = grievanceRequest.getBeneficiaryRegID(); + Integer providerServiceMapID = grievanceRequest.getProviderServiceMapID(); + Integer userID = grievanceRequest.getUserID(); + String createdBy = grievanceRequest.getCreatedBy(); + + + String modifiedBy = createdBy; + int updateCount = 0; + if (remarks == null) { + updateCount = grievanceDataRepo.updateComplaintResolution(complaintResolution, modifiedBy, complaintID, + beneficiaryRegID, providerServiceMapID, userID); + logger.debug("updated complaint resolution without remarks for complaint id: {}", complaintID); + } + else { + updateCount = grievanceDataRepo.updateComplaintResolution(complaintResolution, remarks, modifiedBy, complaintID, + beneficiaryRegID, providerServiceMapID, userID); + logger.debug("updated complaint resolution with remarks for complaint id: {}", complaintID); + + } + if (updateCount > 0) { + return "Complaint resolution updated successfully"; + } else { + throw new Exception("Failed to update complaint resolution"); + } + } + }