tstat_be/app/Models/UserModel.php

135 lines
4.7 KiB
PHP

<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'm_users'; // Table name
protected $primaryKey = 'user_id'; // Primary key
// Fields that can be mass assigned
protected $allowedFields = ['first_name','last_name','password','email','mobile_no','alternate_mobile_no','date_of_birth','address','gender','postal_code','country_code','employee_code','role_id','department_id','group_id','first_approver','first_approver_email','second_approver','second_approver_email','third_approver','third_approver_email','exceptional_approver','exceptional_approver_email','user_type','passport_number','place_of_issue','passport_document','passport_firstname','passport_middlename','passport_lastname','nationality','date_of_issue','date_of_expiry','created_on','created_by','updated_on','updated_by','is_active','org_id', 'temp_password', 'forex_pre_paid_card_number', 'emergency_contact_number', 'd_seat_preference', 'd_meal_preference', 'i_seat_preference', 'i_meal_preference', 'agent_supported_service_ids', 'd_additonalInfo', 'i_additonalInfo', 'forex_expiry_date', 'delegated_to_user_id', 'delegation_start_date', 'delegation_end_date','last_login_at'];
// Specify the return type of the results
protected $returnType = 'array';
// Enable timestamps (if you wish to handle created_at and updated_at automatically)
protected $useTimestamps = false; // Set true if using CI4 timestamp features
// Custom method example (e.g., fetching active users)
public function getUsers($org_id, $active, $role)
{
$data = $this->select('m_users.*, C.country_name , Dep.name as department_value , R.value as role_value, G.name as group_name')
->join('m_country C', 'C.country_code = m_users.country_code ', 'left')
->join('m_department Dep', 'Dep.department_id = m_users.department_id ', 'left')
->join('m_role R', 'R.id = m_users.role_id', 'left')
->join('m_group G', 'G.group_id = m_users.group_id', 'left')
->whereIn('m_users.is_active', $active)
->where('m_users.org_id', $org_id)
->whereIn('m_users.role_id',$role)
->orderBy('user_id', 'asc')
->findAll();
return $data;
}
public function getRole($id)
{
return $this->db->table('m_role')->select('value')->where('id',$id)->get()->getRow()->value;
}
public function getRolesList()
{
$roles = $this->db->table('m_role')->select('id, value')->get()->getResultArray();
$cleaned = [];
foreach ($roles as $role) {
// Remove special characters and spaces, convert to lowercase
$key = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $role['value']));
$cleaned[$key] = $role['id'];
}
return $cleaned;
}
public function getGroupsList()
{
$groups = $this->db->table('m_group')->select('group_id, name')->get()->getResultArray();
$cleaned = [];
foreach ($groups as $group) {
$name = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $group['name']));
$cleaned[$name] = $group['group_id'];
}
return $cleaned;
}
public function updateApprover(string $approverType, array $insertedIds)
{
if (empty($insertedIds)) {
return;
}
// Allowed types
$validTypes = [
'first' => ['column' => 'first_approver', 'email' => 'first_approver_email'],
'second' => ['column' => 'second_approver', 'email' => 'second_approver_email'],
'third' => ['column' => 'third_approver', 'email' => 'third_approver_email'],
'exceptional' => ['column' => 'exceptional_approver', 'email' => 'exceptional_approver_email']
];
if (!isset($validTypes[$approverType])) {
throw new \InvalidArgumentException("Invalid approver type: {$approverType}");
}
$column = $validTypes[$approverType]['column'];
$emailCol = $validTypes[$approverType]['email'];
$placeholders = implode(',', array_fill(0, count($insertedIds), '?'));
$sql = "
UPDATE m_users AS target
JOIN m_users AS ref ON ref.email = target.{$emailCol}
SET target.{$column} = ref.user_id
WHERE target.user_id IN ($placeholders)
";
$this->db->query($sql, $insertedIds);
log_message('info', "users {$approverType} approver updation count: " . $this->db->affectedRows());
}
public function userExists($email){
$result = $this->db->table('m_users mu')->select('mu.*')->where('mu.email',$email)->get()->getResultArray();
return empty($result) ? false : true;
}
}