added iniial state of daly progress filte panel

This commit is contained in:
pramod.mahajan 2025-09-25 19:30:55 +05:30
parent 69c225ac72
commit fb08e48edd
11 changed files with 139 additions and 41 deletions

View File

@ -1,4 +1,3 @@
import React, { useState, useEffect } from "react";
import "../../components/Project/ProjectInfra.css";
import BuildingModel from "../Project/Infrastructure/BuildingModel";
@ -8,25 +7,33 @@ import WorkAreaModel from "../Project/Infrastructure/WorkAreaModel";
import TaskModel from "../Project/Infrastructure/TaskModel";
import ProjectRepository from "../../repositories/ProjectRepository";
import Breadcrumb from "../../components/common/Breadcrumb";
import {useProjectDetails, useProjectInfra, useProjects} from "../../hooks/useProjects";
import {useHasUserPermission} from "../../hooks/useHasUserPermission";
import {APPROVE_TASK, ASSIGN_REPORT_TASK, MANAGE_PROJECT_INFRA} from "../../utils/constants";
import {useDispatch, useSelector} from "react-redux";
import {useProfile} from "../../hooks/useProfile";
import {refreshData, setProjectId} from "../../slices/localVariablesSlice";
import {
useCurrentService,
useProjectDetails,
useProjectInfra,
useProjects,
} from "../../hooks/useProjects";
import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import {
APPROVE_TASK,
ASSIGN_REPORT_TASK,
MANAGE_PROJECT_INFRA,
} from "../../utils/constants";
import { useDispatch, useSelector } from "react-redux";
import { useProfile } from "../../hooks/useProfile";
import { refreshData, setProjectId } from "../../slices/localVariablesSlice";
import InfraTable from "../Project/Infrastructure/InfraTable";
import { useSelectedProject } from "../../slices/apiDataManager";
import Loader from "../common/Loader";
const InfraPlanning = () => {
const { profile: LoggedUser, refetch: fetchData } = useProfile();
const dispatch = useDispatch();
const selectedProject = useSelectedProject();
const selectedService = useCurrentService();
const { projectInfra, isLoading, isError, error, isFetched } = useProjectInfra(selectedProject);
const { projectInfra, isLoading, isError, error, isFetched } =
useProjectInfra(selectedProject, selectedService || "" );
const canManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA);
const canApproveTask = useHasUserPermission(APPROVE_TASK);
@ -63,9 +70,9 @@ const InfraPlanning = () => {
return (
<div className="col-md-12 col-lg-12 col-xl-12 order-0 mb-4">
<div className="card-body" style={{ padding: "0.5rem" }}>
<div className="row">
<InfraTable buildings={projectInfra} projectId={selectedProject} />
<div className="card-body" style={{ padding: "0.5rem" }}>
<div className="row">
<InfraTable buildings={projectInfra} projectId={selectedProject} />
</div>
</div>
</div>
@ -73,4 +80,3 @@ const InfraPlanning = () => {
};
export default InfraPlanning;

View File

@ -1,10 +1,68 @@
import React from 'react'
import React, { useState } from 'react'
import { useCurrentService, useProjectInfra } from '../../hooks/useProjects'
import { useSelectedProject } from '../../slices/apiDataManager';
import { FormProvider, useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { TaskReportDefaultValue, TaskReportFilterSchema } from './TaskRportScheam';
import { DateRangePicker1 } from '../common/DateRangePicker';
import SelectMultiple from '../common/SelectMultiple';
const TaskReportFilterPanel = () => {
const [resetKey, setResetKey] = useState(0);
const selectedProjec = useSelectedProject()
const selectedService = useCurrentService();
const {projectInfra, isLoading, error, isFetched } = useProjectInfra(selectedProjec,selectedService);
const methods = useForm({resolver:zodResolver(TaskReportFilterSchema),defaultValues:TaskReportDefaultValue})
const {register,reset,handleSubmit, formState:{errors}} = methods;
const onSubmit =(formData)=>{}
return (
<div>
</div>
<FormProvider {...methods}>
<form onSubmit={handleSubmit(onSubmit)} className="p-2 text-start">
<div className="mb-3 w-100">
<label className="fw-semibold">Choose Date Range:</label>
<DateRangePicker1
placeholder="DD-MM-YYYY To DD-MM-YYYY"
startField="startDate"
endField="endDate"
resetSignal={resetKey}
defaultRange={false}
/>
</div>
<div className="row g-2">
<SelectMultiple
name="buildingIds"
label="Projects"
options={projectInfra}
labelKey="buildingName"
valueKey="id"
/>
</div>
<div className="row g-2">
<SelectMultiple
name="floorIds"
label="Floor"
options={projectInfra}
labelKey="floorName"
valueKey="id"
/>
</div>
<div className="d-flex justify-content-end py-3 gap-2">
<button
type="button"
className="btn btn-label-secondary btn-xs"
>
Clear
</button>
<button type="submit" className="btn btn-primary btn-xs">
Apply
</button>
</div>
</form>
</FormProvider>
)
}

View File

@ -0,0 +1,15 @@
import { z } from "zod";
export const TaskReportFilterSchema = z.object({
buildingIds: z.array(z.string()).optional(),
floorIds: z.array(z.string()).optional(),
startDate: z.string().optional(),
endDate: z.string().optional(),
});
export const TaskReportDefaultValue = {
buildingIds:[],
floorIds:[],
startDate:null,
endDate:null
}

View File

@ -49,7 +49,9 @@ const ManageProjectInfo = ({ project, handleSubmitForm, onClose, isPending }) =>
.default(currentDate),
projectStatusId: z
.string()
.min(1, { message: "Status is required" })
.min(1, { message: "Status is required" }),
promoterId:z.string().min(1,{message:"Promoter is required"}),
pmcId:z.string().min(1,{message:"PMC is required"})
})
.refine(
(data) => {
@ -80,12 +82,13 @@ const ManageProjectInfo = ({ project, handleSubmitForm, onClose, isPending }) =>
projectAddress: project?.projectAddress || "",
startDate: formatDate(project?.startDate) || currentDate,
endDate: formatDate(project?.endDate) || currentDate,
// projectStatusId: String(project?.projectStatusId || "00000000-0000-0000-0000-000000000000"),
projectStatusId: project?.projectStatusId && project.projectStatusId !== DEFAULT_EMPTY_STATUS_ID
? String(project.projectStatusId)
: ACTIVE_STATUS_ID,
promoterId:project.promoterId,
pmcId:project.pmcId
},
mode: "onChange",
});

View File

@ -121,7 +121,7 @@ const MapUsers = ({
<button type="button" className="btn-close" data-bs-dismiss="modal" aria-label="Close">
</button>
</div>
<p className="m-0 fw-semibold fs-5">Assign Employee</p>
<p className="m-0 fw-semibold fs-5">Add Employee To Project</p>
<div className="px-4 mt-4 col-md-4 text-start">
{(filteredData.length > 0 ||

View File

@ -35,7 +35,10 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
const selectedService = useCurrentService();
const reloadedData = useSelector((store) => store.localVariables.reload);
const [expandedBuildings, setExpandedBuildings] = useState([]);
const { projectInfra, isLoading, error } = useProjectInfra(projectId);
const { projectInfra, isLoading, error } = useProjectInfra(
projectId,
selectedService
);
const { projects_Details, refetch, loading } = useProjectDetails(data?.id);
const [project, setProject] = useState(projects_Details);
const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA);
@ -48,7 +51,6 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
const { data: assignedServices, isLoading: servicesLoading } =
useProjectAssignedServices(projectId);
useEffect(() => {
setProject(projectInfra);
}, [data, projects_Details]);

View File

@ -29,7 +29,7 @@ const ProjectAssignedOrgs = () => {
label: "Service Name",
getValue: (org) => (
<div className="d-flex gap-2 py-1 ">
N/A
{org?.service?.name}
</div>
),
align: "text-start",

View File

@ -190,17 +190,17 @@ export const useProjectName = () => {
};
};
export const useProjectInfra = (projectId) => {
export const useProjectInfra = (projectId,serviceId) => {
const {
data: projectInfra,
isLoading,
error,
isFetched,
} = useQuery({
queryKey: ["ProjectInfra", projectId],
queryKey: ["ProjectInfra", projectId,serviceId],
queryFn: async () => {
if (!projectId) return null;
const res = await ProjectRepository.getProjectInfraByproject(projectId);
const res = await ProjectRepository.getProjectInfraByproject(projectId,serviceId);
return res.data;
},
enabled: !!projectId,

View File

@ -64,7 +64,7 @@ const TaskPlanning = () => {
{/* Planning Component */}
{selectedProject ? (
<InfraPlanning selectedService={selectedService} />
<InfraPlanning />
) : (
<div className="text-center py-3">Please select a project</div>
)}

View File

@ -87,10 +87,10 @@ const DailyProgrssReport = () => {
onChange={(e) => setService(e.target.value)}
>
{isLoading ? (
<option>Loading...</option>
<option value="lading" disabled>Loading...</option>
) : (
<>
<option value="" selected>
<option value="">
All Services
</option>
{data?.data?.map((service) => (

View File

@ -19,7 +19,6 @@ const ProjectRepository = {
return api.get(url);
},
getEmployeesByProject: (projectId) =>
api.get(`/api/Project/employees/get/${projectId}`),
@ -42,7 +41,14 @@ const ProjectRepository = {
projectNameList: () => api.get("/api/project/list/basic"),
getProjectDetails: (id) => api.get(`/api/project/details/${id}`),
getProjectInfraByproject: (id) => api.get(`/api/project/infra-details/${id}`),
getProjectInfraByproject: (projectId, serviceId) => {
let url = `/api/project/infra-details/${projectId}`;
if (serviceId) {
url + `?serviceId=${serviceId}`;
}
return api.get(url);
},
getProjectTasksByWorkArea: (workAreaId, serviceId) => {
let url = `/api/project/tasks/${workAreaId}`;
if (serviceId) {
@ -58,16 +64,24 @@ const ProjectRepository = {
// Permission Managment for Employee at Project Level
getProjectLevelEmployeeList: (projectId) => api.get(`/api/Project/get/proejct-level/employees/${projectId}`),
getProjectLevelModules: () => api.get(`/api/Project/get/proejct-level/modules`),
getProjectLevelEmployeePermissions: (employeeId, projectId) => api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`),
updateProjectLevelEmployeePermission: (data) => api.post(`/api/Project/assign/project-level-permission`, data),
getAllProjectLevelPermission: (projectId) => api.get(`/api/Project/get/all/project-level-permission/${projectId}`),
getProjectLevelEmployeeList: (projectId) =>
api.get(`/api/Project/get/proejct-level/employees/${projectId}`),
getProjectLevelModules: () =>
api.get(`/api/Project/get/proejct-level/modules`),
getProjectLevelEmployeePermissions: (employeeId, projectId) =>
api.get(
`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`
),
updateProjectLevelEmployeePermission: (data) =>
api.post(`/api/Project/assign/project-level-permission`, data),
getAllProjectLevelPermission: (projectId) =>
api.get(`/api/Project/get/all/project-level-permission/${projectId}`),
// Services
getProjectAssignedServices: (projectId) => api.get(`/api/Project/get/assigned/services/${projectId}`),
getProjectAssignedOrganizations: (projectId) => api.get(`/api/Project/get/assigned/organization/${projectId}`)
getProjectAssignedServices: (projectId) =>
api.get(`/api/Project/get/assigned/services/${projectId}`),
getProjectAssignedOrganizations: (projectId) =>
api.get(`/api/Project/get/assigned/organization/${projectId}`),
};
export const TasksRepository = {