diff --git a/src/components/Expenses/ExpenseSchema.js b/src/components/Expenses/ExpenseSchema.js index cf070989..46173f1a 100644 --- a/src/components/Expenses/ExpenseSchema.js +++ b/src/components/Expenses/ExpenseSchema.js @@ -13,7 +13,7 @@ export const ExpenseSchema = (expenseTypes) => { return z .object({ projectId: z.string().min(1, { message: "Project is required" }), - expensesTypeId: z + expensesCategoryId: z .string() .min(1, { message: "Expense type is required" }), paymentModeId: z.string().min(1, { message: "Payment mode is required" }), @@ -66,7 +66,7 @@ export const ExpenseSchema = (expenseTypes) => { ) .superRefine((data, ctx) => { const expenseType = expenseTypes.find( - (et) => et.id === data.expensesTypeId + (et) => et.id === data.expensesCategoryId ); if ( expenseType?.noOfPersonsRequired && @@ -83,7 +83,7 @@ export const ExpenseSchema = (expenseTypes) => { export const defaultExpense = { projectId: "", - expensesTypeId: "", + expensesCategoryId: "", paymentModeId: "", paidById: "", transactionDate: "", diff --git a/src/components/Expenses/ExpenseStatusLogs.jsx b/src/components/Expenses/ExpenseStatusLogs.jsx index d04796fc..26785725 100644 --- a/src/components/Expenses/ExpenseStatusLogs.jsx +++ b/src/components/Expenses/ExpenseStatusLogs.jsx @@ -1,19 +1,41 @@ -import { useState,useMemo } from "react"; +import { useState, useMemo } from "react"; import Avatar from "../common/Avatar"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; - +import Timeline from "../common/TimeLine"; const ExpenseStatusLogs = ({ data }) => { - const [visibleCount, setVisibleCount] = useState(4); + const [visibleCount, setVisibleCount] = useState(4); const sortedLogs = useMemo(() => { if (!data?.updateLogs) return []; return [...data.updateLogs].sort( - (a, b) => new Date(b.updateAt) - new Date(a.updateAt) + (a, b) => new Date(b.updatedAt) - new Date(a.updatedAt) ); }, [data?.updateLogs]); - const logsToShow = sortedLogs.slice(0, visibleCount); + const logsToShow = useMemo( + () => sortedLogs.slice(0, visibleCount), + [sortedLogs, visibleCount] + ); + +const timelineData = useMemo(() => { + return logsToShow.map((log, index) => ({ + id: index + 1, + title: log.nextStatus?.name || "Status Updated", + description: log.nextStatus?.description || "", + timeAgo: formatTimeAgo(log.updatedAt), + color: log.nextStatus?.color || "primary", + users: log.updatedBy + ? [ + { + name: `${log.updatedBy.firstName || ""} ${` log?.updatedBy?.lastName` || ""}`.trim(), + role: log.updatedBy.jobRoleName || "", + avatar: log.updatedBy.photo || "assets/img/avatars/default.png", + }, + ] + : [], + })); + }, [logsToShow]) const handleShowMore = () => { setVisibleCount((prev) => prev + 4); @@ -37,8 +59,8 @@ const ExpenseStatusLogs = ({ data }) => { {log.action} - - {formatUTCToLocalTime(log.updateAt,true)} + + {formatUTCToLocalTime(log.updateAt, true)}
@@ -60,9 +82,12 @@ const ExpenseStatusLogs = ({ data }) => {
)} + + ); }; - export default ExpenseStatusLogs; + + diff --git a/src/components/Expenses/ManageExpense.jsx b/src/components/Expenses/ManageExpense.jsx index 8f1399d2..f3872614 100644 --- a/src/components/Expenses/ManageExpense.jsx +++ b/src/components/Expenses/ManageExpense.jsx @@ -40,11 +40,11 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { const [ExpenseType, setExpenseType] = useState(); const dispatch = useDispatch(); const { - ExpenseTypes, + ExpenseCategories, loading: ExpenseLoading, error: ExpenseError, - } = useExpenseCategory; - const schema = ExpenseSchema(ExpenseTypes); + } = useExpenseCategory(); + const schema = ExpenseSchema(ExpenseCategories); const { register, handleSubmit, @@ -148,7 +148,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { if (expenseToEdit && data) { reset({ projectId: data.project.id || "", - expensesTypeId: data.expensesType.id || "", + expensesCategoryId: data.expensesType.id || "", paymentModeId: data.paymentMode.id || "", paidById: data.paidBy.id || "", transactionDate: data.transactionDate?.slice(0, 10) || "", @@ -194,10 +194,10 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { CreateExpense(payload); } }; - const ExpenseTypeId = watch("expensesTypeId"); + const ExpenseTypeId = watch("expensesCategoryId"); useEffect(() => { - setExpenseType(ExpenseTypes?.find((type) => type.id === ExpenseTypeId)); + setExpenseType(ExpenseCategories?.find((type) => type.id === ExpenseTypeId)); }, [ExpenseTypeId]); const handleClose = () => { @@ -239,13 +239,13 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => {
-
diff --git a/src/components/PaymentRequest/ManagePaymentRequest.jsx b/src/components/PaymentRequest/ManagePaymentRequest.jsx index b9cc5927..a1bf67c4 100644 --- a/src/components/PaymentRequest/ManagePaymentRequest.jsx +++ b/src/components/PaymentRequest/ManagePaymentRequest.jsx @@ -21,12 +21,12 @@ function ManagePaymentRequest({ closeModal, requestToEdit = null }) { const { - ExpenseTypes, + ExpenseCategories, loading: ExpenseLoading, error: ExpenseError, } = useExpenseCategory(); - const schema = PaymentRequestSchema(ExpenseTypes); + const schema = PaymentRequestSchema(ExpenseCategories); const { register, control, watch, handleSubmit, setValue, reset, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: defaultPaymentRequest, @@ -193,12 +193,12 @@ function ManagePaymentRequest({ closeModal, requestToEdit = null }) { {...register("expenseCategoryId")} > {ExpenseLoading ? ( ) : ( - ExpenseTypes?.map((expense) => ( + ExpenseCategories?.map((expense) => ( diff --git a/src/components/PaymentRequest/ViewPaymentRequest.jsx b/src/components/PaymentRequest/ViewPaymentRequest.jsx index d5180618..4aa5f1af 100644 --- a/src/components/PaymentRequest/ViewPaymentRequest.jsx +++ b/src/components/PaymentRequest/ViewPaymentRequest.jsx @@ -112,81 +112,80 @@ const ViewPaymentRequest = ({ requestId }) => { return (
+
+
Payment Request Details
+
+
-
-
Request Details
-
-
-
- {data?.paymentRequestUID} -
- {/* Row 1 */} -
-
- -
- {data.project.name} +
+
+ {data?.paymentRequestUID} +
+ {/* Row 1 */} +
+
+ +
{data.project.name}
-
-
-
- -
- {formatUTCToLocalTime(data?.dueDate)} +
+
+ +
+ {formatUTCToLocalTime(data?.dueDate)} +
-
-
-
- -
{data?.expenseCategory?.name}
+
+
+ +
{data?.expenseCategory?.name}
+
-
- {/* Row 2 */} -
-
- -
{data?.payee}
-
-
-
-
- -
- {formatCurrency(data?.amount, data?.currency?.currencyCode)} + {/* Row 2 */} +
+
+ +
{data?.payee}
+
+
+
+
+ +
+ {formatCurrency(data?.amount, data?.currency?.currencyCode)} +
-
- {/* Row 3 */} - {/*
+ {/* Row 3 */} + {/*
*/} - {data?.gstNumber && ( + {data?.gstNumber && ( +
+
+ +
{data?.gstNumber}
+
+
+ )} + + {/* Row 4 */}
-
{data?.gstNumber}
+ + {data?.expenseStatus?.name} +
- )} - - {/* Row 4 */} -
-
- - - {data?.expenseStatus?.name} - -
-
-
-
- -
{data?.preApproved ? "Yes" : "No"}
-
-
- -
-
- -
{data?.project?.name}
-
-
-
-
- -
- {formatUTCToLocalTime(data?.createdAt, true)} -
-
-
- - {/* Row 6 */} - {data?.createdBy && ( -
-
+
+
+
+ {data?.preApproved ? "Yes" : "No"} +
+
+
+ +
+
+ +
{data?.project?.name}
+
+
+
+
+ +
+ {formatUTCToLocalTime(data?.createdAt, true)} +
+
+
+ + {/* Row 6 */} + {data?.createdBy && ( +
- - - {`${data?.createdBy?.firstName ?? ""} ${ - data?.createdBy?.lastName ?? "" - }`.trim() || "N/A"} - -
-
-
- )} - {data?.paidBy && ( -
-
- -
- - - {`${data?.paidBy?.firstName ?? ""} ${ - data?.paidBy?.lastName ?? "" - }`.trim() || "N/A"} - -
-
-
- )} - -
- -
{data?.description}
-
-
- -
- - -
- {data?.documents?.map((doc) => { - const isImage = doc?.contentType?.includes("image"); - - return ( -
{ - if (isImage) { - setDocumentView({ - IsOpen: true, - Image: doc.preSignedUrl, - }); - } - }} - > - - - {doc.fileName} - + Created By : + +
+ + + {`${data?.createdBy?.firstName ?? ""} ${ + data?.createdBy?.lastName ?? "" + }`.trim() || "N/A"} + +
- ); - })} -
-
- - {data?.paidTransactionId && ( -
-
- - {data?.paidTransactionId } -
-
- - {formatUTCToLocalTime(data?.paidAt)} -
- +
+ )} {data?.paidBy && ( - <> -
-