diff --git a/src/components/collections/CollectionList.jsx b/src/components/collections/CollectionList.jsx
index bd18e2f0..81830c14 100644
--- a/src/components/collections/CollectionList.jsx
+++ b/src/components/collections/CollectionList.jsx
@@ -1,16 +1,31 @@
import React, { useState } from "react";
import { useCollections } from "../../hooks/useCollections";
-import { ITEMS_PER_PAGE } from "../../utils/constants";
+import {
+ ADDPAYMENT_COLLECTION,
+ ADMIN_COLLECTION,
+ CREATE_COLLECTION,
+ EDIT_COLLECTION,
+ ITEMS_PER_PAGE,
+ VIEW_COLLECTION,
+} from "../../utils/constants";
import { formatFigure, localToUtc, useDebounce } from "../../utils/appUtils";
import { formatUTCToLocalTime } from "../../utils/dateUtils";
import Pagination from "../common/Pagination";
import { useCollectionContext } from "../../pages/collections/CollectionPage";
import { CollectionTableSkeleton } from "./CollectionSkeleton";
import { useSelectedProject } from "../../slices/apiDataManager";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
const CollectionList = ({ fromDate, toDate, isPending, searchString }) => {
const [currentPage, setCurrentPage] = useState(1);
- const selectedProject = useSelectedProject()
+
+ const isAdmin = useHasUserPermission(ADMIN_COLLECTION);
+ const canAddPayment = useHasUserPermission(ADDPAYMENT_COLLECTION);
+ const canViewCollection = useHasUserPermission(VIEW_COLLECTION);
+ const canEditCollection = useHasUserPermission(EDIT_COLLECTION);
+ const canCreate = useHasUserPermission(CREATE_COLLECTION);
+
+ const selectedProject = useSelectedProject();
const searchDebounce = useDebounce(searchString, 500);
const { data, isLoading, isError, error } = useCollections(
@@ -48,7 +63,7 @@ const CollectionList = ({ fromDate, toDate, isPending, searchString }) => {
},
{
key: "invoiceId",
- label: "Invoice Id",
+ label: "Invoice No",
getValue: (col) => (
{
},
{
key: "submittedDate",
- label: "Submitted Date",
+ label: "Submission Date",
getValue: (col) => (
{
},
{
key: "amount",
- label: "Amount",
+ label: "Total Amount",
getValue: (col) => (
- {formatFigure(col?.basicAmount, {
+ {formatFigure(col?.basicAmount + col?.taxAmount, {
type: "currency",
currency: "INR",
}) ?? 0}
@@ -150,9 +165,11 @@ const CollectionList = ({ fromDate, toDate, isPending, searchString }) => {
{col.label}
))}
-
- Action
- |
+ {(isAdmin ||
+ canAddPayment ||
+ canViewCollection ||
+ canEditCollection ||
+ canCreate) && Action | }
@@ -164,77 +181,90 @@ const CollectionList = ({ fromDate, toDate, isPending, searchString }) => {
{col.getValue(row)}
))}
-
-
+ |
+ )}
))
) : (
diff --git a/src/components/collections/ViewCollection.jsx b/src/components/collections/ViewCollection.jsx
index 33cb7f6f..799033e5 100644
--- a/src/components/collections/ViewCollection.jsx
+++ b/src/components/collections/ViewCollection.jsx
@@ -7,9 +7,13 @@ import Avatar from "../common/Avatar";
import PaymentHistoryTable from "./PaymentHistoryTable";
import Comment from "./Comment";
import { CollectionDetailsSkeleton } from "./CollectionSkeleton";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
+import { ADMIN_COLLECTION, EDIT_COLLECTION } from "../../utils/constants";
const ViewCollection = ({ onClose }) => {
const [activeTab, setActiveTab] = useState("payments");
+ const isAdmin = useHasUserPermission(ADMIN_COLLECTION);
+ const canEditCollection = useHasUserPermission(EDIT_COLLECTION);
const { viewCollection, setCollection, setDocumentView } =
useCollectionContext();
const { data, isLoading, isError, error } = useCollection(viewCollection);
@@ -45,11 +49,12 @@ const ViewCollection = ({ onClose }) => {
>
{data?.isActive ? "Active" : "Inactive"}
- {!data?.receivedInvoicePayments && (
-
-
-
- )}
+ {(isAdmin || canEditCollection) &&
+ !data?.receivedInvoicePayments && (
+
+
+
+ )}
@@ -83,7 +88,7 @@ const ViewCollection = ({ onClose }) => {
-
Client Submitted Date:
+
Client Submission Date:
{formatUTCToLocalTime(data?.clientSubmitedDate)}
diff --git a/src/pages/collections/CollectionPage.jsx b/src/pages/collections/CollectionPage.jsx
index ce802acf..4d3455e5 100644
--- a/src/pages/collections/CollectionPage.jsx
+++ b/src/pages/collections/CollectionPage.jsx
@@ -15,6 +15,14 @@ import AddPayment from "../../components/collections/AddPayment";
import ViewCollection from "../../components/collections/ViewCollection";
import ManageCollection from "../../components/collections/ManageCollection";
import PreviewDocument from "../../components/Expenses/PreviewDocument";
+import { useHasUserPermission } from "../../hooks/useHasUserPermission";
+import {
+ ADDPAYMENT_COLLECTION,
+ ADMIN_COLLECTION,
+ CREATE_COLLECTION,
+ EDIT_COLLECTION,
+ VIEW_COLLECTION,
+} from "../../utils/constants";
const CollectionContext = createContext();
export const useCollectionContext = () => {
@@ -42,6 +50,11 @@ const CollectionPage = () => {
});
const [showPending, setShowPending] = useState(false);
const [searchText, setSearchText] = useState("");
+ const isAdmin = useHasUserPermission(ADMIN_COLLECTION);
+ const canViewCollection = useHasUserPermission(VIEW_COLLECTION);
+ const canCreate = useHasUserPermission(CREATE_COLLECTION);
+ const canEditCollection = useHasUserPermission(EDIT_COLLECTION);
+ const canAddPayment = useHasUserPermission(ADDPAYMENT_COLLECTION);
const methods = useForm({
defaultValues: {
fromDate: moment().subtract(180, "days").format("DD-MM-YYYY"),
@@ -50,6 +63,7 @@ const CollectionPage = () => {
});
const { watch } = methods;
const [fromDate, toDate] = watch(["fromDate", "toDate"]);
+
const handleToggleActive = (e) => setShowPending(e.target.checked);
const contextMassager = {
@@ -69,125 +83,153 @@ const CollectionPage = () => {
};
return (
-
-
+ {isAdmin ||
+ canAddPayment ||
+ canEditCollection ||
+ canViewCollection ||
+ canCreate ? (
+
+
-
-
-
-
-
-
-
-
-
-
setShowPending(e.target.checked)}
- />
-
+
+
-
-
- {" "}
-
setSearchText(e.target.value)}
- placeholder="search Collection"
- className="form-control form-control-sm"
- />
+
+
+ {" "}
+ setSearchText(e.target.value)}
+ placeholder="search Collection"
+ className="form-control form-control-sm"
+ />
+
+ {isAdmin ||
+ (isCanCreate && (
+
+ ))}
-
+
+
+
+ {makeCollection.isOpen && (
+
+ setCollection({ isOpen: false, invoiceId: null })
+ }
+ >
+
+ setCollection({ isOpen: false, invoiceId: null })
+ }
+ />
+
+ )}
+
+ {addPayment.isOpen && (
+
+ setAddPayment({ isOpen: false, invoiceId: null })
+ }
+ >
+
+ setAddPayment({ isOpen: false, invoiceId: null })
+ }
+ />
+
+ )}
+
+ {viewCollection && (
+
setViewCollection(null)}
+ >
+ setViewCollection(null)} />
+
+ )}
+
+ {ViewDocument.IsOpen && (
+
setDocumentView({ IsOpen: false, Image: null })}
+ >
+
+
+ )}
+
+
handleMarkedPayment(processedPayment?.invoiceId)}
+ onClose={() => setProcessedPayment(null)}
+ />
-
-
-
- {makeCollection.isOpen && (
-
setCollection({ isOpen: false, invoiceId: null })}
- >
- setCollection({ isOpen: false, invoiceId: null })}
- />
-
- )}
-
- {addPayment.isOpen && (
-
setAddPayment({ isOpen: false, invoiceId: null })}
- >
- setAddPayment({ isOpen: false, invoiceId: null })}
- />
-
- )}
-
- {viewCollection && (
-
setViewCollection(null)}
- >
- setViewCollection(null)} />
-
- )}
-
- {ViewDocument.IsOpen && (
-
setDocumentView({ IsOpen: false, Image: null })}
- >
-
-
- )}
-
-
handleMarkedPayment(processedPayment?.invoiceId)}
- onClose={() => setProcessedPayment(null)}
- />
-
+ ) : (
+
+
+
+
+ Access Denied: You don't have permission to perform this action !
+
+
+
+ )}
);
};
diff --git a/src/utils/constants.jsx b/src/utils/constants.jsx
index 8d190f15..36a9ead4 100644
--- a/src/utils/constants.jsx
+++ b/src/utils/constants.jsx
@@ -3,7 +3,6 @@ export const DURATION_TIME = 10; // minutes
export const ITEMS_PER_PAGE = 20;
export const OTP_EXPIRY_SECONDS = 300; // OTP time
-
export const BASE_URL = process.env.VITE_BASE_URL;
// export const BASE_URL = "https://api.marcoaiot.com";
@@ -50,7 +49,7 @@ export const DIRECTORY_ADMIN = "4286a13b-bb40-4879-8c6d-18e9e393beda";
export const DIRECTORY_MANAGER = "62668630-13ce-4f52-a0f0-db38af2230c5";
export const DIRECTORY_USER = "0f919170-92d4-4337-abd3-49b66fc871bb";
-
+// ========================Finance=========================================================
// -----------------------Expense----------------------------------------
export const VIEW_SELF_EXPENSE = "385be49f-8fde-440e-bdbc-3dffeb8dd116";
@@ -66,6 +65,16 @@ export const PROCESS_EXPENSE = "ea5a1529-4ee8-4828-80ea-0e23c9d4dd11";
export const EXPENSE_MANAGE = "ea5a1529-4ee8-4828-80ea-0e23c9d4dd11";
+// --------------------------------Collection----------------------------
+
+export const ADMIN_COLLECTION = "dbf17591-09fe-4c93-9e1a-12db8f5cc5de";
+export const VIEW_COLLECTION = "c8d7eea5-4033-4aad-9ebe-76de49896830";
+export const CREATE_COLLECTION = "b93141fd-dbd3-4051-8f57-bf25d18e3555";
+export const EDIT_COLLECTION = "455187b4-fef1-41f9-b3d0-025d0b6302c3";
+export const ADDPAYMENT_COLLECTION = "061d9ccd-85b4-4cb0-be06-2f9f32cebb72";
+
+// ==========================================================================================
+
export const EXPENSE_REJECTEDBY = [
"d1ee5eec-24b6-4364-8673-a8f859c60729",
"965eda62-7907-4963-b4a1-657fb0b2724b",
@@ -146,4 +155,3 @@ export const PROJECT_STATUS = [
},
];
export const DEFAULT_EMPTY_STATUS_ID = "00000000-0000-0000-0000-000000000000";
-