부가세참고

This commit is contained in:
focp212@naver.com
2025-10-02 15:57:31 +09:00
parent 300a21851d
commit ce2f2aaae9
7 changed files with 161 additions and 21 deletions

View File

@@ -0,0 +1,29 @@
import axios from 'axios';
import { API_URL_VAT_RETURN } from '@/shared/api/api-url-vat-return';
import { resultify } from '@/shared/lib/resultify';
import { CBDCAxiosError } from '@/shared/@types/error';
import {
VatReturnReferenceRequestResponse,
VatReturnReferenceRequestParams,
} from '../model/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const vatReturnReferenceRequest = (params: VatReturnReferenceRequestParams) => {
return resultify(
axios.post<VatReturnReferenceRequestResponse>(API_URL_VAT_RETURN.vatReturnReferenceRequest(), params),
);
};
export const useVatReturnReferenceRequestMutation = (options?: UseMutationOptions<VatReturnReferenceRequestResponse, CBDCAxiosError, VatReturnReferenceRequestParams>) => {
const mutation = useMutation<VatReturnReferenceRequestResponse, CBDCAxiosError, VatReturnReferenceRequestParams>({
...options,
mutationFn: (params: VatReturnReferenceRequestParams) => vatReturnReferenceRequest(params),
});
return {
...mutation,
};
};

View File

@@ -0,0 +1,29 @@
import axios from 'axios';
import { API_URL_VAT_RETURN } from '@/shared/api/api-url-vat-return';
import { resultify } from '@/shared/lib/resultify';
import { CBDCAxiosError } from '@/shared/@types/error';
import {
VatReturnTaxInvoiceResponse,
VatReturnTaxInvoiceParams,
} from '../model/types';
import {
useMutation,
UseMutationOptions
} from '@tanstack/react-query';
export const vatReturnTaxInvoice = (params: VatReturnTaxInvoiceParams) => {
return resultify(
axios.post<VatReturnTaxInvoiceResponse>(API_URL_VAT_RETURN.vatReturnTaxInvoice(), params),
);
};
export const useVatReturnTaxInvoiceMutation = (options?: UseMutationOptions<VatReturnTaxInvoiceResponse, CBDCAxiosError, VatReturnTaxInvoiceParams>) => {
const mutation = useMutation<VatReturnTaxInvoiceResponse, CBDCAxiosError, VatReturnTaxInvoiceParams>({
...options,
mutationFn: (params: VatReturnTaxInvoiceParams) => vatReturnTaxInvoice(params),
});
return {
...mutation,
};
};

View File

@@ -83,3 +83,67 @@ export interface VatReturnDetailResponse {
supplierCompanyName?: string; supplierCompanyName?: string;
supplierCeoName?: string; supplierCeoName?: string;
}; };
export enum TaxType {
};
export interface VatReturnReferenceRequestParams {
mid: string;
startMonth: string;
endMonth: string;
taxType: string,
requestorName: string;
contactNumber: string;
email: string;
};
export interface VatReturnReferenceRequestResponse {
requestId: number;
mid: string;
requestPeriod: string;
taxTypeDescription: string;
requestDateTime: string;
requestStatus: string;
requestorName: string;
contactNumber: string;
email: string;
};
export interface VatReturnTaxInvoiceParams {
taxInvoiceNumber: string;
}
export interface VatReturnTaxInvoiceResponse {
supplierInfo: SupplierInfo;
recipientInfo: RecipientInfo;
issueDate: string;
supplyAmount: number;
taxAmount: number;
totalAmount: number;
transactionDetails: TransactionDetails;
};
export interface SupplierInfo {
businessRegistrationNumber: string;
companyName: string;
ceoName: string;
address: string;
businessType: string;
businessItem: string;
};
export interface RecipientInfo {
businessRegistrationNumber: string;
companyName: string;
ceoName: string;
address: string;
businessType: string;
businessItem: string;
email: string;
};
export interface TransactionDetails {
transactionPeriod: string;
itemName: string;
specification: string;
quantity: number;
unitPrice: number;
supplyAmount: number;
taxAmount: number;
remarks: string;
};

View File

@@ -129,9 +129,6 @@ export const ListWrap = () => {
<div className="transaction-list"> <div className="transaction-list">
{ getListDateGroup() } { getListDateGroup() }
</div> </div>
<div className="apply-row bottom-padding">
<button className="btn-50 btn-blue flex-1">수기발행</button>
</div>
<ListFilter <ListFilter
filterOn={ filterOn } filterOn={ filterOn }
setFilterOn={ setFilterOn } setFilterOn={ setFilterOn }

View File

@@ -6,34 +6,45 @@ import { ReferenceRequestSuccess } from './reference-request-success';
import { ReferenceRequestFail } from './reference-request-fail'; import { ReferenceRequestFail } from './reference-request-fail';
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups'; import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
import { VatReturnTaxBtnGroups } from '../model/contant'; import { VatReturnTaxBtnGroups } from '../model/contant';
import { VatReturnPayTax } from '../model/types'; import { VatReturnPayTax, VatReturnReferenceRequestParams, VatReturnReferenceRequestResponse } from '../model/types';
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
import { useVatReturnReferenceRequestMutation } from '../api/use-vat-reference-request-mutation';
export const ReferenceWrap = () => { export const ReferenceWrap = () => {
const midOptions = useStore.getState().UserStore.selectOptionsMids;
const [success, setSuccess] = useState<boolean>(false); const [success, setSuccess] = useState<boolean>(false);
const [successPageOn, setSuccessPageOn] = useState<boolean>(false); const [successPageOn, setSuccessPageOn] = useState<boolean>(false);
const [failPageOn, setFailPageOn] = useState<boolean>(false); const [failPageOn, setFailPageOn] = useState<boolean>(false);
const [mid, setMid] = useState<string>('nictest00m'); const [mid, setMid] = useState<string>('');
const [startDate, setStartDate] = useState<string>(moment().format('YYYY.MM.DD')); const [startDate, setStartDate] = useState<string>(moment().format('YYYY.MM.DD'));
const [endDate, setEndDate] = useState<string>(moment().format('YYYY.MM.DD')); const [endDate, setEndDate] = useState<string>(moment().format('YYYY.MM.DD'));
const [payTax, setPayTax] = useState<VatReturnPayTax>(VatReturnPayTax.Tax); const [payTax, setPayTax] = useState<VatReturnPayTax>(VatReturnPayTax.Tax);
const [email, setEmail] = useState<string>(''); const [email, setEmail] = useState<string>('');
const midOptions = useStore.getState().UserStore.selectOptionsMids; const { mutateAsync: vatReturnReferenceRequest } = useVatReturnReferenceRequestMutation();
let EmailOptions = [ let EmailOptions = [
{name: 'focp212@naver.com', value: 'focp212@naver.com'} {name: 'focp212@naver.com', value: 'focp212@naver.com'}
]; ];
const onClickToResquest = () => { const onClickToResquest = () => {
if(success){ let params: VatReturnReferenceRequestParams = {
mid: mid,
startMonth: startDate,
endMonth: endDate,
taxType: payTax,
requestorName: '',
contactNumber: '',
email: email
}
vatReturnReferenceRequest(params).then((rs: VatReturnReferenceRequestResponse) => {
setSuccessPageOn(true); setSuccessPageOn(true);
} }).catch((error) => {
else{
setFailPageOn(true); setFailPageOn(true);
} });
}; };
return ( return (

View File

@@ -15,6 +15,8 @@ import {
useSetFooterMode, useSetFooterMode,
useSetFooterCurrentPage useSetFooterCurrentPage
} from '@/widgets/sub-layout/use-sub-layout'; } from '@/widgets/sub-layout/use-sub-layout';
import { useStore } from '@/shared/model/store';
import { UserFavorite } from '@/entities/user/model/types';
export let homeReloadKey = 1; export let homeReloadKey = 1;
export const setHomeReloadKey = () => { export const setHomeReloadKey = () => {
@@ -22,6 +24,7 @@ export const setHomeReloadKey = () => {
}; };
export const HomePage = () => { export const HomePage = () => {
const { const {
isNativeEnvironment, isNativeEnvironment,
openBiometricRegistrationPopup, openBiometricRegistrationPopup,
@@ -38,7 +41,7 @@ export const HomePage = () => {
const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false); const [bottomBannerOn, setBottomBannerOn] = useState<boolean>(false);
const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false); const [authRegisterOn, setAuthRegisterOn] = useState<boolean>(false);
const [loginSuccess, setLoginSuccess] = useState<boolean>(true); const [favoriteItems, setFavoriteItems] = useState<Array<UserFavorite>>([]);
const checkBottomBannerOpen = () => { const checkBottomBannerOpen = () => {
if(!!bannerToday){ if(!!bannerToday){
@@ -64,6 +67,9 @@ export const HomePage = () => {
useEffect(() => { useEffect(() => {
checkBottomBannerOpen(); checkBottomBannerOpen();
checkAuthRegisterOpen(); checkAuthRegisterOpen();
let userFavorite = useStore.getState().UserStore.userFavorite;
setFavoriteItems(userFavorite);
}, []); }, []);
const setBottomBannerEffect = (mode: boolean) => { const setBottomBannerEffect = (mode: boolean) => {
@@ -86,15 +92,11 @@ export const HomePage = () => {
{/*<!-- 탭 컨텐츠 영역 -->*/} {/*<!-- 탭 컨텐츠 영역 -->*/}
<div className="tab-content blue"> <div className="tab-content blue">
<div className="tab-pane dashboard active"> <div className="tab-pane dashboard active">
{ loginSuccess && <FavoriteWrapper
<> usingType='home'
<FavoriteWrapper key={ homeReloadKey }
usingType='home' ></FavoriteWrapper>
key={ homeReloadKey } <DayStatusBox></DayStatusBox>
></FavoriteWrapper>
<DayStatusBox></DayStatusBox>
</>
}
</div> </div>
</div> </div>
</main> </main>

View File

@@ -4,6 +4,14 @@ import {
} from './../constants/url'; } from './../constants/url';
export const API_URL_VAT_RETURN = { export const API_URL_VAT_RETURN = {
vatReturnTaxInvoice: () => {
// POST: 세금계산서 조회
return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/tax-invoice`;
},
vatReturnReferenceRequest: () => {
// POST: 부가세 참고자료 신청
return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/reference-request`;
},
vatReturnList: () => { vatReturnList: () => {
// POST: 세금계산서 목록 조회 // POST: 세금계산서 목록 조회
return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/list`; return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/list`;