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 d364338c..0311fc2a 100644 --- a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java +++ b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java @@ -207,6 +207,18 @@ public String completeGrievanceCall( return response.toString(); } - + + @Operation(summary = "Get Grievance Details with Remarks") + @PostMapping(value = "/getCompleteGrievanceDetails", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") + public String getGrievanceDetailsWithRemarks(@RequestBody String request) { + OutputResponse response = new OutputResponse(); + try { + response.setResponse(grievanceHandlingService.getGrievanceDetailsWithRemarks(request)); + } catch (Exception e) { + logger.error("getGrievanceDetailsWithRemarks failed with error " + e.getMessage(), e); + response.setError(e); + } + return response.toString(); + } } diff --git a/src/main/java/com/iemr/common/data/grievance/GrievanceResponse.java b/src/main/java/com/iemr/common/data/grievance/GrievanceResponse.java new file mode 100644 index 00000000..516df3dd --- /dev/null +++ b/src/main/java/com/iemr/common/data/grievance/GrievanceResponse.java @@ -0,0 +1,70 @@ +package com.iemr.common.data.grievance; + +import java.sql.Timestamp; + +public class GrievanceResponse { + private Long grievanceId; + private String complaintID; + private String primaryNumber; + private String complaintResolution; + private String remarks; + private Timestamp createdDate; + private Timestamp lastModDate; + + // Getters and Setters + public Long getGrievanceId() { + return grievanceId; + } + + public void setGrievanceId(Long grievanceId) { + this.grievanceId = grievanceId; + } + + public String getComplaintID() { + return complaintID; + } + + public void setComplaintID(String complaintID) { + this.complaintID = complaintID; + } + + public String getPrimaryNumber() { + return primaryNumber; + } + + public void setPrimaryNumber(String primaryNumber) { + this.primaryNumber = primaryNumber; + } + + public String getComplaintResolution() { + return complaintResolution; + } + + public void setComplaintResolution(String complaintResolution) { + this.complaintResolution = complaintResolution; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Timestamp getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(Timestamp createdDate) { + this.createdDate = createdDate; + } + + public Timestamp getLastModDate() { + return lastModDate; + } + + public void setLastModDate(Timestamp lastModDate) { + this.lastModDate = lastModDate; + } +} diff --git a/src/main/java/com/iemr/common/repository/callhandling/BeneficiaryCallRepository.java b/src/main/java/com/iemr/common/repository/callhandling/BeneficiaryCallRepository.java index 60ec1b71..e48e8f9d 100644 --- a/src/main/java/com/iemr/common/repository/callhandling/BeneficiaryCallRepository.java +++ b/src/main/java/com/iemr/common/repository/callhandling/BeneficiaryCallRepository.java @@ -190,5 +190,8 @@ public ArrayList getExistingBCByCallIDAndAgentID(@Param("callID public int updateBeneficiaryRegIDInCall(@Param("benCallID") Long benCallID, @Param("beneficiaryRegID") Long beneficiaryRegID); BeneficiaryCall findByBenCallID(Long benCallID); + + @Query("SELECT b.remarks FROM BeneficiaryCall b WHERE b.beneficiaryRegID = :beneficiaryRegID") + List fetchBenCallRemarks(@Param("beneficiaryRegID") Long beneficiaryRegID); } 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 f51083c2..35f1e124 100644 --- a/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java +++ b/src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java @@ -2,6 +2,7 @@ import java.sql.Timestamp; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Set; @@ -123,5 +124,25 @@ public int updateCallCounter(@Param("callCounter") Integer callCounter, @Param("beneficiaryRegID") Long beneficiaryRegID, @Param("providerServiceMapID") Integer providerServiceMapID, @Param("userID") Integer userID); + + @Query("SELECT g FROM GrievanceDetails g WHERE " + + "(g.state = :state OR :state IS NULL) " + + "AND (g.complaintResolution = :complaintResolution OR :complaintResolution IS NULL) " + + "AND g.createdDate BETWEEN :startDate AND :endDate") + List fetchGrievanceDetailsBasedOnParams( + @Param("state") String state, + @Param("complaintResolution") String complaintResolution, + @Param("startDate") Date startDate, + @Param("endDate") Date endDate); + + + @Query("SELECT g FROM GrievanceDetails g WHERE g.complaintID = :complaintID") + List fetchGrievanceWorklistByComplaintID(@Param("complaintID") String complaintID); + + +@Query("SELECT g.remarks FROM GrievanceDetails g WHERE g.complaintID = :complaintID") +List fetchGrievanceWorklistRemarks(@Param("complaintID") String complaintID); + + } 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 1eba9801..c1a19866 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java @@ -21,6 +21,8 @@ public interface GrievanceHandlingService { public List getFormattedGrievanceData(String request) throws Exception; public String saveComplaintResolution(String request) throws Exception; + + public String getGrievanceDetailsWithRemarks(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 094183db..bc77cae2 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java @@ -1,8 +1,13 @@ package com.iemr.common.service.grievance; import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; +import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -16,13 +21,16 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import com.fasterxml.jackson.databind.ObjectMapper; import com.iemr.common.data.grievance.GetGrievanceWorklistRequest; import com.iemr.common.data.grievance.GrievanceAllocationRequest; import com.iemr.common.data.grievance.GrievanceDetails; import com.iemr.common.data.grievance.GrievanceReallocationRequest; +import com.iemr.common.data.grievance.GrievanceResponse; import com.iemr.common.data.grievance.MoveToBinRequest; import com.iemr.common.dto.grivance.GrievanceTransactionDTO; import com.iemr.common.dto.grivance.GrievanceWorklistDTO; +import com.iemr.common.repository.callhandling.BeneficiaryCallRepository; import com.iemr.common.repository.grievance.GrievanceDataRepo; import com.iemr.common.repository.grievance.GrievanceOutboundRepository; import com.iemr.common.utils.exception.IEMRException; @@ -37,11 +45,14 @@ public class GrievanceHandlingServiceImpl implements GrievanceHandlingService { private final GrievanceDataRepo grievanceDataRepo; private final GrievanceOutboundRepository grievanceOutboundRepo; + private final BeneficiaryCallRepository beneficiaryCallRepo; @Autowired - public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo, GrievanceOutboundRepository grievanceOutboundRepo) { + public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo, GrievanceOutboundRepository grievanceOutboundRepo, + BeneficiaryCallRepository beneficiaryCallRepo) { this.grievanceDataRepo = grievanceDataRepo; this.grievanceOutboundRepo = grievanceOutboundRepo; + this.beneficiaryCallRepo = beneficiaryCallRepo; } @Value("${grievanceAllocationRetryConfiguration}") @@ -386,5 +397,128 @@ public String saveComplaintResolution(String request) throws Exception { throw new Exception("Failed to update complaint resolution"); } } + + + + + private Date parseDate(String dateStr) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + return dateFormat.parse(dateStr); + } catch (ParseException e) { + logger.error("Error parsing date for grievance: " + dateStr, e); + throw new IllegalArgumentException("Invalid date format in request:"+ dateStr); + } +} + + + @Override + public String getGrievanceDetailsWithRemarks(String request) throws Exception { + ObjectMapper objectMapper = new ObjectMapper(); + + try { + // Parsing request to get the filter parameters (State, ComplaintResolution, StartDate, EndDate) + JSONObject requestObj = new JSONObject(request); + String complaintResolution = requestObj.optString("ComplaintResolution", null); + String state = requestObj.optString("State", null); + String fromDate = requestObj.optString("StartDate"); + String toDate = requestObj.optString("EndDate"); + + if (fromDate == null || toDate == null) { + throw new IllegalArgumentException("fromDate and toDate are required"); + } + // Convert StartDate and EndDate to Date objects + Date startDateStr = parseDate(fromDate); + Date endDateStr = parseDate(toDate); + + List grievanceDetailsList = grievanceDataRepo.fetchGrievanceDetailsBasedOnParams(state, complaintResolution, startDateStr, endDateStr); // Fetch grievance details based on the request + + if (grievanceDetailsList == null || grievanceDetailsList.isEmpty()) { + return "No grievance details found for the provided request."; + } + + List grievanceResponseList = new ArrayList<>(); + + + // Determine if the complaintResolution is "resolved" or "unresolved" + for (GrievanceDetails grievance : grievanceDetailsList) { + GrievanceResponse grievanceResponse = new GrievanceResponse(); + + // Set basic grievance details + grievanceResponse.setGrievanceId(grievance.getGrievanceId()); + grievanceResponse.setComplaintID(grievance.getComplaintID()); + grievanceResponse.setPrimaryNumber(grievance.getPrimaryNumber()); + grievanceResponse.setComplaintResolution(grievance.getComplaintResolution()); + grievanceResponse.setCreatedDate(grievance.getCreatedDate()); + grievanceResponse.setLastModDate(grievance.getLastModDate()); + + // Fetch and set remarks based on complaintResolution value + String remarks = ""; + if ("unresolved".equalsIgnoreCase(complaintResolution)) { + // Fetch remarks from t_bencall by joining with t_grievanceworklist based on benRegId + remarks = fetchRemarksFromBenCallByComplaint(grievance.getComplaintID()); + } else if ("resolved".equalsIgnoreCase(complaintResolution)) { + // Fetch remarks from t_grievanceworklist + remarks = fetchRemarksFromGrievanceWorklist(grievance.getComplaintID()); + } else { + // Default: Fetch remarks based on the grievance's specific conditions (no specific resolution status) + String callRemarks = fetchRemarksFromBenCallByComplaint(grievance.getComplaintID()); + if(remarks != null && !remarks.startsWith("No remarks found")) { + remarks = callRemarks; + } + else { + remarks = fetchRemarksFromGrievanceWorklist(grievance.getComplaintID()); + + } + } + + grievanceResponse.setRemarks(remarks); + + // Add to response list + grievanceResponseList.add(grievanceResponse); + } + + // Convert the list of GrievanceResponse objects to JSON and return as a string + return objectMapper.writeValueAsString(grievanceResponseList); + + } catch (Exception e) { + logger.error("Error while getting grievance details with remarks: " + e.getMessage(), e); + throw new Exception("Error processing grievance request"); + } + } + + + + private String fetchRemarksFromBenCallByComplaint(String complaintID) throws Exception { + // Query t_grievanceworklist to fetch the benRegId based on complaintID + List grievanceWorklist = grievanceDataRepo.fetchGrievanceWorklistByComplaintID(complaintID); + if (grievanceWorklist != null && !grievanceWorklist.isEmpty()) { + GrievanceDetails grievance = grievanceWorklist.get(0); + Long beneficiaryRegID = grievance.getBeneficiaryRegID(); // Fetch the beneficiaryRegID from the grievance + + // Query t_bencall to fetch remarks based on benRegId + List benCallResults = beneficiaryCallRepo.fetchBenCallRemarks(beneficiaryRegID); + + if (benCallResults != null && !benCallResults.isEmpty()) { + return (String) benCallResults.get(0)[0]; // Fetch the remarks + } + } + + return "No remarks found in t_bencall"; + } + + private String fetchRemarksFromGrievanceWorklist(String complaintID) throws JSONException { + // Query t_grievanceworklist to fetch remarks based on complaintID + List grievanceWorklistResults = grievanceDataRepo.fetchGrievanceWorklistRemarks(complaintID); + + if (grievanceWorklistResults != null && !grievanceWorklistResults.isEmpty()) { + // Assuming grievanceWorklistResults has a format like [remarks] for simplicity + return (String) grievanceWorklistResults.get(0)[0]; // Fetch the remarks + } + return "No remarks found in t_grievanceworklist"; + } + + } +