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 df574a12..dcfea8f7 100644 --- a/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java +++ b/src/main/java/com/iemr/common/controller/grievance/GrievanceController.java @@ -1,11 +1,18 @@ package com.iemr.common.controller.grievance; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import javax.ws.rs.core.MediaType; import org.json.JSONException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController; import com.iemr.common.data.grievance.UnallocationRequest; +import com.iemr.common.dto.grivance.GrievanceWorklistDTO; import com.iemr.common.service.grievance.GrievanceDataSync; import com.iemr.common.service.grievance.GrievanceHandlingService; import com.iemr.common.utils.exception.IEMRException; @@ -117,5 +125,35 @@ public String moveToBin(@RequestBody String request) { } return response.toString(); } + + + + @Operation(summary = "get grievance outbound worklist)") + @PostMapping(value = "/getGrievanceOutboundWorklist", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization") + public ResponseEntity> getGrievanceOutboundWorklist(@Param(value = "{\"providerServiceMapId\":\" called service ID integer\", " + + "\"userId\":\"Optional - Integer ID of user that is assigned to\"}") @RequestBody String request) { + logger.info("Request received for grievance worklist"); + List response = new ArrayList<>(); + try { + response = grievanceHandlingService.getFormattedGrievanceData(request); + + } + + catch (Exception e) { + logger.error("grievanceOutboundWorklist failed with error " + e.getMessage(), e); + List errorResponse = new ArrayList<>(); + GrievanceWorklistDTO errorDTO = new GrievanceWorklistDTO(); + errorDTO.setComplaint("Error fetching grievance data"); + errorDTO.setSubjectOfComplaint(e.getMessage()); + + // Return error response with empty list and error message + errorResponse.add(errorDTO); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse); + } + + + return ResponseEntity.ok(response); + } + } diff --git a/src/main/java/com/iemr/common/data/grievance/GetGrievanceWorklistRequest.java b/src/main/java/com/iemr/common/data/grievance/GetGrievanceWorklistRequest.java new file mode 100644 index 00000000..f0066cde --- /dev/null +++ b/src/main/java/com/iemr/common/data/grievance/GetGrievanceWorklistRequest.java @@ -0,0 +1,16 @@ +package com.iemr.common.data.grievance; + +import lombok.Data; + +@Data +public class GetGrievanceWorklistRequest { + private Integer providerServiceMapID; + private Integer userId; + + // Constructor + public GetGrievanceWorklistRequest(Integer providerServiceMapID, Integer userId) { + this.providerServiceMapID = providerServiceMapID; + this.userId = userId; + } + +} diff --git a/src/main/java/com/iemr/common/dto/grivance/GrievanceTransactionDTO.java b/src/main/java/com/iemr/common/dto/grivance/GrievanceTransactionDTO.java new file mode 100644 index 00000000..6243e001 --- /dev/null +++ b/src/main/java/com/iemr/common/dto/grivance/GrievanceTransactionDTO.java @@ -0,0 +1,33 @@ +package com.iemr.common.dto.grivance; + +import java.io.Serializable; +import java.sql.Timestamp; + + +import lombok.Data; + +@Data +public class GrievanceTransactionDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String fileName; + private String fileType; + private String redressed; + private Timestamp createdAt; + private Timestamp updatedAt; + private String comment; + + // Constructor, Getters, and Setters + + public GrievanceTransactionDTO( + String fileName, String fileType, + String redressed, Timestamp createdAt, Timestamp updatedAt, String comment) { + super(); + this.fileName = fileName; + this.fileType = fileType; + this.redressed = redressed; + this.createdAt = createdAt; + this.updatedAt = updatedAt; + this.comment = comment; + } +} diff --git a/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java b/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java new file mode 100644 index 00000000..6e4b1604 --- /dev/null +++ b/src/main/java/com/iemr/common/dto/grivance/GrievanceWorklistDTO.java @@ -0,0 +1,78 @@ +package com.iemr.common.dto.grivance; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class GrievanceWorklistDTO implements Serializable { + private static final long serialVersionUID = 1L; + + private String complaintID; + private String subjectOfComplaint; + private String complaint; + private Long beneficiaryRegID; + private Integer providerServiceMapID; + private String firstName; + private String lastName; + private String primaryNumber; + private List transactions = new ArrayList<>(); // transactions list + private String severety; + private String state; + private Integer userId; + private Boolean deleted; + private String createdBy; + private Timestamp createdDate; + private Timestamp lastModDate; + private Boolean isCompleted; + private String gender; + private String district; + private Long beneficiaryID; + private String age; + private Boolean retryNeeded; + private Integer callCounter; + // private String lastCall; // Add this field if you want + + + public GrievanceWorklistDTO(String complaintID, String subjectOfComplaint, String complaint, + Long beneficiaryRegID, Integer providerServiceMapID, String firstName, String lastName, + String primaryNumber, List transactions, String severety, String state, + Integer userId, Boolean deleted, String createdBy, Timestamp createdDate, Timestamp lastModDate, + Boolean isCompleted, String gender, String district, Long beneficiaryID, String age, + Boolean retryNeeded, Integer callCounter) { + super(); + this.complaintID = complaintID; + this.subjectOfComplaint = subjectOfComplaint; + this.complaint = complaint; + this.beneficiaryRegID = beneficiaryRegID; + this.providerServiceMapID = providerServiceMapID; + this.firstName = firstName; + this.lastName = lastName; + this.primaryNumber = primaryNumber; + this.transactions = transactions; + this.severety = severety; + this.state = state; + this.userId = userId; + this.deleted = deleted; + this.createdBy = createdBy; + this.createdDate = createdDate; + this.lastModDate = lastModDate; + this.isCompleted = isCompleted; + this.gender = gender; + this.district = district; + this.beneficiaryID = beneficiaryID; + this.age = age; + this.retryNeeded = retryNeeded; + this.callCounter = callCounter; + } + + + + +} diff --git a/src/main/java/com/iemr/common/repository/grievance/GrievanceOutboundRepository.java b/src/main/java/com/iemr/common/repository/grievance/GrievanceOutboundRepository.java new file mode 100644 index 00000000..88c50d66 --- /dev/null +++ b/src/main/java/com/iemr/common/repository/grievance/GrievanceOutboundRepository.java @@ -0,0 +1,23 @@ +package com.iemr.common.repository.grievance; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.query.Procedure; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import com.iemr.common.data.grievance.GrievanceDetails; + + +import jakarta.transaction.Transactional; + +@Repository +public interface GrievanceOutboundRepository extends JpaRepository { + + @Transactional + @Procedure(procedureName = "Pr_Grievanceworklist") + List getGrievanceWorklistData(@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 49065db7..1f8ecd6a 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java @@ -1,8 +1,11 @@ package com.iemr.common.service.grievance; +import java.util.List; + import org.json.JSONException; import org.springframework.stereotype.Service; +import com.iemr.common.dto.grivance.GrievanceWorklistDTO; import com.iemr.common.utils.exception.IEMRException; @Service @@ -14,5 +17,7 @@ public interface GrievanceHandlingService { public String reallocateGrievances(String request) throws Exception; public String moveToBin(String request) throws Exception; + + public List getFormattedGrievanceData(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 c79dd3de..f850f1f5 100644 --- a/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java +++ b/src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java @@ -1,5 +1,6 @@ package com.iemr.common.service.grievance; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; @@ -15,24 +16,32 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +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.MoveToBinRequest; +import com.iemr.common.dto.grivance.GrievanceTransactionDTO; +import com.iemr.common.dto.grivance.GrievanceWorklistDTO; import com.iemr.common.repository.grievance.GrievanceDataRepo; +import com.iemr.common.repository.grievance.GrievanceOutboundRepository; import com.iemr.common.utils.exception.IEMRException; import com.iemr.common.utils.mapper.InputMapper; +import jakarta.transaction.Transactional; + @Service public class GrievanceHandlingServiceImpl implements GrievanceHandlingService { private Logger logger = LoggerFactory.getLogger(GrievanceHandlingServiceImpl.class); private final GrievanceDataRepo grievanceDataRepo; + private final GrievanceOutboundRepository grievanceOutboundRepo; @Autowired - public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo) { + public GrievanceHandlingServiceImpl(GrievanceDataRepo grievanceDataRepo, GrievanceOutboundRepository grievanceOutboundRepo) { this.grievanceDataRepo = grievanceDataRepo; + this.grievanceOutboundRepo = grievanceOutboundRepo; } @Value("${grievanceAllocationRetryConfiguration}") @@ -233,5 +242,88 @@ public String moveToBin(String request) throws Exception { // Step 5: Return the response as count of successfully unassigned grievances return totalUnassigned + " grievances successfully moved to bin."; } - + + @Transactional + public List getFormattedGrievanceData(String request) throws Exception { + if (request == null || request.trim().isEmpty()) { + throw new IllegalArgumentException("Request cannot be null or empty"); + } + + GetGrievanceWorklistRequest getGrievanceWorklistRequest = InputMapper.gson().fromJson(request, GetGrievanceWorklistRequest.class); + + List formattedGrievances = new ArrayList<>(); + + // Fetch grievance worklist data using @Procedure annotation + List worklistData; + try { + if (getGrievanceWorklistRequest.getProviderServiceMapID() == null || + getGrievanceWorklistRequest.getUserId() == null) { + throw new IllegalArgumentException("ProviderServiceMapID and UserId are required"); + } + worklistData = grievanceOutboundRepo.getGrievanceWorklistData(getGrievanceWorklistRequest.getProviderServiceMapID(), getGrievanceWorklistRequest.getUserId()); + if (worklistData == null || worklistData.isEmpty()) { + logger.info("No grievance data found for the given criteria"); + return new ArrayList<>(); + } + } + catch (Exception e) { + logger.error("Failed to fetch grievance data: {}", e.getMessage()); + throw new Exception("Failed to retrieve grievance data", e); + } + + // Loop through the worklist data and format the response + for (Object[] row : worklistData) { + if (row == null || row.length < 28) + { + logger.warn("invalid row data received"); + continue; + } + GrievanceWorklistDTO grievance = new GrievanceWorklistDTO( + (String) row[0], // complaintID + (String) row[1], // subjectOfComplaint + (String) row[2], // complaint + (Long) row[3], // beneficiaryRegID + (Integer) row[4],// providerServiceMapID + (String) row[5], // primaryNumber + + (String) row[20], // firstName + (String) row[21], // lastName + + new ArrayList<>(),// transactions (initially empty, will be populated later) + (String) row[12], // severety + (String) row[13], // state + (Integer) row[14],// userId + (Boolean) row[15],// deleted + (String) row[16],// createdBy + (Timestamp) row[17], // createdDate + (Timestamp) row[18], // lastModDate + (Boolean) row[19], // isCompleted + (String) row[22], // gender + (String) row[23], // district + (Long) row[24], // beneficiaryID + (String) row[25], // age + (Boolean) row[26], // retryNeeded + (Integer) row[27] // callCounter + ); + + // Extract transactions from the current row and add them to the grievance object + GrievanceTransactionDTO transaction = new GrievanceTransactionDTO( + + (String) row[6], // fileName + (String) row[7], // fileType + (String) row[8], // redressed + (Timestamp) row[9], // createdAt + (Timestamp) row[10], // updatedAt + (String) row[11] // comment + ); + + grievance.getTransactions().add(transaction); // Add the transaction to the grievance's list + + // Add the grievance to the result list + formattedGrievances.add(grievance); + } + + return formattedGrievances; + + } }