Refactor_Expenses #321

Merged
pramod.mahajan merged 249 commits from Refactor_Expenses into hotfix/MasterActivity 2025-08-01 13:14:59 +00:00
Showing only changes of commit a3313f6c0a - Show all commits

View File

@ -11,20 +11,21 @@ import ConfirmModal from "../common/ConfirmModal";
import { useHasUserPermission } from "../../hooks/useHasUserPermission"; import { useHasUserPermission } from "../../hooks/useHasUserPermission";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
const ExpenseList = ({filters}) => { const ExpenseList = ({ filters }) => {
const [deletingId, setDeletingId] = useState(null); const [deletingId, setDeletingId] = useState(null);
const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [IsDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const { setViewExpense, setManageExpenseModal } = useExpenseContext(); const { setViewExpense, setManageExpenseModal } = useExpenseContext();
const IsExpenseEditable = useHasUserPermission() const IsExpenseEditable = useHasUserPermission();
const IsExpesneApprpve = useHasUserPermission(APPROVE_EXPENSE) const IsExpesneApprpve = useHasUserPermission(APPROVE_EXPENSE);
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const pageSize = 10; const pageSize = 10;
const { mutate: DeleteExpense, isPending } = useDeleteExpense(); const { mutate: DeleteExpense, isPending } = useDeleteExpense();
const { data, isLoading, isError, isInitialLoading, error, isFetching } = const { data, isLoading, isError, isInitialLoading, error, isFetching } =
useExpenseList(10, currentPage, filters); useExpenseList(10, currentPage, filters);
const SelfId = useSelector((store)=>store?.globalVariables?.loginUser?.employeeInfo?.id) const SelfId = useSelector(
(store) => store?.globalVariables?.loginUser?.employeeInfo?.id
);
const handleDelete = (id) => { const handleDelete = (id) => {
setDeletingId(id); setDeletingId(id);
@ -64,7 +65,7 @@ const ExpenseList = ({filters}) => {
const grouped = {}; const grouped = {};
expenses.forEach((expense) => { expenses.forEach((expense) => {
const dateKey = expense.transactionDate.split("T")[0]; const dateKey = expense.transactionDate.split("T")[0];
if (!grouped[dateKey]) grouped[dateKey] = []; if (!grouped[dateKey]) grouped[dateKey] = [];
grouped[dateKey].push(expense); grouped[dateKey].push(expense);
}); });
@ -123,17 +124,6 @@ const ExpenseList = ({filters}) => {
> >
<thead> <thead>
<tr> <tr>
{/* <th
className="sorting sorting_desc"
tabIndex="0"
aria-controls="DataTables_Table_0"
rowSpan="1"
colSpan="2"
aria-label="Date: activate to sort column ascending"
aria-sort="descending"
>
<div className="text-start ms-6">Date Time</div>
</th> */}
<th <th
className="sorting sorting_desc d-none d-sm-table-cell" className="sorting sorting_desc d-none d-sm-table-cell"
tabIndex="0" tabIndex="0"
@ -199,7 +189,7 @@ const ExpenseList = ({filters}) => {
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody > <tbody>
{!isInitialLoading && {!isInitialLoading &&
groupExpensesByDateAndStatus(items).map( groupExpensesByDateAndStatus(items).map(
({ date, expenses }) => ( ({ date, expenses }) => (
@ -208,8 +198,9 @@ const ExpenseList = ({filters}) => {
<td colSpan={7} className="text-start"> <td colSpan={7} className="text-start">
<strong>{formatUTCToLocalTime(date)}</strong> <strong>{formatUTCToLocalTime(date)}</strong>
</td> </td>
</tr> {expenses.map((expense) => ( </tr>{" "}
<tr key={expense.id} > {expenses.map((expense) => (
<tr key={expense.id}>
<td className="text-start d-table-cell ms-5"> <td className="text-start d-table-cell ms-5">
{expense.expensesType?.name || "N/A"} {expense.expensesType?.name || "N/A"}
</td> </td>
@ -259,44 +250,34 @@ const ExpenseList = ({filters}) => {
></i> ></i>
</span> </span>
<span className="cursor-pointer"> {(expense.status.name === "Draft" ||
{(expense.status.name === "Draft" || expense.status.name === "Rejected") &&
expense.status.name === "Rejected") && expense.createdBy.id === SelfId && (
expense.createdBy.id === <span className="cursor-pointer">
SelfId ? ( <i
<i className="bx bx-edit bx-sm text-secondary"
className="bx bx-edit bx-sm text-secondary" onClick={() =>
onClick={() => setManageExpenseModal({
setManageExpenseModal({ IsOpen: true,
IsOpen: true, expenseId: expense.id,
expenseId: expense.id, })
}) }
} ></i>
></i> </span>
) : (
<i
className="bx bx-edit bx-sm"
style={{ visibility: "hidden" }}
></i>
)} )}
</span>
<span className="cursor-pointer"> {expense.status.name === "Draft" &&
{(expense.status.name === "Draft" && expense?.createdBy?.id === SelfId ) ? ( expense?.createdBy?.id === SelfId && (
<i <span className="cursor-pointer">
className="bx bx-trash bx-sm text-danger" <i
onClick={() => { className="bx bx-trash bx-sm text-danger"
setIsDeleteModalOpen(true); onClick={() => {
setDeletingId(expense.id); setIsDeleteModalOpen(true);
}} setDeletingId(expense.id);
></i> }}
) : ( ></i>
<i </span>
className="bx bx-trash bx-sm"
style={{ visibility: "hidden" }}
></i>
)} )}
</span>
</div> </div>
</td> </td>
</tr> </tr>
@ -305,11 +286,11 @@ const ExpenseList = ({filters}) => {
) )
)} )}
{!isInitialLoading && items.length === 0 && <tr rowSpan={8} style={{height:"200px"}}> {!isInitialLoading && items.length === 0 && (
<td colSpan={8}> <tr rowSpan={8} style={{ height: "200px" }}>
No Expnese Found <td colSpan={8}>No Expnese Found</td>
</td> </tr>
</tr>} )}
</tbody> </tbody>
</table> </table>
</div> </div>