diff --git a/app/Http/Controllers/Barobill/EaccountController.php b/app/Http/Controllers/Barobill/EaccountController.php index 7075fc72..266d5102 100644 --- a/app/Http/Controllers/Barobill/EaccountController.php +++ b/app/Http/Controllers/Barobill/EaccountController.php @@ -249,28 +249,42 @@ public function latestBalances(Request $request): JsonResponse try { $tenantId = session('selected_tenant_id', self::HEADQUARTERS_TENANT_ID); - // 각 계좌의 가장 최근 거래에서 잔액 조회 - $balances = BankTransaction::where('tenant_id', $tenantId) - ->select('bank_account_num', 'bank_name', 'balance', 'trans_date', 'trans_time') - ->whereIn('id', function ($query) use ($tenantId) { - $query->select(DB::raw('MAX(id)')) - ->from('barobill_bank_transactions') - ->where('tenant_id', $tenantId) - ->groupBy('bank_account_num'); - }) + // 전체 거래를 한번에 조회 (계좌별 → 시간순) + $allTransactions = BankTransaction::where('tenant_id', $tenantId) + ->select('bank_account_num', 'bank_name', 'balance', 'deposit', 'withdraw', 'trans_date', 'trans_time', 'is_manual') + ->orderBy('bank_account_num') + ->orderBy('trans_date', 'asc') + ->orderBy('trans_time', 'asc') + ->orderBy('id', 'asc') ->get(); - $result = []; - foreach ($balances as $b) { - $result[] = [ - 'bankAccountNum' => $b->bank_account_num, - 'bankName' => $b->bank_name, - 'balance' => (float) $b->balance, - 'lastTransDate' => $b->trans_date, - 'lastTransTime' => $b->trans_time, - ]; + // 계좌별로 그룹화하여 최종 잔액 계산 + $accountBalances = []; + foreach ($allTransactions as $tx) { + $accNum = $tx->bank_account_num; + + if (!isset($accountBalances[$accNum])) { + $accountBalances[$accNum] = [ + 'bankAccountNum' => $accNum, + 'bankName' => $tx->bank_name, + 'balance' => 0, + 'lastTransDate' => '', + 'lastTransTime' => '', + ]; + } + + $prev = $accountBalances[$accNum]['balance']; + if (!$tx->is_manual && (float) $tx->balance != 0) { + $accountBalances[$accNum]['balance'] = (float) $tx->balance; + } else { + $accountBalances[$accNum]['balance'] = $prev + (float) $tx->deposit - (float) $tx->withdraw; + } + $accountBalances[$accNum]['lastTransDate'] = $tx->trans_date; + $accountBalances[$accNum]['lastTransTime'] = $tx->trans_time; } + $result = array_values($accountBalances); + return response()->json([ 'success' => true, 'balances' => $result, diff --git a/app/Http/Controllers/Finance/BankAccountController.php b/app/Http/Controllers/Finance/BankAccountController.php index 14d7f305..285f55e0 100644 --- a/app/Http/Controllers/Finance/BankAccountController.php +++ b/app/Http/Controllers/Finance/BankAccountController.php @@ -5,6 +5,8 @@ use App\Http\Controllers\Controller; use App\Services\BankAccountService; use Illuminate\Contracts\View\View; +use Illuminate\Http\Request; +use Illuminate\Http\Response; class BankAccountController extends Controller { @@ -15,8 +17,13 @@ public function __construct( /** * 계좌 목록 페이지 */ - public function index(): View + public function index(Request $request): View|Response { + // HTMX 부분 로드 시 전체 페이지 리로드 (스크립트 실행 보장) + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('finance.accounts.index')); + } + $summary = $this->bankAccountService->getSummary(); return view('finance.accounts.index', [