diff --git a/src/components/Expenses/ViewExpense.jsx b/src/components/Expenses/ViewExpense.jsx
index a4b1089b..8c032fc0 100644
--- a/src/components/Expenses/ViewExpense.jsx
+++ b/src/components/Expenses/ViewExpense.jsx
@@ -10,6 +10,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { defaultActionValues, ExpenseActionScheam } from "./ExpenseSchema";
import { useExpenseContext } from "../../pages/Expense/ExpensePage";
import {
+ calculateTDSPercentage,
formatCurrency,
formatFigure,
getColorNameFromHex,
@@ -54,12 +55,22 @@ const ViewExpense = ({ ExpenseId }) => {
setValue,
reset,
control,
+ watch,
formState: { errors },
} = useForm({
resolver: zodResolver(ActionSchema),
defaultValues: defaultActionValues,
});
+const baseAmount = Number(watch("baseAmount")) || 0;
+const taxAmount = Number(watch("taxAmount")) || 0;
+const tdsPercentage = Number(watch("tdsPercentage")) || 0;
+
+
+ const { grossAmount, tdsAmount, netPayable } = useMemo(() => {
+ return calculateTDSPercentage(baseAmount, taxAmount, tdsPercentage);
+ }, [baseAmount, taxAmount, tdsPercentage]);
+
const userPermissions = useSelector(
(state) => state?.globalVariables?.loginUser?.featurePermissions || []
);
@@ -132,9 +143,8 @@ const ViewExpense = ({ ExpenseId }) => {
{data?.expenseUId}
{" "}
{data?.status?.name}
@@ -142,7 +152,7 @@ const ViewExpense = ({ ExpenseId }) => {
{/* Row 1 */}
-
+
*/}
{/* Row 5 */}
-
-
+
+
-
+
-
-
-
-
-
+
+
+
+
+
{formatUTCToLocalTime(data?.createdAt, true)}
-
+
+
-
{/* Created & Paid By */}
{data.createdBy && (
@@ -307,9 +317,8 @@ const ViewExpense = ({ ExpenseId }) => {
lastName={data.createdBy?.lastName}
/>
- {`${data.createdBy?.firstName ?? ""} ${
- data.createdBy?.lastName ?? ""
- }`.trim() || "N/A"}
+ {`${data.createdBy?.firstName ?? ""} ${data.createdBy?.lastName ?? ""
+ }`.trim() || "N/A"}
@@ -337,31 +346,30 @@ const ViewExpense = ({ ExpenseId }) => {
*/}
-
-
-
-
-
-
-
-
- {`${data.paidBy?.firstName ?? ""} ${
- data.paidBy?.lastName ?? ""
+
+
+
+
+
+
+
+
+ {`${data.paidBy?.firstName ?? ""} ${data.paidBy?.lastName ?? ""
}`.trim() || "N/A"}
-
-
+
+
{/* Description */}
@@ -493,19 +501,7 @@ const ViewExpense = ({ ExpenseId }) => {
projectId={null}
/>
-
-
-
- {errors.tdsPercentage && (
-
- {errors.tdsPercentage.message}
-
- )}
-
+
+
+
+
+ {errors.tdsPercentage && (
+
+ {errors.tdsPercentage.message}
+
+ )}
+
+
+
+ TDS Amount:
+ {tdsAmount.toFixed(2)}
+
+
+
+ Net Payable:
+ {netPayable.toFixed(2)}
+
+
+
)}
{((nextStatusWithPermission.length > 0 &&
!IsRejectedExpense) ||
(IsRejectedExpense && isCreatedBy)) && (
- <>
-
-
- {errors.comment && (
-
- {errors.comment.message}
-
- )}
- >
- )}
+ <>
+
+
+ {errors.comment && (
+
+ {errors.comment.message}
+
+ )}
+ >
+ )}
{nextStatusWithPermission?.length > 0 &&
(!IsRejectedExpense || isCreatedBy) && (
diff --git a/src/components/PaymentRequest/ActionPaymentRequest.jsx b/src/components/PaymentRequest/ActionPaymentRequest.jsx
index 1e960ae3..18d30092 100644
--- a/src/components/PaymentRequest/ActionPaymentRequest.jsx
+++ b/src/components/PaymentRequest/ActionPaymentRequest.jsx
@@ -24,7 +24,7 @@ import { useNavigate } from "react-router-dom";
import { useForm } from "react-hook-form";
import { useSelector } from "react-redux";
import { usePaymentRequestContext } from "../../pages/PaymentRequest/PaymentRequestPage";
-import { localToUtc } from "../../utils/appUtils";
+import { calculateTDSPercentage, localToUtc } from "../../utils/appUtils";
import { usePaymentMode } from "../../hooks/masterHook/useMaster";
import Filelist from "../Expenses/Filelist";
@@ -69,15 +69,10 @@ const ActionPaymentRequest = ({ requestId }) => {
const taxAmount = watch("taxAmount") || 0;
const tdsPercentage = watch("tdsPercentage") || 0;
- const grossAmount = baseAmount + taxAmount;
-
- const tdsAmount = useMemo(() => (baseAmount * tdsPercentage) / 100, [
- baseAmount,
- tdsPercentage,
- ]);
-
- const netPayable = useMemo(() => grossAmount - tdsAmount, [grossAmount, tdsAmount]);
+ const { grossAmount, tdsAmount, netPayable } = useMemo(() => {
+ return calculateTDSPercentage(baseAmount, taxAmount, tdsPercentage);
+ }, [baseAmount, taxAmount, tdsPercentage]);
const userPermissions = useSelector(
(state) => state?.globalVariables?.loginUser?.featurePermissions || []
@@ -428,6 +423,7 @@ const ActionPaymentRequest = ({ requestId }) => {
{netPayable.toFixed(2)}
+
)}
diff --git a/src/utils/appUtils.js b/src/utils/appUtils.js
index 250d3488..563520be 100644
--- a/src/utils/appUtils.js
+++ b/src/utils/appUtils.js
@@ -228,3 +228,21 @@ export function daysLeft(startDate, dueDate) {
return { days, color };
}
+
+export function calculateTDSPercentage(baseAmount = 0, taxAmount = 0, tdsPercentage = 0) {
+ baseAmount = Number(baseAmount) || 0;
+ taxAmount = Number(taxAmount) || 0;
+ tdsPercentage = Number(tdsPercentage) || 0;
+
+ const grossAmount = baseAmount + taxAmount;
+ const tdsAmount = (baseAmount * tdsPercentage) / 100;
+ const netPayable = grossAmount - tdsAmount;
+
+ return {
+ grossAmount,
+ tdsAmount,
+ netPayable,
+ };
+}
+
+