86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
import ExpenseRepository from "../../repositories/ExpsenseRepository";
|
|
import moment from "moment";
|
|
import { exportToCSV, exportToExcel, exportToPDF, printTable } from "../../utils/tableExportUtils";
|
|
import showToast from "../../services/toastService";
|
|
|
|
const HandleExpenseExport = async (
|
|
type,
|
|
filters = {},
|
|
searchString = "",
|
|
tableRef = null,
|
|
setLoading = null
|
|
) => {
|
|
try {
|
|
if (setLoading) setLoading(true);
|
|
|
|
const safeSearchString = typeof searchString === "string" ? searchString : "";
|
|
let allExpenses = [];
|
|
let pageNumber = 1;
|
|
const pageSize = 1000; // fetch 1000 per API call
|
|
let hasMore = true;
|
|
|
|
while (hasMore) {
|
|
const response = await ExpenseRepository.GetExpenseList(
|
|
pageSize,
|
|
pageNumber,
|
|
filters,
|
|
safeSearchString
|
|
);
|
|
|
|
const currentPageData = response?.data?.data || [];
|
|
allExpenses = allExpenses.concat(currentPageData);
|
|
|
|
// If returned data length is less than pageSize, we reached the last page
|
|
if (currentPageData.length < pageSize) {
|
|
hasMore = false;
|
|
} else {
|
|
pageNumber += 1; // fetch next page
|
|
}
|
|
}
|
|
|
|
if (!allExpenses.length) {
|
|
showToast("No expenses found!", "warning");
|
|
return;
|
|
}
|
|
|
|
// Map export data
|
|
const exportData = allExpenses.map((item) => ({
|
|
"Expense ID": item?.expenseUId ?? "-",
|
|
"Expense Category": item?.expenseCategory?.name ?? "-",
|
|
"Payment Mode": item?.paymentMode?.name ?? "-",
|
|
"Submitted By": `${item?.createdBy?.firstName ?? ""} ${item?.createdBy?.lastName ?? ""}`.trim() || "-",
|
|
"Submitted": item?.createdAt ? moment(item.createdAt).format("DD-MMM-YYYY") : "-",
|
|
"Amount": item?.amount != null
|
|
? `${item.amount.toLocaleString()} ${item.currency?.currencyCode ?? ""}`
|
|
: "-",
|
|
"Status": item?.status?.name ?? "-",
|
|
}));
|
|
|
|
|
|
switch (type) {
|
|
case "csv":
|
|
exportToCSV(exportData, "Expenses");
|
|
break;
|
|
case "excel":
|
|
exportToExcel(exportData, "Expenses");
|
|
break;
|
|
case "pdf":
|
|
exportToPDF(exportData, "Expenses");
|
|
break;
|
|
case "print":
|
|
if (tableRef?.current) printTable(tableRef.current);
|
|
break;
|
|
default:
|
|
console.warn("Unknown export type:", type);
|
|
}
|
|
|
|
} catch (err) {
|
|
console.error(err);
|
|
showToast("Failed to export expenses", "error");
|
|
} finally {
|
|
if (setLoading) setLoading(false);
|
|
}
|
|
};
|
|
|
|
export default HandleExpenseExport;
|