header('HX-Request')) { return response('', 200)->header('HX-Redirect', route('system.holidays.index')); } return view('system.holidays.index'); } public function list(Request $request): JsonResponse { $tenantId = session('selected_tenant_id', 1); $year = $request->input('year', now()->year); $holidays = Holiday::forTenant($tenantId) ->forYear($year) ->orderBy('start_date') ->get() ->map(function ($h) { return [ 'id' => $h->id, 'startDate' => $h->start_date->format('Y-m-d'), 'endDate' => $h->end_date->format('Y-m-d'), 'name' => $h->name, 'type' => $h->type, 'isRecurring' => $h->is_recurring, 'memo' => $h->memo, 'days' => $h->start_date->diffInDays($h->end_date) + 1, ]; }); return response()->json([ 'success' => true, 'data' => $holidays, ]); } public function store(Request $request): JsonResponse { $request->validate([ 'name' => 'required|string|max:100', 'startDate' => 'required|date', 'endDate' => 'required|date|after_or_equal:startDate', 'type' => 'required|in:public,company,alternative,temporary', 'isRecurring' => 'boolean', 'memo' => 'nullable|string|max:500', ]); $tenantId = session('selected_tenant_id', 1); $holiday = Holiday::create([ 'tenant_id' => $tenantId, 'start_date' => $request->input('startDate'), 'end_date' => $request->input('endDate'), 'name' => $request->input('name'), 'type' => $request->input('type', 'public'), 'is_recurring' => $request->input('isRecurring', false), 'memo' => $request->input('memo'), ]); return response()->json([ 'success' => true, 'message' => '휴일이 등록되었습니다.', 'data' => ['id' => $holiday->id], ]); } public function update(Request $request, int $id): JsonResponse { $tenantId = session('selected_tenant_id', 1); $holiday = Holiday::forTenant($tenantId)->findOrFail($id); $request->validate([ 'name' => 'required|string|max:100', 'startDate' => 'required|date', 'endDate' => 'required|date|after_or_equal:startDate', 'type' => 'required|in:public,company,alternative,temporary', 'isRecurring' => 'boolean', 'memo' => 'nullable|string|max:500', ]); $holiday->update([ 'start_date' => $request->input('startDate'), 'end_date' => $request->input('endDate'), 'name' => $request->input('name'), 'type' => $request->input('type'), 'is_recurring' => $request->input('isRecurring', false), 'memo' => $request->input('memo'), ]); return response()->json([ 'success' => true, 'message' => '휴일이 수정되었습니다.', ]); } public function destroy(int $id): JsonResponse { $tenantId = session('selected_tenant_id', 1); $holiday = Holiday::forTenant($tenantId)->findOrFail($id); $holiday->delete(); return response()->json([ 'success' => true, 'message' => '휴일이 삭제되었습니다.', ]); } public function bulkStore(Request $request): JsonResponse { $request->validate([ 'holidays' => 'required|array|min:1', 'holidays.*.name' => 'required|string|max:100', 'holidays.*.startDate' => 'required|date', 'holidays.*.endDate' => 'required|date|after_or_equal:holidays.*.startDate', 'holidays.*.type' => 'required|in:public,company,alternative,temporary', 'holidays.*.isRecurring' => 'boolean', ]); $tenantId = session('selected_tenant_id', 1); $count = 0; foreach ($request->input('holidays') as $item) { Holiday::create([ 'tenant_id' => $tenantId, 'start_date' => $item['startDate'], 'end_date' => $item['endDate'], 'name' => $item['name'], 'type' => $item['type'] ?? 'public', 'is_recurring' => $item['isRecurring'] ?? false, 'memo' => $item['memo'] ?? null, ]); $count++; } return response()->json([ 'success' => true, 'message' => "{$count}건의 휴일이 등록되었습니다.", ]); } }