fix:카드사용내역 엑셀 다운로드 개선

- 카드번호 문자형 출력 (="번호" 형식으로 과학적 표기 방지)
- 사업자번호, 가맹점명 열 추가
- 합계금액/공급가액/세액 3열로 분리 (화면과 동일)
- 분개 행도 공급가액/세액 분리 출력

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-11 10:55:20 +09:00
parent 5cb92c0fd7
commit 02685371f9

View File

@@ -1042,10 +1042,13 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
'카드번호',
'카드사',
'공제여부',
'사업자번호',
'가맹점명',
'증빙/판매자상호',
'내역',
'승인금액',
'부가세',
'합계금액',
'공급가액',
'세액',
'승인번호',
'계정과목코드',
'계정과목명',
@@ -1058,8 +1061,13 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
$cardNum = $log['cardNum'] ?? '';
$cardBrand = $log['cardBrand'] ?? '';
$approvalNum = $log['approvalNum'] ?? '';
$approvalAmount = $log['approvalAmount'] ?? 0;
$tax = $log['tax'] ?? 0;
$approvalAmount = floatval($log['approvalAmount'] ?? 0);
$tax = floatval($log['effectiveTax'] ?? $log['tax'] ?? 0);
$supplyAmount = floatval($log['effectiveSupplyAmount'] ?? ($approvalAmount - $tax));
$totalAmount = $supplyAmount + $tax;
// 카드번호를 문자형으로 강제 (엑셀 과학적 표기 방지)
$cardNumText = $cardNum ? "=\"{$cardNum}\"" : '';
// 고유키로 분개 데이터 확인
$uniqueKey = $log['uniqueKey'] ?? implode('|', [
@@ -1076,8 +1084,12 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
$deductionType = $log['deductionType'] ?? ($log['merchantBizNum'] ? 'deductible' : 'non_deductible');
$deductionText = ($deductionType === 'non_deductible') ? '불공' : '공제';
// 사업자번호, 가맹점명
$merchantBizNum = $log['merchantBizNum'] ?? '';
$merchantName = $log['merchantName'] ?? '';
// 증빙/판매자상호, 내역
$evidenceName = $log['evidenceName'] ?? $log['merchantName'] ?? '';
$evidenceName = $log['evidenceName'] ?? $merchantName;
$description = $log['description'] ?? $log['merchantBizType'] ?? '';
if ($hasSplits) {
@@ -1085,15 +1097,18 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
fputcsv($handle, [
'원본',
$dateTime,
$cardNum,
$cardNumText,
$cardBrand,
'-', // 분개된 경우 공제여부는 각 분개에서 표시
'-',
$merchantBizNum,
$merchantName,
$evidenceName,
$description,
number_format($approvalAmount),
number_format($totalAmount),
number_format($supplyAmount),
number_format($tax),
$approvalNum,
'-', // 분개된 경우 계정과목은 각 분개에서 표시
'-',
'분개됨 (' . count($splits) . '건)',
''
]);
@@ -1102,11 +1117,9 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
foreach ($splits as $index => $split) {
$splitDeductionType = $split['deduction_type'] ?? $split['deductionType'] ?? 'deductible';
$splitDeductionText = ($splitDeductionType === 'non_deductible') ? '불공' : '공제';
$splitSupplyAmount = $split['split_supply_amount'] ?? $split['supplyAmount'] ?? null;
$splitTax = $split['split_tax'] ?? $split['tax'] ?? null;
$splitAmount = ($splitSupplyAmount !== null && $splitTax !== null)
? floatval($splitSupplyAmount) + floatval($splitTax)
: ($split['split_amount'] ?? $split['amount'] ?? 0);
$splitSupplyAmount = floatval($split['split_supply_amount'] ?? $split['supplyAmount'] ?? 0);
$splitTax = floatval($split['split_tax'] ?? $split['tax'] ?? 0);
$splitTotal = $splitSupplyAmount + $splitTax;
$splitEvidenceName = $split['evidence_name'] ?? $split['evidenceName'] ?? '';
$splitDescription = $split['description'] ?? '';
$splitAccountCode = $split['account_code'] ?? $split['accountCode'] ?? '';
@@ -1115,15 +1128,18 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
fputcsv($handle, [
'└ 분개 #' . ($index + 1),
'', // 사용일시 (원본과 동일하므로 생략)
'', // 카드번호
'', // 카드사
'',
'',
'',
$splitDeductionText,
'',
'',
$splitEvidenceName,
$splitDescription,
number_format($splitAmount),
$splitTax !== null ? number_format(floatval($splitTax)) : '',
'', // 승인번호
number_format($splitTotal),
number_format($splitSupplyAmount),
number_format($splitTax),
'',
$splitAccountCode,
$splitAccountName,
$splitMemo
@@ -1134,12 +1150,15 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
fputcsv($handle, [
'일반',
$dateTime,
$cardNum,
$cardNumText,
$cardBrand,
$deductionText,
$merchantBizNum,
$merchantName,
$evidenceName,
$description,
number_format($approvalAmount),
number_format($totalAmount),
number_format($supplyAmount),
number_format($tax),
$approvalNum,
$log['accountCode'] ?? '',