-
-
-
-
-
-
-
-
+ {loading &&
}
+ {!loading &&
+
+
+
+
+
+
+
+
+
-
-
-
- {t(`CAMPAIGN_SELECT_BOUNDARY`)}
- {t(`CAMPAIGN_SELECT_BOUNDARIES_DESCRIPTION`)}
- {
- handleBoundaryChange(value);
+
-
+ }
>
);
};
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundaryComponent.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundaryComponent.js
index c05fef6d15e..3a5baddb6d0 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundaryComponent.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundaryComponent.js
@@ -1,4 +1,4 @@
-import React, { useState, useEffect, Fragment, useRef, useMemo } from "react";
+import React, { useState, useEffect, Fragment, useRef, useMemo, use } from "react";
import { useTranslation } from "react-i18next";
import { Card, CardHeader, Header, CardText } from "@egovernments/digit-ui-react-components";
import { LabelFieldPair, CardLabel } from "@egovernments/digit-ui-components";
@@ -129,7 +129,6 @@ const SelectingBoundaryComponent = ({
const [parentRoot, setParentRoot] = useState(selectedData?.find((item) => item?.isRoot === true)?.type || {});
const [restrictSelection, setRestrictSelection] = useState(restrictSelectionPage);
-
useEffect(() => {
setBoundaryOptions(boundaryOptionsPage);
}, [boundaryOptionsPage]);
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/UpdateBoundaryWrapper.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/UpdateBoundaryWrapper.js
index 1a19b1dd57b..ee77dd793c0 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/UpdateBoundaryWrapper.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/UpdateBoundaryWrapper.js
@@ -15,19 +15,30 @@ const UpdateBoundaryWrapper = ({ onSelect,...props }) => {
const id = searchParams.get("id");
const isDraft = searchParams.get("draft");
// const hierarchyType = props?.props?.hierarchyType;
- const { data: HierarchySchema } = Digit.Hooks.useCustomMDMS(tenantId, CONSOLE_MDMS_MODULENAME, [{
- name: "HierarchySchema",
- "filter": `[?(@.type=='${window.Digit.Utils.campaign.getModuleName()}')]`
- }],{select:(MdmsRes)=>MdmsRes},{ schemaCode: `${CONSOLE_MDMS_MODULENAME}.HierarchySchema` });
+ // const { data: HierarchySchema } = Digit.Hooks.useCustomMDMS(tenantId, CONSOLE_MDMS_MODULENAME, [{
+ // name: "HierarchySchema",
+ // "filter": `[?(@.type=='${window.Digit.Utils.campaign.getModuleName()}')]`
+ // }],{select:(MdmsRes)=>MdmsRes},{ schemaCode: `${CONSOLE_MDMS_MODULENAME}.HierarchySchema` });
const [selectedData, setSelectedData] = useState(props?.props?.sessionData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData || []);
const [boundaryOptions, setBoundaryOptions] = useState(
props?.props?.sessionData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.boundaryData || {}
);
const campaignName = searchParams.get("campaignName");
const [hierarchyType , SetHierarchyType] = useState(props?.props?.hierarchyType);
+ // const lowestHierarchy = useMemo(() => {
+ // return HierarchySchema?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.find((item) => item.hierarchy === hierarchyType)?.lowestHierarchy;
+ // }, [HierarchySchema, hierarchyType]);
+ const {
+ data: BOUNDARY_HIERARCHY_TYPE,
+ isLoading: hierarchyLoading,
+ rawData: rawData
+ } = Digit.Hooks.campaign.useEmployeeHierarchyType(tenantId, {
+ select: (data) => data?.hierarchy
+ });
const lowestHierarchy = useMemo(() => {
- return HierarchySchema?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.find((item) => item.hierarchy === hierarchyType)?.lowestHierarchy;
- }, [HierarchySchema, hierarchyType]);
+ return rawData?.matchingHierarchy?.lowestHierarchy;
+ }, [rawData]);
+
const reqCriteriaCampaign = {
url: `/project-factory/v1/project-type/search`,
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/CampaignConfig.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/CampaignConfig.js
index 1f4f4e43932..207b45efe66 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/CampaignConfig.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/configs/CampaignConfig.js
@@ -1,4 +1,5 @@
-export const CampaignConfig = (totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData) => {
+export const CampaignConfig = (totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData, allHierarchy, employeeDetails) => {
+
return [
{
form: [
@@ -20,6 +21,8 @@ export const CampaignConfig = (totalFormData, dataParams, isSubmitting, summaryE
module: "HCM",
sessionData: totalFormData,
isSubmitting: isSubmitting,
+ employeeDetails: employeeDetails,
+ allHierarchy: allHierarchy
},
populators: {
name: "projectType",
@@ -125,6 +128,8 @@ export const CampaignConfig = (totalFormData, dataParams, isSubmitting, summaryE
sessionData: totalFormData,
dataParams: dataParams,
hierarchyData: hierarchyData,
+ employeeDetails: employeeDetails,
+ allHierarchy: allHierarchy
},
populators: {
name: "boundaryType",
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/index.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/index.js
index da35cdc455a..cda87de23a5 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/index.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/index.js
@@ -19,6 +19,7 @@ import useMDMSServiceSearch from "./useMDMSServiceSearch";
import useBoundaryHome from "./useBoundaryHome";
import useFetchFromMicroplan from "./useFetchFromMicroplan";
import { useReadExcelData, useUpdateAndUploadExcel } from "./useReadExcelData";
+import useEmployeeHierarchyType from "./useEmployeeHierarchyType";
const UserService = {};
@@ -48,6 +49,7 @@ const campaign = {
useFetchFromMicroplan,
useReadExcelData,
useUpdateAndUploadExcel,
+ useEmployeeHierarchyType
};
const Hooks = {
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useBoundaryHome.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useBoundaryHome.js
index 23c9199a631..03006b5fde0 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useBoundaryHome.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useBoundaryHome.js
@@ -1,29 +1,10 @@
import { useQuery } from "react-query";
-import { CONSOLE_MDMS_MODULENAME } from "../Module";
const MDMS_V2_CONTEXT_PATH = window?.globalConfigs?.getConfig("MDMS_V2_CONTEXT_PATH") || "mdms-v2";
const HRMS_CONTEXT_PATH = window?.globalConfigs?.getConfig("HRMS_CONTEXT_PATH") || "egov-hrms";
-
-
-const generateFile = async (hierarchyType, tenantId) => {
- const res = await Digit.CustomService.getResponse({
- url: `/project-factory/v1/data/_generate`,
- body: {},
- params: {
- tenantId: tenantId,
- type: "boundaryManagement",
- forceUpdate: true,
- hierarchyType: hierarchyType,
- campaignId: "default",
- },
- });
- return res;
-};
-
const fetchBoundaryHierarchy = async (hierarchyType, tenantId) => {
try {
- // Second API Call: Fetch Service Definitions
const res = await Digit.CustomService.getResponse({
url: `/boundary-service/boundary-hierarchy-definition/_search`,
params: {},
@@ -38,14 +19,13 @@ const fetchBoundaryHierarchy = async (hierarchyType, tenantId) => {
});
return res?.BoundaryHierarchy?.[0] || {};
} catch (error) {
- console.error("Error fetching service definition:", error);
+ console.error("Error fetching boundary hierarchy:", error);
return error;
}
};
const fetchEmployeeDetails = async (userName, tenantId) => {
try {
- // Second API Call: Fetch Service Definitions
const res = await Digit.CustomService.getResponse({
url: `/${HRMS_CONTEXT_PATH}/employees/_search`,
params: {
@@ -57,71 +37,68 @@ const fetchEmployeeDetails = async (userName, tenantId) => {
});
return res?.Employees?.[0];
} catch (error) {
- console.error("Error fetching service definition:", error);
+ console.error("Error fetching employee details:", error);
return error;
}
};
-const selectData = (data) => {
- return data?.mdms
- ?.map((e) => e?.data)
- .reduce((acc, curr) => {
- acc[curr?.type] = curr;
- return acc;
- }, {});
+const fetchHierarchies = async (tenantId) => {
+ try {
+ const res = await Digit.CustomService.getResponse({
+ url: `/egov-mdms-service/v1/_search`,
+ body: {
+ MdmsCriteria: {
+ tenantId: tenantId,
+ moduleDetails: [{
+ moduleName: "HCM-ADMIN-CONSOLE",
+ masterDetails: [{
+ name: "HierarchySchema"
+ }]
+ }]
+ },
+ },
+ });
+ return res?.MdmsRes?.["HCM-ADMIN-CONSOLE"]?.HierarchySchema|| [];
+ } catch (error) {
+ console.error("Error fetching hierarchies:", error);
+ return [];
+ }
};
-const useBoundaryHome = ({ screenType = "campaign", defaultHierarchyType = "", hierarchyType = "", userName, tenantId }) => {
+const useBoundaryHome = ({ hierarchyType = "", userName, tenantId }) => {
const fetchConsolidatedData = async () => {
try {
- // First API Call: Fetch MDMS Data
- const mdmsResponse = await Digit.CustomService.getResponse({
- url: `/${MDMS_V2_CONTEXT_PATH}/v2/_search`,
- body: {
- MdmsCriteria: {
- tenantId: tenantId,
- schemaCode: `${CONSOLE_MDMS_MODULENAME}.HierarchySchema`,
- isActive: true
- },
- },
- });
- // Second API Call: Merge MDMS Data with Service Definition
- const final = selectData(mdmsResponse);
- // let final = selectData(mdmsResponse);
- // final.campaign.hierarchyType="BOUNDARYDEMO35";
-
- const boundaryConfig = final?.[screenType];
-
- const employeeDetails = (boundaryConfig?.department?.length > 0 && (await fetchEmployeeDetails(userName, tenantId))) || null;
- const hierarchyName=hierarchyType || boundaryConfig?.hierarchy;
- const defaultHierarchyName=defaultHierarchyType || final?.["default"]?.hierarchy;
- const boundaryData = await fetchBoundaryHierarchy(hierarchyName, tenantId);
- const defaultBoundaryData = await fetchBoundaryHierarchy(defaultHierarchyName, tenantId);
- // boundaryData && generateFile(hierarchyType || boundaryConfig?.hierarchy, tenantId);
+ // Fetch all hierarchies
+ const hierarchies = await fetchHierarchies(tenantId);
+
+ // Fetch employee details
+ const employeeDetails = await fetchEmployeeDetails(userName, tenantId);
+ const employeeDepartments = employeeDetails?.assignments?.map(assignment => assignment.department) || [];
+ // Find matching hierarchy based on employee departments
+ const matchingHierarchy = hierarchies.find(
+ schema => (schema.department || []).some(dept => employeeDepartments.includes(dept))
+ );
+ const hierarchyName = hierarchyType || matchingHierarchy?.hierarchy;
+
+ // Fetch boundary data for the matched hierarchy
+ const boundaryData = hierarchyName ? await fetchBoundaryHierarchy(hierarchyName, tenantId) : null;
- // Return a promise that resolves after both API calls are complete
- return new Promise((resolve) => {
- // Once the second call (`mergeData`) is done, resolve the final data
+ return {
+ boundaryData,
+ employeeDetails,
+ hierarchyName,
+ matchingHierarchy,
+ hierarchies
+ };
- // Merge the MDMS data with the service data
- const mergedData = {
- boundaryConfig: final,
- defaultBoundaryData,
- boundaryData,
- employeeDetails,
- hierarchyName,
- defaultHierarchyName
- };
- resolve(mergedData);
- });
} catch (error) {
- console.error("Error fetching MDMS data:", error);
- return [];
+ console.error("Error in consolidated data fetch:", error);
+ return {};
}
};
const { data, isFetching, refetch, isLoading, error } = useQuery(
- ["mdmsData", screenType, defaultHierarchyType, hierarchyType, userName, tenantId],
+ ["boundaryData", hierarchyType, userName, tenantId],
fetchConsolidatedData,
{
cacheTime: 0,
@@ -133,11 +110,8 @@ const useBoundaryHome = ({ screenType = "campaign", defaultHierarchyType = "", h
isLoading,
error,
refetch,
- isFetching,
- revalidate: () => {
- // final && client.invalidateQueries({ queryKey: [url].filter((e) => e) });
- },
+ isFetching
};
};
-export default useBoundaryHome;
+export default useBoundaryHome;
\ No newline at end of file
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useEmployeeHierarchyType.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useEmployeeHierarchyType.js
new file mode 100644
index 00000000000..22931b0e0b6
--- /dev/null
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useEmployeeHierarchyType.js
@@ -0,0 +1,96 @@
+import { useEffect, useState, useCallback, useMemo } from 'react';
+
+const useEmployeeHierarchyType = (tenantId, options = {}) => {
+ const [data, setData] = useState(null);
+ const [isLoading, setIsLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ const HRMS_CONTEXT_PATH = window?.globalConfigs?.getConfig("HRMS_CONTEXT_PATH") || "egov-hrms";
+ const CONSOLE_MDMS_MODULENAME = "HCM-ADMIN-CONSOLE";
+ const MDMS_V2_CONTEXT_PATH = window?.globalConfigs?.getConfig("MDMS_V2_CONTEXT_PATH") || "egov-mdms-service";
+
+
+ const fetchEmployeeAndHierarchy = useCallback(async () => {
+ try {
+ setIsLoading(true);
+
+ // Fetch employee details
+ const employeeResponse = await Digit.CustomService.getResponse({
+ url: `/${HRMS_CONTEXT_PATH}/employees/_search`,
+ params: {
+ tenantId,
+ codes: Digit.UserService.getUser()?.info?.userName,
+ SortOrder: "ASC"
+ },
+ body: {}
+ });
+
+ const employee = employeeResponse?.Employees?.[0];
+
+ // Fetch hierarchies using MDMS
+ const mdmsResponse = await Digit.CustomService.getResponse(
+ {
+ url: `/${MDMS_V2_CONTEXT_PATH}/v1/_search`,
+ params: {},
+ body: {
+ MdmsCriteria: {
+ tenantId,
+ moduleDetails: [{
+ moduleName: "HCM-ADMIN-CONSOLE",
+ masterDetails: [{
+ name: "HierarchySchema"
+ }]
+ }]
+ }
+ }
+ }
+ );
+
+ // Get employee departments
+ const employeeDepartments = employee?.assignments?.map(assignment => assignment.department) || [];
+ const hierarchies = mdmsResponse?.MdmsRes?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema || [];
+
+ // Find matching hierarchy
+ const matchingHierarchy = hierarchies.find(
+ schema => (schema.department || []).some(dept => employeeDepartments.includes(dept))
+ );
+
+ const result = {
+ hierarchy: matchingHierarchy?.hierarchy || null,
+ employee,
+ allHierarchies: hierarchies,
+ matchingHierarchy
+ };
+
+ setData(result);
+ setIsLoading(false);
+ return result;
+
+ } catch (err) {
+ console.error("Error in useEmployeeHierarchyType:", err);
+ setError(err);
+ setIsLoading(false);
+ return null;
+ }
+ }, [tenantId]);
+
+ useEffect(() => {
+ fetchEmployeeAndHierarchy();
+ }, [fetchEmployeeAndHierarchy]);
+
+ const select = options?.select || (data => data?.hierarchy);
+ const queryData = useMemo(() => {
+ if (!data) return null;
+ return select(data);
+ }, [data, select]);
+
+ return {
+ data: queryData,
+ isLoading,
+ error,
+ refetch: fetchEmployeeAndHierarchy,
+ rawData: data
+ };
+};
+
+export default useEmployeeHierarchyType;
\ No newline at end of file
diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/BoundaryHome.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/BoundaryHome.js
index 1f579ea09a2..bf27a052739 100644
--- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/BoundaryHome.js
+++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/BoundaryHome.js
@@ -47,11 +47,18 @@ const BoundaryHome = () => {
const [showPopUp, setShowPopUp] = useState(false);
const [authorized, setAuthorized] = useState(false);
const [geoPodeData, setGeoPodeData] = useState(false);
+ const [disButton, setDisButton] = useState(true);
const history = useHistory();
+ const user = Digit.UserService.getUser();
const type=searchParams.get("type")|| config?.type;
const {isLoading,data,error}=Digit.Hooks.campaign.useBoundaryHome({ screenType: type,defaultHierarchyType:searchParams?.get("defaultHierarchyType"),hierarchyType:searchParams?.get("hierarchyType"),userName:Digit.UserService.getUser()?.info?.userName,tenantId });
+ useEffect(()=>{
+ if(user?.info?.roles?.some(role => role.code === "BOUNDARY_MANAGER")) setAuthorized(true);
+ setDisButton(!data?.boundaryData || !data?.hierarchyName);
+ }, [data]);
+
if (isLoading) return
;
return (
@@ -71,7 +78,7 @@ const BoundaryHome = () => {
size={"large"}
variation={"secondary"}
label={t(key)}
- isDisabled={isEditDisabled || isCreateDisabled}
+ isDisabled={isEditDisabled || isCreateDisabled || disButton || !authorized}
onClick={()=>navigate(history,key,data,setShowPopUp)}
style={{ width: "35rem", height: "5rem" }}
textStyles={{ fontSize: "1.5rem" }}
@@ -79,7 +86,7 @@ const BoundaryHome = () => {
})}
-