diff --git a/src/entities/transaction/api/use-cash-receipt-receipt-send-email-mutation.ts b/src/entities/transaction/api/use-cash-receipt-receipt-send-email-mutation.ts new file mode 100644 index 0000000..91d3f1c --- /dev/null +++ b/src/entities/transaction/api/use-cash-receipt-receipt-send-email-mutation.ts @@ -0,0 +1,39 @@ +import axios from 'axios'; +import { API_URL_TRANSACTION } from '@/shared/api/api-url-transaction'; +import { resultify } from '@/shared/lib/resultify'; +import { NiceAxiosError } from '@/shared/@types/error'; +import { + CashReceiptReceiptSendEmailParams, + CashReceiptReceiptSendEmailResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; +import { getHeaderUserAgent } from '@/shared/constants/url'; + +export const cashReceiptReceiptSendEmail = (params: CashReceiptReceiptSendEmailParams) => { + let headerOptions = { + menuId: 32, + apiType: 'DOWNLOAD' + }; + let options = { + headers: { + 'X-User-Agent': getHeaderUserAgent(headerOptions) + } + }; + return resultify( + axios.post(API_URL_TRANSACTION.cashReceiptReceiptSendEmail(), params, options), + ); +}; + +export const useCashReceiptReceiptSendEmailMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: CashReceiptReceiptSendEmailParams) => cashReceiptReceiptSendEmail(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/transaction/model/types.ts b/src/entities/transaction/model/types.ts index 69ae0ce..cae5bf3 100644 --- a/src/entities/transaction/model/types.ts +++ b/src/entities/transaction/model/types.ts @@ -841,6 +841,15 @@ export interface CashReceiptManualIssueResponse { issueDateTime: string, issueResult: SuccessResult }; + +export interface CashReceiptReceiptSendEmailParams { + tid: string; + email: string; +}; +export interface CashReceiptReceiptSendEmailResponse { + message?: string; +}; + export interface BillingChargeParams { billKey: string; productName: string; diff --git a/src/entities/transaction/ui/section/amount-info-section.tsx b/src/entities/transaction/ui/section/amount-info-section.tsx index f776518..89c01b3 100644 --- a/src/entities/transaction/ui/section/amount-info-section.tsx +++ b/src/entities/transaction/ui/section/amount-info-section.tsx @@ -1,7 +1,7 @@ import moment from 'moment'; import { useTranslation } from 'react-i18next'; import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow'; -import { AmountInfo, CashReceiptReceiptDownloadParams, CashReceiptReceiptDownloadResponse, CustomerInfo, InfoSectionKeys, InfoSectionProps, IssueInfo, MerchantInfo, ProductInfo, TransactionCategory, TransactionInfo } from '../../model/types'; +import { AmountInfo, CashReceiptReceiptDownloadParams, CashReceiptReceiptDownloadResponse, CashReceiptReceiptSendEmailParams, CashReceiptReceiptSendEmailResponse, CustomerInfo, InfoSectionKeys, InfoSectionProps, IssueInfo, MerchantInfo, ProductInfo, TransactionCategory, TransactionInfo } from '../../model/types'; import { SlideDown } from 'react-slidedown'; import 'react-slidedown/lib/slidedown.css'; import { snackBar } from '@/shared/lib'; @@ -9,6 +9,7 @@ import { useCashReceiptReceiptDownloadMutation } from '../../api/use-cash-receip import { useState } from 'react'; import { DownloadBottomSheet, DownloadSelectedMode } from '@/entities/common/ui/download-bottom-sheet'; import { CashReceiptSample } from '@/entities/common/ui/cash-receipt-sample'; +import { useCashReceiptReceiptSendEmailMutation } from '../../api/use-cash-receipt-receipt-send-email-mutation'; export const AmountInfoSection = ({ transactionCategory, @@ -22,6 +23,8 @@ export const AmountInfoSection = ({ const { t } = useTranslation(); const { mutateAsync: cashReceiptReceiptDownload } = useCashReceiptReceiptDownloadMutation(); + const { mutateAsync: cashReceiptReceiptSendEamil } = useCashReceiptReceiptSendEmailMutation(); + const [downloadBottomSheetOn, setDownloadBottomSheetOn] = useState(false); const [cashReceiptSampleOn, setCashReceiptSampleOn] = useState(false); @@ -207,7 +210,19 @@ export const AmountInfoSection = ({ if(selectedMode === DownloadSelectedMode.EMAIL && !!userEmail ){ - // 추가 api 필요 + let params: CashReceiptReceiptSendEmailParams = { + tid: tid, + email: userEmail + }; + cashReceiptReceiptSendEamil(params).then((rs: CashReceiptReceiptSendEmailResponse) => { + console.log(rs); + snackBar('이메일로 현금영수증 요청이 완료되었습니다.'); + }).catch((e: any) => { + if(e.response?.data?.error?.message){ + snackBar(e.response?.data?.error?.message); + return; + } + }); } else if(selectedMode === DownloadSelectedMode.IMAGE){ let params: CashReceiptReceiptDownloadParams = { diff --git a/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts b/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts new file mode 100644 index 0000000..08dc2d6 --- /dev/null +++ b/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts @@ -0,0 +1,39 @@ +import axios from 'axios'; +import { API_URL_VAT_RETURN } from '@/shared/api/api-url-vat-return'; +import { resultify } from '@/shared/lib/resultify'; +import { NiceAxiosError } from '@/shared/@types/error'; +import { + VatReturnTaxInvoiceSendEmailResponse, + VatReturnTaxInvoiceSendEmailParams, +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; +import { getHeaderUserAgent } from '@/shared/constants/url'; + +export const vatReturnTaxInvoiceSendEmail = (params: VatReturnTaxInvoiceSendEmailParams) => { + let headerOptions = { + menuId: 48, + apiType: 'DOWNLOAD' + }; + let options = { + headers: { + 'X-User-Agent': getHeaderUserAgent(headerOptions) + } + }; + return resultify( + axios.post(API_URL_VAT_RETURN.vatReturnTaxInvoiceSendEmail(), params, options), + ); +}; + +export const useVatReturnTaxInvoiceSendEmailMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: VatReturnTaxInvoiceSendEmailParams) => vatReturnTaxInvoiceSendEmail(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/vat-return/model/types.ts b/src/entities/vat-return/model/types.ts index 9ef9b8d..348328b 100644 --- a/src/entities/vat-return/model/types.ts +++ b/src/entities/vat-return/model/types.ts @@ -174,4 +174,12 @@ export interface VatReturnDownloadExcelParams { receiptType: VatReturnReceiptType; targetType: VatReturnTargetType; }; -export interface VatReturnDownloadExcelResponse {}; \ No newline at end of file +export interface VatReturnDownloadExcelResponse {}; + +export interface VatReturnTaxInvoiceSendEmailParams { + taxInvoiceNumber: string; + email: string; +}; +export interface VatReturnTaxInvoiceSendEmailResponse { + message?: string; +}; \ No newline at end of file diff --git a/src/entities/vat-return/ui/section/amount-section.tsx b/src/entities/vat-return/ui/section/amount-section.tsx index f7a26fe..657ecd1 100644 --- a/src/entities/vat-return/ui/section/amount-section.tsx +++ b/src/entities/vat-return/ui/section/amount-section.tsx @@ -1,6 +1,6 @@ import moment from 'moment'; import { useTranslation } from 'react-i18next'; -import { RecipientInfo, SupplierInfo, TransactionDetails, VatReturnDetailResponse, VatReturnTaxInvoiceParams, VatReturnTaxInvoiceResponse } from '../../model/types'; +import { RecipientInfo, SupplierInfo, TransactionDetails, VatReturnDetailResponse, VatReturnTaxInvoiceParams, VatReturnTaxInvoiceResponse, VatReturnTaxInvoiceSendEmailParams, VatReturnTaxInvoiceSendEmailResponse } from '../../model/types'; import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow'; import SlideDown from 'react-slidedown'; import 'react-slidedown/lib/slidedown.css'; @@ -8,6 +8,8 @@ import { useState } from 'react'; import { DownloadBottomSheet, DownloadSelectedMode } from '@/entities/common/ui/download-bottom-sheet'; import { useVatReturnTaxInvoiceMutation } from '../../api/use-vat-return-tax-invoice-mutation'; import { TaxInvoiceSample } from '@/entities/common/ui/tax-invoice-sample'; +import { useVatReturnTaxInvoiceSendEmailMutation } from '../../api/use-vat-return-tax-invoice-send-email-mutation'; +import { snackBar } from '@/shared/lib'; export interface AmountSectionProps { taxInvoiceNumber: string; @@ -33,6 +35,7 @@ export const AmountSection = ({ const [transactionDetails, setTransactionDetails] = useState(); const { mutateAsync: vatReturnTaxInvoice } = useVatReturnTaxInvoiceMutation(); + const { mutateAsync: vatReturnTaxInvoiceSendEmail } = useVatReturnTaxInvoiceSendEmailMutation(); const openSection = () => { const status = !isOpen; @@ -46,7 +49,19 @@ export const AmountSection = ({ if(selectedMode === DownloadSelectedMode.EMAIL && !!userEmail ){ - // 추가 API 필요 + let params: VatReturnTaxInvoiceSendEmailParams = { + taxInvoiceNumber: taxInvoiceNumber, + email: userEmail + }; + vatReturnTaxInvoiceSendEmail(params).then((rs: VatReturnTaxInvoiceSendEmailResponse) => { + console.log(rs); + snackBar('이메일로 세금계산서 요청이 완료되었습니다.'); + }).catch((e: any) => { + if(e.response?.data?.error?.message){ + snackBar(e.response?.data?.error?.message); + return; + } + }); } else if(selectedMode === DownloadSelectedMode.IMAGE){ diff --git a/src/shared/api/api-url-transaction.ts b/src/shared/api/api-url-transaction.ts index 0e9fa98..cde9273 100644 --- a/src/shared/api/api-url-transaction.ts +++ b/src/shared/api/api-url-transaction.ts @@ -61,6 +61,10 @@ export const API_URL_TRANSACTION = { // POST: 현금영수증 엑셀 다운로드 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/cash-receipt/excel/download`; }, + cashReceiptReceiptSendEmail: () => { + // POST: 현금영수증 이메일 발송 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/cash-receipt/receipt/send-email`; + }, /* Escro Management - 에스크로 API */ escrowList: () => { diff --git a/src/shared/api/api-url-vat-return.ts b/src/shared/api/api-url-vat-return.ts index 08b6940..3cec4a7 100644 --- a/src/shared/api/api-url-vat-return.ts +++ b/src/shared/api/api-url-vat-return.ts @@ -28,4 +28,8 @@ export const API_URL_VAT_RETURN = { // POST: 세금계산서 엑셀 다운로드 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/download/excel`; }, + vatReturnTaxInvoiceSendEmail: () => { + // POST: 세금계산서 이메일 발송 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/tax-invoice/send-email`; + }, }; \ No newline at end of file