diff --git a/.env b/.env index 66bf42c..f9a3c75 100644 --- a/.env +++ b/.env @@ -1,4 +1,4 @@ VITE_TOKEN_NAME = 'dsc_token' VITE_REFRESH_TOKEN_NAME = 'dsc_refresh_token' VITE_BASE_URL = 'https://api.danakcorp.com' -# VITE_BASE_URL = 'http://192.168.0.213:4000' \ No newline at end of file +# VITE_BASE_URL = 'http://192.168.1.117:4000' \ No newline at end of file diff --git a/src/langs/fa.json b/src/langs/fa.json index b5e6e8d..8ce11cf 100644 --- a/src/langs/fa.json +++ b/src/langs/fa.json @@ -256,7 +256,11 @@ "thank_pay_2": "مبلغ این صورت حساب پرداخت شده است.", "discount_code": "کد تخفیف", "apply": "اعمال", - "pending": "تایید نشده" + "discount_applied": "کد تخفیف با موفقیت اعمال شد", + "discount_error": "کد تخفیف معتبر نیست", + "pending": "در انتظار تایید", + "discount_removed": "کد تخفیف با موفقیت حذف شد", + "remove_discount": "حذف تخفیف" }, "active": "فعال", "inactive": "غیرفعال", diff --git a/src/pages/receipts/Detail.tsx b/src/pages/receipts/Detail.tsx index e90eb7f..c22f64b 100644 --- a/src/pages/receipts/Detail.tsx +++ b/src/pages/receipts/Detail.tsx @@ -1,8 +1,8 @@ -import { FC } from 'react' +import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' import { useParams } from 'react-router-dom' -import { useGetInvoiceDetail } from './hooks/useReceiptData' -import { ReceiptDetailItemType } from './types/ReceiptTypes' +import { useApplyDiscount, useGetInvoiceDetail, useRemoveDiscount } from './hooks/useReceiptData' +import { ApplyDiscountType, ReceiptDetailItemType } from './types/ReceiptTypes' import { NumberFormat } from '../../config/func' import moment from 'moment-jalaali' import PageLoading from '../../components/PageLoading' @@ -16,13 +16,45 @@ import PayInvoice from './components/PayInvoice' import Input from '../../components/Input' import { Helmet } from 'react-helmet-async' import { useGetProfile } from '../profile/hooks/useProfileData' +import { toast } from 'react-toastify' +import { ErrorType } from '../../helpers/types' const ReceiptsDetail: FC = () => { const { id } = useParams() const { t } = useTranslation('global') + const [code, setCode] = useState('') const getProfile = useGetProfile() const getInvoce = useGetInvoiceDetail(id ? id : '') + const applyDiscount = useApplyDiscount() + const removeDiscount = useRemoveDiscount() + const handleApplyDiscount = () => { + const params: ApplyDiscountType = { + id: id ? id : '', + code: code + } + applyDiscount.mutate(params, { + onSuccess: () => { + toast.success(t('receip.discount_applied')) + getInvoce.refetch() + }, + onError: (error: ErrorType) => { + toast.error(error?.response?.data?.error?.message[0]) + } + }) + } + + const handleRemoveDiscount = () => { + removeDiscount.mutate({ id: id ? id : '' }, { + onSuccess: () => { + toast.success(t('receip.discount_removed')) + getInvoce.refetch() + }, + onError: (error: ErrorType) => { + toast.error(error?.response?.data?.error?.message[0]) + } + }) + } return (
@@ -39,21 +71,34 @@ const ReceiptsDetail: FC = () => {
{ - getInvoce.data?.data?.invoice?.status === 'PENDING' || getInvoce.data?.data?.invoice?.status === 'APPROVED' ? + !getInvoce.data?.data?.invoice?.discount && ['PENDING', 'APPROVED', 'WAIT_PAYMENT'].includes(getInvoce.data?.data?.invoice?.status) ?
setCode(e.target.value)} />
- : null + : getInvoce.data?.data?.invoice?.discount && +
+
+
+
} @@ -126,11 +171,16 @@ const ReceiptsDetail: FC = () => { {NumberFormat(getInvoce.data?.data?.invoice?.tax)} تومان -
+
جمع کل
-
+
+ { + getInvoce.data?.data?.invoice?.originalPrice !== getInvoce.data?.data?.invoice?.totalPrice && ( + <>{NumberFormat(getInvoce.data?.data?.invoice?.originalPrice)} + ) + } {NumberFormat(getInvoce.data?.data?.invoice?.totalPrice)} تومان
diff --git a/src/pages/receipts/hooks/useReceiptData.ts b/src/pages/receipts/hooks/useReceiptData.ts index 5af314d..e803d38 100644 --- a/src/pages/receipts/hooks/useReceiptData.ts +++ b/src/pages/receipts/hooks/useReceiptData.ts @@ -3,6 +3,7 @@ import * as api from "../service/ReceiptService"; import { ApplyDiscountType, ApproveInvoiceType, + RemoveDiscountType, RequestApproveInvoiceType, } from "../types/ReceiptTypes"; @@ -52,3 +53,10 @@ export const useApplyDiscount = () => { mutationFn: (variables: ApplyDiscountType) => api.applyDiscount(variables), }); }; + +export const useRemoveDiscount = () => { + return useMutation({ + mutationFn: (variables: RemoveDiscountType) => + api.removeDiscount(variables.id), + }); +}; diff --git a/src/pages/receipts/service/ReceiptService.ts b/src/pages/receipts/service/ReceiptService.ts index 1f525b9..8cf04eb 100644 --- a/src/pages/receipts/service/ReceiptService.ts +++ b/src/pages/receipts/service/ReceiptService.ts @@ -40,3 +40,8 @@ export const applyDiscount = async (params: ApplyDiscountType) => { ); return data; }; + +export const removeDiscount = async (id: string) => { + const { data } = await axios.post(`/invoices/${id}/cancel-discount`); + return data; +}; diff --git a/src/pages/receipts/types/ReceiptTypes.ts b/src/pages/receipts/types/ReceiptTypes.ts index bb23126..8bbec96 100644 --- a/src/pages/receipts/types/ReceiptTypes.ts +++ b/src/pages/receipts/types/ReceiptTypes.ts @@ -44,5 +44,9 @@ export type ApproveInvoiceType = { export type ApplyDiscountType = { id: string; - discountCode: string; + code: string; +}; + +export type RemoveDiscountType = { + id: string; };