From 02685371f9f9def4a2c1a41507902f652119223b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 11 Feb 2026 10:55:20 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EC=B9=B4=EB=93=9C=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20=EC=97=91=EC=85=80=20=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 카드번호 문자형 출력 (="번호" 형식으로 과학적 표기 방지) - 사업자번호, 가맹점명 열 추가 - 합계금액/공급가액/세액 3열로 분리 (화면과 동일) - 분개 행도 공급가액/세액 분리 출력 Co-Authored-By: Claude Opus 4.6 --- .../Controllers/Barobill/EcardController.php | 63 ++++++++++++------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/Barobill/EcardController.php b/app/Http/Controllers/Barobill/EcardController.php index 1e5bdf95..5812885a 100644 --- a/app/Http/Controllers/Barobill/EcardController.php +++ b/app/Http/Controllers/Barobill/EcardController.php @@ -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'] ?? '',