diff --git a/app/Http/Controllers/Finance/JournalEntryController.php b/app/Http/Controllers/Finance/JournalEntryController.php
index 3c55342e..cd03b184 100644
--- a/app/Http/Controllers/Finance/JournalEntryController.php
+++ b/app/Http/Controllers/Finance/JournalEntryController.php
@@ -3,7 +3,7 @@
namespace App\Http\Controllers\Finance;
use App\Http\Controllers\Controller;
-use App\Http\Controllers\Barobill\EaccountController;
+use App\Models\Barobill\BankTransaction;
use App\Models\Finance\JournalEntry;
use App\Models\Finance\JournalEntryLine;
use App\Models\Finance\TradingPartner;
@@ -367,23 +367,48 @@ public function tradingPartners(Request $request): JsonResponse
// ================================================================
/**
- * 은행거래 목록 조회 (EaccountController 재사용 + 분개상태 병합)
+ * 은행거래 목록 조회 (DB 직접 조회 + 분개상태 병합)
*/
public function bankTransactions(Request $request): JsonResponse
{
try {
$tenantId = session('selected_tenant_id', 1);
+ $startDate = $request->input('startDate', date('Ymd'));
+ $endDate = $request->input('endDate', date('Ymd'));
+ $accountNum = $request->input('accountNum', '');
- // EaccountController의 transactions 메서드 호출하여 은행거래 조회
- $eaccountController = app(EaccountController::class);
- $transResponse = $eaccountController->transactions($request);
- $transData = json_decode($transResponse->getContent(), true);
+ // barobill_bank_transactions 테이블에서 직접 조회
+ $query = BankTransaction::where('tenant_id', $tenantId)
+ ->whereBetween('trans_date', [$startDate, $endDate])
+ ->orderByDesc('trans_date')
+ ->orderByDesc('trans_time');
- if (!($transData['success'] ?? false)) {
- return response()->json($transData);
+ if (!empty($accountNum)) {
+ $query->where('bank_account_num', str_replace('-', '', $accountNum));
}
- $logs = $transData['data']['logs'] ?? [];
+ $transactions = $query->get();
+
+ // 로그 데이터 변환
+ $logs = $transactions->map(function ($tx) {
+ return [
+ 'uniqueKey' => $tx->unique_key,
+ 'transDate' => $tx->trans_date,
+ 'transTime' => $tx->trans_time,
+ 'bankAccountNum' => $tx->bank_account_num,
+ 'bankName' => $tx->bank_name,
+ 'deposit' => (int) $tx->deposit,
+ 'withdraw' => (int) $tx->withdraw,
+ 'balance' => (int) $tx->balance,
+ 'summary' => $tx->summary,
+ 'cast' => $tx->cast,
+ 'memo' => $tx->memo,
+ 'transOffice' => $tx->trans_office,
+ 'accountCode' => $tx->account_code,
+ 'accountName' => $tx->account_name,
+ 'isManual' => $tx->is_manual,
+ ];
+ })->toArray();
// 각 거래의 uniqueKey 수집
$uniqueKeys = array_column($logs, 'uniqueKey');
@@ -414,17 +439,35 @@ public function bankTransactions(Request $request): JsonResponse
}
unset($log);
- // 분개 통계
- $journaledCount = count($journaledKeys);
+ // 통계
$totalCount = count($logs);
+ $depositSum = array_sum(array_column($logs, 'deposit'));
+ $withdrawSum = array_sum(array_column($logs, 'withdraw'));
+ $journaledCount = count($journaledKeys);
- $transData['data']['logs'] = $logs;
- $transData['data']['journalStats'] = [
- 'journaledCount' => $journaledCount,
- 'unjournaledCount' => $totalCount - $journaledCount,
- ];
+ // 계좌 목록 (드롭다운용)
+ $accounts = BankTransaction::where('tenant_id', $tenantId)
+ ->select('bank_account_num', 'bank_name')
+ ->distinct()
+ ->get()
+ ->toArray();
- return response()->json($transData);
+ return response()->json([
+ 'success' => true,
+ 'data' => [
+ 'logs' => $logs,
+ 'accounts' => $accounts,
+ 'summary' => [
+ 'totalCount' => $totalCount,
+ 'depositSum' => $depositSum,
+ 'withdrawSum' => $withdrawSum,
+ ],
+ 'journalStats' => [
+ 'journaledCount' => $journaledCount,
+ 'unjournaledCount' => $totalCount - $journaledCount,
+ ],
+ ],
+ ]);
} catch (\Throwable $e) {
Log::error('은행거래 목록 조회 오류: ' . $e->getMessage());
return response()->json([
diff --git a/resources/views/finance/journal-entries.blade.php b/resources/views/finance/journal-entries.blade.php
index 1618355f..f6f3d886 100644
--- a/resources/views/finance/journal-entries.blade.php
+++ b/resources/views/finance/journal-entries.blade.php
@@ -390,14 +390,6 @@ className={`px-3 py-1.5 text-xs cursor-pointer ${index === highlightIndex ? 'bg-
const [showModal, setShowModal] = useState(false);
const [modalTransaction, setModalTransaction] = useState(null);
- // 계좌 목록 조회
- useEffect(() => {
- fetch('/barobill/eaccount/accounts?availOnly=0')
- .then(r => r.json())
- .then(d => { if (d.success) setAccounts(d.accounts || []); })
- .catch(() => {});
- }, []);
-
const fetchTransactions = async () => {
setLoading(true);
try {
@@ -413,6 +405,7 @@ className={`px-3 py-1.5 text-xs cursor-pointer ${index === highlightIndex ? 'bg-
setTransactions(data.data?.logs || []);
setSummary(data.data?.summary || {});
setJournalStats(data.data?.journalStats || {});
+ if (data.data?.accounts) setAccounts(data.data.accounts);
} else {
notify(data.error || data.message || '조회 실패', 'error');
setTransactions([]);
@@ -474,8 +467,8 @@ className="px-3 py-1.5 text-sm border border-stone-200 rounded-lg focus:ring-2 f
className="px-3 py-1.5 text-sm border border-stone-200 rounded-lg focus:ring-2 focus:ring-emerald-500 outline-none">
{accounts.map(a => (
-
))}