feat: [finance] 일일업무일지 기간 보기 기능 추가

- 시작일~종료일 설정하여 기간 내 업무일지 한번에 조회
- 데이터 없는 날짜는 자동 필터링 (작성된 일지만 표시)
- 카드형 읽기 뷰 (날짜/항목/메모/회고/달성률)
- 편집 버튼으로 단건 모드 전환 가능
This commit is contained in:
김보곤
2026-03-16 16:33:07 +09:00
parent 39b2be29ca
commit a30b5b27a1
3 changed files with 226 additions and 15 deletions

View File

@@ -72,6 +72,55 @@ public function show(Request $request): JsonResponse
]);
}
/**
* 기간별 업무일지 조회 (데이터 있는 날짜만)
*/
public function range(Request $request): JsonResponse
{
$request->validate([
'start_date' => 'required|date',
'end_date' => 'required|date|after_or_equal:start_date',
]);
$startDate = $request->input('start_date');
$endDate = $request->input('end_date');
$logs = DailyWorkLog::whereBetween('log_date', [$startDate, $endDate])
->orderBy('log_date')
->get();
$result = $logs->map(function (DailyWorkLog $log) {
$items = $log->items()->get()->map(fn ($item) => [
'id' => $item->id,
'sort_order' => $item->sort_order,
'category' => $item->category ?? '',
'task' => $item->task,
'priority' => $item->priority ?? '',
'is_completed' => $item->is_completed,
'note' => $item->note ?? '',
'highlight' => $item->getOption('highlight', ''),
]);
$total = $items->count();
$completed = $items->where('is_completed', true)->count();
return [
'id' => $log->id,
'log_date' => $log->log_date->format('Y-m-d'),
'memo' => $log->memo ?? '',
'reflection' => $log->reflection ?? '',
'items' => $items->values(),
'achievement_rate' => $total > 0 ? round(($completed / $total) * 100, 2) : 0,
];
});
return response()->json([
'success' => true,
'data' => $result->values(),
'count' => $result->count(),
]);
}
/**
* 업무일지 저장 (일지 + 항목 일괄)
*/