diff --git a/public/assets/vendor/css/core.css b/public/assets/vendor/css/core.css index 4559ac2d..ece6a2e8 100644 --- a/public/assets/vendor/css/core.css +++ b/public/assets/vendor/css/core.css @@ -89,7 +89,7 @@ ); --bs-root-font-size: 16px; --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 0.875rem; + --bs-body-font-size: 0.85rem; --bs-body-font-weight: 400; --bs-body-line-height: 1.375; --bs-body-color: #646e78; @@ -9078,7 +9078,7 @@ img[data-app-light-img][data-app-dark-img] { } .table th { color: var(--bs-heading-color); - font-size: 0.8125rem; + font-size: 0.8025rem; letter-spacing: 0.2px; text-transform: uppercase; } @@ -20363,7 +20363,7 @@ li:not(:first-child) .dropdown-item, } .fs-6 { - font-size: 0.9375rem !important; + font-size: 0.8375rem !important; } .fs-tiny { diff --git a/src/components/AdvancePayment/AdvancePaymentList.jsx b/src/components/AdvancePayment/AdvancePaymentList.jsx index e9113b48..c6e9d004 100644 --- a/src/components/AdvancePayment/AdvancePaymentList.jsx +++ b/src/components/AdvancePayment/AdvancePaymentList.jsx @@ -1,6 +1,6 @@ import React, { useEffect, useMemo } from "react"; -import { useExpenseTransactions } from "../../hooks/useExpense"; +import { useExpenseAllTransactionsList, useExpenseTransactions } from "../../hooks/useExpense"; import Error from "../common/Error"; import { formatUTCToLocalTime } from "../../utils/dateUtils"; import Loader, { SpinnerLoader } from "../common/Loader"; @@ -11,11 +11,10 @@ import { employee } from "../../data/masters"; import { useAdvancePaymentContext } from "../../pages/AdvancePayment/AdvancePaymentPage"; import { formatFigure } from "../../utils/appUtils"; -const AdvancePaymentList = ({ employeeId }) => { - const { setBalance } = useAdvancePaymentContext(); +const AdvancePaymentList = ({ employeeId, searchString }) => { + const { setBalance } = useAdvancePaymentContext(); const { data, isError, isLoading, error, isFetching } = useExpenseTransactions(employeeId, { enabled: !!employeeId }); - const records = Array.isArray(data) ? data : []; let currentBalance = 0; @@ -85,7 +84,7 @@ const AdvancePaymentList = ({ employeeId }) => { key: "date", label: ( <> - Date + Date ), align: "text-start", diff --git a/src/components/AdvancePayment/AdvancePaymentList1.jsx b/src/components/AdvancePayment/AdvancePaymentList1.jsx new file mode 100644 index 00000000..e17cd1b1 --- /dev/null +++ b/src/components/AdvancePayment/AdvancePaymentList1.jsx @@ -0,0 +1,100 @@ +import React from 'react' +import Avatar from "../../components/common/Avatar"; // <-- ADD THIS +import { useExpenseAllTransactionsList } from '../../hooks/useExpense'; +import { useNavigate } from 'react-router-dom'; +import { formatFigure } from '../../utils/appUtils'; + +const AdvancePaymentList1 = ({ searchString }) => { + + const { data, isError, isLoading, error } = + useExpenseAllTransactionsList(searchString); + + const rows = data || []; + const navigate = useNavigate(); + + const columns = [ + { + key: "employee", + label: "Employee Name", + align: "text-start", + customRender: (r) => ( +
navigate(`/advance-payment/${r.id}`)} + style={{ cursor: "pointer" }}> + + + + {r.firstName} {r.lastName} + +
+ ), + }, + { + key: "jobRoleName", + label: "Job Role", + align: "text-start", + customRender: (r) => ( + + {r.jobRoleName} + + ), + }, + { + key: "balanceAmount", + label: "Balance (₹)", + align: "text-end", + customRender: (r) => ( + + {formatFigure(r.balanceAmount, { + // type: "currency", + currency: "INR", + })} + + ), + }, + ]; + + if (isLoading) return

Loading...

; + if (isError) return

{error.message}

; + + return ( +
+
+ + + + {columns.map((col) => ( + + ))} + + + + + {rows.length > 0 ? ( + rows.map((row) => ( + + {columns.map((col) => ( + + ))} + + )) + ) : ( + + + + )} + +
+ {col.label} +
+ {col.customRender + ? col.customRender(row) + : col.getValue(row)} +
+ No Employees Found +
+
+
+ ) +} + +export default AdvancePaymentList1; diff --git a/src/components/Dashboard/ProjectCompletionChart.jsx b/src/components/Dashboard/ProjectCompletionChart.jsx index b8c656b8..f1f63936 100644 --- a/src/components/Dashboard/ProjectCompletionChart.jsx +++ b/src/components/Dashboard/ProjectCompletionChart.jsx @@ -2,15 +2,19 @@ import React, { useState } from "react"; import HorizontalBarChart from "../Charts/HorizontalBarChart"; import { useProjects } from "../../hooks/useProjects"; import { ITEMS_PER_PAGE } from "../../utils/constants"; +import { useProjectCompletionStatus } from "../../hooks/useDashboard_Data"; const ProjectCompletionChart = () => { - const [currentPage, setCurrentPage] = useState(1); - const { data: projects, isLoading: loading, isError, error } = useProjects(50,currentPage); - // Bar chart logic - const projectNames = projects?.data?.map((p) => p.name) || []; + const { + data: projects, + isLoading: loading, + isError, + error, + } = useProjectCompletionStatus(); + const projectNames = projects?.map((p) => p.name) || []; const projectProgress = - projects?.data?.map((p) => { + projects?.map((p) => { const completed = p.completedWork || 0; const planned = p.plannedWork || 1; const percent = planned ? (completed / planned) * 100 : 0; diff --git a/src/components/Expenses/ManageExpense.jsx b/src/components/Expenses/ManageExpense.jsx index d595421d..40b4bebf 100644 --- a/src/components/Expenses/ManageExpense.jsx +++ b/src/components/Expenses/ManageExpense.jsx @@ -3,7 +3,7 @@ import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { defaultExpense, ExpenseSchema } from "./ExpenseSchema"; import { formatFileSize, localToUtc } from "../../utils/appUtils"; -import { useProjectName } from "../../hooks/useProjects"; +import { useProjectName } from "../../hooks/useProjects"; import { useDispatch, useSelector } from "react-redux"; import { changeMaster } from "../../slices/localVariablesSlice"; import useMaster, { @@ -32,6 +32,11 @@ import Label from "../common/Label"; import EmployeeSearchInput from "../common/EmployeeSearchInput"; import Filelist from "./Filelist"; import { DEFAULT_CURRENCY } from "../../utils/constants"; +import SelectEmployeeServerSide, { + SelectProjectField, +} from "../common/Forms/SelectFieldServerSide"; +import { useAllocationServiceProjectTeam } from "../../hooks/useServiceProject"; +import { AppFormController } from "../../hooks/appHooks/useAppForm"; const ManageExpense = ({ closeModal, expenseToEdit = null }) => { const { @@ -40,6 +45,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { error: ExpenseErrorLoad, } = useExpense(expenseToEdit); const [expenseCategory, setExpenseCategory] = useState(); + const [selectedEmployees, setSelectedEmployees] = useState([]); const dispatch = useDispatch(); const { expenseCategories, @@ -83,11 +89,11 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { loading: StatusLoadding, error: stausError, } = useExpenseStatus(); - const { - data: employees, - isLoading: EmpLoading, - isError: isEmployeeError, - } = useEmployeesNameByProject(selectedproject); + // const { + // data: employees, + // isLoading: EmpLoading, + // isError: isEmployeeError, + // } = useEmployeesNameByProject(selectedproject); const files = watch("billAttachments"); const onFileChange = async (e) => { @@ -150,6 +156,14 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { } }; + const { mutate: AllocationTeam, isPending1 } = + useAllocationServiceProjectTeam(() => { + setSelectedEmployees([]); + setSeletingEmp({ + employee: null, + isOpen: false, + }); + }); useEffect(() => { if (expenseToEdit && data) { reset({ @@ -180,7 +194,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { : [], }); } - }, [data, reset, employees]); + }, [data, reset]); const { mutate: ExpenseUpdate, isPending } = useUpdateExpense(() => handleClose() ); @@ -223,7 +237,7 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => {
-
+ {/*
@@ -245,6 +259,23 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { {errors.projectId && ( {errors.projectId.message} )} +
*/} +
+ + setValue("projectId", val, { + shouldDirty: true, + shouldValidate: true, + }) + } + /> + {errors.projectId && ( + {errors.projectId.message} + )}
@@ -307,14 +338,28 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { )}
-
@@ -423,10 +468,9 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { {errors.gstNumber.message} )}
- -
-
+
+
@@ -452,24 +496,26 @@ const ManageExpense = ({ closeModal, expenseToEdit = null }) => { {errors.currencyId.message} )}
- {expenseCategory?.noOfPersonsRequired && ( -
- - - {errors.noOfPersons && ( - - {errors.noOfPersons.message} - - )} -
- )} -
+ {expenseCategory?.noOfPersonsRequired && ( +
+ + + {errors.noOfPersons && ( + + {errors.noOfPersons.message} + + )} +
+ )} +
diff --git a/src/components/Expenses/PreviewDocument.jsx b/src/components/Expenses/PreviewDocument.jsx index 7ea0c3ec..2f0e796b 100644 --- a/src/components/Expenses/PreviewDocument.jsx +++ b/src/components/Expenses/PreviewDocument.jsx @@ -1,54 +1,80 @@ import { useState } from "react"; + const PreviewDocument = ({ imageUrl }) => { const [loading, setLoading] = useState(true); const [rotation, setRotation] = useState(0); + const [scale, setScale] = useState(1); + + const zoomIn = () => setScale((prev) => Math.min(prev + 0.2, 3)); + const zoomOut = () => setScale((prev) => Math.max(prev - 0.2, 0.4)); + const resetAll = () => { + setRotation(0); + setScale(1); + }; return ( - <> -
+ <> +
setRotation((prev) => prev + 90)} > -
-
- - {loading && ( -
Loading...
- )} -
- Full View setLoading(false)} - /> + + +
-
- +
+ {loading && ( +
+ Loading... +
+ )} + +
+ Full View setLoading(false)} + /> +
+ +
+ +
-
- + ); }; + + export default PreviewDocument; diff --git a/src/components/Layout/Header.jsx b/src/components/Layout/Header.jsx index 0437539e..0dca90e5 100644 --- a/src/components/Layout/Header.jsx +++ b/src/components/Layout/Header.jsx @@ -50,8 +50,11 @@ const Header = () => { const isRecurringExpense = /^\/recurring-payment$/.test(pathname); const isAdvancePayment = /^\/advance-payment$/.test(pathname); const isServiceProjectPage = /^\/service-projects\/[0-9a-fA-F-]{36}$/.test(pathname); + const isAdvancePayment1 = + /^\/advance-payment(\/[0-9a-fA-F-]{36})?$/.test(pathname); - return !(isDirectoryPath || isProfilePage || isExpensePage || isPaymentRequest || isRecurringExpense || isAdvancePayment ||isServiceProjectPage); + + return !(isDirectoryPath || isProfilePage || isExpensePage || isPaymentRequest || isRecurringExpense || isAdvancePayment ||isServiceProjectPage || isAdvancePayment1); }; const allowedProjectStatusIds = [ "603e994b-a27f-4e5d-a251-f3d69b0498ba", diff --git a/src/components/Layout/Sidebar.jsx b/src/components/Layout/Sidebar.jsx index 1f4b63b8..4fa7cd9f 100644 --- a/src/components/Layout/Sidebar.jsx +++ b/src/components/Layout/Sidebar.jsx @@ -25,8 +25,7 @@ const Sidebar = () => { /> */} - @@ -35,12 +34,13 @@ const Sidebar = () => { OnField Work .com - + - + + - +
diff --git a/src/components/PaymentRequest/ActionPaymentRequest.jsx b/src/components/PaymentRequest/ActionPaymentRequest.jsx index 5f3cc1d9..52222b55 100644 --- a/src/components/PaymentRequest/ActionPaymentRequest.jsx +++ b/src/components/PaymentRequest/ActionPaymentRequest.jsx @@ -40,7 +40,6 @@ const ActionPaymentRequest = ({ requestId }) => { error: PaymentModeError, } = usePaymentMode(); - console.log("Kartik", data) const IsReview = useHasUserPermission(REVIEW_EXPENSE); const [imageLoaded, setImageLoaded] = useState({}); diff --git a/src/components/PaymentRequest/ManagePaymentRequest.jsx b/src/components/PaymentRequest/ManagePaymentRequest.jsx index 14f911fa..dcbe78af 100644 --- a/src/components/PaymentRequest/ManagePaymentRequest.jsx +++ b/src/components/PaymentRequest/ManagePaymentRequest.jsx @@ -29,6 +29,7 @@ import Filelist from "../Expenses/Filelist"; import InputSuggestions from "../common/InputSuggestion"; import { useProfile } from "../../hooks/useProfile"; import { blockUI } from "../../utils/blockUI"; +import { SelectProjectField } from "../common/Forms/SelectFieldServerSide"; function ManagePaymentRequest({ closeModal, requestToEdit = null }) { const { @@ -234,10 +235,10 @@ function ManagePaymentRequest({ closeModal, requestToEdit = null }) { {/* Project and Category */}
-