현금영수증 수기 발행 완료

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

@@ -54,7 +54,7 @@ export const CashReceiptHandWrittenIssuanceStep1 = ({
className="error"
type="text"
value={ businessNumber }
disabled={ true }
readOnly={ true }
/>
</div>
</div>

View File

@@ -1,37 +1,40 @@
import { ChangeEvent } from 'react';
import { useSetOnBack } from '@/widgets/sub-layout/use-sub-layout';
import { ProcessStep } from '../model/types';
import { NumericFormat } from 'react-number-format';
export interface CashReceiptHandWrittenIssuanceStep2Props {
setProcessStep: (processStep: ProcessStep) => void;
issueAmount: number;
supplyAmount: number;
vatAmount: number;
taxFreeAmount: number;
serviceCharge: number;
setIssueAmount: (issueAmount: number) => void;
setSupplyAmount: (supplyAmount: number) => void;
setVatAmount: (vatAmount: number) => void;
setTaxFreeAmount: (taxFreeAmount: number) => void;
setServiceCharge: (serviceCharge: number) => void;
onClickToVatCalculate: () => void;
};
export const CashReceiptHandWrittenIssuanceStep2 = ({
setProcessStep,
issueAmount,
supplyAmount,
vatAmount,
taxFreeAmount,
serviceCharge,
setIssueAmount,
setSupplyAmount,
setVatAmount,
setTaxFreeAmount,
setServiceCharge
setServiceCharge,
onClickToVatCalculate
}: CashReceiptHandWrittenIssuanceStep2Props) => {
useSetOnBack(() => {
setProcessStep(ProcessStep.One);
});
const onClickToVatCalculate = () => {
};
return (
<>
<h2 className="issue-title"> </h2>
@@ -41,15 +44,16 @@ export const CashReceiptHandWrittenIssuanceStep2 = ({
<div className="issue-label"></div>
<div className="issue-field">
<div className="seg-buttons">
<input
type="text"
value="555,555,555"
readOnly={ true }
/>
<NumericFormat
value={ issueAmount }
allowNegative={ false }
displayType="input"
onChange={ (e: ChangeEvent<HTMLInputElement>) => setIssueAmount(parseInt(e.target.value)) }
></NumericFormat>
<button
className="btn-40 btn-white"
type="button"
onClick={ () => onClickToVatCalculate() }
onClick={ onClickToVatCalculate }
>VAT자동계산</button>
</div>
</div>
@@ -58,49 +62,45 @@ export const CashReceiptHandWrittenIssuanceStep2 = ({
<div className="issue-row">
<div className="issue-label"></div>
<div className="issue-field">
<input
className="error"
type="text"
placeholder=""
<NumericFormat
value={ supplyAmount }
allowNegative={ false }
displayType="input"
onChange={ (e: ChangeEvent<HTMLInputElement>) => setSupplyAmount(parseInt(e.target.value)) }
/>
></NumericFormat>
</div>
</div>
<div className="issue-row">
<div className="issue-label">VAT</div>
<div className="issue-field">
<input
className="error"
type="text"
placeholder=""
<NumericFormat
value={ vatAmount }
allowNegative={ false }
displayType="input"
onChange={ (e: ChangeEvent<HTMLInputElement>) => setVatAmount(parseInt(e.target.value)) }
/>
></NumericFormat>
</div>
</div>
<div className="issue-row">
<div className="issue-label"></div>
<div className="issue-field">
<input
className="error"
type="text"
placeholder=""
<NumericFormat
value={ taxFreeAmount }
allowNegative={ false }
displayType="input"
onChange={ (e: ChangeEvent<HTMLInputElement>) => setTaxFreeAmount(parseInt(e.target.value)) }
/>
></NumericFormat>
</div>
</div>
<div className="issue-row">
<div className="issue-label"></div>
<div className="issue-field">
<input
className="error"
type="text"
placeholder=""
<NumericFormat
value={ serviceCharge }
allowNegative={ false }
displayType="input"
onChange={ (e: ChangeEvent<HTMLInputElement>) => setServiceCharge(parseInt(e.target.value)) }
/>
></NumericFormat>
</div>
</div>
<div className="issue-note error">

View File

@@ -1,29 +0,0 @@
import axios from 'axios';
import { API_URL_USER } from '@/shared/api/api-url-user';
import { resultify } from '@/shared/lib/resultify';
import { NiceAxiosError } from '@/shared/@types/error';
import {
BusinessPropertyByMidParams,
BusinessPropertyByMidResponse
} from '../model/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const businessPropertyByMid = (params: BusinessPropertyByMidParams) => {
return resultify(
axios.post<BusinessPropertyByMidResponse>(API_URL_USER.businessPropertyByMid(), params),
);
};
export const useBusinessPropertyByMidMutation = (options?: UseMutationOptions<BusinessPropertyByMidResponse, NiceAxiosError, BusinessPropertyByMidParams>) => {
const mutation = useMutation<BusinessPropertyByMidResponse, NiceAxiosError, BusinessPropertyByMidParams>({
...options,
mutationFn: (params: BusinessPropertyByMidParams) => businessPropertyByMid(params),
});
return {
...mutation,
};
};

View File

@@ -0,0 +1,29 @@
import axios from 'axios';
import { API_URL_USER } from '@/shared/api/api-url-user';
import { resultify } from '@/shared/lib/resultify';
import { NiceAxiosError } from '@/shared/@types/error';
import {
BusinessPropertyParams,
BusinessPropertyResponse
} from '../model/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const businessProperty = (params: BusinessPropertyParams) => {
return resultify(
axios.post<BusinessPropertyResponse>(API_URL_USER.businessProperty(), params),
);
};
export const useBusinessPropertyMutation = (options?: UseMutationOptions<BusinessPropertyResponse, NiceAxiosError, BusinessPropertyParams>) => {
const mutation = useMutation<BusinessPropertyResponse, NiceAxiosError, BusinessPropertyParams>({
...options,
mutationFn: (params: BusinessPropertyParams) => businessProperty(params),
});
return {
...mutation,
};
};

View File

@@ -261,13 +261,13 @@ export interface ShortcutUserResponse {
usingDefault: boolean;
};
export interface BusinessPropertyByMidParams {
export interface BusinessPropertyParams {
mid: string;
};
export interface BusinessPropertyByMidResponse {
export interface BusinessPropertyResponse {
companyNumber: string;
businessScaleTypeName: string;
};
export interface BusinessInfo extends BusinessPropertyByMidResponse {
export interface BusinessInfo extends BusinessPropertyResponse {
};

View File

@@ -14,6 +14,6 @@ export const VatReturnTargetTypeBtnGroup = [
];
export const VatReturnTaxBtnGroups = [
{name: '과세', value: VatReturnPayTax.Tax },
{name: '면세', value: VatReturnPayTax.NoTax },
{name: '과세', value: VatReturnPayTax.TAX },
{name: '면세', value: VatReturnPayTax.NOTAX },
];

View File

@@ -14,8 +14,8 @@ export enum VatReturnReceiptType {
BILL = 'BILL '
};
export enum VatReturnPayTax {
Tax = 'Tax',
NoTax = 'NoTax'
TAX = '0',
NOTAX = '1'
};
export enum VatReturnTargetType {
ALL = 'ALL',
@@ -91,8 +91,6 @@ export interface VatReturnReferenceRequestParams {
startMonth: string;
endMonth: string;
taxType: string,
requestorName: string;
contactNumber: string;
email: string;
};
export interface VatReturnReferenceRequestResponse {

View File

@@ -15,14 +15,14 @@ export const ReferenceWrap = () => {
const emailOptions = useStore.getState().UserStore.selectOptionsEmails;
const userMid = useStore.getState().UserStore.mid;
const userEmail = useStore.getState().UserStore.email;
const [successPageOn, setSuccessPageOn] = useState<boolean>(false);
const [failPageOn, setFailPageOn] = useState<boolean>(false);
const [mid, setMid] = useState<string>(userMid);
const [startDate, setStartDate] = useState<string>(moment().format('YYYYMMDD'));
const [endDate, setEndDate] = useState<string>(moment().format('YYYYMMDD'));
const [payTax, setPayTax] = useState<VatReturnPayTax>(VatReturnPayTax.Tax);
const [payTax, setPayTax] = useState<VatReturnPayTax>(VatReturnPayTax.TAX);
const [email, setEmail] = useState<string>(userEmail);
const [errorMsg, setErrorMsg] = useState<string>('');
@@ -34,9 +34,7 @@ export const ReferenceWrap = () => {
startMonth: startDate,
endMonth: endDate,
taxType: payTax,
requestorName: '',
contactNumber: '',
email: email
email: email || userEmail
}
vatReturnReferenceRequest(params).then((rs: VatReturnReferenceRequestResponse) => {
setSuccessPageOn(true);