feat: [receivables] 미분개 홈택스 매출세금계산서도 외상매출금 원장에 표시

This commit is contained in:
김보곤
2026-02-23 15:43:21 +09:00
parent 7465a2b674
commit 8cfab74e1f

View File

@@ -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')