diff --git a/pom.xml b/pom.xml
index 3250086b..b4e8c0d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.iemr.common-API
common-api
- 3.8.0
+ 3.8.1
war
Common-API
diff --git a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java
index 554500f3..701add24 100644
--- a/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java
+++ b/src/main/java/com/iemr/common/controller/users/IEMRAdminController.java
@@ -56,6 +56,7 @@
import com.iemr.common.model.user.ForceLogoutRequestModel;
import com.iemr.common.model.user.LoginRequestModel;
import com.iemr.common.service.recaptcha.CaptchaValidationService;
+import com.iemr.common.service.users.AshaSupervisorLoginService;
import com.iemr.common.service.users.IEMRAdminUserService;
import com.iemr.common.utils.CookieUtil;
import com.iemr.common.utils.JwtUtil;
@@ -117,6 +118,9 @@ public void setSessionObject(SessionObject sessionObject) {
@Autowired
SecurePassword securePassword;
+ @Autowired
+ private AshaSupervisorLoginService ashaSupervisorLoginService;
+
@Operation(summary = "New user authentication")
@RequestMapping(value = "/userAuthenticateNew", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON)
public String userAuthenticateNew(
@@ -232,6 +236,46 @@ public String userAuthenticate(
responseObj = iemrAdminUserServiceImpl.generateKeyAndValidateIP(responseObj, remoteAddress,
request.getRemoteHost());
+ // Facility data for ALL users - common pattern, empty if not applicable
+ try {
+ if (mUser.size() == 1) {
+ User loggedInUser = mUser.get(0);
+ String userRoleName = "";
+ if (loggedInUser.getM_UserServiceRoleMapping() != null) {
+ for (UserServiceRoleMapping usrm : loggedInUser.getM_UserServiceRoleMapping()) {
+ if (usrm.getM_Role() != null && usrm.getM_Role().getRoleName() != null) {
+ userRoleName = usrm.getM_Role().getRoleName();
+ break;
+ }
+ }
+ }
+ JSONObject facilityData = ashaSupervisorLoginService
+ .buildFacilityLoginData(loggedInUser.getUserID(), userRoleName);
+
+ // User details
+ JSONObject userObj = new JSONObject();
+ userObj.put("userId", loggedInUser.getUserID());
+ userObj.put("employeeId", loggedInUser.getEmployeeID() != null ? loggedInUser.getEmployeeID() : JSONObject.NULL);
+ userObj.put("role", userRoleName);
+ String first = loggedInUser.getFirstName() != null ? loggedInUser.getFirstName() : "";
+ String last = loggedInUser.getLastName() != null ? loggedInUser.getLastName() : "";
+ userObj.put("fullName", (first + " " + last).trim());
+
+ JSONObject demographics = new JSONObject();
+ String genderName = ashaSupervisorLoginService.getGenderName(loggedInUser.getGenderID());
+ demographics.put("gender", genderName != null ? genderName : JSONObject.NULL);
+ demographics.put("dob", loggedInUser.getdOB() != null ? loggedInUser.getdOB().toString() : JSONObject.NULL);
+ demographics.put("mobile", loggedInUser.getEmergencyContactNo() != null ? loggedInUser.getEmergencyContactNo() : JSONObject.NULL);
+ demographics.put("email", loggedInUser.getEmailID() != null ? loggedInUser.getEmailID() : JSONObject.NULL);
+ userObj.put("demographics", demographics);
+
+ facilityData.put("user", userObj);
+ responseObj.put("facilityData", facilityData);
+ }
+ } catch (Exception e) {
+ logger.error("Error fetching facility login data: " + e.getMessage(), e);
+ }
+
// Add tokens to response for mobile
if (isMobile && !mUser.isEmpty()) {
responseObj.put("jwtToken", jwtToken);
diff --git a/src/main/java/com/iemr/common/data/users/AshaSupervisorMapping.java b/src/main/java/com/iemr/common/data/users/AshaSupervisorMapping.java
new file mode 100644
index 00000000..9aa38db6
--- /dev/null
+++ b/src/main/java/com/iemr/common/data/users/AshaSupervisorMapping.java
@@ -0,0 +1,34 @@
+package com.iemr.common.data.users;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Entity
+@Table(name = "asha_supervisor_mapping")
+@Data
+@NoArgsConstructor
+public class AshaSupervisorMapping {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "supervisorUserID")
+ private Integer supervisorUserID;
+
+ @Column(name = "ashaUserID")
+ private Integer ashaUserID;
+
+ @Column(name = "facilityID")
+ private Integer facilityID;
+
+ @Column(name = "deleted", insertable = false, updatable = true)
+ private Boolean deleted;
+}
diff --git a/src/main/java/com/iemr/common/data/users/User.java b/src/main/java/com/iemr/common/data/users/User.java
index 275b0ec6..4a9c6158 100644
--- a/src/main/java/com/iemr/common/data/users/User.java
+++ b/src/main/java/com/iemr/common/data/users/User.java
@@ -132,6 +132,9 @@ public class User implements Serializable {
@Expose
private Status m_status;
+ @Expose
+ @Column(name = "EmployeeID")
+ private String employeeID;
@Expose
@Column(name = "AadhaarNo")
private String aadhaarNo;
@@ -515,6 +518,10 @@ public String getAgentID() {
return agentID;
}
+ public String getEmployeeID() {
+ return employeeID;
+ }
+
public String getAgentPassword() {
return agentPassword;
}
diff --git a/src/main/java/com/iemr/common/model/user/LoginResponseModel.java b/src/main/java/com/iemr/common/model/user/LoginResponseModel.java
index 10d45222..17d353e4 100644
--- a/src/main/java/com/iemr/common/model/user/LoginResponseModel.java
+++ b/src/main/java/com/iemr/common/model/user/LoginResponseModel.java
@@ -50,6 +50,7 @@
private MaritalStatusModel maritalstatus;
private Integer statusID;
private StatusModel status;
+ private String employeeID;
private String aadhaarNo;
private String pAN;
private Timestamp dOB;
diff --git a/src/main/java/com/iemr/common/repository/users/AshaSupervisorLoginRepo.java b/src/main/java/com/iemr/common/repository/users/AshaSupervisorLoginRepo.java
new file mode 100644
index 00000000..9bc07a17
--- /dev/null
+++ b/src/main/java/com/iemr/common/repository/users/AshaSupervisorLoginRepo.java
@@ -0,0 +1,14 @@
+package com.iemr.common.repository.users;
+
+import java.util.ArrayList;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import com.iemr.common.data.users.AshaSupervisorMapping;
+
+@Repository
+public interface AshaSupervisorLoginRepo extends CrudRepository {
+
+ ArrayList findBySupervisorUserIDAndDeletedFalse(Integer supervisorUserID);
+}
diff --git a/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java b/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java
new file mode 100644
index 00000000..92af0fd2
--- /dev/null
+++ b/src/main/java/com/iemr/common/repository/users/FacilityLoginRepo.java
@@ -0,0 +1,67 @@
+package com.iemr.common.repository.users;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import com.iemr.common.data.users.AshaSupervisorMapping;
+
+@Repository
+public interface FacilityLoginRepo extends CrudRepository {
+
+ // Get user's facility IDs from m_UserServiceRoleMapping (for ANY user)
+ @Query(value = "SELECT DISTINCT usrm.FacilityID "
+ + "FROM m_UserServiceRoleMapping usrm "
+ + "WHERE usrm.UserID = :userID AND usrm.Deleted = false "
+ + "AND usrm.FacilityID IS NOT NULL", nativeQuery = true)
+ List getUserFacilityIDs(@Param("userID") Integer userID);
+
+ // Get facility details with geo names and facilityType
+ @Query(value = "SELECT DISTINCT f.FacilityID, f.FacilityName, "
+ + "f.StateID, COALESCE(s.StateName,'') AS stateName, "
+ + "f.DistrictID, COALESCE(d.DistrictName,'') AS districtName, "
+ + "f.BlockID, COALESCE(b.BlockName,'') AS blockName, "
+ + "COALESCE(f.RuralUrban,'') AS ruralUrban, "
+ + "COALESCE(ft.FacilityTypeName,'') AS facilityTypeName "
+ + "FROM m_facility f "
+ + "LEFT JOIN m_state s ON s.StateID = f.StateID "
+ + "LEFT JOIN m_district d ON d.DistrictID = f.DistrictID "
+ + "LEFT JOIN m_districtblock b ON b.BlockID = f.BlockID "
+ + "LEFT JOIN m_facilitytype ft ON ft.FacilityTypeID = f.FacilityTypeID "
+ + "WHERE f.FacilityID IN :facilityIDs AND f.Deleted = false", nativeQuery = true)
+ List