diff --git a/src/main/java/com/gcc/flagpoles_services/flagpoles/service/RdoService.java b/src/main/java/com/gcc/flagpoles_services/flagpoles/service/RdoService.java index 2ee2d52..94df10c 100644 --- a/src/main/java/com/gcc/flagpoles_services/flagpoles/service/RdoService.java +++ b/src/main/java/com/gcc/flagpoles_services/flagpoles/service/RdoService.java @@ -518,7 +518,7 @@ public class RdoService { FROM user_request_details urd - LEFT JOIN street_details sd + JOIN street_details sd ON urd.refid = sd.refid AND sd.is_active = 1 AND sd.is_delete = 0 @@ -1418,21 +1418,10 @@ public class RdoService { pdm.statue_pedestal_type AS pedestal_material, urd.total_cost, - et.event_name, - dl.department_name, - DATE_FORMAT(ofb.cdate, '%d-%m-%Y %h:%i %p') AS action_date, - - ofb.status AS officer_status, - ofb.remarks AS officer_remarks + et.event_name FROM user_request_details urd - LEFT JOIN officer_feedback ofb - ON urd.refid = ofb.refid - AND ofb.is_active = 1 - AND ofb.is_delete = 0 - LEFT JOIN department_login dl - ON ofb.dept_id = dl.dpid - LEFT JOIN street_details sd + JOIN street_details sd ON urd.refid = sd.refid AND sd.is_active = 1 AND sd.is_delete = 0 @@ -1455,18 +1444,6 @@ public class RdoService { } final boolean canViewLandDocs = (documentsView != null && documentsView == 1); - // Similar login permissions logic (if needed for admin reports, usually admins - // see all but following same pattern) - // Assuming Admin Reports might be accessed by various officers - // Determining if restrictions apply essentially like getRdoApproved... - // For Admin Reports, let's stick to the documents_view restriction mainly if - // implied? - // "getAdminReportDetails this method also and adminreports.html page also" - // Let's reuse the isUnitOfficer/FinalAuthority logic if possible, or just - // strict documents_view? - // User said: "like same logic want to implement" - // So I'll infer flags from officerDetails. - Integer unitOff = (Integer) officerDetails.get("dlc_members"); // No, unit officer is via unit mapping Long appUserId = getAppUserIdByGccUserId(gccUserId); List> access = getUserAccess(appUserId); @@ -1494,7 +1471,16 @@ public class RdoService { params.add(fileBaseUrlImages); if (hasValue(status)) { - sql.append(" AND ofb.status = ? "); + // Check if ANY officer feedback has this status + sql.append(""" + AND EXISTS ( + SELECT 1 FROM officer_feedback ofb + WHERE ofb.refid = urd.refid + AND ofb.status = ? + AND ofb.is_active = 1 + AND ofb.is_delete = 0 + ) + """); params.add(status); } @@ -1584,21 +1570,44 @@ public class RdoService { streets.add(sObj); } } + } - // History - List> history = (List>) request.get("history"); - String deptName = (String) row.get("department_name"); - String actionDate = (String) row.get("action_date"); - if (deptName != null && actionDate != null) { - boolean exists = history.stream().anyMatch( - h -> deptName.equals(h.get("department_name")) && actionDate.equals(h.get("action_date"))); - if (!exists) { - Map hObj = new LinkedHashMap<>(); - hObj.put("department_name", deptName); - hObj.put("status", row.get("officer_status")); - hObj.put("remarks", row.get("officer_remarks")); - hObj.put("action_date", actionDate); - history.add(hObj); + /* Fetch History for all refIds */ + if (!resultMap.isEmpty()) { + String ids = resultMap.keySet().stream() + .map(id -> "'" + id + "'") + .collect(Collectors.joining(",")); + + String historySql = """ + SELECT + ofb.refid, + dl.department_name, + ofb.status, + ofb.remarks, + DATE_FORMAT(ofb.cdate, '%%d-%%m-%%Y %%h:%%i %%p') AS action_date + FROM officer_feedback ofb + LEFT JOIN department_login dl ON ofb.dept_id = dl.dpid + WHERE ofb.refid IN (%s) + AND ofb.is_active=1 + AND ofb.is_delete=0 + ORDER BY ofb.cdate ASC + """.formatted(ids); + + List> historyRows = mysqlFlagPoleJdbcTemplate.queryForList(historySql); + + for (Map hRow : historyRows) { + String ref = (String) hRow.get("refid"); + Map req = resultMap.get(ref); + if (req != null) { + List> hist = (List>) req.get("history"); + if (hist != null) { + Map hObj = new LinkedHashMap<>(); + hObj.put("department_name", hRow.get("department_name")); + hObj.put("status", hRow.get("status")); + hObj.put("remarks", hRow.get("remarks")); + hObj.put("action_date", hRow.get("action_date")); + hist.add(hObj); + } } } }