diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index 278f6c47..c211f020 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -1078,7 +1078,7 @@ public function accountCodesAll(): JsonResponse } /** - * 계정과목 추가 (글로벌 데이터) + * 계정과목 추가 */ public function accountCodeStore(Request $request): JsonResponse { @@ -1089,7 +1089,14 @@ public function accountCodeStore(Request $request): JsonResponse 'category' => 'nullable|string|max:50', ]); - // 중복 체크 (글로벌) + // TenantScope와 동일한 순서로 tenant_id 결정 + $tenantId = $request->attributes->get('tenant_id') + ?? $request->header('X-TENANT-ID') + ?? session('selected_tenant_id') + ?? auth()->user()?->tenant_id + ?? self::HEADQUARTERS_TENANT_ID; + + // 중복 체크 (TenantScope 적용) $exists = AccountCode::where('code', $validated['code'])->exists(); if ($exists) { @@ -1102,7 +1109,7 @@ public function accountCodeStore(Request $request): JsonResponse $maxSort = AccountCode::max('sort_order') ?? 0; $accountCode = AccountCode::create([ - 'tenant_id' => self::HEADQUARTERS_TENANT_ID, // 글로벌 데이터는 기본 테넌트에 저장 + 'tenant_id' => (int) $tenantId, 'code' => $validated['code'], 'name' => $validated['name'], 'category' => $validated['category'] ?? null, diff --git a/app/Http/Controllers/Finance/JournalEntryController.php b/app/Http/Controllers/Finance/JournalEntryController.php index cc16c1e6..15e22f92 100644 --- a/app/Http/Controllers/Finance/JournalEntryController.php +++ b/app/Http/Controllers/Finance/JournalEntryController.php @@ -865,6 +865,13 @@ public function accountCodeStore(Request $request): JsonResponse 'category' => 'nullable|string|max:50', ]); + // TenantScope와 동일한 순서로 tenant_id 결정 + $tenantId = $request->attributes->get('tenant_id') + ?? $request->header('X-TENANT-ID') + ?? session('selected_tenant_id') + ?? auth()->user()?->tenant_id + ?? 1; + if (AccountCode::where('code', $validated['code'])->exists()) { return response()->json([ 'success' => false, @@ -875,7 +882,7 @@ public function accountCodeStore(Request $request): JsonResponse $maxSort = AccountCode::max('sort_order') ?? 0; $accountCode = AccountCode::create([ - 'tenant_id' => session('selected_tenant_id', 1), + 'tenant_id' => (int) $tenantId, 'code' => $validated['code'], 'name' => $validated['name'], 'category' => $validated['category'] ?? null, diff --git a/resources/views/finance/journal-entries.blade.php b/resources/views/finance/journal-entries.blade.php index 98cd845a..1412887f 100644 --- a/resources/views/finance/journal-entries.blade.php +++ b/resources/views/finance/journal-entries.blade.php @@ -299,7 +299,7 @@ className={`px-3 py-1.5 text-xs cursor-pointer ${index === highlightIndex ? 'bg- const loadCodes = async () => { setLoading(true); try { - const res = await fetch('/finance/journal-entries/account-codes/all'); + const res = await fetch('/finance/journal-entries/account-codes/all?_t=' + Date.now()); const data = await res.json(); if (data.success) setCodes(data.data || []); } catch (err) { @@ -317,10 +317,17 @@ className={`px-3 py-1.5 text-xs cursor-pointer ${index === highlightIndex ? 'bg- headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': CSRF_TOKEN }, body: JSON.stringify({ code: newCode.trim(), name: newName.trim(), category: newCategory || null }), }); + if (!res.ok && res.status !== 422) { + notify('서버 오류가 발생했습니다. (HTTP ' + res.status + ')', 'error'); + return; + } const data = await res.json(); if (data.success) { - notify('계정과목이 추가되었습니다.', 'success'); + const addedCode = newCode.trim(); + notify('계정과목이 추가되었습니다: ' + addedCode, 'success'); setNewCode(''); setNewName(''); setNewCategory(''); + setFilter(addedCode); + setCategoryFilter(''); loadCodes(); onUpdate(); } else { notify(data.error || '추가 실패', 'error');