fix:save()에서 수동 거래를 dbId로 직접 업데이트

수동 거래는 balance가 재계산되어 composite key 매칭 불가.
dbId를 사용하여 직접 레코드를 찾고 비-키 필드만 업데이트.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-10 16:57:48 +09:00
parent 2c3bccb9a0
commit d01253aa27

View File

@@ -906,10 +906,22 @@ public function save(Request $request): JsonResponse
DB::beginTransaction();
foreach ($transactions as $trans) {
// 수동 입력 거래는 스킵 (updateManual에서 별도 처리)
// 수동 거래의 balance는 화면에서 재계산된 값이므로 save()에서 처리하면
// 다른 레코드와 unique key 충돌 발생
if (!empty($trans['isManual'])) {
// 수동 입력 거래: dbId로 직접 찾아서 비-키 필드만 업데이트
// balance는 화면에서 재계산된 값이므로 composite key 매칭 불가
if (!empty($trans['isManual']) && !empty($trans['dbId'])) {
DB::table('barobill_bank_transactions')
->where('id', $trans['dbId'])
->where('tenant_id', $tenantId)
->update([
'summary' => $trans['summary'] ?? '',
'cast' => $trans['cast'] ?? '',
'memo' => $trans['memo'] ?? '',
'trans_office' => $trans['transOffice'] ?? '',
'account_code' => $trans['accountCode'] ?? null,
'account_name' => $trans['accountName'] ?? null,
'updated_at' => now(),
]);
$updated++;
continue;
}
@@ -946,7 +958,6 @@ public function save(Request $request): JsonResponse
$savedUniqueKeys[] = $uniqueKey;
// 순수 Query Builder로 Upsert (Eloquent 모델 우회)
// Eloquent의 decimal cast가 dirty 감지하여 unique 제약조건 위반을 일으키므로
$existingId = DB::table('barobill_bank_transactions')
->where('tenant_id', $tenantId)
->where('bank_account_num', $data['bank_account_num'])