import moment from 'moment'; import { useEffect, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { ListDateGroup } from './list-date-group'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { SortOptionsBox } from '@/entities/common/ui/sort-options-box'; import { useSettlementsHistoryMutation } from '../api/use-settlements-history-mutation'; import { useSettlementsHistorySummaryMutation } from '../api/use-settlements-history-summary-mutation'; import { useSettlementsTransactionSummaryMutation } from '../api/use-settlements-transaction-summary-mutation'; import { useSettlementsTransactionListMutation } from '../api/use-settlements-transaction-list-mutation'; import { ListSummaryExtendSettlement } from './list-summary-extend-settlement'; import { ListSummaryExtendTransaction } from './list-summary-extend-transaction'; import SlideDown from 'react-slidedown'; import 'react-slidedown/lib/slidedown.css'; import { ListFilter } from './filter/list-filter'; import { useDownloadExcelMutation } from '@/entities/transaction/api/use-download-excel-mutation'; import { SettlementPeriodType, SettlementPaymentMethod, SettlementsHistoryContent, ListDateGroupProps, SettlementsTransactionListContent } from '../model/types'; import { SortByKeys } from '@/entities/common/model/types'; export interface ListWrapProps { startDateFromCalendar?: string; endDateFromCalendar?: string; }; export const ListWrap = ({ startDateFromCalendar, endDateFromCalendar }: ListWrapProps) => { const { navigate } = useNavigate(); const [sortBy, setSortBy] = useState(SortByKeys.New); const [settlementDateListItems, setSettlementDateListItems] = useState>>({}); const [transactionDatelistItems, setTransactionDateListItems] = useState>>({}); const [filterOn, setFilterOn] = useState(false); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState('nictest00m'); const [periodType, setPeriodType] = useState(SettlementPeriodType.SETTLEMENT_DATE); const [startDate, setStartDate] = useState(startDateFromCalendar? moment(startDateFromCalendar).format('YYYY-MM-DD'): moment().format('YYYY-MM-DD')); const [endDate, setEndDate] = useState(endDateFromCalendar? moment(endDateFromCalendar).format('YYYY-MM-DD'): moment().format('YYYY-MM-DD')); const [paymentMethod, setPaymentMethod] = useState(SettlementPaymentMethod.ALL); const [settlementAmount, setSettlementAmount] = useState(); const [transactionAmount, setTransactionAmount] = useState(); const [pgFeeAmount, setPgFeeAmount] = useState(); const [holdAmount, setHoldAmount] = useState(); const [releaseAmount, setReleaseAmount] = useState(); const [offsetAmount, setOffsetAmount] = useState(); const [paymentFeeAmount, setPaymentFeeAmount] = useState(); const [escrowFeeAmount, setEscrowFeeAmount] = useState(); const [authFeeAmount, setAuthFeeAmount] = useState(); const [vatAmount, setVatAmount] = useState(); const [preSettlementCancelOffset, setPreSettlementCancelOffset] = useState(); const [isOpenSummary, setIsOpenSummary] = useState(false); const { mutateAsync: settlementsHistory } = useSettlementsHistoryMutation(); const { mutateAsync: settlementsHistorySummary} = useSettlementsHistorySummaryMutation(); const { mutateAsync: settlementsTransactionList } = useSettlementsTransactionListMutation(); const { mutateAsync: settlementsTransactionSummary } = useSettlementsTransactionSummaryMutation(); const { mutateAsync: downloadExcel } = useDownloadExcelMutation(); const callList = () => { if(periodType === SettlementPeriodType.SETTLEMENT_DATE){ callSettlementList(); } else if(periodType === SettlementPeriodType.TRANSACTION_DATE){ callTransactionList(); } }; const callSettlementList = (option?: { sortBy?: string, val?: string }) => { let listSummaryParams = { mid: mid, periodType: periodType, startDate: startDate, endDate: endDate, paymentMethod: paymentMethod, }; pageParam.sortBy = (option?.sortBy)? option.sortBy: sortBy; setPageParam(pageParam); let listParams = { ...listSummaryParams, ...{pagination: pageParam} }; settlementsHistory(listParams).then((rs) => { setSettlementDateListItems(assembleData(rs.content)); }); settlementsHistorySummary(listSummaryParams).then((rs) => { setSettlementAmount(rs.settlementAmount); setTransactionAmount(rs.transactionAmount); setPgFeeAmount(rs.pgFeeAmount); setHoldAmount(rs.holdAmount); setReleaseAmount(rs.releaseAmount); setOffsetAmount(rs.offsetAmount); }); }; const callTransactionList = (option?: { sortBy?: string, val?: string }) => { pageParam.sortBy = (option?.sortBy)? option.sortBy: sortBy; setPageParam(pageParam); let params = { mid: mid, periodType: periodType, startDate: startDate, endDate: endDate, paymentMethod: paymentMethod, pagination: pageParam }; let summaryParams = { ...params, transactionIds: [ "TXN_20250608_001", "TXN_20250608_002" ] }; settlementsTransactionList(params).then((rs) => { setTransactionDateListItems(assembleData(rs.content)); }); settlementsTransactionSummary(summaryParams).then((rs) => { setSettlementAmount(rs.settlementAmount); setTransactionAmount(rs.transactionAmount); setPaymentFeeAmount(rs.paymentFeeAmount); setEscrowFeeAmount(rs.escrowFeeAmount); setAuthFeeAmount(rs.authFeeAmount); setVatAmount(rs.vatAmount); setPreSettlementCancelOffset(rs.preSettlementCancelOffset); }); }; const assembleData = (content: Array) => { let data: any = {}; if(content && content.length > 0){ for(let i=0;i { setSortBy(sort); if(periodType === SettlementPeriodType.SETTLEMENT_DATE){ callSettlementList({sortBy: sort}); } else if(periodType === SettlementPeriodType.TRANSACTION_DATE){ callTransactionList({sortBy: sort}); } }; const changePeriodType = (val: SettlementPeriodType) => { if(val !== periodType){ setPeriodType(val); if(val === SettlementPeriodType.SETTLEMENT_DATE){ callSettlementList(); } else if(val === SettlementPeriodType.TRANSACTION_DATE){ callTransactionList(); } } }; useEffect(() => { callList(); }, [periodType]); const getSettlementDateListDateGroup = () => { let rs = []; if(Object.keys(settlementDateListItems).length > 0){ for (const [key, value] of Object.entries(settlementDateListItems)) { rs.push( ); } } return rs; }; const getTransactionDateListDateGroup = () => { let rs = []; if(Object.keys(transactionDatelistItems).length > 0){ for (const [key, value] of Object.entries(transactionDatelistItems)) { rs.push( ); } } return rs; }; const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const onClickToDownloadExcel = () => { // tid??? 확인 필요 downloadExcel({ // tid: tid }).then((rs) => { }); }; return ( <>
정산금액
{ (periodType === SettlementPeriodType.SETTLEMENT_DATE) && { isOpenSummary && } } { (periodType === SettlementPeriodType.TRANSACTION_DATE) && { isOpenSummary && } }
changePeriodType(SettlementPeriodType.SETTLEMENT_DATE) } >가맹점 기준 changePeriodType(SettlementPeriodType.TRANSACTION_DATE) } >거래 기준
{ (periodType === SettlementPeriodType.SETTLEMENT_DATE) && getSettlementDateListDateGroup() } { (periodType === SettlementPeriodType.TRANSACTION_DATE) && getTransactionDateListDateGroup() }
); };