diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/Module.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/Module.js index 224c2bab5c..2811c3776a 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/Module.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/Module.js @@ -1,5 +1,5 @@ -import { Loader, TourProvider } from "@egovernments/digit-ui-react-components"; -import React from "react"; +import { Body, Loader, TourProvider } from "@egovernments/digit-ui-react-components"; +import React, { useState, useEffect } from "react"; import { useRouteMatch } from "react-router-dom"; import EmployeeApp from "./pages/employee"; import { CustomisedHooks } from "./hooks"; @@ -68,27 +68,30 @@ export const CONSOLE_MDMS_MODULENAME = "HCM-ADMIN-CONSOLE"; */ const CampaignModule = ({ stateCode, userType, tenants }) => { const tenantId = Digit.ULBService.getCurrentTenantId(); - const { data: BOUNDARY_HIERARCHY_TYPE, isLoading: hierarchyLoading } = Digit.Hooks.useCustomMDMS( - tenantId, - CONSOLE_MDMS_MODULENAME, - [ - { - name: "HierarchySchema", - filter: `[?(@.type=='${window.Digit.Utils.campaign.getModuleName()}')]`, - }, - ], - { - select: (data) => { - return data?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.[0]?.hierarchy; - }, - }, - { schemaCode: `${CONSOLE_MDMS_MODULENAME}.HierarchySchema` } - ); + const [filteredHierarchyType, setFilteredHierarchyType] = useState(null); + const [employeeData, setEmployeeData] = useState(null); + const [loading, setLoading] = useState(true); + const HRMS_CONTEXT_PATH = window?.globalConfigs?.getConfig("HRMS_CONTEXT_PATH") || "egov-hrms"; + + // Using the new custom hook + const { + data: BOUNDARY_HIERARCHY_TYPE, + isLoading: hierarchyLoading, + rawData: hierarchyData + } = Digit.Hooks.campaign.useEmployeeHierarchyType(tenantId, { + select: (data) => data?.hierarchy + }); + + const hierarchyRelationData = Digit.Hooks.campaign.useBoundaryRelationshipSearch({ + BOUNDARY_HIERARCHY_TYPE, + tenantId + }); - const hierarchyData = Digit.Hooks.campaign.useBoundaryRelationshipSearch({ BOUNDARY_HIERARCHY_TYPE, tenantId }); const modulePrefix = "hcm"; + const moduleCode = BOUNDARY_HIERARCHY_TYPE + ? [`boundary-${BOUNDARY_HIERARCHY_TYPE}`] + : ["campaignmanager", "schema", "admin-schemas", "checklist", "appconfiguration"]; - const moduleCode = BOUNDARY_HIERARCHY_TYPE ? [`boundary-${BOUNDARY_HIERARCHY_TYPE}`] : ["campaignmanager", "schema", "admin-schemas", "checklist", "appconfiguration"]; const { path, url } = useRouteMatch(); const language = Digit.StoreData.getCurrentLanguage(); @@ -112,7 +115,13 @@ const CampaignModule = ({ stateCode, userType, tenants }) => { stateCode={stateCode} url={url} userType={userType} - hierarchyData={hierarchyData} + hierarchyData={hierarchyRelationData} + employeeDetails={hierarchyData?.employee} + allHierarchy={{ + [CONSOLE_MDMS_MODULENAME]: { + HierarchySchema: hierarchyData?.allHierarchies + } + }} /> diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CampaignType.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CampaignType.js index b3d242742e..2992f67ac8 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CampaignType.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/CampaignType.js @@ -1,7 +1,7 @@ import React, { useState, useMemo, useRef, useEffect, Fragment } from "react"; import { Header } from "@egovernments/digit-ui-react-components"; import { useTranslation } from "react-i18next"; -import { InfoCard, LabelFieldPair } from "@egovernments/digit-ui-components"; +import { InfoCard, LabelFieldPair, Toast } from "@egovernments/digit-ui-components"; import { Button, CardText, Dropdown, ErrorMessage, PopUp, Stepper, TextBlock , Card, Loader} from "@egovernments/digit-ui-components"; const CampaignSelection = ({ onSelect, formData, formState, ...props }) => { @@ -20,14 +20,27 @@ const CampaignSelection = ({ onSelect, formData, formState, ...props }) => { const [currentStep , setCurrentStep] = useState(1); const currentKey = searchParams.get("key"); const source = searchParams.get("source"); + const [showToast, setShowToast] = useState(false); const [key, setKey] = useState(() => { const keyParam = searchParams.get("key"); return keyParam ? parseInt(keyParam) : 1; }); const [loading, setLoading] = useState(true); - const employeeDetails = props?.props?.employeeDetails?.Employees?.[0]; - const hierarchies = props?.props?.allHierarchy?.MdmsRes?.["HCM-ADMIN-CONSOLE"]?.HierarchySchema || []; + const { + data: BOUNDARY_HIERARCHY_TYPE, + isLoading: hierarchyLoading, + rawData: rawData + } = Digit.Hooks.campaign.useEmployeeHierarchyType(tenantId, { + select: (data) => data?.hierarchy + }); + + const employeeDetails = useMemo(() => { + return rawData?.employee; + }, [rawData]); + const hierarchies = useMemo(()=>{ + return rawData?.allHierarchies; + }, [rawData]) function updateUrlParams(params) { const url = new URL(window.location.href); @@ -95,6 +108,7 @@ const CampaignSelection = ({ onSelect, formData, formState, ...props }) => { const filtered = filterProjectTypesByHierarchy(employeeDetails, hierarchies, projectType); setLoading(false); setFilteredProjectTypes(filtered); + if(!filtered) setShowToast(true); } }, [employeeDetails, projectType, hierarchies]); @@ -282,6 +296,12 @@ const CampaignSelection = ({ onSelect, formData, formState, ...props }) => { )} )} + {!loading && showToast && + + } ); }; diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundariesDuplicate.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundariesDuplicate.js index a09de5aed6..df57e61b51 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundariesDuplicate.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/components/SelectingBoundariesDuplicate.js @@ -19,44 +19,33 @@ const SelectingBoundariesDuplicate = ({ onSelect, formData, ...props }) => { // "filter": `[?(@.type=='${window.Digit.Utils.campaign.getModuleName()}')]` // }],{select:(MdmsRes)=>MdmsRes},{ schemaCode: `${CONSOLE_MDMS_MODULENAME}.HierarchySchema` }); + const { + data: BOUNDARY_HIERARCHY_TYPE, + isLoading: hierarchyLoading, + rawData: rawData + } = Digit.Hooks.campaign.useEmployeeHierarchyType(tenantId, { + select: (data) => data?.hierarchy + }); + const lowestHierarchy = useMemo(() => { + return rawData?.matchingHierarchy?.lowestHierarchy; + }, [rawData]); + const hierarchyType = useMemo(()=>{ + return BOUNDARY_HIERARCHY_TYPE; + }, [BOUNDARY_HIERARCHY_TYPE]) + const [boundaryHierarchyData, setBoundaryHierarchyData] = useState(null); - const [hierarchyType, setHierarchyType] = useState(null); - const [HierarchySchema, setHierarchySchema] = useState(null); - const [lowestHierarchy, setLowestHierarchy] = useState(null); const [loading, setLoading] = useState(true); - useEffect(() => { - const fetchBoundaryHierarchy = async () => { - const employeeDepartments = employee?.assignments?.map((assignment) => assignment.department) || []; - - // Find first hierarchy where any group matches any employee department - const firstMatchingSchema = hierarchies.find( - schema => (schema.department || []).some(dept => employeeDepartments.includes(dept)) - ); - - const hierarchyType = firstMatchingSchema ? [firstMatchingSchema] : []; - - const hierschema = { - "HCM-ADMIN-CONSOLE": { - "HierarchySchema": hierarchyType - } - }; - - setHierarchySchema(hierschema); - setLowestHierarchy(hierschema?.["HCM-ADMIN-CONSOLE"]?.HierarchySchema?.[0]?.lowestHierarchy); - setHierarchyType(hierarchyType?.[0]?.hierarchy); - - if (!hierarchyType?.[0]?.hierarchy) return; - + if(!hierarchyType) return null; + const fetchBoundaryHierarchy = async () => { try { - // Using regular fetch instead of hook const response = await Digit.CustomService.getResponse({ url: '/boundary-service/boundary-relationships/_search', params: { tenantId: tenantId, - hierarchyType: hierarchyType?.[0]?.hierarchy, + hierarchyType: hierarchyType, includeChildren: true }, body: {}, @@ -65,7 +54,6 @@ const SelectingBoundariesDuplicate = ({ onSelect, formData, ...props }) => { const boundaryData = response?.TenantBoundary?.[0]?.boundary; setBoundaryHierarchyData(boundaryData); setLoading(false); - } catch (error) { console.error("Error fetching boundary hierarchy:", error); @@ -73,13 +61,9 @@ const SelectingBoundariesDuplicate = ({ onSelect, formData, ...props }) => { }; fetchBoundaryHierarchy(); - }, [employee, tenantId]); + }, [hierarchyType]); const { data: mailConfig } = Digit.Hooks.useCustomMDMS(tenantId, CONSOLE_MDMS_MODULENAME, [{ name: "mailConfig" }],{select:(MdmsRes)=>MdmsRes},{ schemaCode: `${CONSOLE_MDMS_MODULENAME}.mailConfig` }); - // const lowestHierarchy = useMemo(() => { - // console.log("lowest",HierarchySchema?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.[0]?.lowestHierarchy ); - // return HierarchySchema?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.[0]?.lowestHierarchy; - // }, [HierarchySchema]); const [selectedData, setSelectedData] = useState(props?.props?.sessionData?.HCM_CAMPAIGN_SELECTING_BOUNDARY_DATA?.boundaryType?.selectedData || []); const [boundaryOptions, setBoundaryOptions] = useState( @@ -108,7 +92,7 @@ const SelectingBoundariesDuplicate = ({ onSelect, formData, ...props }) => { }; useEffect(() => { - onSelect("boundaryType", { selectedData: selectedData, boundaryData: boundaryOptions , updateBoundary: !restrictSelection}); + onSelect("boundaryType", { selectedData: selectedData, boundaryData: boundaryOptions , updateBoundary: !restrictSelection }); }, [selectedData, boundaryOptions , restrictSelection]); useEffect(() => { @@ -181,26 +165,16 @@ const SelectingBoundariesDuplicate = ({ onSelect, formData, ...props }) => {
{t(`CAMPAIGN_SELECT_BOUNDARY`)}

{t(`CAMPAIGN_SELECT_BOUNDARIES_DESCRIPTION`)}

{ - // handleBoundaryChange(value); - // }} - hierarchyType={hierarchyType} - lowest={lowestHierarchy} - selectedData={selectedData} - boundaryOptions={boundaryOptions} - hierarchyData={boundaryHierarchyData} // Pass the fetched boundary hierarchy data - isMultiSelect={"true"} - restrictSelection={restrictSelection} - onSelect={(value) => { - handleBoundaryChange(value); - }} + hierarchyType={hierarchyType} + lowest={lowestHierarchy} + selectedData={selectedData} + boundaryOptions={boundaryOptions} + hierarchyData={boundaryHierarchyData} + isMultiSelect={"true"} + restrictSelection = {restrictSelection} + onSelect={(value) => { + handleBoundaryChange(value); + }} > 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 1a19b1dd57..ee77dd793c 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/hooks/index.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/index.js index da35cdc455..cda87de23a 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 23c9199a63..03006b5fde 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 0000000000..2c825c17ed --- /dev/null +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/hooks/useEmployeeHierarchyType.js @@ -0,0 +1,94 @@ +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 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: '/egov-mdms-service/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 09bd91636f..bf27a05273 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,17 @@ 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 ; @@ -72,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" }} @@ -80,7 +86,7 @@ const BoundaryHome = () => { })} - { {t(`HIERARCHY_CREATED_ON`)} {": "} {new Date(data?.boundaryData?.auditDetails?.createdTime).toLocaleDateString()}, {t(`HIERARCHY_LAST_MODIFIED_ON`)} {": "} {new Date(data?.boundaryData?.auditDetails?.lastModifiedTime).toLocaleDateString()}, ]} - /> + /> } + {disButton && + + } + {!authorized && + + } ); }; diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js index c464d1f0fe..eb186ebbad 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/SetupCampaign.js @@ -66,21 +66,31 @@ const SetupCampaign = ({ hierarchyType, hierarchyData }) => { const [fetchUpload, setFetchUpload] = useState(false); const [active, setActive] = useState(0); const HRMS_CONTEXT_PATH = window?.globalConfigs?.getConfig("HRMS_CONTEXT_PATH") || "egov-hrms"; - 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 { + 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?.[0]?.lowestHierarchy; - }, [HierarchySchema]); + return rawData?.matchingHierarchy?.lowestHierarchy; + }, [rawData]); const { data: DeliveryConfig } = Digit.Hooks.useCustomMDMS( tenantId, @@ -124,22 +134,7 @@ const SetupCampaign = ({ hierarchyType, hierarchyData }) => { } } } - - const { data: allHierarchy } = Digit.Hooks.useCustomAPIHook(reqAllHierarchy); - - const reqEmployeeDetails = { - url: `/${HRMS_CONTEXT_PATH}/employees/_search`, - params: { - tenantId: tenantId, - codes: Digit.UserService.getUser()?.info?.userName, - sortOrder: "ASC", - }, - body: {}, - - } - - const { data: employeeDetails } = Digit.Hooks.useCustomAPIHook(reqEmployeeDetails); - + const { isLoading: draftLoading, data: draftData, error: draftError, refetch: draftRefetch } = Digit.Hooks.campaign.useSearchCampaign({ tenantId: tenantId, filter: { @@ -243,8 +238,8 @@ const SetupCampaign = ({ hierarchyType, hierarchyData }) => { } }, [hierarchyDefinition?.BoundaryHierarchy?.[0], draftData]); useEffect(() => { - setCampaignConfig(CampaignConfig(totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData, allHierarchy, employeeDetails)); - }, [totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData, allHierarchy, employeeDetails]); + setCampaignConfig(CampaignConfig(totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData)); + }, [totalFormData, dataParams, isSubmitting, summaryErrors, hierarchyData]); useEffect(() => { setIsSubmitting(false); diff --git a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js index b9a6dd7afd..38a956fbf1 100644 --- a/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js +++ b/health/micro-ui/web/micro-ui-internals/packages/modules/campaign-manager/src/pages/employee/UpdateCampaign.js @@ -55,17 +55,29 @@ const UpdateCampaign = ({hierarchyData }) => { const [fetchBoundary, setFetchBoundary] = useState(() => Boolean(searchParams.get("fetchBoundary"))); const [fetchUpload, setFetchUpload] = useState(false); const [active, setActive] = useState(0); - 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 [hierarchyType, setHierarchyType] = useState(); + // 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 [hierarchyType, setHierarchyType] = useState(); const lowestHierarchy = useMemo(() => { - return HierarchySchema?.[CONSOLE_MDMS_MODULENAME]?.HierarchySchema?.find((item) => item.hierarchy === hierarchyType)?.lowestHierarchy; - }, [HierarchySchema, hierarchyType]); + return rawData?.matchingHierarchy?.lowestHierarchy; + }, [rawData]); + const { isLoading, data: projectType } = Digit.Hooks.useCustomMDMS(tenantId, "HCM-PROJECT-TYPES", [{ name: "projectTypes" }],{select:(MdmsRes)=>MdmsRes}, { schemaCode: `${"HCM-PROJECT-TYPES"}.projectTypes` }); - const reqCriteriaCampaign = { url: `/project-factory/v1/project-type/search`, body: {