현금영수증 수기 발행 완료

This commit is contained in:
focp212@naver.com
2025-10-24 10:28:34 +09:00
parent c2041f918f
commit 9348656db0
12 changed files with 117 additions and 97 deletions

View File

@@ -1,4 +1,4 @@
import { useState } from 'react';
import { useEffect, useState } from 'react';
import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { CashReceiptHandWrittenIssuanceStep1 } from '@/entities/transaction/ui/cash-receipt-hand-written-issuance-step1';
@@ -8,19 +8,23 @@ import { HeaderType} from '@/entities/common/model/types';
import { useSetFooterMode, useSetHeaderTitle, useSetHeaderType } from '@/widgets/sub-layout/use-sub-layout';
import { useCashReceiptManualIssueMutation } from '@/entities/transaction/api/use-cash-receipt-manual-issue-mutation';
import { showAlert } from '@/widgets/show-alert';
import { useStore } from '@/shared/model/store';
import { snackBar } from '@/shared/lib';
export const CashReceitHandWrittenIssuancePage = () => {
const { navigate } = useNavigate();
let businessInfo = useStore.getState().UserStore.businessInfo;
let userMid = useStore.getState().UserStore.mid;
// 1 or 2
const [processStep, setProcessStep] = useState<ProcessStep>(ProcessStep.One);
const [businessNumber, setBusinessNumber] = useState<string>('');
const [businessNumber, setBusinessNumber] = useState<string>(businessInfo.companyNumber);
const [purposeType, setPurposeType] = useState<CashReceiptPurposeType>(CashReceiptPurposeType.INCOME_DEDUCTION);
const [productName, setProductName] = useState<string>('');
const [buyerName, setBuyerName] = useState<string>('');
const [issueNumber, setIssueNumber] = useState<string>('');
const [email, setEmail] = useState<string>('');
const [phoneNumber, setPhoneNumber] = useState<string>('');
const [issueAmount, setIssueAmount] = useState<number>(0);
const [supplyAmount, setSupplyAmount] = useState<number>(0);
const [vatAmount, setVatAmount] = useState<number>(0);
const [taxFreeAmount, setTaxFreeAmount] = useState<number>(0);
@@ -44,6 +48,7 @@ export const CashReceitHandWrittenIssuancePage = () => {
const callManualIssue = () => {
let params = {
mid: userMid,
businessNumber: businessNumber,
purpose: purposeType,
productName: productName,
@@ -58,41 +63,57 @@ export const CashReceitHandWrittenIssuancePage = () => {
};
cashReceiptManualIssue(params).then((rs) => {
console.log(rs);
alert('완료');
navigate(PATHS.transaction.cashReceipt.list);
snackBar('수기 신청이 완료되었습니다.', function(){
navigate(PATHS.transaction.cashReceipt.list);
}, 3000);
});
};
const onClickToVatCalculate = () => {
let amount = parseInt((issueAmount / 11 * 10).toFixed(0));
let vat = issueAmount - amount;
setSupplyAmount(amount);
setVatAmount(vat);
};
const onClickToChangeTab = () => {
if(processStep === ProcessStep.One){
if(!businessNumber){
showAlert('사업자 번호는 필수 입력 항목 입니다.');
return;
}
else if(!productName){
showAlert('상품명은 필수 입력 항목 입니다.');
return;
}
else if(!buyerName){
showAlert('구매자는 필수 입력 항목 입니다.');
return;
}
else if(!issueNumber){
showAlert('발행번호는 필수 입력 항목 입니다.');
return;
}
else if(email && !checkEmail(email)){
showAlert('이메일 형식이 맞지 않습니다.');
return;
}
else if(!phoneNumber){
showAlert('전화번호는 필수 입력 항목 입니다.');
return;
}
setProcessStep(ProcessStep.Two);
}
else if(processStep === ProcessStep.Two){
if(supplyAmount <= 0){
showAlert('공급가액은 1원 이상이어야 합니다.');
return;
}
callManualIssue();
// 완료시?
//alert('완료');
// navigate(PATHS.transaction.cashReceipt.list);
}
};
return (
<>
<main>
@@ -136,14 +157,17 @@ export const CashReceitHandWrittenIssuancePage = () => {
{ (processStep === ProcessStep.Two) &&
<CashReceiptHandWrittenIssuanceStep2
setProcessStep={ setProcessStep }
issueAmount={ issueAmount }
supplyAmount={ supplyAmount }
vatAmount={ vatAmount }
taxFreeAmount={ taxFreeAmount }
serviceCharge={ serviceCharge }
setIssueAmount={ setIssueAmount }
setSupplyAmount={ setSupplyAmount }
setVatAmount={ setVatAmount }
setTaxFreeAmount={ setTaxFreeAmount }
setServiceCharge={ setServiceCharge }
onClickToVatCalculate={ onClickToVatCalculate }
></CashReceiptHandWrittenIssuanceStep2>
}
</div>