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 "../../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;
|
||||
|
||||
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
|
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),
|
||||
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",
|
||||
});
|
||||
|
@ -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 ||
|
||||
|
@ -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]);
|
||||
|
@ -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",
|
||||
|
@ -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,
|
||||
|
@ -64,7 +64,7 @@ const TaskPlanning = () => {
|
||||
|
||||
{/* Planning Component */}
|
||||
{selectedProject ? (
|
||||
<InfraPlanning selectedService={selectedService} />
|
||||
<InfraPlanning />
|
||||
) : (
|
||||
<div className="text-center py-3">Please select a project</div>
|
||||
)}
|
||||
|
@ -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) => (
|
||||
|
@ -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 = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user