diff --git a/app/Http/Controllers/Finance/ReceivableController.php b/app/Http/Controllers/Finance/ReceivableController.php index 4d9da6fa..99b5c363 100644 --- a/app/Http/Controllers/Finance/ReceivableController.php +++ b/app/Http/Controllers/Finance/ReceivableController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Finance; use App\Http\Controllers\Controller; +use App\Models\Barobill\HometaxInvoice; use App\Models\Barobill\HometaxInvoiceJournal; use App\Models\Finance\JournalEntryLine; use App\Models\Finance\Receivable; @@ -195,8 +196,9 @@ public function ledger(Request $request): JsonResponse $items = collect(); - // 1) 홈택스 분개에서 외상매출금(108) 조회 + // 1) 홈택스 매출세금계산서에서 외상매출금 조회 if ($source !== 'journal') { + // 1-a) 분개 완료된 건: hometax_invoice_journals에서 계정코드 108 $hometaxQuery = HometaxInvoiceJournal::where('tenant_id', $tenantId) ->where('account_code', '108') ->where('invoice_type', 'sales'); @@ -211,6 +213,12 @@ public function ledger(Request $request): JsonResponse $hometaxQuery->where('trading_partner_name', 'like', "%{$partner}%"); } + $journaledInvoiceIds = HometaxInvoiceJournal::where('tenant_id', $tenantId) + ->where('invoice_type', 'sales') + ->distinct() + ->pluck('hometax_invoice_id') + ->toArray(); + $hometaxItems = $hometaxQuery->get()->map(fn ($j) => [ 'date' => $j->write_date?->format('Y-m-d'), 'source' => 'hometax', @@ -223,6 +231,34 @@ public function ledger(Request $request): JsonResponse ]); $items = $items->merge($hometaxItems); + + // 1-b) 미분개 매출세금계산서: total_amount를 차변(발생)으로 표시 + $unjournaledQuery = HometaxInvoice::where('tenant_id', $tenantId) + ->where('invoice_type', 'sales') + ->whereNotIn('id', $journaledInvoiceIds); + + if ($startDate) { + $unjournaledQuery->where('write_date', '>=', $startDate); + } + if ($endDate) { + $unjournaledQuery->where('write_date', '<=', $endDate); + } + if ($partner) { + $unjournaledQuery->where('invoicee_corp_name', 'like', "%{$partner}%"); + } + + $unjournaledItems = $unjournaledQuery->get()->map(fn ($inv) => [ + 'date' => $inv->write_date?->format('Y-m-d'), + 'source' => 'hometax', + 'sourceLabel' => '홈택스 매출 (미분개)', + 'refNo' => $inv->nts_confirm_num, + 'tradingPartnerName' => $inv->invoicee_corp_name, + 'description' => '매출세금계산서 (미분개)', + 'debitAmount' => (int) $inv->total_amount, + 'creditAmount' => 0, + ]); + + $items = $items->merge($unjournaledItems); } // 2) 일반전표에서 외상매출금(108) 조회 @@ -294,7 +330,8 @@ public function summary(Request $request): JsonResponse $items = collect(); - // 1) 홈택스 분개에서 외상매출금(108) + // 1) 홈택스 매출세금계산서에서 외상매출금 + // 1-a) 분개 완료된 건 $hometaxQuery = HometaxInvoiceJournal::where('tenant_id', $tenantId) ->where('account_code', '108') ->where('invoice_type', 'sales'); @@ -306,6 +343,12 @@ public function summary(Request $request): JsonResponse $hometaxQuery->where('write_date', '<=', $endDate); } + $journaledInvoiceIds = HometaxInvoiceJournal::where('tenant_id', $tenantId) + ->where('invoice_type', 'sales') + ->distinct() + ->pluck('hometax_invoice_id') + ->toArray(); + $hometaxItems = $hometaxQuery->get()->map(fn ($j) => [ 'tradingPartnerName' => $j->trading_partner_name, 'debitAmount' => $j->dc_type === 'debit' ? (int) $j->debit_amount : 0, @@ -314,6 +357,26 @@ public function summary(Request $request): JsonResponse ]); $items = $items->merge($hometaxItems); + // 1-b) 미분개 매출세금계산서 + $unjournaledQuery = HometaxInvoice::where('tenant_id', $tenantId) + ->where('invoice_type', 'sales') + ->whereNotIn('id', $journaledInvoiceIds); + + if ($startDate) { + $unjournaledQuery->where('write_date', '>=', $startDate); + } + if ($endDate) { + $unjournaledQuery->where('write_date', '<=', $endDate); + } + + $unjournaledItems = $unjournaledQuery->get()->map(fn ($inv) => [ + 'tradingPartnerName' => $inv->invoicee_corp_name, + 'debitAmount' => (int) $inv->total_amount, + 'creditAmount' => 0, + 'date' => $inv->write_date?->format('Y-m-d'), + ]); + $items = $items->merge($unjournaledItems); + // 2) 일반전표에서 외상매출금(108) $journalQuery = JournalEntryLine::where('journal_entry_lines.tenant_id', $tenantId) ->where('journal_entry_lines.account_code', '108')