Files
2026-09-16 23:20:08 +07:00

131 lines
4.8 KiB
PHP

<?php
namespace app\Models;
use Database;
use PDO;
class HrPersonModel {
protected $db;
public function __construct() {
// Use the external HR database connection
$this->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 [];
}
}
}
?>