From 60421d102868fe58ab7d9ee457456a5b39216040 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 13 Nov 2025 11:34:05 +0530 Subject: [PATCH 1/3] Adding Navigate functionality in ManageReporting. --- src/components/Employee/ManageReporting.jsx | 61 ++++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/src/components/Employee/ManageReporting.jsx b/src/components/Employee/ManageReporting.jsx index e2ebd9a3..c0d2cba6 100644 --- a/src/components/Employee/ManageReporting.jsx +++ b/src/components/Employee/ManageReporting.jsx @@ -5,6 +5,8 @@ import Label from "../common/Label"; import PmsEmployeeInputTag from "../common/PmsEmployeeInputTag"; import { useManageEmployeeHierarchy, useOrganizationHierarchy } from "../../hooks/useEmployees"; import { ManageReportingSchema, defaultManageReporting } from "./EmployeeSchema"; +import Avatar from "../common/Avatar"; +import { useNavigate } from "react-router-dom"; const ManageReporting = ({ onClosed, employee, employeeId }) => { const { @@ -17,6 +19,7 @@ const ManageReporting = ({ onClosed, employee, employeeId }) => { resolver: zodResolver(ManageReportingSchema), defaultValues: defaultManageReporting, }); + const navigate = useNavigate(); const { data, isLoading } = useOrganizationHierarchy(employeeId); @@ -25,7 +28,6 @@ const ManageReporting = ({ onClosed, employee, employeeId }) => { employeeId, onClosed ); - const primaryValue = watch("primaryNotifyTo"); const secondaryValue = watch("secondaryNotifyTo"); @@ -88,16 +90,48 @@ const ManageReporting = ({ onClosed, employee, employeeId }) => { manageHierarchy(payload); }; + const handleClick = () => { + handleClose(); + navigate(`/employee/${employee.id}`); + }; + + return (
-
- Update Reporting Manager ( - {`${employee.firstName || ""} ${employee.middleName || ""} ${employee.lastName || ""}`.trim()} - ) -
+
Reporting Manager
- {/* Primary */} + {/* Employee Info */} +
+
+ +
+ + {/* Employee Name + Role */} +
+
+ + {`${employee.firstName || ""} ${employee.middleName || ""} ${employee.lastName || ""}`.trim() || "Employee Name NA"} + + + {/* External Link Icon (Navigate to Employee Profile) */} + +
+ +
+ {employee.jobRole && ( + {employee.jobRole} + )} +
+
+
+ + {/* Primary Reporting Manager */}
- - {/* Secondary */} + {/* Secondary Reporting Manager */}
- +
- + {/* Buttons */}
- +
@@ -83,9 +83,12 @@ const EmpDashboard = ({ profile }) => {
- {" "} - +
+
); diff --git a/src/components/Employee/EmpReportingManager.jsx b/src/components/Employee/EmpReportingManager.jsx index 61d33c37..813b0256 100644 --- a/src/components/Employee/EmpReportingManager.jsx +++ b/src/components/Employee/EmpReportingManager.jsx @@ -2,61 +2,59 @@ import React, { useState } from "react"; import { useOrganizationHierarchy } from "../../hooks/useEmployees"; import GlobalModel from "../common/GlobalModel"; import ManageReporting from "./ManageReporting"; +import Avatar from "../common/Avatar"; +import { SpinnerLoader } from "../common/Loader"; const EmpReportingManager = ({ employeeId, employee }) => { const { data, isLoading } = useOrganizationHierarchy(employeeId); const [showManageReportingModal, setShowManageReportingModal] = useState(false); - if (isLoading) return Loading...; + if (isLoading) + return ( +
+ +
+ ); - const primary = data?.find((item) => item.isPrimary); - const secondary = data?.filter((item) => !item.isPrimary); - - // Create comma-separated string for secondary managers - const secondaryNames = secondary - ?.map((item) => `${item.reportTo?.firstName || ""} ${item.reportTo?.lastName || ""}`.trim()) - .join(", "); + // Safe access to primary and secondary managers + const primaryManager = data?.find((d) => d.isPrimary)?.reportTo; + const secondaryManagers = data?.filter((d) => !d.isPrimary).map((d) => d.reportTo) || []; return (
-
- Update Reporting Manager + + Reporting Manager + -
+
+ {/* Primary Manager */} +
+
Primary Manager:
+
+ {primaryManager + ? `${primaryManager.firstName || ""} ${primaryManager.lastName || ""}` + : "NA"} +
+
- - {/* Primary Reporting Manager */} -
- - - Primary Reporting Manager - - : - - {primary?.reportTo?.firstName || NA}{" "} - {primary?.reportTo?.lastName || ""} - + {/* Secondary Managers */} + {secondaryManagers?.length > 0 && ( +
+
Secondary Managers:
+
+ {secondaryManagers + .map((m) => `${m.firstName || ""} ${m.lastName || ""}`) + .join(", ")} +
+
+ )}
- {/* Secondary Reporting Manager (comma-separated) */} - {secondary?.length > 0 && ( -
- - - Secondary Reporting Manager - - : - - {secondaryNames || NA} - -
- )} - - {/* Open Modal Button */} -
+ {/* Manage Reporting Button */} +
- {/* ManageReporting Modal */} + {/* Manage Reporting Modal */} {showManageReportingModal && ( setShowManageReportingModal(false)} > setShowManageReportingModal(false)} /> - )}
@@ -87,3 +84,4 @@ const EmpReportingManager = ({ employeeId, employee }) => { }; export default EmpReportingManager; + diff --git a/src/components/Employee/ManageReporting.jsx b/src/components/Employee/ManageReporting.jsx index c0d2cba6..b9857fea 100644 --- a/src/components/Employee/ManageReporting.jsx +++ b/src/components/Employee/ManageReporting.jsx @@ -110,7 +110,7 @@ const ManageReporting = ({ onClosed, employee, employeeId }) => { {/* Employee Name + Role */}
- + {`${employee.firstName || ""} ${employee.middleName || ""} ${employee.lastName || ""}`.trim() || "Employee Name NA"} From c1be1dafc807f6cbeab21515d4d1e831554f63b0 Mon Sep 17 00:00:00 2001 From: Kartik Sharma Date: Thu, 13 Nov 2025 17:45:05 +0530 Subject: [PATCH 3/3] Changes in Payment Request List view adding Due Date, Created at and Payee. --- .../PaymentRequest/PaymentRequestList.jsx | 90 ++++++++++--------- .../PaymentRequest/ViewPaymentRequest.jsx | 2 +- 2 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/components/PaymentRequest/PaymentRequestList.jsx b/src/components/PaymentRequest/PaymentRequestList.jsx index d7143939..f97171b4 100644 --- a/src/components/PaymentRequest/PaymentRequestList.jsx +++ b/src/components/PaymentRequest/PaymentRequestList.jsx @@ -44,9 +44,8 @@ const PaymentRequestList = ({ filters, groupBy = "submittedBy", search }) => { displayField = "Status"; break; case "submittedBy": - key = `${item?.createdBy?.firstName ?? ""} ${ - item.createdBy?.lastName ?? "" - }`.trim(); + key = `${item?.createdBy?.firstName ?? ""} ${item.createdBy?.lastName ?? "" + }`.trim(); displayField = "Submitted By"; break; case "project": @@ -93,40 +92,52 @@ const PaymentRequestList = ({ filters, groupBy = "submittedBy", search }) => { align: "text-start", getValue: (e) => e.title || "N/A", }, - // { key: "payee", label: "Payee", align: "text-start" }, - { - key: "SubmittedBy", - label: "Submitted By", - align: "text-start", - getValue: (e) => - `${e.createdBy?.firstName ?? ""} ${ - e.createdBy?.lastName ?? "" - }`.trim() || "N/A", - customRender: (e) => ( -
navigate(`/employee/${e.createdBy?.id}`)} - > - - - {`${e.createdBy?.firstName ?? ""} ${ - e.createdBy?.lastName ?? "" - }`.trim() || "N/A"} - -
- ), - }, + // { + // key: "SubmittedBy", + // label: "Submitted By", + // align: "text-start", + // getValue: (e) => + // `${e.createdBy?.firstName ?? ""} ${ + // e.createdBy?.lastName ?? "" + // }`.trim() || "N/A", + // customRender: (e) => ( + //
navigate(`/employee/${e.createdBy?.id}`)} + // > + // + // + // {`${e.createdBy?.firstName ?? ""} ${ + // e.createdBy?.lastName ?? "" + // }`.trim() || "N/A"} + // + //
+ // ), + // }, { key: "createdAt", - label: "Submitted On", + label: "Created At", align: "text-start", getValue: (e) => formatUTCToLocalTime(e?.createdAt), }, + { + key: "payee", + label: "Payee", + align: "text-start", + getValue: (e) => e.payee || "N/A", + }, + { + key: "dueDate", + label: "Due Date", + align: "text-start", + getValue: (e) => formatUTCToLocalTime(e?.dueDate), + }, + { key: "amount", label: "Amount", @@ -143,9 +154,8 @@ const PaymentRequestList = ({ filters, groupBy = "submittedBy", search }) => { align: "text-center", getValue: (e) => ( {e?.expenseStatus?.name || "Unknown"} @@ -171,8 +181,8 @@ const PaymentRequestList = ({ filters, groupBy = "submittedBy", search }) => { const header = [ "Request ID", "Request Title", - "Submitted By", - "Submitted On", + "Created At", + "Due Date", "Amount", "Status", "Action", @@ -181,10 +191,10 @@ const PaymentRequestList = ({ filters, groupBy = "submittedBy", search }) => { const grouped = groupBy ? Object.fromEntries( - Object.entries(groupByField(data?.data ?? [], groupBy)).sort( - ([keyA], [keyB]) => keyA.localeCompare(keyB) - ) + Object.entries(groupByField(data?.data ?? [], groupBy)).sort( + ([keyA], [keyB]) => keyA.localeCompare(keyB) ) + ) : { All: data?.data ?? [] }; const IsGroupedByDate = [ diff --git a/src/components/PaymentRequest/ViewPaymentRequest.jsx b/src/components/PaymentRequest/ViewPaymentRequest.jsx index c1e6170e..878b37fb 100644 --- a/src/components/PaymentRequest/ViewPaymentRequest.jsx +++ b/src/components/PaymentRequest/ViewPaymentRequest.jsx @@ -199,7 +199,7 @@ const ViewPaymentRequest = ({ requestId }) => {