with(['employee.user.userProfile']) ->latest() ->get(); } public function create(array $data): LeaveRequest { return DB::transaction(function () use ($data) { $employee = auth()->user()->employee; if (! $employee) { throw new \Exception('Anda tidak terdaftar sebagai karyawan.'); } $startDate = new Carbon($data['start_date']); $endDate = new Carbon($data['end_date']); $totalDays = $startDate->diffInDays($endDate) + 1; return LeaveRequest::create([ 'employee_id' => $employee->id, 'start_date' => $data['start_date'], 'end_date' => $data['end_date'], 'total_days' => $totalDays, 'status' => LeaveRequestStatus::PENDING, ]); }); } public function update(LeaveRequest $leaveRequest, array $data): LeaveRequest { return DB::transaction(function () use ($leaveRequest, $data) { $startDate = new Carbon($data['start_date']); $endDate = new Carbon($data['end_date']); $totalDays = $startDate->diffInDays($endDate) + 1; $leaveRequest->update([ 'start_date' => $data['start_date'], 'end_date' => $data['end_date'], 'total_days' => $totalDays, ]); return $leaveRequest; }); } public function delete(LeaveRequest $leaveRequest): bool { return $leaveRequest->delete(); } public function approve(LeaveRequest $leaveRequest): LeaveRequest { $leaveRequest->update([ 'status' => LeaveRequestStatus::APPROVED, 'verified_by_id' => auth()->id(), 'verified_at' => now(), ]); return $leaveRequest; } public function reject(LeaveRequest $leaveRequest): LeaveRequest { $leaveRequest->update([ 'status' => LeaveRequestStatus::REJECTED, 'verified_by_id' => auth()->id(), 'verified_at' => now(), ]); return $leaveRequest; } }