Compare commits

...

14 Commits

Author SHA1 Message Date
234006e25b Merge branch 'Ashutosh_ReportTask_DummyObject' of https://git.marcoaiot.com/admin/marco.pms.web into Ashutosh_ReportTask_DummyObject 2025-04-16 10:43:18 +05:30
3e2d3049d9 Created a dummy checklist object in report task page for sending it to API 2025-04-16 10:42:36 +05:30
2f5e91aa11 Merge pull request 'individual affect eye icon on pass' (#13) from pramod_Bug#65_EyeIconAffectBoth into Feature_Task_Management
Reviewed-on: #13
2025-04-16 04:50:10 +00:00
Pramod Mahajan
f4baa83b6d individual affect eye icon on pass 2025-04-16 09:36:36 +05:30
Pramod Mahajan
bcb273d663 Merge branch 'Feature_Task_Management' of https://git.marcoaiot.com/admin/marco.pms.web into Feature_Task_Management 2025-04-16 00:19:30 +05:30
Pramod Mahajan
b73a7fc5ab added validation for end Date, end date should be greater than start date 2025-04-16 00:16:53 +05:30
85cae0a786 Merge pull request 'Vaibhav_Project_Details_Task-#73' (#11) from Vaibhav_Project_Details_Task-#73 into Feature_Task_Management
Reviewed-on: #11
2025-04-15 12:51:52 +00:00
8b8a518b12 replased nav naming and removed duplicate data 2025-04-15 18:10:17 +05:30
47bbb38683 refactor: clean up AboutProject component by removing unused contact fields 2025-04-15 18:07:47 +05:30
82e52e1937 Merge pull request 'update icon for Activities and rename User Management to Administration; add Inventory menu item' (#10) from Vaibhav_Sidebar_Task-#70 into Feature_Task_Management
Reviewed-on: #10
2025-04-15 12:12:13 +00:00
Pramod Mahajan
7ebd8dcc00 after assigned employee and submit, model will close 2025-04-15 17:26:16 +05:30
Pramod Mahajan
ab1754aa49 project list display status wise 2025-04-15 17:23:33 +05:30
b526e64a65 remove: delete Inventory menu item from Projects submenu 2025-04-15 17:23:19 +05:30
89df1fd9c0 update icon for Activities and rename User Management to Administration; add Inventory menu item 2025-04-15 17:20:39 +05:30
9 changed files with 75 additions and 76 deletions

View File

@ -100,7 +100,6 @@ const HorizontalBarChart = ({
}, },
legend: { legend: {
show: true, show: true,
fontSize: '8px', // Reduce text size
}, },
tooltip: { tooltip: {
theme: "dark", theme: "dark",

View File

@ -36,29 +36,30 @@ const AboutProject = ({ data }) => {
<span className="fw-medium mx-2">Status:</span>{" "} <span className="fw-medium mx-2">Status:</span>{" "}
<span>{ProjectStatus(data.projectStatusId)}</span> <span>{ProjectStatus(data.projectStatusId)}</span>
</li> </li>
</ul>
<small className="card-text text-uppercase text-muted small">
Contacts
</small>
<ul className="list-unstyled my-3 py-1">
<li className="d-flex align-items-center mb-4"> <li className="d-flex align-items-center mb-4">
<i className="bx bx-user"></i> <i className="bx bx-user"></i>
<span className="fw-medium mx-2">Contact:</span>{" "} <span className="fw-medium mx-2">Contact:</span>{" "}
<span>{data.contactPerson}</span> <span>{data.contactPerson}</span>
</li> </li>
<li className="d-flex align-items-center mb-4">
<i className="bx bx-phone"></i>
<span className="fw-medium mx-2">Contact Number:</span>{" "}
<span>NA</span>
</li>
<li className="d-flex align-items-center mb-4">
<i className="bx bx-envelope"></i>
<span className="fw-medium mx-2">Email:</span> <span>NA</span>
</li>
<li className="d-flex align-items-center mb-4"> <li className="d-flex align-items-center mb-4">
<i className="bx bx-flag"></i> <i className="bx bx-flag"></i>
<span className="fw-medium mx-2">Address:</span>{" "} <span className="fw-medium mx-2">Address:</span>{" "}
</li> </li>
</ul>
{/* <small className="card-text text-uppercase text-muted small">
Contacts
</small> */}
<ul className="list-unstyled my-3 py-1">
{/* <li className="d-flex align-items-center mb-4">
<i className="bx bx-phone"></i>
<span className="fw-medium mx-2">Contact Number:</span>{" "}
<span>NA</span>
</li> */}
{/* <li className="d-flex align-items-center mb-4">
<i className="bx bx-envelope"></i>
<span className="fw-medium mx-2">Email:</span> <span>NA</span>
</li> */}
<li className="d-flex align-items-start test-start mb-4"> <li className="d-flex align-items-start test-start mb-4">
<span>{data.projectAddress}</span> <span>{data.projectAddress}</span>
</li> </li>

View File

@ -92,7 +92,7 @@ const onSubmit = async(data) => {
let response = await TasksRepository.assignTask( formattedData ); let response = await TasksRepository.assignTask( formattedData );
showToast( "Task Successfully Assigend", "success" ) showToast( "Task Successfully Assigend", "success" )
reset() reset()
closeModal() onClose()
} catch ( error ) } catch ( error )
{ {
showToast("something wrong","error") showToast("something wrong","error")

View File

@ -41,7 +41,14 @@ const ManageProjectInfo = ( {project,handleSubmitForm, onClose} ) =>
return num; return num;
}), }),
} ) } ) .refine((data) => {
const start = new Date(data.startDate);
const end = new Date(data.endDate);
return end > start;
}, {
path: ['endDate'], // attaches the error to the endDate field
message: 'End Date must be greater than Start Date',
});
const {register, control, handleSubmit, formState: {errors}, reset, getValues} = useForm( { const {register, control, handleSubmit, formState: {errors}, reset, getValues} = useForm( {

View File

@ -76,48 +76,23 @@ const ProjectBanner = ( {project_data} ) =>
onClose={handleClose} onClose={handleClose}
></ManageProjectInfo> ></ManageProjectInfo>
</div> </div>
{/* -------------------- */} {/* Project Banner */}
<div className="col-12"> <div className="col-12">
<div className="card mb-6 pb-0"> <div className="card mb-6 pb-0">
<div className="user-profile-header d-flex flex-column flex-lg-row text-sm-start text-center mb-2 "> <div className="d-flex align-items-center justify-content-between p-4 flex-wrap">
<div className="flex-shrink-0 mt-1 mx-sm-0 px-2 mx-auto"> {/* Left: Icon + Name */}
<div className="d-flex align-items-center gap-3">
<img <img
src="../../assets/icons/civil-engineering.svg" src="../../assets/icons/civil-engineering.svg"
alt="user image" alt="user image"
className="d-block h-auto ms-0 ms-sm-6 rounded-3 user-profile-img project-banner-icon" className="rounded-3"
></img> style={{ width: "60px", height: "60px" }}
</div> />
<div className="flex-grow-1 mt-1 mt-lg-1"> <h4 className="mb-0">
<div className="d-flex align-items-md-end align-items-sm-start align-items-center justify-content-md-between justify-content-start mx-5 flex-md-row flex-column gap-4">
<div className="user-profile-info">
<h4 className="mb-2 mt-lg-1">
{CurrentProject.name ? CurrentProject.name : "N/A"} {CurrentProject.name ? CurrentProject.name : "N/A"}
</h4> </h4>
<h6 className="mb-1 mt-lg-1">
Address:{" "}
{CurrentProject.projectAddress ? CurrentProject.projectAddress : "N/A"}
</h6>
<h6 className="mb-1 mt-lg-1">
Contact:{" "}
{CurrentProject.contactPerson ? CurrentProject.contactPerson : "N/A"}
</h6>
<h6 className="mb-1 mt-lg-1">
<span>
{" "}
Start Date:{" "}
{CurrentProject.startDate
? moment(CurrentProject.startDate).format("DD-MMM-YYYY")
: "N/A"}
</span>
<span className="ms-5">
End Date:{" "}
{CurrentProject.endDate
? moment(CurrentProject.endDate).format("DD-MMM-YYYY")
: "N/A"}
</span>
</h6>
</div> </div>
{manageProject && (
<button <button
type="button" type="button"
className={`btn btn-sm btn-primary ${!manageProject && 'd-none'}`} className={`btn btn-sm btn-primary ${!manageProject && 'd-none'}`}
@ -127,8 +102,7 @@ const ProjectBanner = ( {project_data} ) =>
> >
Modify Modify
</button> </button>
</div> )}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -47,7 +47,7 @@ const ProjectNav = ( {onPillClick, activePill} ) =>
<i className="bx bx-grid-alt bx-sm me-1_5"></i> Infrastructure <i className="bx bx-grid-alt bx-sm me-1_5"></i> Infrastructure
</a> </a>
</li> </li>
<li className="nav-item"> {/* <li className="nav-item">
<a <a
className={`nav-link ${ className={`nav-link ${
activePill === "workplan" ? "active" : "" activePill === "workplan" ? "active" : ""
@ -60,7 +60,7 @@ const ProjectNav = ( {onPillClick, activePill} ) =>
> >
<i className="bx bx-link bx-sm me-1_5"></i> Work Plan <i className="bx bx-link bx-sm me-1_5"></i> Work Plan
</a> </a>
</li> </li> */}
<li className="nav-item"> <li className="nav-item">
<a <a
className={`nav-link ${ className={`nav-link ${
@ -78,15 +78,15 @@ const ProjectNav = ( {onPillClick, activePill} ) =>
<li className="nav-item"> <li className="nav-item">
<a <a
className={`nav-link ${ className={`nav-link ${
activePill === "activities" ? "active" : "" activePill === "directory" ? "active" : ""
}`} }`}
href="#" href="#"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); // Prevent page reload e.preventDefault(); // Prevent page reload
onPillClick("activities"); onPillClick("directory");
}} }}
> >
<i className="bx bx-link bx-sm me-1_5"></i> Activities <i className="bx bx-link bx-sm me-1_5"></i> Directory
</a> </a>
</li> </li>
</ul> </ul>

View File

@ -28,17 +28,13 @@
"text": "Project Status", "text": "Project Status",
"available": true, "available": true,
"link": "#" "link": "#"
},
{
"text": "Inventory",
"available": true,
"link": "/inventory"
} }
] ]
}, },
{ {
"text": "Activities", "text": "Activities",
"icon": "bx bx-store", "icon": "bx bx-list-ul",
"available": true, "available": true,
"link": "", "link": "",
"submenu": [ "submenu": [
@ -75,7 +71,7 @@
] ]
}, },
{ {
"text": "User Management", "text": "Administration",
"icon": "bx bx-box", "icon": "bx bx-box",
"available": true, "available": true,
"link": "", "link": "",
@ -91,6 +87,12 @@
"link": "/masters" "link": "/masters"
} }
] ]
},
{
"text": "Inventory",
"icon": "bx bx-store",
"available": true,
"link": "/inventory"
} }
] ]
}, },

View File

@ -35,8 +35,9 @@ const resetPasswordSchema = z
const ResetPasswordPage = () => { const ResetPasswordPage = () => {
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const [loading, setLoading] = useState(false); const [ loading, setLoading ] = useState( false );
const [hidepass, setHidepass] = useState(true); const [hidepass, setHidepass] = useState(true);
const [hidepass1, setHidepass1] = useState(true);
const token = searchParams.get("token"); const token = searchParams.get("token");
const navigate = useNavigate(); const navigate = useNavigate();
@ -144,7 +145,7 @@ const ResetPasswordPage = () => {
</div> </div>
<div className=" input-group input-group-merge"> <div className=" input-group input-group-merge">
<input <input
type={hidepass ? "password" : "text"} type={hidepass1 ? "password" : "text"}
autoComplete="true" autoComplete="true"
id="password" id="password"
className="form-control" className="form-control"
@ -155,9 +156,9 @@ const ResetPasswordPage = () => {
/> />
<span <span
className="input-group-text cursor-pointer" className="input-group-text cursor-pointer"
onClick={() => setHidepass(!hidepass)} onClick={() => setHidepass1(!hidepass1)}
> >
{hidepass ? ( {hidepass1 ? (
<i className="bx bx-hide"></i> <i className="bx bx-hide"></i>
) : ( ) : (
<i className="bx bx-show"></i> <i className="bx bx-show"></i>

View File

@ -85,6 +85,19 @@ const ProjectList = () =>
? Math.ceil(projectList.length / itemsPerPage) ? Math.ceil(projectList.length / itemsPerPage)
: 0; : 0;
const statusMap = {
1: { label: 'active', priority: 1 },
2: { label: 'hold', priority: 2 },
3: { label: 'inactive', priority: 3 },
4: { label: 'complete', priority: 4 }
};
const sortedProjects = [...currentItems].sort((a, b) => {
const aPriority = statusMap[+a.projectStatusId]?.priority ?? 99;
const bPriority = statusMap[+b.projectStatusId]?.priority ?? 99;
return aPriority - bPriority;
});
return ( return (
<> <>
@ -119,7 +132,7 @@ const ProjectList = () =>
{" "} {" "}
<button <button
type="button" type="button"
className={`btn btn-sm btn-primary ${!HasManageProject && 'd-none' }`} className={`btn btn-xs btn-primary ${!HasManageProject && 'd-none' }`}
data-bs-toggle="modal" data-bs-toggle="modal"
data-bs-target="#create-project-model" data-bs-target="#create-project-model"
onClick={handleShow} onClick={handleShow}
@ -151,8 +164,10 @@ const ProjectList = () =>
<div className="row"> <div className="row">
{loading && <p className="text-center">Loading...</p>} {loading && <p className="text-center">Loading...</p>}
{currentItems && {currentItems &&
currentItems.sort((a, b) => b.id - a.id).map((item) => ( sortedProjects.map((item) => (
<ProjectCard projectData={item} key={item.id}></ProjectCard> <ProjectCard projectData={item} key={item.id}></ProjectCard>
))} ))}
</div> </div>