diff --git a/src/components/AdvancePayment/AdvancePaymentList.jsx b/src/components/AdvancePayment/AdvancePaymentList.jsx index c3aa10f6..409a9d28 100644 --- a/src/components/AdvancePayment/AdvancePaymentList.jsx +++ b/src/components/AdvancePayment/AdvancePaymentList.jsx @@ -1,8 +1,5 @@ import React, { useEffect, useMemo } from "react"; -import { - - useExpenseTransactions, -} from "../../hooks/useExpense"; +import { useExpenseTransactions } from "../../hooks/useExpense"; import Error from "../common/Error"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import Loader, { SpinnerLoader } from "../common/Loader"; @@ -13,12 +10,44 @@ import { employee } from "../../data/masters"; import { useAdvancePaymentContext } from "../../pages/AdvancePayment/AdvancePaymentPage"; import { formatFigure } from "../../utils/appUtils"; - - const AdvancePaymentList = ({ employeeId }) => { - const { setBalance} = useAdvancePaymentContext() + const { setBalance } = useAdvancePaymentContext(); const { data, isError, isLoading, error, isFetching } = useExpenseTransactions(employeeId, { enabled: !!employeeId }); + + const records = Array.isArray(data) ? data : []; + + let currentBalance = 0; + const rowsWithBalance = records.map((r) => { + const isCredit = r.amount > 0; + const credit = isCredit ? r.amount : 0; + const debit = !isCredit ? Math.abs(r.amount) : 0; + currentBalance += credit - debit; + return { + id: r.id, + description: r.title || "-", + projectName: r.project?.name || "-", + createdAt: r.createdAt, + credit, + debit, + financeUId: r.financeUId, + balance: currentBalance, + }; + }); + + useEffect(() => { + if (!employeeId) { + setBalance(null); + return; + } + + if (rowsWithBalance.length > 0) { + setBalance(rowsWithBalance[rowsWithBalance.length - 1].balance); + } else { + setBalance(0); + } + }, [employeeId, data, setBalance]); + if (!employeeId) { return (
TimeLine
diff --git a/src/components/PaymentRequest/PaymentRequestSchema.js b/src/components/PaymentRequest/PaymentRequestSchema.js index 8c0e7141..abf194ca 100644 --- a/src/components/PaymentRequest/PaymentRequestSchema.js +++ b/src/components/PaymentRequest/PaymentRequestSchema.js @@ -27,31 +27,27 @@ export const PaymentRequestSchema = (expenseTypes, isItself) => { .refine((val) => /^\d+(\.\d{1,2})?$/.test(val.toString()), { message: "Amount must have at most 2 decimal places", }), - - billAttachments: z - .array( - z.object({ - fileName: z.string().min(1, { message: "Filename is required" }), - base64Data: z.string().nullable(), - contentType: z - .string() - .refine((val) => ALLOWED_TYPES.includes(val), { - message: "Only PDF, PNG, JPG, or JPEG files are allowed", - }), - documentId: z.string().optional(), - fileSize: z.number().max(MAX_FILE_SIZE, { - message: "File size must be less than or equal to 5MB", - }), - description: z.string().optional(), - isActive: z.boolean().default(true), - }) - ) - , - }) - }; + + billAttachments: z.array( + z.object({ + fileName: z.string().min(1, { message: "Filename is required" }), + base64Data: z.string().nullable(), + contentType: z.string().refine((val) => ALLOWED_TYPES.includes(val), { + message: "Only PDF, PNG, JPG, or JPEG files are allowed", + }), + documentId: z.string().optional(), + fileSize: z.number().max(MAX_FILE_SIZE, { + message: "File size must be less than or equal to 5MB", + }), + description: z.string().optional(), + isActive: z.boolean().default(true), + }) + ), + }); +}; export const defaultPaymentRequest = { - title:"", + title: "", description: "", payee: "", currencyId: "", @@ -63,7 +59,6 @@ export const defaultPaymentRequest = { billAttachments: [], }; - export const SearchPaymentRequestSchema = z.object({ projectIds: z.array(z.string()).optional(), statusIds: z.array(z.string()).optional(), @@ -86,7 +81,6 @@ export const defaultPaymentRequestFilter = { endDate: null, }; - export const PaymentRequestActionScheam = ( isTransaction = false, transactionDate @@ -149,9 +143,9 @@ export const defaultPRActionValues = { paidTransactionId: null, paidAt: null, paidById: null, - tdsPercentage:"0", + tdsPercentage: "0", baseAmount: null, - taxAmount:null, + taxAmount: null, }; export const RequestedExpenseSchema = z.object({ diff --git a/src/components/PaymentRequest/PaymentStatusLogs.jsx b/src/components/PaymentRequest/PaymentStatusLogs.jsx index 9abb3fa5..15e666a0 100644 --- a/src/components/PaymentRequest/PaymentStatusLogs.jsx +++ b/src/components/PaymentRequest/PaymentStatusLogs.jsx @@ -5,7 +5,6 @@ import Timeline from "../common/TimeLine"; import moment from "moment"; import { getColorNameFromHex } from "../../utils/appUtils"; const PaymentStatusLogs = ({ data }) => { - const [visibleCount, setVisibleCount] = useState(4); const sortedLogs = useMemo(() => { if (!data?.updateLogs) return []; @@ -14,18 +13,16 @@ const PaymentStatusLogs = ({ data }) => { ); }, [data?.updateLogs]); - const logsToShow = useMemo( - () => sortedLogs.slice(0, visibleCount), - [sortedLogs, visibleCount] - ); + const timelineData = useMemo(() => { - return logsToShow.map((log, index) => ({ - id: index + 1, + return sortedLogs.map((log, index) => ({ + id: log.id, title: log.nextStatus?.name || "Status Updated", description: log.nextStatus?.description || "", timeAgo: log.updatedAt, color: getColorNameFromHex(log.nextStatus?.color) || "primary", + userComment:log.comment, users: log.updatedBy ? [ { @@ -37,14 +34,13 @@ const PaymentStatusLogs = ({ data }) => { ] : [], })); - }, [logsToShow]); + }, [sortedLogs]); const handleShowMore = () => { setVisibleCount((prev) => prev + 4); }; - return ( -Not Action yet
+{item.description}
} + {item.description &&{item.description}
} {item.attachments && item.attachments.length > 0 && ({item.userComment}
}