donation/app/Controllers/Users.php
2024-07-11 06:19:36 +00:00

324 lines
14 KiB
PHP

<?php
namespace App\Controllers;
use App\Models\UsersModel;
use App\Models\BusinessModel;
use CodeIgniter\Database\Exceptions\DatabaseException;
class Users extends BaseController
{
## For User Listing
public function index()
{
helper('session');
$session_role = get_user_role();
$session_bid = get_business_id();
$default_financial_year_condition = [
'users.created_at >= CONCAT(YEAR(NOW()) - IF(MONTH(NOW()) >= 1 AND MONTH(NOW()) <= 3, 1, 0), "-01-01")',
'users.created_at < CONCAT(YEAR(NOW()) + IF(MONTH(NOW()) >= 1 AND MONTH(NOW()) <= 3, 1, 0), "-01-01")'
];
if (!empty($session_role) && $session_role === "sadmin") {
$this->logger->info("Users: Listing In Super-admin role .");
$where = ['users.isactive !=' => NULL];
}else if (!empty($session_role) && $session_role === "admin") {
$this->logger->info("Users: Listing In admin role . BID = ".$session_bid);
$where = ['users.business_id' => (int)$session_bid];
} else {
$this->logger->info("Users: Listing In ".$session_role." role . BID = ".$session_bid);
$where = ['users.business_id' => (int)$session_bid, 'users.isactive' => 1];
}
// $where = array_merge($where, $default_financial_year_condition);
$model = new UsersModel();
$model->setTable('users');
// $user_details = $model->where($where)->orderBy('user_id', 'DESC')->findAll();
$user_details = $model->select('users.*, business.title as org_name,business_branches.branch_name')
->join('business', 'business.business_id = users.business_id')
->join('business_branches', 'business_branches.id = users.branch_id','left')
->where($where)->orderBy('user_id', 'DESC')->findAll();
$this->logger->info("Users: Listing Count .".count($user_details));
$data['page_name'] = 'User Details';
$data['loged_user'] = $session_role;
$data['details'] = $user_details;
$this->render_page('user_list', $data);
}
## To Load User Add/Update page
public function user_page($id,$flag)
{
helper('session');
$session_role = get_user_role();
$session_bid = get_business_id();
$session_uid = get_logged_user_id();
$data['organzation_details'] = $this->organzation_details();
$data['dummy_flag'] = $flag; // for redirect purpose.
if ($id === '0') {
$this->logger->info("Users: In Add page");
$data['page_name'] = 'Add User';
$render_page_name = 'user_form';
$data['details'] = [];
$data['branches'] = $this->getOrganizationBranches($session_bid);
} else {
$this->logger->info("Users: In Edit page");
$model = new UsersModel();
$model->setTable('users');
if (!empty($session_role)) {
switch ($session_role) {
case "sadmin":
$where = ['users.user_id' => $id, 'users.isactive !=' => NULL];
$edit_user_details = $model->where($where)->first();
$render_page_name = 'user_form';
$data['page_name'] = 'Edit User';
// Fetch organization branches for the selected organization
$data['branches'] = $this->getOrganizationBranches($edit_user_details['business_id']);
break;
case "admin":
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
$edit_user_details = $model->where($where)->first();
$render_page_name = 'user_form';
$data['page_name'] = 'Edit User';
$data['branches'] = $this->getOrganizationBranches($edit_user_details['business_id']);
break;
case "volunteer":
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
$edit_user_details = $model->where($where)->first();
if ($session_uid === $id && $session_role === "volunteer") {
$data['page_name'] = 'Edit User';
$data['branches'] = $this->getOrganizationBranches($edit_user_details['business_id']);
$render_page_name = 'user_form';
} else {
$data['page_name'] = 'Page Not Found';
$render_page_name = 'pages_404';
}
break;
case "accounts":
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
$edit_user_details = $model->where($where)->first();
$render_page_name = 'user_form';
$data['page_name'] = 'Edit User';
$data['branches'] = $this->getOrganizationBranches($edit_user_details['business_id']);
break;
case "auditor":
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
$edit_user_details = $model->where($where)->first();
$render_page_name = 'user_form';
$data['page_name'] = 'Edit User';
$data['branches'] = $this->getOrganizationBranches($edit_user_details['business_id']);
break;
default:
$data['page_name'] = 'Page Not Found';
$render_page_name = 'pages_404';
}
}
$data['details'] = $edit_user_details;
}
$data['session_uid']=$session_uid;
$data['session_bid'] = $session_bid;
$this->render_page($render_page_name, $data);
}
## Add the getOrganizationBranches method
public function getOrganizationBranches($businessId)
{
$db = db_connect();
$builder = $db->table('business_branches');
$branches = $builder->where(['business_id'=>$businessId,'isactive'=>1])->get()->getResultArray();
return $branches;
}
## For SuperAdmin Role business Dropdown displayed on Userpage.otherwise Hidden fields
public function organzation_details()
{
$model = new BusinessModel();
$model->setTable('business');
$organzation_details = $model->orderBy('business_id', 'DESC')->findAll();
// Fetch branches for all organizations
$branchModel = new BusinessModel();
$branchModel->setTable('business_branches');
$branches = $branchModel->findAll();
// Add branches to each business
foreach ($organzation_details as &$business) {
$business['branches'] = array_filter($branches, function ($branch) use ($business) {
return $branch['business_id'] == $business['business_id'];
});
}
return $organzation_details;
}
## For inserting/updating details of user
public function insert_users()
{
$this->logger->info("Users: Inserting/Updating Details");
try {
## Declarions
helper('session');
$UsersModel = new UsersModel();
$session_uid = get_logged_user_id();
$session_bid = get_business_id();
$user_id = $this->request->getPost('user_id');
$business_id = $this->request->getPost('business_id')?$this->request->getPost('business_id'):$session_bid;
$data = [
'city' => $this->request->getPost('city'),
'state' => $this->request->getPost('state'),
'email' => $this->request->getPost('email'),
'postal_code' => $this->request->getPost('postal_code'),
'role' => $this->request->getPost('role'),
'first_name' => $this->request->getPost('first_name'),
'mobile_no' => $this->request->getPost('mobile_no'),
'address' => $this->request->getPost('address'),
'business_id' => $business_id,
'branch_id' => $this->request->getPost('branch_id') ?? $this->request->getPost('branch'),
];
if (empty($user_id)) {
// It's an insert operation
$password = $this->request->getVar('password');
$hash_password = password_hash($password, PASSWORD_DEFAULT);
$data['isactive'] = 1;
$data['password'] = $hash_password;
$data['created_by'] = $session_uid;
//print_r($data);die;
// ($UsersModel->insert($data)) ? session()->setFlashdata('success', 'User has been added successfully.')
// : session()->setFlashdata('error', 'User could not be added. Please try again.');
if ($UsersModel->insert($data)) {
session()->setFlashdata('success', 'User has been added successfully.');
$this->logger->info("Users: has been added successfully. Inserted ID = ".$UsersModel->insertID());
} else {
session()->setFlashdata('error', 'User could not be added. Please try again.');
$this->logger->error("Users: Err could not be added. Please try again.");
}
return redirect()->route('user_list');
} else {
// It's an update operation
$isactive = $this->request->getPost('isactive');
$data['updated_by'] = $session_uid;
$data['isactive'] = ($isactive == 'on') ? 1 : 0;
if($session_uid == $user_id && $data['isactive'] == 0){
throw new \Exception("Cant able to Update Because logged-In persons can't remove. Please Contact your Admin!....");
}
if ($UsersModel->update($user_id, $data)) {
session()->setFlashdata('success', 'User has been updated successfully.');
}
}
}catch (\Exception $e) {
$this->logger->error("Users: Err Occur =" . $e->getMessage());
session()->setFlashdata('error', 'Message: ' . $e->getMessage());
}
// Redirect back to the user_page function or any other appropriate page
if($this->request->getPost('dummy_flag') == 1){
return redirect()->to(base_url("user_page/{$user_id}/1"));
}else{
return redirect()->route('user_list');
}
}
## For delete the user details (Which means inactive the details)
public function delete_user($id)
{
helper('session');
$session_uid = get_logged_user_id();
try {
// if($id == $session_uid){
// throw new \Exception("Your Not Logged-In, Can't able delete");
// }
$model = new UsersModel();
$where = ['users.user_id' => $id, 'users.isactive =' => 1];
$existingUser = $model->where($where)->find($id);
$this->logger->Info("Users: Going to Inactive ID = ".$id);
if ($existingUser) {
$data['isactive'] = 0;
$data['updated_by'] = $session_uid;
if ($model->update($id, $data)) {
$this->logger->info("Users: has been Inactived successfully. Inactived ID = ".$id);
return $this->response->setJSON(['status' => true, 'message' => "User Deactivated successfully."]);
} else {
$this->logger->error("Users: Not able to Inactive ID =".$id);
throw new \Exception("Data Not able to Deleted");
}
}
else{
$this->logger->error("Users: Does Not Exist To Inactive, ID = ".$id);
throw new \Exception("User Already Deleted");
}
} catch(\Exception $e) {
$this->logger->error("Users: Err Occur = ".$e->getMessage());
return $this->response->setJSON(['status' => false, 'message' => $e->getMessage()]);
}
}
## For delete user make as active user
public function activate_user($user_id){
helper('session');
$session_uid = get_logged_user_id();
try {
// if($user_id == $session_uid){
// throw new \Exception("Your Logged-In, Can't able delete");
// }
$model = new UsersModel();
$where = ['users.user_id' => $user_id, 'users.isactive =' => 0];
$existingUser = $model->where($where)->find($user_id);
$this->logger->Info("Users: Going to ActiveUser ID = ".$user_id);
// print_r($existingUser);die;
if ($existingUser) {
$data['isactive'] = 1;
$data['updated_by'] = $session_uid;
if ($model->update($user_id, $data)) {
session()->setFlashdata('success', 'User Activated successfully.');
$this->logger->info("Users: has been Actived successfully. Actived ID = ".$user_id);
} else {
$this->logger->error("Users: Not able to Active ID =".$user_id);
throw new \Exception("Data Not able to Active");
}
}
else{
$this->logger->error("Users: Does Not Exist To Active, ID = ".$user_id);
throw new \Exception("User Already Activated");
}
}catch(\Exception $e) {
$this->logger->error("Users: Err Occur = ".$e->getMessage());
session()->setFlashdata('error', 'Message: ' .$e->getMessage());
}
return redirect()->route('user_list');
}
## Add a method to fetch organization branches based on the selected organization
public function get_branches($business_id)
{
$model = new BusinessModel();
$model->setTable('business_branches');
$branches = $model->where('business_id', $business_id)->findAll();
return json_encode($branches);
}
}