db = Database::getHrConnection(); } /** * Get person details by National ID (HR_CID) */ public function getPersonByNationalId($nationalId) { $sql = "SELECT a.HR_CID, a.HR_FNAME, a.HR_LNAME, a.HR_POSITION_NUM, b.HR_DEPARTMENT_SUB_SUB_NAME, c.HR_LEVEL_NAME, d.HR_PERSON_TYPE_NAME, e.HR_PREFIX_NAME, f.HR_POSITION_NAME FROM hr_person a LEFT OUTER JOIN hr_department_sub_sub b on a.HR_DEPARTMENT_SUB_SUB_ID = b.HR_DEPARTMENT_SUB_SUB_ID LEFT OUTER JOIN hr_level c ON a.HR_LEVEL_ID = c.HR_LEVEL_ID LEFT OUTER JOIN hr_person_type d ON a.HR_PERSON_TYPE_ID = d.HR_PERSON_TYPE_ID LEFT OUTER JOIN hr_prefix e ON a.HR_PREFIX_ID=e.HR_PREFIX_ID LEFT OUTER JOIN hr_position f ON a.HR_POSITION_ID=f.HR_POSITION_ID WHERE REPLACE(a.HR_CID, '-', '') = :cid LIMIT 1"; try { $stmt = $this->db->prepare($sql); $stmt->execute(['cid' => $nationalId]); return $stmt->fetch(PDO::FETCH_ASSOC); } catch (\PDOException $e) { error_log("Error fetching HR person: " . $e->getMessage()); return false; } } /** * Get person image by National ID (HR_CID) */ public function getPersonImage($nationalId) { $sql = "SELECT HR_IMAGE FROM hr_person WHERE REPLACE(HR_CID, '-', '') = :cid LIMIT 1"; try { $stmt = $this->db->prepare($sql); $stmt->execute(['cid' => $nationalId]); return $stmt->fetch(PDO::FETCH_ASSOC); } catch (\PDOException $e) { error_log("Error fetching HR person image: " . $e->getMessage()); return false; } } /** * Get multiple persons by an array of National IDs */ public function getPersonsByNationalIds(array $cids) { if (empty($cids)) { return []; } // Create placeholders ?, ?, ? $placeholders = implode(',', array_fill(0, count($cids), '?')); $sql = "SELECT a.HR_CID, a.HR_FNAME, a.HR_LNAME, a.HR_POSITION_NUM, b.HR_DEPARTMENT_SUB_SUB_NAME, c.HR_LEVEL_NAME, d.HR_PERSON_TYPE_NAME, e.HR_PREFIX_NAME, f.HR_POSITION_NAME FROM hr_person a LEFT OUTER JOIN hr_department_sub_sub b on a.HR_DEPARTMENT_SUB_SUB_ID = b.HR_DEPARTMENT_SUB_SUB_ID LEFT OUTER JOIN hr_level c ON a.HR_LEVEL_ID = c.HR_LEVEL_ID LEFT OUTER JOIN hr_person_type d ON a.HR_PERSON_TYPE_ID = d.HR_PERSON_TYPE_ID LEFT OUTER JOIN hr_prefix e ON a.HR_PREFIX_ID=e.HR_PREFIX_ID LEFT OUTER JOIN hr_position f ON a.HR_POSITION_ID=f.HR_POSITION_ID WHERE a.HR_CID IN ($placeholders)"; try { $stmt = $this->db->prepare($sql); $stmt->execute($cids); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); $mapped = []; foreach ($results as $row) { $mapped[$row['HR_CID']] = $row; } return $mapped; } catch (\PDOException $e) { error_log("Error fetching multiple HR persons: " . $e->getMessage()); return []; } } /** * Search persons by keyword */ public function searchPersons($keyword) { if (empty($keyword)) { return []; } $sql = "SELECT * FROM hr_person a LEFT OUTER JOIN hr_department_sub_sub b on a.HR_DEPARTMENT_SUB_SUB_ID = b.HR_DEPARTMENT_SUB_SUB_ID LEFT OUTER JOIN hr_level c ON a.HR_LEVEL_ID = c.HR_LEVEL_ID LEFT OUTER JOIN hr_person_type d ON a.HR_PERSON_TYPE_ID = d.HR_PERSON_TYPE_ID LEFT OUTER JOIN hr_prefix e ON a.HR_PREFIX_ID=e.HR_PREFIX_ID LEFT OUTER JOIN hr_position f ON a.HR_POSITION_ID=f.HR_POSITION_ID WHERE (REPLACE(a.HR_CID, '-', '') = ? OR a.HR_FNAME LIKE ? OR a.HR_LNAME LIKE ?) AND a.HR_STATUS_ID='01' LIMIT 15"; try { $kw = '%' . $keyword . '%'; $stmt = $this->db->prepare($sql); $stmt->execute([$keyword, $kw, $kw]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (\Exception $e) { error_log("Error searching HR persons: " . $e->getMessage()); return []; } } } ?>