diff --git a/.env b/.env index 27a1dae..468fb44 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ -VITE_API_BASE_URL = 'https://negareh-api.dev.danakcorp.com' -# VITE_API_BASE_URL = 'http://10.86.60.88:4000' +# VITE_API_BASE_URL = 'https://negareh-api.dev.danakcorp.com' +VITE_API_BASE_URL = 'http://10.164.213.88:4000' VITE_TOKEN_NAME = 'negareh_at' VITE_REFRESH_TOKEN_NAME = 'negareh_art' diff --git a/src/pages/invoice/Create.tsx b/src/pages/invoice/Create.tsx index c9660e1..85bc870 100644 --- a/src/pages/invoice/Create.tsx +++ b/src/pages/invoice/Create.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, type FC } from "react"; +import { useState, type FC } from "react"; import Button from "@/components/Button"; import Select from "@/components/Select"; import { TickSquare } from "iconsax-react"; @@ -9,13 +9,15 @@ import { extractErrorMessage } from "@/config/func"; import { useFormik } from "formik"; import * as Yup from "yup"; import { useGetUsers } from "@/pages/user/hooks/useUserData"; -import { useGetRequestDetail } from "@/pages/requests/hooks/useRequestData"; -import { useCreatePreInvoice } from "./hooks/useInvoiceData"; import type { CreatePreInvoiceType, CreatePreInvoiceItemType } from "./types/Types"; import InvoiceItemRow from "./components/InvoiceItemRow"; import { Checkbox } from "@/components/ui/checkbox"; import UploadBox from "@/components/UploadBox"; import Textarea from "@/components/Textarea"; +import DatePickerComponent from "@/components/DatePicker"; +import { useCreateInvoice } from "./hooks/useInvoiceData"; +import { useMultiUpload } from "../uploader/hooks/useUploader"; +import moment from "moment-jalaali"; const createEmptyItem = (): CreatePreInvoiceItemType => ({ productId: "", @@ -26,29 +28,33 @@ const createEmptyItem = (): CreatePreInvoiceItemType => ({ }); const CreateInvoice: FC = () => { + const navigate = useNavigate(); const [searchParams] = useSearchParams(); const requestId = searchParams.get("requestId") ?? undefined; - const { mutate: submitInvoice, isPending } = useCreatePreInvoice(); + const { mutate: submitInvoice, isPending } = useCreateInvoice(); const { data: usersData } = useGetUsers(); - const { data: requestData } = useGetRequestDetail(requestId || ""); + const multiUpload = useMultiUpload() const [items, setItems] = useState([createEmptyItem()]); - const [, setAttachmentFiles] = useState([]); + const [attachmentFiles, setAttachmentFiles] = useState([]); - const formik = useFormik>({ + const formik = useFormik>({ initialValues: { userId: "", enableTax: false, approvalDeadline: "", + paymentMethod: "", notes: "", }, validationSchema: Yup.object({ - userId: Yup.string().required("انتخاب مشتری اجباری است."), - approvalDeadline: Yup.string().required("نحوه پرداخت اجباری است."), + userId: !requestId + ? Yup.string().required("انتخاب مشتری اجباری است.") + : Yup.string(), + approvalDeadline: Yup.string().required("مهلت تایید اجباری است."), }), - onSubmit: (values) => { + onSubmit: async (values) => { const validItems = items.filter( (i) => i.productId && i.quantity > 0 && i.unitPrice >= 0 ); @@ -58,9 +64,19 @@ const CreateInvoice: FC = () => { return; } + const attachments: { type: string; url: string }[] = []; + if (attachmentFiles.length) { + const uploadResult = await multiUpload.mutateAsync(attachmentFiles); + uploadResult?.data?.forEach((item) => { + attachments.push({ + type: "uploads_attach", + url: item.url, + }); + }); + } + const params: CreatePreInvoiceType = { - requestId, - userId: values.userId, + ...(requestId ? { requestId } : { userId: values.userId }), items: validItems.map((i) => ({ productId: i.productId, quantity: i.quantity, @@ -69,8 +85,10 @@ const CreateInvoice: FC = () => { description: i.description || "", })), enableTax: values.enableTax, - approvalDeadline: values.approvalDeadline, + approvalDeadline: moment(values.approvalDeadline, 'jYYYY/jMM/jDD').format('YYYY-MM-DD'), + ...(values.paymentMethod ? { paymentMethod: values.paymentMethod } : {}), notes: values.notes, + ...(attachments.length ? { attachments } : {}), }; submitInvoice(params, { @@ -85,12 +103,6 @@ const CreateInvoice: FC = () => { }, }); - useEffect(() => { - if (requestId && requestData?.data?.user?.id) { - formik.setFieldValue("userId", String(requestData.data.user.id)); - } - }, [requestId, requestData?.data?.user?.id]); - const handleItemChange = ( index: number, field: keyof CreatePreInvoiceItemType, @@ -133,7 +145,7 @@ const CreateInvoice: FC = () => {