diff --git a/src/components/Activities/InfraPlanning.jsx b/src/components/Activities/InfraPlanning.jsx index dc237c63..0e9c9590 100644 --- a/src/components/Activities/InfraPlanning.jsx +++ b/src/components/Activities/InfraPlanning.jsx @@ -55,7 +55,7 @@ const InfraPlanning = () => { if (isFetched && (!projectInfra || projectInfra.length === 0)) { return ( -
+

No Result Found

); @@ -63,11 +63,9 @@ const InfraPlanning = () => { return (
-
-
diff --git a/src/components/Project/Infrastructure/InfraTable.jsx b/src/components/Project/Infrastructure/InfraTable.jsx index fb484f6e..77c6f905 100644 --- a/src/components/Project/Infrastructure/InfraTable.jsx +++ b/src/components/Project/Infrastructure/InfraTable.jsx @@ -143,7 +143,7 @@ const InfraTable = ({ buildings, projectId}) => { // }, [handler]); return ( -
+
{projectBuilding && projectBuilding.length > 0 && ( diff --git a/src/components/Project/Infrastructure/TaskModel.jsx b/src/components/Project/Infrastructure/TaskModel.jsx index f0bb5c35..9c65fa6f 100644 --- a/src/components/Project/Infrastructure/TaskModel.jsx +++ b/src/components/Project/Infrastructure/TaskModel.jsx @@ -6,9 +6,10 @@ import { useActivitiesMaster, useWorkCategoriesMaster, } from "../../../hooks/masterHook/useMaster"; -import { useManageTask } from "../../../hooks/useProjects"; +import { useManageTask, useProjectAssignedServices } from "../../../hooks/useProjects"; import showToast from "../../../services/toastService"; import Label from "../../common/Label"; +import { useSelectedProject } from "../../../slices/apiDataManager"; const taskSchema = z.object({ buildingID: z.string().min(1, "Building is required"), @@ -37,6 +38,15 @@ const TaskModel = ({ project, onSubmit, onClose }) => { const { activities, loading: activityLoading } = useActivitiesMaster(); const { categories, categoryLoading } = useWorkCategoriesMaster(); + const projectId = useSelectedProject(); + + const { data: assignedServices, isLoading: servicesLoading } = useProjectAssignedServices(projectId); + + const [selectedService, setSelectedService] = useState(""); + + const handleServiceChange = (e) => { + setSelectedService(e.target.value); + }; const { register, handleSubmit, @@ -96,10 +106,12 @@ const TaskModel = ({ project, onSubmit, onClose }) => { }, [categories]); const onSubmitForm = async (data) => { - const payload = [data]; - CreateTask({payload:payload,buildingId: data.buildingID, + const payload = [data]; + CreateTask({ + payload: payload, buildingId: data.buildingID, floorId: data.floorId, - workAreaId: data.workAreaId, PreviousPlannedWork:0,previousCompletedWork:0}); + workAreaId: data.workAreaId, PreviousPlannedWork: 0, previousCompletedWork: 0 + }); }; return ( @@ -150,6 +162,7 @@ const TaskModel = ({ project, onSubmit, onClose }) => { )} + {/* Work Area Selection */} {selectedFloor && (
@@ -172,6 +185,32 @@ const TaskModel = ({ project, onSubmit, onClose }) => {
)} + {/* Services Selection */} + {selectedWorkArea && ( +
+ + + {errors.buildingID && ( +

{errors.buildingID.message}

+ )} +
+ )} + + {/* Activity Selection */} {selectedWorkArea && (
@@ -192,6 +231,7 @@ const TaskModel = ({ project, onSubmit, onClose }) => {
)} + {selectedWorkArea && (
@@ -261,7 +301,7 @@ const TaskModel = ({ project, onSubmit, onClose }) => {
)} -
+
- - )} - + {servicesLoading ? ( + + ) : assignedServices?.length > 1 ? ( + + ) : ( +
+ {assignedServices?.length === 1 + ?
{ assignedServices[0].name}
+ : "No service available"} +
+ )} +
+ {/* Buttons Section (aligned to right) */} +
+ {ManageInfra && ( + <> + + + )} + {(ManageTask || ManageInfra) && (
+ {!activeEmployee && } @@ -334,7 +373,7 @@ const Teams = () => { + />
@@ -352,18 +391,16 @@ const Teams = () => {
+ + + {!activeEmployee && ( )} @@ -373,7 +410,7 @@ const Teams = () => { ))}
Name
Organization Assigned DateRelease DateProject Role {item.organizationName || "N/A"} - {" "} - {moment(item.allocationDate).format( - "DD-MMM-YYYY" - )}{" "} + {moment(item.allocationDate).format("DD-MMM-YYYY")} {item.reAllocationDate - ? moment(item.reAllocationDate).format( - "DD-MMM-YYYY" - ) + ? moment(item.reAllocationDate).format("DD-MMM-YYYY") : "Present"} - {item.isActive && ( + {item.isActive ? ( + ) : ( + Not in project )} - {!item.isActive && Not in project}
+ )} {!employeeLodaing && filteredEmployees.length === 0 && (
diff --git a/src/components/common/FilterIcon.jsx b/src/components/common/FilterIcon.jsx index 0f938e1a..2dc43daa 100644 --- a/src/components/common/FilterIcon.jsx +++ b/src/components/common/FilterIcon.jsx @@ -203,7 +203,7 @@ const FilterIcon = ({ <>

  • -
    Floors
    +
    Floors
    {uniqueFloors.length > 0 ? ( uniqueFloors.map((floor, idx) => ( @@ -235,7 +235,7 @@ const FilterIcon = ({ <>

  • -
    Activities
    +
    Activities
    {uniqueActivities.length > 0 ? ( uniqueActivities.map((activity, idx) => ( diff --git a/src/pages/Activities/DailyTask.jsx b/src/pages/Activities/DailyTask.jsx index fc51f756..ca676647 100644 --- a/src/pages/Activities/DailyTask.jsx +++ b/src/pages/Activities/DailyTask.jsx @@ -1,7 +1,7 @@ import React, { useEffect, useMemo, useState } from "react"; import { useDispatch } from "react-redux"; import { useTaskList } from "../../hooks/useTasks"; -import { useProjectName } from "../../hooks/useProjects"; +import { useProjectAssignedServices, useProjectName } from "../../hooks/useProjects"; import { setProjectId } from "../../slices/localVariablesSlice"; import Breadcrumb from "../../components/common/Breadcrumb"; import DateRangePicker from "../../components/common/DateRangePicker"; @@ -24,6 +24,14 @@ const DailyTask = () => { const ApprovedTaskRights = useHasUserPermission(APPROVE_TASK); const ReportTaskRights = useHasUserPermission(ASSIGN_REPORT_TASK); + const { data: assignedServices, isLoading: servicesLoading } = useProjectAssignedServices(selectedProject); + + const [selectedService, setSelectedService] = useState(""); + + const handleServiceChange = (e) => { + setSelectedService(e.target.value); + }; + const [filters, setFilters] = useState({ selectedBuilding: "", selectedFloors: [], @@ -38,7 +46,6 @@ const DailyTask = () => { dateRange?.endDate || null ); - // Ensure project is set useEffect(() => { if (!selectedProject && projectNames.length > 0) { debugger @@ -46,7 +53,6 @@ const DailyTask = () => { } }, [selectedProject, projectNames, dispatch]); - // 🔹 Reset filters when project changes useEffect(() => { setFilters({ selectedBuilding: "", @@ -55,7 +61,6 @@ const DailyTask = () => { }); }, [selectedProject]); - // Memoized filtering const filteredTasks = useMemo(() => { if (!TaskList) return []; return TaskList.filter((task) => { @@ -69,7 +74,6 @@ const DailyTask = () => { }); }, [TaskList, filters]); - // Memoized dates const groupedTasks = useMemo(() => { const groups = {}; filteredTasks.forEach((task) => { @@ -82,13 +86,11 @@ const DailyTask = () => { .map((date) => ({ date, tasks: groups[date] })); }, [filteredTasks]); - // --- Modal State const [modal, setModal] = useState({ type: null, data: null }); const openModal = (type, data = null) => setModal({ type, data }); const closeModal = () => setModal({ type: null, data: null }); - // --- Render helpers const renderTeamMembers = (task, refIndex) => (
    { return ( <> - {/* --- Modals --- */} {modal.type === "report" && ( @@ -161,22 +162,71 @@ const DailyTask = () => {
    -
    +
    {!selectedProject && (
    Please Select Project
    )} - {/* --- Filters --- */} -
    - - -
    +
    + + {/* --- Left: Service Dropdown + Filter Icon --- */} +
    +
    + {servicesLoading ? ( + + ) : assignedServices?.length > 1 ? ( + + ) : ( +
    + {assignedServices?.length === 1 + ?
    {assignedServices[0].name}
    + : "No service available"} +
    + )} +
    + + {/* */} +
    + + {/* --- Right: DateRangePicker --- */} +
    + + +
    + +
    {/* --- Table --- */}
    @@ -248,4 +298,4 @@ const DailyTask = () => { ); }; -export default DailyTask; +export default DailyTask; \ No newline at end of file diff --git a/src/pages/Activities/TaskPlannng.jsx b/src/pages/Activities/TaskPlannng.jsx index 25cf63f2..6e5c4987 100644 --- a/src/pages/Activities/TaskPlannng.jsx +++ b/src/pages/Activities/TaskPlannng.jsx @@ -1,22 +1,31 @@ -import React,{useEffect,useRef} from "react"; +import React, { useEffect, useState } from "react"; import Breadcrumb from "../../components/common/Breadcrumb"; import InfraPlanning from "../../components/Activities/InfraPlanning"; import { useProjectName } from "../../hooks/useProjects"; -import { useDispatch, useSelector } from "react-redux"; +import { useDispatch } from "react-redux"; import { setProjectId } from "../../slices/localVariablesSlice"; import { useSelectedProject } from "../../slices/apiDataManager"; +import { useProjectAssignedServices } from "../../hooks/useProjects"; const TaskPlannng = () => { -const selectedProject = useSelectedProject(); -const dispatch = useDispatch(); -const { projectNames = [], loading: projectLoading } = useProjectName(); + const selectedProject = useSelectedProject(); + const dispatch = useDispatch(); + const { projectNames = [], loading: projectLoading } = useProjectName(); -useEffect(() => { - if (!selectedProject) { - dispatch(setProjectId(projectNames[0]?.id)); - } -}, [projectNames, selectedProject?.id, dispatch]); + // Service dropdown state + const { data: assignedServices, isLoading: servicesLoading } = + useProjectAssignedServices(selectedProject); + const [selectedService, setSelectedService] = useState(""); + useEffect(() => { + if (!selectedProject && projectNames?.length > 0) { + dispatch(setProjectId(projectNames[0]?.id)); + } + }, [projectNames, selectedProject, dispatch]); + + const handleServiceChange = (e) => { + setSelectedService(e.target.value); + }; return (
    @@ -26,11 +35,45 @@ useEffect(() => { { label: "Daily Task Planning" }, ]} /> - {selectedProject ? ( - - ) : ( -
    Please Select Project
    - )} + +
    +
    + {/* Service Dropdown */} +
    + {assignedServices?.length > 1 ? ( + + ) : ( +
    + {assignedServices?.length === 1 + ?
    { assignedServices[0].name}
    + : "No service available"} +
    + )} +
    + + + {/* Infra Planning Component */} + {selectedProject ? ( + + ) : ( +
    Please Select Project
    + )} +
    +
    ); };