update HR dan Payroll

This commit is contained in:
Wian Drs
2026-09-14 11:14:25 +07:00
parent ec94783db4
commit 63993ee76e
50 changed files with 2432 additions and 1473 deletions
+51 -14
View File
@@ -7,10 +7,6 @@ class Employees extends MY_Controller {
{
parent::__construct();
// Data karyawan memuat rekening, BPJS, pajak, dan gaji sehingga
// sementara dibatasi ke Admin sampai role HR khusus dikonfigurasi.
$this->requireAdmin();
$this->load->database();
$this->load->helper(['url', 'file']);
@@ -27,7 +23,13 @@ class Employees extends MY_Controller {
public function index()
{
$data = [
"active_menu" => "employees"
"active_menu" => "employees",
"can_manage_all_salary" => $this->canManageAllSalary(),
"employee_permissions" => array(
'create'=>$this->canEmployee('can_create'),
'update'=>$this->canEmployee('can_update'),
'delete'=>$this->canEmployee('can_delete')
)
];
$data['departments'] = $this->db
@@ -59,7 +61,7 @@ class Employees extends MY_Controller {
{
try {
$data = $this->db
$query = $this->db
->select("
e.*,
@@ -87,9 +89,10 @@ class Employees extends MY_Controller {
'left'
)
->order_by('e.department_id','ASC')
->get()
->result();
->order_by('e.department_id','ASC');
if ($this->db->field_exists('company_id','k_employees')) $query->where('e.company_id',(int)$this->session->userdata('company_id'));
$data = $query->get()->result();
foreach ($data as $employee) $this->maskRestrictedSalary($employee);
return $this->json([
'status' => true,
@@ -141,7 +144,9 @@ class Employees extends MY_Controller {
'left'
)
->where('e.id',$id)
->where('e.id',$id);
if ($this->db->field_exists('company_id','k_employees')) $this->db->where('e.company_id',(int)$this->session->userdata('company_id'));
$data = $this->db
->get()
->row();
@@ -153,6 +158,7 @@ class Employees extends MY_Controller {
]);
}
$this->maskRestrictedSalary($data);
return $this->json([
'status' => true,
'data' => $data
@@ -198,6 +204,7 @@ class Employees extends MY_Controller {
$data['employee_code'] = $employee_code;
$data['photo'] = $photo;
if ($this->db->field_exists('company_id','k_employees')) $data['company_id']=(int)$this->session->userdata('company_id');
$this->db->insert('k_employees',$data);
$employee_id = $this->db->insert_id();
@@ -242,6 +249,10 @@ class Employees extends MY_Controller {
]);
}
if (!empty($employee->salary_restricted) && !$this->canManageAllSalary()) {
return $this->json(['status'=>false,'message'=>'Gaji karyawan ini bersifat terbatas. Anda memerlukan permission Manage All Gaji untuk mengubah datanya.']);
}
$data = $this->prepareData();
if (!empty($_FILES['photo_file']['name'])) {
@@ -303,6 +314,10 @@ class Employees extends MY_Controller {
]);
}
if (!empty($employee->salary_restricted) && !$this->canManageAllSalary()) {
return $this->json(['status'=>false,'message'=>'Karyawan dengan gaji terbatas hanya dapat dihapus oleh pengguna dengan permission Manage All Gaji.']);
}
if (
!empty($employee->photo)
&&
@@ -392,7 +407,7 @@ class Employees extends MY_Controller {
// =========================================================
private function prepareData()
{
return [
$data = [
'nik' => trim($this->input->post('nik')),
@@ -438,8 +453,6 @@ class Employees extends MY_Controller {
'branch_id' => $this->input->post('branch_id'),
'basic_salary' => $this->input->post('basic_salary') ?: 0,
'bank_name' => trim(
$this->input->post('bank_name')
),
@@ -464,8 +477,32 @@ class Employees extends MY_Controller {
$this->input->post('fingerprint_user_id')
),
'is_active' => $this->input->post('is_active') ?: 1
'is_active' => $this->input->post('is_active') === '0' ? 0 : 1
];
if ($this->db->field_exists('salary_restricted','k_employees') && $this->canManageAllSalary()) {
$data['salary_restricted'] = $this->input->post('salary_restricted') ? 1 : 0;
}
return $data;
}
private function canManageAllSalary()
{
return is_master_admin_user() || check_permission('payroll','can_manage_all_salary');
}
private function canEmployee($action)
{
return is_master_admin_user() || check_permission('hr_employees',$action) || check_permission('employees',$action);
}
private function maskRestrictedSalary($employee)
{
if (!$employee || empty($employee->salary_restricted) || $this->canManageAllSalary()) return;
$employee->basic_salary = null;
$employee->bank_name = null;
$employee->bank_account_number = null;
$employee->bank_account_name = null;
$employee->salary_hidden = true;
}
// =========================================================