From 3b23fa2514710129be4a0708f8533dbd42793022 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Tue, 11 Nov 2025 11:23:52 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EB=B6=80=EB=B6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/common/ui/tax-invoice-sample.tsx | 79 ++++++++----------- .../ui/section/amount-info-section.tsx | 56 ++++++------- .../ui/detail/tax-invoice-detail.tsx | 13 +-- .../vat-return/ui/section/amount-section.tsx | 50 +++++++++++- 4 files changed, 110 insertions(+), 88 deletions(-) diff --git a/src/entities/common/ui/tax-invoice-sample.tsx b/src/entities/common/ui/tax-invoice-sample.tsx index 5284753..6d82726 100644 --- a/src/entities/common/ui/tax-invoice-sample.tsx +++ b/src/entities/common/ui/tax-invoice-sample.tsx @@ -9,27 +9,30 @@ import { useEffect } from 'react'; import { NumericFormat } from 'react-number-format'; import { AmountInfo, CustomerInfo, IssueInfo, MerchantInfo, ProductInfo, TransactionInfo } from '@/entities/transaction/model/types'; import moment from 'moment'; +import { RecipientInfo, SupplierInfo, TransactionDetails } from '@/entities/vat-return/model/types'; export interface TaxInvoiceSampleProps { taxInvoiceSampleOn: boolean; setTaxInvoiceSampleOn: (taxInvoiceSampleOn: boolean) => void; - merchantInfo?: MerchantInfo; - issueInfo?: IssueInfo; - amountInfo?: AmountInfo; - transactionInfo?: TransactionInfo; - customerInfo?: CustomerInfo; - productInfo?: ProductInfo; + supplierInfo?: SupplierInfo; + recipientInfo?: RecipientInfo; + issueDate?: string; + supplyAmount?: number; + taxAmount?: number + totalAmount?: number; + transactionDetails?: TransactionDetails; }; export const TaxInvoiceSample = ({ taxInvoiceSampleOn, setTaxInvoiceSampleOn, - merchantInfo, - issueInfo, - amountInfo, - transactionInfo, - customerInfo, - productInfo + supplierInfo, + recipientInfo, + issueDate, + supplyAmount, + taxAmount, + totalAmount, + transactionDetails }: TaxInvoiceSampleProps) => { const { t } = useTranslation(); @@ -49,23 +52,7 @@ export const TaxInvoiceSample = ({ setTaxInvoiceSampleOn(false); }; - const getDateTime = () => { - let date = ''; - let time = ''; - if(!!issueInfo?.issueDate){ - date = moment(issueInfo?.issueDate).format('YYYY.MM.DD'); - } - if(!!issueInfo?.issueDate && !!issueInfo?.issueTime){ - time = moment(issueInfo?.issueDate+' '+issueInfo?.issueTime).format('HH:mm:ss'); - } - - if(!!date && !!time){ - return date + ' | ' + time; - } - else{ - return ''; - } - }; + useEffect(() => { if(!!taxInvoiceSampleOn){ @@ -105,23 +92,23 @@ export const TaxInvoiceSample = ({
상호
-
{ merchantInfo?.merchantName }
+
{ }
대표자
-
{ merchantInfo?.representativeName }
+
{ }
사업자등록번호
-
{ merchantInfo?.businessNumber }
+
{ }
전화번호
-
{ merchantInfo?.phoneNumber }
+
{ }
주소
-
{ merchantInfo?.address }
+
{ }
URL
@@ -153,7 +140,7 @@ export const TaxInvoiceSample = ({
총 결제금액
@@ -163,7 +150,7 @@ export const TaxInvoiceSample = ({
과세금액
@@ -173,7 +160,7 @@ export const TaxInvoiceSample = ({
부가세
@@ -183,7 +170,7 @@ export const TaxInvoiceSample = ({
면세금액
@@ -193,7 +180,7 @@ export const TaxInvoiceSample = ({
봉사료
@@ -202,31 +189,31 @@ export const TaxInvoiceSample = ({
결제수단
-
{ transactionInfo?.paymentMethod }
+
{ }
현금영수증번호
-
{ issueInfo?.issueNumber }
+
{ }
주문자
-
{ customerInfo?.customerName }
+
{ }
상품명
-
{ productInfo?.productName }
+
{ }
승인번호
-
{ issueInfo?.approvalNumber }
+
{ }
거래일시
-
{ getDateTime() }
+
{ }
용도
-
{ issueInfo?.purpose }
+
{ }
diff --git a/src/entities/transaction/ui/section/amount-info-section.tsx b/src/entities/transaction/ui/section/amount-info-section.tsx index d86f6de..e3435b4 100644 --- a/src/entities/transaction/ui/section/amount-info-section.tsx +++ b/src/entities/transaction/ui/section/amount-info-section.tsx @@ -204,34 +204,36 @@ export const AmountInfoSection = ({ userEmail?: string ) => { if(!!tid){ - let params: CashReceiptReceiptDownloadParams = { - tid: tid - }; - cashReceiptReceiptDownload(params).then((rs: CashReceiptReceiptDownloadResponse) => { - /* - if(rs?.merchantInfo){ - rs.merchantInfo.merchantName = '나이스페이먼츠'; - } - */ - setReceiptIssueInfo(rs?.issueInfo); - setReceiptMerchantInfo(rs?.merchantInfo); - setReceiptTransactionInfo(rs?.transactionInfo); - setReceiptAmountInfo(rs?.amountInfo); - setReceiptCustomerInfo(rs?.customerInfo); - setReceiptProductInfo(rs?.productInfo); - if(selectedMode === DownloadSelectedMode.IMAGE){ + if(selectedMode === DownloadSelectedMode.EMAIL + && !!userEmail + ){ + // 추가 api 필요 + } + else if(selectedMode === DownloadSelectedMode.IMAGE){ + let params: CashReceiptReceiptDownloadParams = { + tid: tid + }; + cashReceiptReceiptDownload(params).then((rs: CashReceiptReceiptDownloadResponse) => { + /* + if(rs?.merchantInfo){ + rs.merchantInfo.merchantName = '나이스페이먼츠'; + } + */ + setReceiptIssueInfo(rs?.issueInfo); + setReceiptMerchantInfo(rs?.merchantInfo); + setReceiptTransactionInfo(rs?.transactionInfo); + setReceiptAmountInfo(rs?.amountInfo); + setReceiptCustomerInfo(rs?.customerInfo); + setReceiptProductInfo(rs?.productInfo); setCashReceiptSampleOn(true); - } - else if(selectedMode === DownloadSelectedMode.EMAIL){ - snackBar('거래확인서 다운 성공'); - } - - }).catch((e: any) => { - if(e.response?.data?.error?.message){ - snackBar(e.response?.data?.error?.message); - return; - } - }); + + }).catch((e: any) => { + if(e.response?.data?.error?.message){ + snackBar(e.response?.data?.error?.message); + return; + } + }); + } } }; diff --git a/src/entities/vat-return/ui/detail/tax-invoice-detail.tsx b/src/entities/vat-return/ui/detail/tax-invoice-detail.tsx index 6ef5123..221baa0 100644 --- a/src/entities/vat-return/ui/detail/tax-invoice-detail.tsx +++ b/src/entities/vat-return/ui/detail/tax-invoice-detail.tsx @@ -1,11 +1,9 @@ import { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { motion } from 'framer-motion'; -import { PATHS } from '@/shared/constants/paths'; import { useLocation } from 'react-router'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { useVatReturnDetailMutation } from '@/entities/vat-return/api/use-vat-return-detail-mutation'; -import { HeaderType } from '@/entities/common/model/types'; import { Breakdown, VatReturnBreakdownParams, @@ -13,17 +11,10 @@ import { VatReturnDetailParams, VatReturnDetailResponse } from '@/entities/vat-return/model/types'; -import { - useSetOnBack, - useSetHeaderTitle, - useSetHeaderType, - useSetFooterMode -} from '@/widgets/sub-layout/use-sub-layout'; import { SupplierSection } from '@/entities/vat-return/ui/section/supplier-section'; import { ReceiverSection } from '@/entities/vat-return/ui/section/receiver-section'; import { IssueSection } from '@/entities/vat-return/ui/section/issue-section'; import { AmountSection } from '@/entities/vat-return/ui/section/amount-section'; -import { useVatReturnTaxInvoiceMutation } from '@/entities/vat-return/api/use-vat-return-tax-invoice-mutation'; import { VatReturnListDetailBottomSheet } from '@/entities/vat-return/ui/list-detail-bottom-sheet'; import { useVatReturnBreakdownMutation } from '@/entities/vat-return/api/use-vat-return-breakdown-mutation'; import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant'; @@ -46,14 +37,11 @@ export const TaxInvoiceDetail = ({ const { navigate } = useNavigate(); const location = useLocation(); - // taxInvoiceNumber = 'TAX202506300001'; - const [openAmount, setOpenAmount] = useState(false); const [bottomSheetOn, setBottomSheetOn] = useState(false); const [detail, setDetail] = useState({}); const [breakdown, setBreakdown] = useState>([]); - const { mutateAsync: vatReturnTaxInvoice } = useVatReturnTaxInvoiceMutation(); const { mutateAsync: vatReturnDetail } = useVatReturnDetailMutation(); const { mutateAsync: vatReturnBreakdown } = useVatReturnBreakdownMutation(); @@ -125,6 +113,7 @@ export const TaxInvoiceDetail = ({
diff --git a/src/entities/vat-return/ui/section/amount-section.tsx b/src/entities/vat-return/ui/section/amount-section.tsx index e145726..f7a26fe 100644 --- a/src/entities/vat-return/ui/section/amount-section.tsx +++ b/src/entities/vat-return/ui/section/amount-section.tsx @@ -1,24 +1,39 @@ import moment from 'moment'; import { useTranslation } from 'react-i18next'; -import { VatReturnDetailResponse } from '../../model/types'; +import { RecipientInfo, SupplierInfo, TransactionDetails, VatReturnDetailResponse, VatReturnTaxInvoiceParams, VatReturnTaxInvoiceResponse } from '../../model/types'; import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow'; -import { NumericFormat } from 'react-number-format'; import SlideDown from 'react-slidedown'; import 'react-slidedown/lib/slidedown.css'; 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'; export interface AmountSectionProps { + taxInvoiceNumber: string; detail: VatReturnDetailResponse; }; export const AmountSection = ({ + taxInvoiceNumber, detail }: AmountSectionProps) => { const { t, i18n } = useTranslation(); const [isOpen, setIsOpen] = useState(false); const [downloadBottomSheetOn, setDownloadBottomSheetOn] = useState(false); + const [taxInvoiceSampleOn, setTaxInvoiceSampleOn] = useState(false); + + const [supplierInfo, setSupplierInfo] = useState(); + const [recipientInfo, setRecipientInfo] = useState(); + const [issueDate, setIssueDate] = useState(); + const [supplyAmount, setSupplyAmount] = useState(); + const [taxAmount, setTaxAmount] = useState(); + const [totalAmount, setTotalAmount] = useState(); + const [transactionDetails, setTransactionDetails] = useState(); + + const { mutateAsync: vatReturnTaxInvoice } = useVatReturnTaxInvoiceMutation(); + const openSection = () => { const status = !isOpen; setIsOpen(status); @@ -28,7 +43,29 @@ export const AmountSection = ({ selectedMode: DownloadSelectedMode, userEmail?: string ) => { - + if(selectedMode === DownloadSelectedMode.EMAIL + && !!userEmail + ){ + // 추가 API 필요 + } + else if(selectedMode === DownloadSelectedMode.IMAGE){ + + let params: VatReturnTaxInvoiceParams = { + taxInvoiceNumber: taxInvoiceNumber + }; + vatReturnTaxInvoice(params).then((rs: VatReturnTaxInvoiceResponse) => { + + setSupplierInfo(rs?.supplierInfo); + setRecipientInfo(rs?.recipientInfo); + setIssueDate(rs?.issueDate); + setSupplyAmount(rs?.supplyAmount); + setTaxAmount(rs?.taxAmount); + setTotalAmount(rs?.totalAmount); + setTransactionDetails(rs?.transactionDetails); + + setTaxInvoiceSampleOn(true); + }); + } }; const onClickToOpenDownloadBottomSheet = () => { @@ -97,6 +134,13 @@ export const AmountSection = ({ sendRequest={ onRequestDownload } > } + { !!taxInvoiceSampleOn && + + } ); }; \ No newline at end of file