where('doctor_id', $doctorId) ->where('appointment_date', $date) ->where('appointment_time', $time) ->where('status', 'assigned') ->countAllResults() > 0; } protected function setDefaultStatus(array $eventData): array { if (! isset($eventData['data']['status']) || trim((string) $eventData['data']['status']) === '') { $eventData['data']['status'] = 'pending'; } else { $eventData['data']['status'] = self::normalizeStatus($eventData['data']['status']); } return $eventData; } public function countForDate(string $date): int { return $this->where('appointment_date', $date)->countAllResults(); } public function getRecentActivity(int $limit = 6): array { return $this->select(" appointments.status, appointments.appointment_date, appointments.appointment_time, TRIM(CONCAT(COALESCE(u1.first_name,''),' ',COALESCE(u1.last_name,''))) AS patient_name, TRIM(CONCAT(COALESCE(u2.first_name,''),' ',COALESCE(u2.last_name,''))) AS doctor_name ") ->join('patients p', 'p.id = appointments.patient_id') ->join('users u1', 'u1.id = p.user_id') ->join('doctors d', 'd.id = appointments.doctor_id', 'left') ->join('users u2', 'u2.id = d.user_id', 'left') ->orderBy('appointments.id', 'DESC') ->findAll($limit); } // public function getAdminAppointments(): array // { // return $this->asObject() // ->select("appointments.*, TRIM(CONCAT(COALESCE(u1.first_name, ''), ' ', COALESCE(u1.last_name, ''))) AS patient_name, TRIM(CONCAT(COALESCE(u2.first_name, ''), ' ', COALESCE(u2.last_name, ''))) AS doctor_name") // ->join('patients p', 'p.id = appointments.patient_id') // ->join('users u1', 'u1.id = p.user_id') // ->join('doctors d', 'd.id = appointments.doctor_id') // ->join('users u2', 'u2.id = d.user_id') // ->findAll(); // } public function getAdminAppointments(): array { return $this->asObject() ->select(" appointments.*, CONCAT('APT', LPAD(appointments.id, 7, '0')) AS formatted_appointment_id, TRIM(CONCAT(COALESCE(u1.first_name,''),' ',COALESCE(u1.last_name,''))) AS patient_name, TRIM(CONCAT(COALESCE(u2.first_name,''),' ',COALESCE(u2.last_name,''))) AS doctor_name ") ->join('patients p', 'p.id = appointments.patient_id') ->join('users u1', 'u1.id = p.user_id') ->join('doctors d', 'd.id = appointments.doctor_id', 'left') ->join('users u2', 'u2.id = d.user_id', 'left') ->orderBy('appointments.id','DESC') ->findAll(); } public function deleteByDoctorId(int $doctorId): void { $this->where('doctor_id', $doctorId)->delete(); } public function deleteByPatientId(int $patientId): void { $this->where('patient_id', $patientId)->delete(); } protected $beforeUpdate = []; protected $afterUpdate = []; protected $beforeFind = []; protected $afterFind = []; protected $beforeDelete = []; protected $afterDelete = []; }