feat: [ecard] 카드사용내역 분리/분개 열 분리

- 기존 '분개' 열을 '분리'(금액 나누기)와 '분개'(복식부기) 두 열로 분리
- SplitModal 텍스트를 '분개'에서 '분리'로 변경
- CSV 내보내기 텍스트도 '분리'로 통일
- 분리 열: 금액 분리 기능 (SplitModal)
- 분개 열: 복식부기 분개 기능 (CardJournalModal)
This commit is contained in:
김보곤
2026-02-24 17:49:30 +09:00
parent f62f0baeac
commit 1cd78585ae
2 changed files with 89 additions and 74 deletions

View File

@@ -1093,7 +1093,7 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
// 카드번호를 문자형으로 강제 (엑셀 과학적 표기 방지)
$cardNumText = $cardNum ? "=\"{$cardNum}\"" : '';
// 고유키로 분 데이터 확인
// 고유키로 분 데이터 확인
$uniqueKey = $log['uniqueKey'] ?? implode('|', [
$cardNum,
$log['useDt'] ?? '',
@@ -1117,7 +1117,7 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
$description = $log['description'] ?? $log['merchantBizType'] ?? '';
if ($hasSplits) {
// 분가 있는 경우: 원본 행 (합계 표시)
// 분가 있는 경우: 원본 행 (합계 표시)
fputcsv($handle, [
'원본',
$dateTime,
@@ -1133,11 +1133,11 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
number_format($tax),
$approvalNum,
'-',
'분됨 ('.count($splits).'건)',
'분됨 ('.count($splits).'건)',
'',
]);
// 각 분 행 출력
// 각 분 행 출력
foreach ($splits as $index => $split) {
$splitDeductionType = $split['deduction_type'] ?? $split['deductionType'] ?? 'deductible';
$splitDeductionText = ($splitDeductionType === 'non_deductible') ? '불공' : '공제';
@@ -1151,7 +1151,7 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
$splitMemo = $split['memo'] ?? '';
fputcsv($handle, [
'└ 분 #'.($index + 1),
'└ 분 #'.($index + 1),
'',
'',
'',
@@ -1170,7 +1170,7 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
]);
}
} else {
// 분가 없는 경우: 일반 행
// 분가 없는 경우: 일반 행
fputcsv($handle, [
'일반',
$dateTime,
@@ -1208,7 +1208,7 @@ public function exportExcel(Request $request): StreamedResponse|JsonResponse
}
/**
* 분 내역 조회
* 분 내역 조회
*/
public function splits(Request $request): JsonResponse
{
@@ -1224,7 +1224,7 @@ public function splits(Request $request): JsonResponse
'data' => $splits,
]);
} catch (\Throwable $e) {
Log::error('분 내역 조회 오류: '.$e->getMessage());
Log::error('분 내역 조회 오류: '.$e->getMessage());
return response()->json([
'success' => false,
@@ -1234,7 +1234,7 @@ public function splits(Request $request): JsonResponse
}
/**
* 분 저장
* 분 저장
*/
public function saveSplits(Request $request): JsonResponse
{
@@ -1251,7 +1251,7 @@ public function saveSplits(Request $request): JsonResponse
]);
}
// 분 금액 합계 검증 (공급가액 + 부가세 합계)
// 분 금액 합계 검증 (공급가액 + 부가세 합계)
$originalAmount = floatval($originalData['originalAmount'] ?? 0);
$splitTotal = array_sum(array_map(function ($s) {
if (isset($s['supplyAmount']) && isset($s['tax'])) {
@@ -1264,7 +1264,7 @@ public function saveSplits(Request $request): JsonResponse
if (abs($originalAmount - $splitTotal) > 0.01) {
return response()->json([
'success' => false,
'error' => " 금액 합계({$splitTotal})가 원본 금액({$originalAmount})과 일치하지 않습니다.",
'error' => " 금액 합계({$splitTotal})가 원본 금액({$originalAmount})과 일치하지 않습니다.",
]);
}
@@ -1276,12 +1276,12 @@ public function saveSplits(Request $request): JsonResponse
return response()->json([
'success' => true,
'message' => '분가 저장되었습니다.',
'message' => '분가 저장되었습니다.',
'splitCount' => count($splits),
]);
} catch (\Throwable $e) {
DB::rollBack();
Log::error('분 저장 오류: '.$e->getMessage());
Log::error('분 저장 오류: '.$e->getMessage());
return response()->json([
'success' => false,
@@ -1291,7 +1291,7 @@ public function saveSplits(Request $request): JsonResponse
}
/**
* 분 삭제 (원본으로 복원)
* 분 삭제 (원본으로 복원)
*/
public function deleteSplits(Request $request): JsonResponse
{
@@ -1310,11 +1310,11 @@ public function deleteSplits(Request $request): JsonResponse
return response()->json([
'success' => true,
'message' => '분가 삭제되었습니다.',
'message' => '분가 삭제되었습니다.',
'deleted' => $deleted,
]);
} catch (\Throwable $e) {
Log::error('분 삭제 오류: '.$e->getMessage());
Log::error('분 삭제 오류: '.$e->getMessage());
return response()->json([
'success' => false,