Merge branch 'Feature_Task_Management' of https://git.marcoaiot.com/admin/marco.pms.web into Feature_Task_Management

This commit is contained in:
Pramod Mahajan 2025-04-08 16:00:11 +05:30
commit 9c0f98dbaf
7 changed files with 212 additions and 218 deletions

View File

@ -29,7 +29,7 @@ const InfraPlanning = () =>
useEffect( () =>
{
dispatch(setProjectId(projects[0]?.id))
})
},[projects])
return (
<div className="col-md-12 col-lg-12 col-xl-12 order-0 mb-4">
@ -49,7 +49,7 @@ const InfraPlanning = () =>
{!project_listLoader && projects?.filter(project =>
LoggedUser?.projects?.map(Number).includes(project.id)).map((project)=>(
<option value={project.id}>{project.name}</option>
<option key={project.id} value={project.id}>{project.name}</option>
))}
</select>
</div>

View File

@ -26,7 +26,7 @@ const TaskModel = ({
activities,
onSubmit,
clearTrigger,
onClearComplete,
onClearComplete,onClose
}) => {
const [formData, setFormData] = useState(defaultModel);
const [selectedBuilding, setSelectedBuilding] = useState(null);
@ -124,12 +124,7 @@ const TaskModel = ({
<div className="modal-content">
<div className="modal-body">
<div className="row">
<button
type="button"
className="btn-close"
data-bs-dismiss="modal"
aria-label="Close"
></button>
<button type="button" className="btn-close" aria-label="Close" onClick={onClose}/>
<div className="text-center mb-1">
<h5 className="mb-1">Manage Task</h5>
</div>
@ -290,10 +285,9 @@ const TaskModel = ({
{formData.id !== "0" && formData.id !== "" ? "Edit Task" : "Add Task"}
</button>
<button
type="reset"
type="button"
className="btn btn-sm btn-label-secondary"
data-bs-dismiss="modal"
aria-label="Close"
onClick={onClose}
>
Cancel
</button>

View File

@ -19,7 +19,7 @@ const defaultModel = {
floorId: "0",
};
const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete }) => {
const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete, onClose }) => {
const [selectedBuilding, setSelectedBuilding] = useState(null);
const [ selectedFloor, setSelectedFloor ] = useState( null );
const [selectdWorkArea,setWorkArea] = useState()
@ -111,7 +111,7 @@ const WorkAreaModel = ({ project, onSubmit, clearTrigger, onClearComplete }) =>
<div className="modal-content">
<div className="modal-body">
<div className="row">
<button type="button" className="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
<button type="button" className="btn-close" aria-label="Close" onClick={onClose}/>
<div className="text-center mb-1">
<h5 className="mb-1">Manage Work Area</h5>
</div>

View File

@ -383,10 +383,12 @@ const ProjectInfra = ({ data, activityMaster, onDataChange,eachSiteEngineer }) =
{isWorkAreaModelOpen && (
<div
className={`modal fade `}
className="modal fade show"
id="work-area-model"
tabIndex="-1"
aria-hidden="true"
role="dialog"
style={{ display: 'block' }}
aria-hidden="false"
>
<WorkAreaModel
project={data}
@ -395,16 +397,18 @@ const ProjectInfra = ({ data, activityMaster, onDataChange,eachSiteEngineer }) =
onSubmit={handleWorkAreaModelFormSubmit}
clearTrigger={clearFormTrigger}
onClearComplete={() => setClearFormTrigger(false)}
></WorkAreaModel>
/>
</div>
)}
{isTaskModelOpen && (
<div
className={`modal fade `}
className="modal fade show"
id="task-model"
tabIndex="-1"
aria-hidden="true"
role="dialog"
style={{ display: 'block' }}
aria-hidden="false"
>
<TaskModel
project={data}
@ -413,7 +417,7 @@ const ProjectInfra = ({ data, activityMaster, onDataChange,eachSiteEngineer }) =
onSubmit={handleTaskModelFormSubmit}
clearTrigger={clearFormTrigger}
onClearComplete={() => setClearFormTrigger(false)}
></TaskModel>
/>
</div>
)}
@ -442,17 +446,15 @@ const ProjectInfra = ({ data, activityMaster, onDataChange,eachSiteEngineer }) =
type="button"
className="link-button m-1"
onClick={() => openFloorModel()}
>
>
<i className="bx bx-plus-circle me-2"></i>
Manage Floors
</button>
</button>
<button
type="button"
data-bs-toggle="modal"
className="link-button m-1"
data-bs-target="#work-area-model"
onClick={() => openWorkAreaModel()}
>
<i className="bx bx-plus-circle me-2"></i>
@ -460,9 +462,7 @@ const ProjectInfra = ({ data, activityMaster, onDataChange,eachSiteEngineer }) =
</button>
<button
type="button"
data-bs-toggle="modal"
className="link-button m-1"
data-bs-target="#task-model"
onClick={() => openTaskModel()}
>
<i className="bx bx-plus-circle me-2"></i>

View File

@ -4,6 +4,7 @@ import {
getCachedData,
} from "../slices/apiDataManager"
import ProjectRepository from "../repositories/ProjectRepository";
import { useProfile } from "./useProfile";
@ -84,7 +85,7 @@ export const useEmployeesByProjectAllocated = ( selectedProject ) =>
}
export const useProjectDetails =(projectId)=>{
const {profile} = useProfile();
const [projects_Details, setProject_Details] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState("");
@ -113,11 +114,11 @@ export const useProjectDetails =(projectId)=>{
};
useEffect(()=>{
if ( projectId )
if ( profile && (projectId != undefined) )
{
fetchData()
}
},[projectId])
},[projectId,profile])
return { projects_Details,loading,error,refetch:fetchData}

View File

@ -6,10 +6,19 @@ import ProjectRepository from "../../repositories/ProjectRepository";
import Breadcrumb from "../../components/common/Breadcrumb";
import InfraPlanning from "../../components/Activities/InfraPlanning";
import { cacheData, getCachedData } from "../../slices/apiDataManager";
import { useProfile } from "../../hooks/useProfile";
import { useDispatch, useSelector } from "react-redux";
import { useProjectDetails, useProjects } from "../../hooks/useProjects";
import { setProjectId } from "../../slices/localVariablesSlice";
var projectId;
const TaskPlannng = () => {
const {profile} = useProfile();
const {projects,loading:project_listLoader,error:projects_error} = useProjects();
const dispatch = useDispatch();
const selectedProject = useSelector((store)=>store.localVariables.projectId);
const [project, setProject] = useState(null);
const [projectDetails, setProjectDetails] = useState(null);
@ -17,6 +26,10 @@ const TaskPlannng = () => {
const [loading, setLoading] = useState(true);
const [error, setError] = useState("");
useEffect( () =>
{
dispatch(setProjectId(projects[0]?.id))
},[projects])
const fetchActivities = async () => {
try {
@ -43,9 +56,9 @@ const TaskPlannng = () => {
const fetchData = async () => {
try {
const project_cache = getCachedData(`projectinfo-${1}`);
const project_cache = getCachedData(`projectinfo-${selectedProject}`);
if (!project_cache) {
ProjectRepository.getProjectByprojectId(1)
ProjectRepository.getProjectByprojectId(selectedProject)
.then((response) => {
setProjectDetails(response);
setProject(response);
@ -73,14 +86,16 @@ const TaskPlannng = () => {
};
const handleDataChange = (data) => {
console.log("datachange")
fetchData();
};
useEffect(() => {
projectId =1
if((projects.length != 0)){
fetchData();
fetchActivities();
}, []);
}
}, [selectedProject]);
return (

View File

@ -325,7 +325,7 @@ const EmployeeList = () =>
<p>Loading...</p>
</td>
</tr>}
{( !loading && employeeList?.length === 0 ) && <td colSpan={8}>Not Data Found </td>}
{!loading && employeeList?.length === 0 && (<td colSpan={8} style={{ paddingTop: '20px', textAlign: 'center' }}>No Data Found</td> )}
{( !loading && employeeList && currentItems.length === 0 && employeeList.length !==0 ) && <td colSpan={8}><small className="muted">'{searchText}' employee not found</small> </td>}
{(currentItems && !loading) && currentItems.sort((a, b) => b.id - a.id).map((item) => (
@ -372,49 +372,33 @@ const EmployeeList = () =>
Active
</span>
</td>
<td className={`d-flex justify-content-end justify-content-sm-center ${!ManageEmployee && 'd-none'} `}>
<div className="d-flex align-items-center ">
<a
className={`btn btn-icon dropdown-toggle hide-arrow`}
data-bs-toggle="dropdown"
>
{ManageEmployee && (
<td className="text-end">
<div className="dropdown">
<button className="btn btn-icon dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
<i className="bx bx-dots-vertical-rounded bx-md"></i>
</a>
<div className="dropdown-menu dropdown-menu-end m-0">
{" "}
<a
onClick={()=> navigate(`/employee/${item.id}`)}
className="dropdown-item"
>
</button>
<div className="dropdown-menu dropdown-menu-end">
<button onClick={() => navigate(`/employee/${item.id}`)} className="dropdown-item">
View
</a>
<Link
className={`dropdown-item `}
to={`/employee/manage/${item.id}`}
>
</button>
<Link to={`/employee/manage/${item.id}`} className="dropdown-item">
Edit
</Link>
<a className="dropdown-item">
Suspend
</a>
<a
<button className="dropdown-item">Suspend</button>
<button
className="dropdown-item"
type="button"
data-bs-toggle="modal"
data-bs-target="#managerole-modal"
onClick={() => {
handleConfigData(item.id);
}}
onClick={() => handleConfigData(item.id)}
>
Manage Role
</a>
</button>
</div>
</div>
</td>
)}
</tr>
) )}