102 lines
3.6 KiB
PHP
102 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Finance;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Barobill\BankTransaction as BarobillBankTransaction;
|
|
use App\Models\Barobill\BankTransactionOverride;
|
|
use App\Models\Barobill\CardTransaction as BarobillCardTransaction;
|
|
use App\Models\Finance\BankAccount;
|
|
use App\Services\BankAccountService;
|
|
use App\Services\FundScheduleService;
|
|
use Illuminate\Contracts\View\View;
|
|
|
|
class FinanceDashboardController extends Controller
|
|
{
|
|
public function __construct(
|
|
private BankAccountService $bankAccountService,
|
|
private FundScheduleService $fundScheduleService
|
|
) {}
|
|
|
|
/**
|
|
* 재무 대시보드
|
|
*/
|
|
public function index(): View
|
|
{
|
|
// 계좌 요약
|
|
$accountSummary = $this->bankAccountService->getSummary();
|
|
|
|
// 자금 일정 요약
|
|
$scheduleSummary = $this->fundScheduleService->getSummary();
|
|
|
|
// 이번 달 자금 일정 요약
|
|
$monthlySummary = $this->fundScheduleService->getMonthlySummary(
|
|
now()->year,
|
|
now()->month
|
|
);
|
|
|
|
// 향후 7일 자금 일정
|
|
$upcomingSchedules = $this->fundScheduleService->getUpcomingSchedules(7);
|
|
|
|
// 최근 거래내역 (바로빌 - 최근 7일, 최대 10건)
|
|
$tenantId = session('selected_tenant_id', 1);
|
|
$weekAgo = now()->subDays(7)->format('Ymd');
|
|
$today = now()->format('Ymd');
|
|
|
|
$recentTransactions = BarobillBankTransaction::where('tenant_id', $tenantId)
|
|
->whereBetween('trans_date', [$weekAgo, $today])
|
|
->orderBy('trans_date', 'desc')
|
|
->orderBy('trans_time', 'desc')
|
|
->limit(10)
|
|
->get();
|
|
|
|
// 오버라이드 데이터 병합 (수정된 적요/내용)
|
|
if ($recentTransactions->isNotEmpty()) {
|
|
$uniqueKeys = $recentTransactions->map(fn ($t) => $t->unique_key)->toArray();
|
|
$overrides = BankTransactionOverride::getByUniqueKeys($tenantId, $uniqueKeys);
|
|
|
|
$recentTransactions = $recentTransactions->map(function ($transaction) use ($overrides) {
|
|
$override = $overrides->get($transaction->unique_key);
|
|
if ($override) {
|
|
// 수정된 적요가 있으면 적용
|
|
if ($override->modified_summary) {
|
|
$transaction->summary = $override->modified_summary;
|
|
}
|
|
// 수정된 내용이 있으면 적용
|
|
if ($override->modified_cast) {
|
|
$transaction->cast = $override->modified_cast;
|
|
}
|
|
$transaction->is_overridden = true;
|
|
} else {
|
|
$transaction->is_overridden = false;
|
|
}
|
|
|
|
return $transaction;
|
|
});
|
|
}
|
|
|
|
// 최근 카드 사용내역 (바로빌 - 최근 7일, 최대 10건)
|
|
$recentCardTransactions = BarobillCardTransaction::where('tenant_id', $tenantId)
|
|
->whereBetween('use_date', [$weekAgo, $today])
|
|
->orderBy('use_date', 'desc')
|
|
->orderBy('use_time', 'desc')
|
|
->limit(10)
|
|
->get();
|
|
|
|
// 계좌별 잔액
|
|
$accountBalances = BankAccount::active()
|
|
->ordered()
|
|
->get(['id', 'bank_name', 'account_number', 'account_name', 'balance', 'account_type']);
|
|
|
|
return view('finance.dashboard', compact(
|
|
'accountSummary',
|
|
'scheduleSummary',
|
|
'monthlySummary',
|
|
'upcomingSchedules',
|
|
'recentTransactions',
|
|
'recentCardTransactions',
|
|
'accountBalances'
|
|
));
|
|
}
|
|
}
|