fix:일반전표 은행거래 잔액 오류 수정 (API 레코드 우선 선택)
동일 거래가 수동(is_manual=true)과 API(is_manual=false)로 중복 저장된 경우 MAX(id)로 최신 레코드를 선택하면 잔액이 0에서 계산된 수동 레코드가 선택되어 잔액이 잘못 표시되는 문제 수정. API 레코드의 balance가 바로빌에서 제공한 정확한 은행 잔액이므로 우선 선택. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -379,7 +379,8 @@ public function bankTransactions(Request $request): JsonResponse
|
||||
$accountNum = $request->input('accountNum', '');
|
||||
|
||||
// barobill_bank_transactions 테이블에서 직접 조회
|
||||
// 같은 거래가 잔액(balance)만 다르게 중복 저장된 경우 최신 건만 사용
|
||||
// 같은 거래가 수동/API로 중복 저장된 경우 API(is_manual=false) 레코드 우선 사용
|
||||
// API 레코드의 balance가 바로빌에서 제공한 정확한 은행 잔액
|
||||
$dedupQuery = BankTransaction::where('tenant_id', $tenantId)
|
||||
->whereBetween('trans_date', [$startDate, $endDate]);
|
||||
|
||||
@@ -388,9 +389,12 @@ public function bankTransactions(Request $request): JsonResponse
|
||||
}
|
||||
|
||||
$latestIds = $dedupQuery
|
||||
->selectRaw('MAX(id) as id')
|
||||
->selectRaw('MAX(CASE WHEN COALESCE(is_manual, 0) = 0 THEN id END) as api_id, MAX(id) as fallback_id')
|
||||
->groupBy('bank_account_num', 'trans_dt', 'deposit', 'withdraw')
|
||||
->pluck('id');
|
||||
->get()
|
||||
->map(fn($row) => $row->api_id ?? $row->fallback_id)
|
||||
->filter()
|
||||
->values();
|
||||
|
||||
$transactions = BankTransaction::whereIn('id', $latestIds)
|
||||
->orderByDesc('trans_date')
|
||||
|
||||
Reference in New Issue
Block a user