131 lines
4.8 KiB
PHP
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 [];
|
|
}
|
|
}
|
|
}
|
|
?>
|