notificationModel, 'hasSent')) { return (bool) $this->notificationModel->hasSent($studentId, $code, $ymd, $channel, $to); } $query = $this->notificationModel->query() ->where('student_id', $studentId) ->where('code', $code) ->where('incident_date', $ymd) ->where('channel', $channel); if (!empty($to)) { $query->where('to_address', $to); } return $query->exists(); } catch (Throwable $e) { Log::debug('notificationAlreadySent(): ' . $e->getMessage()); return false; } } public function logNotification( int $studentId, string $code, string $ymd, string $channel, ?string $to, string $subject, string $status, string $response = '', ?string $semester = null, ?string $schoolYear = null ): void { try { $existingQuery = $this->notificationModel->query() ->where('student_id', $studentId) ->where('code', $code) ->whereDate('incident_date', $ymd) ->where('channel', $channel); if (!empty($to)) { $existingQuery->where('to_address', $to); } $existing = $existingQuery->orderByDesc('id')->first(); if ($existing && !empty($existing->id)) { $existing->update([ 'subject' => $subject, 'status' => $status, 'response' => $response, 'semester' => $semester, 'school_year' => $schoolYear, 'updated_at' => now(), ]); } else { $this->notificationModel->query()->create([ 'student_id' => $studentId, 'code' => $code, 'incident_date' => $ymd, 'channel' => $channel, 'to_address' => $to, 'subject' => $subject, 'status' => $status, 'response' => $response, 'semester' => $semester, 'school_year' => $schoolYear, ]); } } catch (Throwable $e) { Log::debug('logNotification(): ' . $e->getMessage()); } } }