feat: [receivables] 미분개 홈택스 매출세금계산서도 외상매출금 원장에 표시
This commit is contained in:
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user