From d8abb19179ca4bc5e9eef8a6812ce89e460a7925 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Thu, 7 May 2026 19:03:23 +0530 Subject: [PATCH] fix: login response asha list misisng --- .../repository/users/FacilityLoginRepo.java | 28 +++++++++++++++ .../users/AshaSupervisorLoginService.java | 35 +++++++++++++++---- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java b/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java index 92af0fd2..5623448d 100644 --- a/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java +++ b/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java @@ -64,4 +64,32 @@ public interface FacilityLoginRepo extends CrudRepository getPeersAtFacility(@Param("facilityIDs") List facilityIDs, @Param("currentUserID") Integer currentUserID); + + // Supervisor login: get mapped ASHAs with facility details + @Query(value = "SELECT DISTINCT u.UserID, u.FirstName, u.LastName, " + + "COALESCE(u.EmployeeID,'') AS employeeID, " + + "f.FacilityID, f.FacilityName, " + + "COALESCE(ft.FacilityTypeName,'') AS facilityTypeName " + + "FROM asha_supervisor_mapping asm " + + "JOIN m_User u ON u.UserID = asm.ashaUserID " + + "JOIN m_facility f ON f.FacilityID = asm.facilityID " + + "LEFT JOIN m_facilitytype ft ON ft.FacilityTypeID = f.FacilityTypeID " + + "WHERE asm.supervisorUserID = :supervisorUserID " + + "AND asm.deleted = false AND u.Deleted = false AND f.Deleted = false", nativeQuery = true) + List getMappedAshasBySupervisor(@Param("supervisorUserID") Integer supervisorUserID); + + // CHO/ANM login: get ASHAs at same facilities + @Query(value = "SELECT DISTINCT u.UserID, u.FirstName, u.LastName, " + + "COALESCE(u.EmployeeID,'') AS employeeID, " + + "f.FacilityID, f.FacilityName, " + + "COALESCE(ft.FacilityTypeName,'') AS facilityTypeName " + + "FROM m_UserServiceRoleMapping usrm " + + "JOIN m_User u ON u.UserID = usrm.UserID " + + "JOIN m_Role r ON r.RoleID = usrm.RoleID " + + "JOIN m_facility f ON f.FacilityID = usrm.FacilityID " + + "LEFT JOIN m_facilitytype ft ON ft.FacilityTypeID = f.FacilityTypeID " + + "WHERE usrm.FacilityID IN :facilityIDs " + + "AND r.RoleName = 'ASHA' " + + "AND usrm.Deleted = false AND u.Deleted = false AND f.Deleted = false", nativeQuery = true) + List getAshaListByFacilities(@Param("facilityIDs") List facilityIDs); } diff --git a/src/main/java/com/iemr/common/service/users/AshaSupervisorLoginService.java b/src/main/java/com/iemr/common/service/users/AshaSupervisorLoginService.java index 2ea0b5f4..d4ce1420 100644 --- a/src/main/java/com/iemr/common/service/users/AshaSupervisorLoginService.java +++ b/src/main/java/com/iemr/common/service/users/AshaSupervisorLoginService.java @@ -141,13 +141,11 @@ private void enrichAshaSupervisorData(JSONObject result, Integer supervisorUserI } result.put("facilities", facilitiesArray); - // Count distinct ASHAs mapped to this supervisor - Set ashaUserIDs = new HashSet<>(); - for (AshaSupervisorMapping m : mappings) { - if (m.getAshaUserID() != null) - ashaUserIDs.add(m.getAshaUserID()); - } - result.put("totalAshaCount", ashaUserIDs.size()); + // Fetch mapped ASHAs with facility details + List ashaRows = facilityLoginRepo.getMappedAshasBySupervisor(supervisorUserID); + JSONArray ashaList = buildAshaList(ashaRows); + result.put("ashaList", ashaList); + result.put("totalAshaCount", ashaList.length()); } // ==================== General Facility User (CHO, ANM, etc.) @@ -173,10 +171,33 @@ private void enrichGeneralFacilityData(JSONObject result, Integer userID) { facilitiesArray.put(facility); } result.put("facilities", facilitiesArray); + + // ASHAs at same facilities + List ashaRows = facilityLoginRepo.getAshaListByFacilities(facilityIDs); + JSONArray ashaList = buildAshaList(ashaRows); + result.put("ashaList", ashaList); + result.put("totalAshaCount", ashaList.length()); } // ==================== Shared Helpers ==================== + private JSONArray buildAshaList(List rows) { + JSONArray list = new JSONArray(); + if (rows == null) + return list; + for (Object[] row : rows) { + JSONObject asha = new JSONObject(); + asha.put("userId", row[0]); + asha.put("fullName", fullName(row[1], row[2])); + asha.put("employeeId", str(row[3]).isEmpty() ? JSONObject.NULL : str(row[3])); + asha.put("facilityId", row[4]); + asha.put("facilityName", str(row[5])); + asha.put("facilityType", str(row[6])); + list.put(asha); + } + return list; + } + private void populateLocation(JSONObject result, Object[] facilityRow) { JSONObject location = new JSONObject(); location.put("state", str(facilityRow[3]));