Skip to content

Commit d78ac62

Browse files
authored
Merge pull request #163 from srishtigrp78/feature/version/upgrade
AMM-1146 | API to save complaint resolution and remarks for a grievance
2 parents 7ae846e + c1cabf6 commit d78ac62

6 files changed

Lines changed: 148 additions & 24 deletions

File tree

src/main/java/com/iemr/common/controller/grievance/GrievanceController.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public String allocateGrievances(
8787
@Operation(summary = "Allocated Grievance Records Count")
8888
@PostMapping(value = "/allocatedGrievanceRecordsCount", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
8989
public String allocatedGrievanceRecordsCount(@Param(value = "{\"providerServiceMapID\":\"Service ID integer\", "
90-
+ "\"assignedUserID\":\"Optional - Integer user ID to whom grievances are assigned\"}") @RequestBody String request) {
90+
+ "\"userID\":\"Optional - Integer user ID to whom grievances are assigned\"}") @RequestBody String request) {
9191
OutputResponse response = new OutputResponse();
9292
try {
9393
response.setResponse(grievanceHandlingService.allocatedGrievanceRecordsCount(request));
@@ -156,4 +156,27 @@ public ResponseEntity<List<GrievanceWorklistDTO>> getGrievanceOutboundWorklist(@
156156
}
157157

158158

159+
160+
@Operation(summary = "Save complaint resolution and remarks")
161+
@PostMapping(value = "/saveComplaintResolution", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON, headers = "Authorization")
162+
public String saveComplaintResolution( @Param(value = "{\"complaintID\":\"Complaint ID string\", " +
163+
"\"complaintResolution\":\"Resolution text\", " +
164+
"\"remarks\":\"Optional remarks\", " +
165+
"\"beneficiaryRegID\":\"Beneficiary registration ID\", " +
166+
"\"providerServiceMapID\":\"Provider service map ID\", " +
167+
"\"userID\":\"Assigned user ID\", " +
168+
"\"createdBy\":\"Creator of the complaint\", " +
169+
"\"benCallID\":\"Beneficiary call ID\"}")
170+
@RequestBody String request) {
171+
OutputResponse response = new OutputResponse();
172+
try {
173+
response.setResponse(grievanceHandlingService.saveComplaintResolution(request));
174+
} catch (Exception e) {
175+
logger.error("saveComplaintResolution failed with error " + e.getMessage(), e);
176+
response.setError(e);
177+
}
178+
return response.toString();
179+
}
180+
181+
159182
}

src/main/java/com/iemr/common/data/grievance/GrievanceDetails.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import jakarta.persistence.OneToMany;
1717
import jakarta.persistence.Table;
1818
import jakarta.validation.constraints.NotBlank;
19+
import jakarta.validation.constraints.Size;
1920
import lombok.Data;
2021
import lombok.NoArgsConstructor;
2122

@@ -81,7 +82,7 @@ public class GrievanceDetails {
8182

8283
@Expose
8384
@Column(name = "userid")
84-
private Integer assignedUserID;
85+
private Integer userID;
8586

8687
@Expose
8788
@Column(name = "isAllocated")
@@ -106,6 +107,15 @@ public class GrievanceDetails {
106107
@Expose
107108
@Column(name = "PreferredLanguage")
108109
private String preferredLanguage;
110+
111+
@Expose
112+
@Column(name = "ComplaintResolution")
113+
private String complaintResolution;
114+
115+
@Expose
116+
@Column(name = "Remarks")
117+
@Size(max = 5000, message = "Remarks cannot exceed 5000 characters")
118+
private String remarks;
109119

110120
@Column(name = "Deleted", insertable = false, updatable = true)
111121
private Boolean deleted = false;
@@ -161,7 +171,7 @@ public GrievanceDetails(Long gwid, Long grievanceId, Long beneficiaryRegID, Long
161171
Integer providerServiceMapID, String complaintID, String subjectOfComplaint, String complaint,
162172
String primaryNumber, String severety, String state, String agentID, Integer userid, Boolean isAllocated,
163173
Boolean retryNeeded, Boolean isRegistered, Integer callCounter, Integer preferredLanguageId,
164-
String preferredLanguage, Boolean deleted, Character processed, String createdBy, Timestamp createdDate,
174+
String preferredLanguage, String complaintResolution, String remarks, Boolean deleted, Character processed, String createdBy, Timestamp createdDate,
165175
String modifiedBy, Timestamp lastModDate, Integer vanSerialNo, Integer vanID, String vehicalNo,
166176
Integer parkingPlaceID, String syncedBy, Timestamp syncedDate, Boolean isCompleted) {
167177
super();
@@ -177,13 +187,15 @@ public GrievanceDetails(Long gwid, Long grievanceId, Long beneficiaryRegID, Long
177187
this.severety = severety;
178188
this.state = state;
179189
this.agentid = agentID;
180-
this.assignedUserID = userid;
190+
this.userID = userid;
181191
this.isAllocated = isAllocated;
182192
this.retryNeeded = retryNeeded;
183193
this.isRegistered = isRegistered;
184194
this.callCounter = callCounter;
185195
this.preferredLanguageId = preferredLanguageId;
186196
this.preferredLanguage = preferredLanguage;
197+
this.complaintResolution = complaintResolution;
198+
this.remarks = remarks;
187199
this.deleted = deleted;
188200
this.processed = processed;
189201
this.createdBy = createdBy;

src/main/java/com/iemr/common/data/grievance/MoveToBinRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
public class MoveToBinRequest {
77

88
private Integer providerServiceMapID;
9-
private Integer assignedUserID;
9+
private Integer userID;
1010
private String preferredLanguageName;
1111
private Boolean is1097;
1212
private Integer noOfCalls;

src/main/java/com/iemr/common/repository/grievance/GrievanceDataRepo.java

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,40 +27,40 @@ List<GrievanceDetails> findGrievancesInDateRangeAndLanguage(@Param("startDate")
2727

2828

2929
@Modifying
30-
@Query("UPDATE GrievanceDetails g SET g.isAllocated = true, g.assignedUserID = :assignedUserId WHERE g.grievanceId = :grievanceId")
30+
@Query("UPDATE GrievanceDetails g SET g.isAllocated = true, g.userID = :userId WHERE g.grievanceId = :grievanceId")
3131
@Transactional
3232
public int allocateGrievance(@Param("grievanceId") Long grievanceId,
33-
@Param("assignedUserId") Integer assignedUserId);
33+
@Param("userId") Integer userId);
3434

3535
@Query(nativeQuery = true, value = "SELECT PreferredLanguageId, PreferredLanguage, VanSerialNo, VanID, ParkingPlaceId, VehicalNo FROM db_identity.i_beneficiarydetails WHERE BeneficiaryRegID = :benRegId")
3636
public ArrayList<Object[]> getBeneficiaryGrievanceDetails(@Param("benRegId") Long benRegId);
3737

3838
@Query("select grievance.preferredLanguage, count(distinct grievance.grievanceId) "
3939
+ "from GrievanceDetails grievance " + "where grievance.providerServiceMapID = :providerServiceMapID "
40-
+ "and grievance.assignedUserID = :assignedUserID " + "and grievance.deleted = false "
40+
+ "and grievance.userID = :userID " + "and grievance.deleted = false "
4141
+ "group by grievance.preferredLanguage")
4242
public Set<Object[]> fetchGrievanceRecordsCount(@Param("providerServiceMapID") Integer providerServiceMapID,
43-
@Param("assignedUserID") Integer assignedUserID);
43+
@Param("userID") Integer userID);
4444

45-
@Query("SELECT g FROM GrievanceDetails g WHERE g.assignedUserID = :assignedUserID AND g.preferredLanguage = :language AND g.isAllocated = true")
46-
List<GrievanceDetails> findAllocatedGrievancesByUserAndLanguage(@Param("assignedUserID") Integer assignedUserID,
45+
@Query("SELECT g FROM GrievanceDetails g WHERE g.userID = :userID AND g.preferredLanguage = :language AND g.isAllocated = true")
46+
List<GrievanceDetails> findAllocatedGrievancesByUserAndLanguage(@Param("userID") Integer userID,
4747
@Param("language") String language);
4848

4949
@Modifying
50-
@Query("UPDATE GrievanceDetails g SET g.assignedUserID = :assignedUserID WHERE g.grievanceId = :grievanceId")
50+
@Query("UPDATE GrievanceDetails g SET g.userID = :userID WHERE g.grievanceId = :grievanceId")
5151
@Transactional
5252
public int reallocateGrievance(@Param("grievanceId") Long grievanceId,
53-
@Param("assignedUserID") Integer assignedUserID);
53+
@Param("userID") Integer userID);
5454

55-
@Query("SELECT g FROM GrievanceDetails g WHERE g.assignedUserID = :assignedUserID "
55+
@Query("SELECT g FROM GrievanceDetails g WHERE g.userID = :userID "
5656
+ "AND g.preferredLanguage = :preferredLanguageName")
57-
List<GrievanceDetails> findGrievancesByUserAndLanguage(@Param("assignedUserID") Integer assignedUserID,
57+
List<GrievanceDetails> findGrievancesByUserAndLanguage(@Param("userID") Integer userID,
5858
@Param("preferredLanguageName") String language);
5959

6060
@Modifying
6161
@Transactional
62-
@Query("UPDATE GrievanceDetails g SET g.assignedUserID = NULL WHERE g.grievanceId = :grievanceId AND g.assignedUserID = :assignedUserID")
63-
int unassignGrievance(@Param("grievanceId") Long grievanceId, @Param("assignedUserID") Integer assignedUserID);
62+
@Query("UPDATE GrievanceDetails g SET g.userID = NULL WHERE g.grievanceId = :grievanceId AND g.userID = :userID")
63+
int unassignGrievance(@Param("grievanceId") Long grievanceId, @Param("userID") Integer userID);
6464

6565
@Modifying
6666
@Transactional
@@ -70,5 +70,30 @@ int updateGrievanceAllocationStatus(@Param("grievanceId") Long grievanceId,
7070

7171
@Query("Select grievance.preferredLanguage, count(grievance) from GrievanceDetails grievance where grievance.isAllocated=false group by grievance.preferredLanguage")
7272
public Set<Object[]> fetchUnallocatedGrievanceCount();
73+
74+
@Modifying
75+
@Query("UPDATE GrievanceDetails g SET g.complaintResolution = :complaintResolution, g.remarks = :remarks, g.modifiedBy = :modifiedBy, "
76+
+ "WHERE g.complaintID = :complaintID AND g.beneficiaryRegID = :beneficiaryRegID AND g.providerServiceMapID = :providerServiceMapID"
77+
+ " AND g.userID = :userID")
78+
@Transactional
79+
int updateComplaintResolution(@Param("complaintResolution") String complaintResolution,
80+
@Param("remarks") String remarks,
81+
@Param("modifiedBy") String modifiedBy,
82+
@Param("complaintID") String complaintID,
83+
@Param("beneficiaryRegID") Long beneficiaryRegID,
84+
@Param("providerServiceMapID") Integer providerServiceMapID,
85+
@Param("userID") Integer userID);
86+
87+
@Modifying
88+
@Query("UPDATE GrievanceDetails g SET g.complaintResolution = :complaintResolution, g.modifiedBy = :modifiedBy, "
89+
+ "WHERE g.complaintID = :complaintID AND g.beneficiaryRegID = :beneficiaryRegID AND g.providerServiceMapID = :providerServiceMapID"
90+
+ " AND g.userID = :userID")
91+
@Transactional
92+
int updateComplaintResolution(@Param("complaintResolution") String complaintResolution,
93+
@Param("modifiedBy") String modifiedBy,
94+
@Param("complaintID") String complaintID,
95+
@Param("beneficiaryRegID") Long beneficiaryRegID,
96+
@Param("providerServiceMapID") Integer providerServiceMapID,
97+
@Param("userID") Integer userID);
7398

7499
}

src/main/java/com/iemr/common/service/grievance/GrievanceHandlingService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@ public interface GrievanceHandlingService {
2020

2121
public List<GrievanceWorklistDTO> getFormattedGrievanceData(String request) throws Exception;
2222

23+
public String saveComplaintResolution(String request) throws Exception;
24+
25+
2326
}

src/main/java/com/iemr/common/service/grievance/GrievanceHandlingServiceImpl.java

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ public String allocatedGrievanceRecordsCount(String request) throws IEMRExceptio
104104
GrievanceDetails grievanceRequest = InputMapper.gson().fromJson(request, GrievanceDetails.class);
105105

106106
Integer providerServiceMapID = grievanceRequest.getProviderServiceMapID();
107-
Integer assignedUserID = grievanceRequest.getAssignedUserID();
107+
Integer userID = grievanceRequest.getUserID();
108108

109-
Set<Object[]> resultSet = grievanceDataRepo.fetchGrievanceRecordsCount(providerServiceMapID, assignedUserID);
109+
Set<Object[]> resultSet = grievanceDataRepo.fetchGrievanceRecordsCount(providerServiceMapID, userID);
110110

111111
JSONObject result = new JSONObject();
112112
result.put("All", 0);
@@ -194,7 +194,7 @@ public String moveToBin(String request) throws Exception {
194194
// Step 2: Fetch grievances based on assigned user, language
195195
// condition
196196
List<GrievanceDetails> grievances = grievanceDataRepo.findGrievancesByUserAndLanguage(
197-
moveToBinRequest.getAssignedUserID(), moveToBinRequest.getPreferredLanguageName());
197+
moveToBinRequest.getUserID(), moveToBinRequest.getPreferredLanguageName());
198198

199199
if (grievances.isEmpty()) {
200200
throw new Exception("No grievances found for the given user, language, and condition.");
@@ -220,22 +220,22 @@ public String moveToBin(String request) throws Exception {
220220
int totalUnassigned = 0;
221221
for (GrievanceDetails grievance : grievancesToMove) {
222222
int rowsAffected = grievanceDataRepo.unassignGrievance(grievance.getGrievanceId(),
223-
moveToBinRequest.getAssignedUserID());
223+
moveToBinRequest.getUserID());
224224
if (rowsAffected > 0) {
225225
grievance.setIsAllocated(false); // Assuming there's a setter for this flag
226226
int updateFlagResult = grievanceDataRepo.updateGrievanceAllocationStatus(grievance.getGrievanceId(),
227227
false);
228228
if (updateFlagResult > 0) {
229229
totalUnassigned++;
230230
logger.debug("Unassigned grievance ID {} from user ID {}", grievance.getGrievanceId(),
231-
moveToBinRequest.getAssignedUserID());
231+
moveToBinRequest.getUserID());
232232
} else {
233233
logger.error("Failed to unassign grievance ID {} from user ID {}", grievance.getGrievanceId(),
234-
moveToBinRequest.getAssignedUserID());
234+
moveToBinRequest.getUserID());
235235
}
236236
} else {
237237
logger.error("Failed to unassign grievance ID {} from user ID {}", grievance.getGrievanceId(),
238-
moveToBinRequest.getAssignedUserID());
238+
moveToBinRequest.getUserID());
239239
}
240240
}
241241

@@ -326,4 +326,65 @@ public List<GrievanceWorklistDTO> getFormattedGrievanceData(String request) thro
326326
return formattedGrievances;
327327

328328
}
329+
330+
/**
331+
* Saves the complaint resolution and remarks for a grievance.
332+
*
333+
* @param request JSON string containing complaint resolution details
334+
* @return Success message if the update is successful
335+
*/
336+
337+
@Transactional
338+
public String saveComplaintResolution(String request) throws Exception {
339+
// Parse the request JSON into a GrievanceDetails object
340+
GrievanceDetails grievanceRequest = InputMapper.gson().fromJson(request, GrievanceDetails.class);
341+
342+
if (grievanceRequest.getComplaintID() == null || grievanceRequest.getComplaintID().trim().isEmpty()) {
343+
throw new IllegalArgumentException("ComplaintID is required");
344+
}
345+
if (grievanceRequest.getComplaintResolution() == null || grievanceRequest.getComplaintResolution().trim().isEmpty()) {
346+
throw new IllegalArgumentException("ComplaintResolution is required");
347+
}
348+
if (grievanceRequest.getBeneficiaryRegID() == null) {
349+
throw new IllegalArgumentException("BeneficiaryRegID is required");
350+
}
351+
if (grievanceRequest.getProviderServiceMapID() == null) {
352+
throw new IllegalArgumentException("ProviderServiceMapID is required");
353+
}
354+
if (grievanceRequest.getUserID() == null) {
355+
throw new IllegalArgumentException("AssignedUserID is required");
356+
}
357+
if (grievanceRequest.getCreatedBy() == null) {
358+
throw new IllegalArgumentException("CreatedBy is required");
359+
}
360+
// Extract values from the request
361+
String complaintID = grievanceRequest.getComplaintID();
362+
String complaintResolution = grievanceRequest.getComplaintResolution();
363+
String remarks = grievanceRequest.getRemarks();
364+
Long beneficiaryRegID = grievanceRequest.getBeneficiaryRegID();
365+
Integer providerServiceMapID = grievanceRequest.getProviderServiceMapID();
366+
Integer userID = grievanceRequest.getUserID();
367+
String createdBy = grievanceRequest.getCreatedBy();
368+
369+
370+
String modifiedBy = createdBy;
371+
int updateCount = 0;
372+
if (remarks == null) {
373+
updateCount = grievanceDataRepo.updateComplaintResolution(complaintResolution, modifiedBy, complaintID,
374+
beneficiaryRegID, providerServiceMapID, userID);
375+
logger.debug("updated complaint resolution without remarks for complaint id: {}", complaintID);
376+
}
377+
else {
378+
updateCount = grievanceDataRepo.updateComplaintResolution(complaintResolution, remarks, modifiedBy, complaintID,
379+
beneficiaryRegID, providerServiceMapID, userID);
380+
logger.debug("updated complaint resolution with remarks for complaint id: {}", complaintID);
381+
382+
}
383+
if (updateCount > 0) {
384+
return "Complaint resolution updated successfully";
385+
} else {
386+
throw new Exception("Failed to update complaint resolution");
387+
}
388+
}
389+
329390
}

0 commit comments

Comments
 (0)