diff --git a/pom.xml b/pom.xml
index 062df585..1b6299ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.iemr.admin
admin-api
- 3.8.2
+ 3.12.0
war
Admin-API
Admin Page
diff --git a/src/main/java/com/iemr/admin/controller/employeemaster/EmployeeMasterController.java b/src/main/java/com/iemr/admin/controller/employeemaster/EmployeeMasterController.java
index 33d980ca..55bf70c1 100644
--- a/src/main/java/com/iemr/admin/controller/employeemaster/EmployeeMasterController.java
+++ b/src/main/java/com/iemr/admin/controller/employeemaster/EmployeeMasterController.java
@@ -1791,6 +1791,12 @@ public String UserRoleMappings(@RequestBody String userRoleMapping, HttpServletR
Previleges1097_3[] predata1 = pre.get(x).getPrevileges();
for (Previleges1097_3 previl : predata1) {
+ // Each role in the ID array must become its own saved row. This used to
+ // build a single M_UserServiceRoleMapping2 across all iterations of this
+ // loop and only add it to resList1 once, after the loop — so a batched
+ // request carrying multiple roles (e.g. Nurse + Counsellor) silently
+ // discarded every role but the last one. Moving the object creation and
+ // the add() call inside the loop saves one row per role, as intended.
Priveleges1097_2[] predata2 = previl.getID();
for (Priveleges1097_2 previl1 : predata2) {
resDataMap1 = new M_UserServiceRoleMapping2();
@@ -1800,22 +1806,23 @@ public String UserRoleMappings(@RequestBody String userRoleMapping, HttpServletR
if (previl1.getTeleConsultation() != null) {
resDataMap1.setTeleConsultation(previl1.getTeleConsultation());
}
+ resDataMap1.setUserID(employeeMaster.get(x).getUserID());
+ resDataMap1.setProviderServiceMapID(previl.getProviderServiceMapID());
+ resDataMap1.setWorkingLocationID(previl.getWorkingLocationID());
+ resDataMap1.setStateID(previl.getStateID());
+ resDataMap1.setDistrictID(previl.getDistrictID());
+ resDataMap1.setCreatedBy(employeeMaster.get(x).getCreatedBy());
+ resDataMap1.setServiceProviderID(employeeMaster.get(x).getServiceProviderID());
+ resDataMap1.setBlockID(previl.getBlockID());
+ resDataMap1.setBlockName(previl.getBlockName());
+ resDataMap1.setVillageID(previl.getVillageID());
+ resDataMap1.setVillageName(previl.getVillageName());
+ resDataMap1.setFacilityID(previl.getFacilityID());
+ resDataMap1.setNikshayTUID(previl.getNikshayTUID());
+ resDataMap1.setNikshayFacilityID(previl.getNikshayFacilityID());
+ resDataMap1.setVanID(previl.getVanID());
+ resList1.add(resDataMap1);
}
- resDataMap1.setUserID(employeeMaster.get(x).getUserID());
- resDataMap1.setProviderServiceMapID(previl.getProviderServiceMapID());
- resDataMap1.setWorkingLocationID(previl.getWorkingLocationID());
- resDataMap1.setStateID(previl.getStateID());
- resDataMap1.setDistrictID(previl.getDistrictID());
- resDataMap1.setCreatedBy(employeeMaster.get(x).getCreatedBy());
- resDataMap1.setServiceProviderID(employeeMaster.get(x).getServiceProviderID());
- resDataMap1.setBlockID(previl.getBlockID());
- resDataMap1.setBlockName(previl.getBlockName());
- resDataMap1.setVillageID(previl.getVillageID());
- resDataMap1.setVillageName(previl.getVillageName());
- resDataMap1.setFacilityID(previl.getFacilityID());
- resDataMap1.setNikshayTUID(previl.getNikshayTUID());
- resDataMap1.setNikshayFacilityID(previl.getNikshayFacilityID());
- resList1.add(resDataMap1);
}
x++;
@@ -1863,11 +1870,15 @@ public String updateUserRoleMapping(@RequestBody String updateUserRoleMapping, H
}
}
- // Soft-delete other active mappings for same user+service to prevent duplicates
- // (e.g. old roleID 122 rows left over when new roleID 128 mapping was created)
- if (pre.getUserID() != null && pre.getProviderServiceMapID() != null && pre.getuSRMappingID() != null) {
+ // Soft-delete other active mappings for same user+service+role to prevent
+ // duplicates (e.g. a stale leftover row still claiming this same role).
+ // Scoped by roleID as well as user+service — otherwise this deletes every
+ // OTHER role the user holds under this service line too, not just true
+ // duplicates of the role being saved here.
+ if (pre.getUserID() != null && pre.getProviderServiceMapID() != null && pre.getRoleID() != null
+ && pre.getuSRMappingID() != null) {
employeeMasterInter.softDeleteOldMappings(
- pre.getUserID(), pre.getProviderServiceMapID(), pre.getuSRMappingID());
+ pre.getUserID(), pre.getProviderServiceMapID(), pre.getRoleID(), pre.getuSRMappingID());
}
usrRole.setUserID(pre.getUserID());
@@ -1885,6 +1896,7 @@ public String updateUserRoleMapping(@RequestBody String updateUserRoleMapping, H
usrRole.setFacilityID(pre.getFacilityID());
usrRole.setNikshayTUID(pre.getNikshayTUID());
usrRole.setNikshayFacilityID(pre.getNikshayFacilityID());
+ usrRole.setVanID(pre.getVanID());
if (pre.getTeleConsultation() != null) {
usrRole.setTeleConsultation(pre.getTeleConsultation());
diff --git a/src/main/java/com/iemr/admin/controller/item/ItemController.java b/src/main/java/com/iemr/admin/controller/item/ItemController.java
index 78c64009..954e7a84 100644
--- a/src/main/java/com/iemr/admin/controller/item/ItemController.java
+++ b/src/main/java/com/iemr/admin/controller/item/ItemController.java
@@ -234,6 +234,11 @@ public String editItemMaster(@RequestBody ItemMaster item) {
saveData.setItemDesc(item.getItemDesc());
saveData.setSctCode(item.getSctCode());
saveData.setSctTerm(item.getSctTerm());
+ // Only when sent, so screens that don't show these fields can't wipe them (0 clears the threshold)
+ if (item.getMinStock() != null)
+ saveData.setMinStock(item.getMinStock());
+ if (item.getMaxStock() != null)
+ saveData.setMaxStock(item.getMaxStock());
saveData.setModifiedBy(item.getModifiedBy());
saveData = itemService.createItemMaster(saveData);
response.setResponse(saveData.toString());
diff --git a/src/main/java/com/iemr/admin/controller/nikshay/NikshayLocationController.java b/src/main/java/com/iemr/admin/controller/nikshay/NikshayLocationController.java
index aa8d0a8d..5678969f 100644
--- a/src/main/java/com/iemr/admin/controller/nikshay/NikshayLocationController.java
+++ b/src/main/java/com/iemr/admin/controller/nikshay/NikshayLocationController.java
@@ -23,6 +23,7 @@
import java.util.Arrays;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -40,7 +41,6 @@
import com.iemr.admin.data.nikshay.NikshayFacility;
import com.iemr.admin.data.nikshay.NikshayState;
import com.iemr.admin.data.nikshay.NikshayTU;
-import com.iemr.admin.data.nikshay.NikshayVillage;
import com.iemr.admin.repo.employeemaster.EmployeeMasterRepo;
import com.iemr.admin.repo.nikshay.NikshayDistrictRepo;
import com.iemr.admin.repo.nikshay.NikshayFacilityRepo;
@@ -121,7 +121,7 @@ public String getTUs(@RequestParam("districtID") Integer districtID) {
OutputResponse response = new OutputResponse();
try {
List tus = nikshayTURepo.findByDistrictID(districtID);
- response.setResponse(tus.toString());
+ response.setResponse(new Gson().toJson(tus.stream().map(this::toLite).collect(Collectors.toList())));
} catch (Exception e) {
logger.error("Error fetching Nikshay TUs for districtID " + districtID + ": " + e.getMessage(), e);
response.setError(e);
@@ -136,7 +136,7 @@ public String getFacilities(@RequestParam("tuIDs") String tuIDs) {
try {
List ids = parseIntCsv(tuIDs);
List facilities = nikshayFacilityRepo.findByTUIDs(ids);
- response.setResponse(facilities.toString());
+ response.setResponse(new Gson().toJson(facilities.stream().map(this::toLite).collect(Collectors.toList())));
} catch (Exception e) {
logger.error("Error fetching Nikshay facilities for tuIDs " + tuIDs + ": " + e.getMessage(), e);
response.setError(e);
@@ -150,8 +150,8 @@ public String getVillages(@RequestParam("facilityIDs") String facilityIDs) {
OutputResponse response = new OutputResponse();
try {
List ids = parseIntCsv(facilityIDs);
- List villages = nikshayVillageRepo.findByFacilityIDs(ids);
- response.setResponse(villages.toString());
+ List