diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index a5eab35e..7b6f24be 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -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'])