feat: [캘린더] 어음 만기일 일정 연동 추가

- Bill 모델 기반 만기일 일정 조회 (getBillSchedules)
- type 필터에 'bill' 추가, null(전체)일 때도 포함
- 완료/부도 상태 제외, 만기일 기준 정렬
- 표시 형식: [만기] 거래처명 금액원

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-03-10 10:59:19 +09:00
parent d8f2361c88
commit 6f0ad1cf2d

View File

@@ -4,6 +4,7 @@
use App\Models\Construction\Contract;
use App\Models\Production\WorkOrder;
use App\Models\Tenants\Bill;
use App\Models\Tenants\Leave;
use App\Models\Tenants\Schedule;
use Illuminate\Support\Collection;
@@ -16,6 +17,7 @@
* - 계약(Contract): 시공 일정
* - 휴가(Leave): 직원 휴가 일정
* - 일정(Schedule): 본사 공통 일정 + 테넌트 일정 (세금 신고, 공휴일 등)
* - 어음(Bill): 어음 만기일 일정
*/
class CalendarService extends Service
{
@@ -24,7 +26,7 @@ class CalendarService extends Service
*
* @param string $startDate 조회 시작일 (Y-m-d)
* @param string $endDate 조회 종료일 (Y-m-d)
* @param string|null $type 일정 타입 필터 (schedule|order|construction|other|null=전체)
* @param string|null $type 일정 타입 필터 (schedule|order|construction|other|bill|null=전체)
* @param string|null $departmentFilter 부서 필터 (all|department|personal)
*/
public function getSchedules(
@@ -64,6 +66,13 @@ public function getSchedules(
);
}
// 어음 만기일
if ($type === null || $type === 'bill') {
$schedules = $schedules->merge(
$this->getBillSchedules($tenantId, $startDate, $endDate)
);
}
// startDate 기준 정렬
$sortedSchedules = $schedules
->sortBy('startDate')
@@ -331,4 +340,46 @@ private function getGeneralSchedules(
];
});
}
/**
* 어음 만기일 일정 조회
*/
private function getBillSchedules(
int $tenantId,
string $startDate,
string $endDate
): Collection {
$excludedStatuses = [
'paymentComplete',
'dishonored',
];
$bills = Bill::query()
->where('tenant_id', $tenantId)
->whereNotNull('maturity_date')
->where('maturity_date', '>=', $startDate)
->where('maturity_date', '<=', $endDate)
->whereNotIn('status', $excludedStatuses)
->orderBy('maturity_date')
->limit(100)
->get();
return $bills->map(function ($bill) {
$clientName = $bill->display_client_name ?? $bill->client_name ?? '';
return [
'id' => 'bill_'.$bill->id,
'title' => '[만기] '.$clientName.' '.number_format($bill->amount).'원',
'startDate' => $bill->maturity_date->format('Y-m-d'),
'endDate' => $bill->maturity_date->format('Y-m-d'),
'startTime' => null,
'endTime' => null,
'isAllDay' => true,
'type' => 'bill',
'department' => null,
'personName' => null,
'color' => null,
];
});
}
}