+
+
+
+ onChange(index, "description", e.target.value)}
+ error_text={error?.description}
+ />
+
+
+
+
+ onChange(index, "quantity", e.target.value ? Number(e.target.value) : 0)
+ }
+ error_text={error?.quantity}
+ />
+
+
+
+ {
+ const raw = String(e.target.value).replace(/,/g, "");
+ onChange(index, "unitPrice", raw ? Number(raw) : 0);
+ }}
+ error_text={error?.unitPrice}
+ />
+
+
+
+ {
+ const raw = String(e.target.value).replace(/,/g, "");
+ onChange(index, "discount", raw ? Number(raw) : 0);
+ }}
+ />
+
+
+
+ = 0 ? total.toLocaleString("fa-IR") : "۰"}
+ unit="ریال"
+ />
+
+
+
+
+ {canRemove && (
+
+ )}
+
+
+ );
+};
+
+export default InvoiceItemRow;
diff --git a/src/pages/invoice/hooks/useInvoiceData.ts b/src/pages/invoice/hooks/useInvoiceData.ts
new file mode 100644
index 0000000..739a7cb
--- /dev/null
+++ b/src/pages/invoice/hooks/useInvoiceData.ts
@@ -0,0 +1,14 @@
+import { useMutation, useQueryClient } from "@tanstack/react-query";
+import * as api from "../service/InvoiceService";
+import type { CreatePreInvoiceType } from "../types/Types";
+
+export const useCreatePreInvoice = () => {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: (params: CreatePreInvoiceType) => api.createPreInvoice(params),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: ["orders-invoiced"] });
+ },
+ });
+};
diff --git a/src/pages/invoice/service/InvoiceService.ts b/src/pages/invoice/service/InvoiceService.ts
new file mode 100644
index 0000000..491186e
--- /dev/null
+++ b/src/pages/invoice/service/InvoiceService.ts
@@ -0,0 +1,7 @@
+import axios from "@/config/axios";
+import type { CreatePreInvoiceType } from "../types/Types";
+
+export const createPreInvoice = async (params: CreatePreInvoiceType) => {
+ const { data } = await axios.post("/admin/pre-invoice", params);
+ return data;
+};
diff --git a/src/pages/invoice/types/Types.ts b/src/pages/invoice/types/Types.ts
new file mode 100644
index 0000000..f4ebacf
--- /dev/null
+++ b/src/pages/invoice/types/Types.ts
@@ -0,0 +1,16 @@
+export type CreatePreInvoiceItemType = {
+ productId: string;
+ quantity: number;
+ unitPrice: number;
+ discount: number;
+ description: string;
+};
+
+export type CreatePreInvoiceType = {
+ requestId?: string;
+ userId: string;
+ items: CreatePreInvoiceItemType[];
+ enableTax: boolean;
+ approvalDeadline: string;
+ notes?: string;
+};
diff --git a/src/pages/requests/Detail.tsx b/src/pages/requests/Detail.tsx
index d66c4a4..a8661fb 100644
--- a/src/pages/requests/Detail.tsx
+++ b/src/pages/requests/Detail.tsx
@@ -1,7 +1,10 @@
import { type FC } from 'react'
import { useGetRequestDetail } from './hooks/useRequestData'
-import { useParams } from 'react-router-dom'
+import { Link, useParams } from 'react-router-dom'
import RequestItem from './components/RequestItem'
+import { Paths } from '@/config/Paths'
+import Button from '@/components/Button'
+import { TickSquare } from 'iconsax-react'
const RequestDetail: FC = () => {
const { id } = useParams()
@@ -14,6 +17,14 @@ const RequestDetail: FC = () => {