added iniial state of daly progress filte panel
This commit is contained in:
parent
69c225ac72
commit
fb08e48edd
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import "../../components/Project/ProjectInfra.css";
|
import "../../components/Project/ProjectInfra.css";
|
||||||
import BuildingModel from "../Project/Infrastructure/BuildingModel";
|
import BuildingModel from "../Project/Infrastructure/BuildingModel";
|
||||||
@ -8,25 +7,33 @@ import WorkAreaModel from "../Project/Infrastructure/WorkAreaModel";
|
|||||||
import TaskModel from "../Project/Infrastructure/TaskModel";
|
import TaskModel from "../Project/Infrastructure/TaskModel";
|
||||||
import ProjectRepository from "../../repositories/ProjectRepository";
|
import ProjectRepository from "../../repositories/ProjectRepository";
|
||||||
import Breadcrumb from "../../components/common/Breadcrumb";
|
import Breadcrumb from "../../components/common/Breadcrumb";
|
||||||
import {useProjectDetails, useProjectInfra, useProjects} from "../../hooks/useProjects";
|
import {
|
||||||
import {useHasUserPermission} from "../../hooks/useHasUserPermission";
|
useCurrentService,
|
||||||
import {APPROVE_TASK, ASSIGN_REPORT_TASK, MANAGE_PROJECT_INFRA} from "../../utils/constants";
|
useProjectDetails,
|
||||||
import {useDispatch, useSelector} from "react-redux";
|
useProjectInfra,
|
||||||
import {useProfile} from "../../hooks/useProfile";
|
useProjects,
|
||||||
import {refreshData, setProjectId} from "../../slices/localVariablesSlice";
|
} 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 InfraTable from "../Project/Infrastructure/InfraTable";
|
||||||
import { useSelectedProject } from "../../slices/apiDataManager";
|
import { useSelectedProject } from "../../slices/apiDataManager";
|
||||||
import Loader from "../common/Loader";
|
import Loader from "../common/Loader";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const InfraPlanning = () => {
|
const InfraPlanning = () => {
|
||||||
const { profile: LoggedUser, refetch: fetchData } = useProfile();
|
const { profile: LoggedUser, refetch: fetchData } = useProfile();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const selectedProject = useSelectedProject();
|
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 canManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA);
|
||||||
const canApproveTask = useHasUserPermission(APPROVE_TASK);
|
const canApproveTask = useHasUserPermission(APPROVE_TASK);
|
||||||
@ -63,9 +70,9 @@ const InfraPlanning = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="col-md-12 col-lg-12 col-xl-12 order-0 mb-4">
|
<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="card-body" style={{ padding: "0.5rem" }}>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<InfraTable buildings={projectInfra} projectId={selectedProject} />
|
<InfraTable buildings={projectInfra} projectId={selectedProject} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -73,4 +80,3 @@ const InfraPlanning = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default InfraPlanning;
|
export default InfraPlanning;
|
||||||
|
|
||||||
|
@ -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 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 (
|
return (
|
||||||
<div>
|
<FormProvider {...methods}>
|
||||||
|
<form onSubmit={handleSubmit(onSubmit)} className="p-2 text-start">
|
||||||
</div>
|
<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>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
src/components/DailyProgressRport/TaskRportScheam.jsx
Normal file
15
src/components/DailyProgressRport/TaskRportScheam.jsx
Normal 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
|
||||||
|
}
|
@ -49,7 +49,9 @@ const ManageProjectInfo = ({ project, handleSubmitForm, onClose, isPending }) =>
|
|||||||
.default(currentDate),
|
.default(currentDate),
|
||||||
projectStatusId: z
|
projectStatusId: z
|
||||||
.string()
|
.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(
|
.refine(
|
||||||
(data) => {
|
(data) => {
|
||||||
@ -80,12 +82,13 @@ const ManageProjectInfo = ({ project, handleSubmitForm, onClose, isPending }) =>
|
|||||||
projectAddress: project?.projectAddress || "",
|
projectAddress: project?.projectAddress || "",
|
||||||
startDate: formatDate(project?.startDate) || currentDate,
|
startDate: formatDate(project?.startDate) || currentDate,
|
||||||
endDate: formatDate(project?.endDate) || currentDate,
|
endDate: formatDate(project?.endDate) || currentDate,
|
||||||
// projectStatusId: String(project?.projectStatusId || "00000000-0000-0000-0000-000000000000"),
|
|
||||||
projectStatusId: project?.projectStatusId && project.projectStatusId !== DEFAULT_EMPTY_STATUS_ID
|
projectStatusId: project?.projectStatusId && project.projectStatusId !== DEFAULT_EMPTY_STATUS_ID
|
||||||
|
|
||||||
? String(project.projectStatusId)
|
? String(project.projectStatusId)
|
||||||
|
|
||||||
: ACTIVE_STATUS_ID,
|
: ACTIVE_STATUS_ID,
|
||||||
|
promoterId:project.promoterId,
|
||||||
|
pmcId:project.pmcId
|
||||||
},
|
},
|
||||||
mode: "onChange",
|
mode: "onChange",
|
||||||
});
|
});
|
||||||
|
@ -121,7 +121,7 @@ const MapUsers = ({
|
|||||||
<button type="button" className="btn-close" data-bs-dismiss="modal" aria-label="Close">
|
<button type="button" className="btn-close" data-bs-dismiss="modal" aria-label="Close">
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</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">
|
<div className="px-4 mt-4 col-md-4 text-start">
|
||||||
{(filteredData.length > 0 ||
|
{(filteredData.length > 0 ||
|
||||||
|
@ -35,7 +35,10 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
|
|||||||
const selectedService = useCurrentService();
|
const selectedService = useCurrentService();
|
||||||
const reloadedData = useSelector((store) => store.localVariables.reload);
|
const reloadedData = useSelector((store) => store.localVariables.reload);
|
||||||
const [expandedBuildings, setExpandedBuildings] = useState([]);
|
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 { projects_Details, refetch, loading } = useProjectDetails(data?.id);
|
||||||
const [project, setProject] = useState(projects_Details);
|
const [project, setProject] = useState(projects_Details);
|
||||||
const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA);
|
const ManageInfra = useHasUserPermission(MANAGE_PROJECT_INFRA);
|
||||||
@ -48,7 +51,6 @@ const ProjectInfra = ({ data, onDataChange, eachSiteEngineer }) => {
|
|||||||
const { data: assignedServices, isLoading: servicesLoading } =
|
const { data: assignedServices, isLoading: servicesLoading } =
|
||||||
useProjectAssignedServices(projectId);
|
useProjectAssignedServices(projectId);
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setProject(projectInfra);
|
setProject(projectInfra);
|
||||||
}, [data, projects_Details]);
|
}, [data, projects_Details]);
|
||||||
|
@ -29,7 +29,7 @@ const ProjectAssignedOrgs = () => {
|
|||||||
label: "Service Name",
|
label: "Service Name",
|
||||||
getValue: (org) => (
|
getValue: (org) => (
|
||||||
<div className="d-flex gap-2 py-1 ">
|
<div className="d-flex gap-2 py-1 ">
|
||||||
N/A
|
{org?.service?.name}
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
align: "text-start",
|
align: "text-start",
|
||||||
|
@ -190,17 +190,17 @@ export const useProjectName = () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useProjectInfra = (projectId) => {
|
export const useProjectInfra = (projectId,serviceId) => {
|
||||||
const {
|
const {
|
||||||
data: projectInfra,
|
data: projectInfra,
|
||||||
isLoading,
|
isLoading,
|
||||||
error,
|
error,
|
||||||
isFetched,
|
isFetched,
|
||||||
} = useQuery({
|
} = useQuery({
|
||||||
queryKey: ["ProjectInfra", projectId],
|
queryKey: ["ProjectInfra", projectId,serviceId],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
if (!projectId) return null;
|
if (!projectId) return null;
|
||||||
const res = await ProjectRepository.getProjectInfraByproject(projectId);
|
const res = await ProjectRepository.getProjectInfraByproject(projectId,serviceId);
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
enabled: !!projectId,
|
enabled: !!projectId,
|
||||||
|
@ -64,7 +64,7 @@ const TaskPlanning = () => {
|
|||||||
|
|
||||||
{/* Planning Component */}
|
{/* Planning Component */}
|
||||||
{selectedProject ? (
|
{selectedProject ? (
|
||||||
<InfraPlanning selectedService={selectedService} />
|
<InfraPlanning />
|
||||||
) : (
|
) : (
|
||||||
<div className="text-center py-3">Please select a project</div>
|
<div className="text-center py-3">Please select a project</div>
|
||||||
)}
|
)}
|
||||||
|
@ -87,10 +87,10 @@ const DailyProgrssReport = () => {
|
|||||||
onChange={(e) => setService(e.target.value)}
|
onChange={(e) => setService(e.target.value)}
|
||||||
>
|
>
|
||||||
{isLoading ? (
|
{isLoading ? (
|
||||||
<option>Loading...</option>
|
<option value="lading" disabled>Loading...</option>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<option value="" selected>
|
<option value="">
|
||||||
All Services
|
All Services
|
||||||
</option>
|
</option>
|
||||||
{data?.data?.map((service) => (
|
{data?.data?.map((service) => (
|
||||||
|
@ -19,7 +19,6 @@ const ProjectRepository = {
|
|||||||
return api.get(url);
|
return api.get(url);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
getEmployeesByProject: (projectId) =>
|
getEmployeesByProject: (projectId) =>
|
||||||
api.get(`/api/Project/employees/get/${projectId}`),
|
api.get(`/api/Project/employees/get/${projectId}`),
|
||||||
|
|
||||||
@ -42,7 +41,14 @@ const ProjectRepository = {
|
|||||||
projectNameList: () => api.get("/api/project/list/basic"),
|
projectNameList: () => api.get("/api/project/list/basic"),
|
||||||
|
|
||||||
getProjectDetails: (id) => api.get(`/api/project/details/${id}`),
|
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) => {
|
getProjectTasksByWorkArea: (workAreaId, serviceId) => {
|
||||||
let url = `/api/project/tasks/${workAreaId}`;
|
let url = `/api/project/tasks/${workAreaId}`;
|
||||||
if (serviceId) {
|
if (serviceId) {
|
||||||
@ -58,16 +64,24 @@ const ProjectRepository = {
|
|||||||
|
|
||||||
// Permission Managment for Employee at Project Level
|
// Permission Managment for Employee at Project Level
|
||||||
|
|
||||||
getProjectLevelEmployeeList: (projectId) => api.get(`/api/Project/get/proejct-level/employees/${projectId}`),
|
getProjectLevelEmployeeList: (projectId) =>
|
||||||
getProjectLevelModules: () => api.get(`/api/Project/get/proejct-level/modules`),
|
api.get(`/api/Project/get/proejct-level/employees/${projectId}`),
|
||||||
getProjectLevelEmployeePermissions: (employeeId, projectId) => api.get(`/api/Project/get/project-level-permission/employee/${employeeId}/project/${projectId}`),
|
getProjectLevelModules: () =>
|
||||||
updateProjectLevelEmployeePermission: (data) => api.post(`/api/Project/assign/project-level-permission`, data),
|
api.get(`/api/Project/get/proejct-level/modules`),
|
||||||
getAllProjectLevelPermission: (projectId) => api.get(`/api/Project/get/all/project-level-permission/${projectId}`),
|
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
|
// Services
|
||||||
getProjectAssignedServices: (projectId) => api.get(`/api/Project/get/assigned/services/${projectId}`),
|
getProjectAssignedServices: (projectId) =>
|
||||||
getProjectAssignedOrganizations: (projectId) => api.get(`/api/Project/get/assigned/organization/${projectId}`)
|
api.get(`/api/Project/get/assigned/services/${projectId}`),
|
||||||
|
getProjectAssignedOrganizations: (projectId) =>
|
||||||
|
api.get(`/api/Project/get/assigned/organization/${projectId}`),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TasksRepository = {
|
export const TasksRepository = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user