MMCT TEAM
Server IP : 103.191.208.50  /  Your IP : 216.73.216.53
Web Server : LiteSpeed
System : Linux orion.herosite.pro 4.18.0-553.53.1.lve.el8.x86_64 #1 SMP Wed May 28 17:01:02 UTC 2025 x86_64
User : celkcksm ( 1031)
PHP Version : 7.4.33
Disable Function : show_source, system, shell_exec, passthru, popen, exec
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0755) :  /home/celkcksm/ecampus.ncriptech.com/application/controllers/admin/exm/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/celkcksm/ecampus.ncriptech.com/application/controllers/admin/exm/ExpenseAccount.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');


/**
 * 
 */
class ExpenseAccount extends BaseAdminController
{
    public $db_group='';
    protected $inst_id='';
    protected $inst_parent_id='';
    protected $inst_code='';
    protected $inst_name='';
    protected $inst_type='';
    protected $user_role='';
    protected $ctm_access='';
    protected $ams_access='';

    function __construct()
    {
        parent::__construct();

        $userdata=$this->data['userdata'];
		$this->db_group=$userdata->user_code;

        $institute_data=check_institute($userdata);

        $this->inst_id=$institute_data['institute_id'];
        $this->inst_parent_id=$institute_data['inst_parent_id'];
        $this->inst_name=$institute_data['inst_name'];
        $this->inst_code=$institute_data['inst_code'];
        $this->inst_type=$institute_data['inst_type'];
        $this->user_type=$institute_data['user_type'];
        $this->user_role=$institute_data['user_role'];

        $this->ams_access=$institute_data['ams_access'];

        $this->data['inst_name']=$this->inst_name;

        $this->data['module_name']='Accounts Management';

        $this->load->model('vendor_model','vm');

        $this->load->model(array('ctm/vendor_model'=>'ctvm','ctm/payment_model'=>'ctpm','vendor_model'=>'vm'));
    }


    public function index(){

        if(session_userdata('isAdminLoggedin')){

            $this->data['page_title']='Accounts';

            if($this->ams_access=='yes'){
                $view='exm/vw_exms_accounts';
            }else{
                $view='exm/vw_exms_permission_denied';
            }

            $this->theme->title($this->data['page_title'])->load($view, $this->data);

        }else{

            redirect($this->data['base_url']);
        }
    }


    public function indexCategory(){

        if(session_userdata('isAdminLoggedin')){

            $this->data['page_title']='Accounts Category';
            if($this->ams_access=='yes'){
                $ams_chart_of_accounts_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','view');
                $this->data['ams_chart_of_accounts_add_access']= check_access_control($this->data['userdata'],'ams_chart_of_accounts','add');
                $this->data['ams_chart_of_accounts_edit_access']= check_access_control($this->data['userdata'],'ams_chart_of_accounts','edit');

                if($this->ams_access=='yes' && $ams_chart_of_accounts_access=='yes'){

                    $account_types=$this->vm->get_accounts_category_types(null,FALSE);
                    $this->data['account_types']=$account_types;
                    $view='exm/vw_exms_accounts_category';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }
            }else{
                $view='exm/vw_exms_permission_denied';
            }            

            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function indexBankBalance(){

        if(session_userdata('isAdminLoggedin')){

            $this->data['page_title']='Bank Balance';
            $ams_bank_accounts_access= check_access_control($this->data['userdata'],'ams_bank_accounts','view');
            $ams_bank_accounts_add_access= check_access_control($this->data['userdata'],'ams_bank_accounts','add');
            $ams_bank_accounts_edit_access= check_access_control($this->data['userdata'],'ams_bank_accounts','edit');

            if($this->ams_access=='yes'){
                if($ams_bank_accounts_access=='yes'){
                    $this->data['fiscal_year']=fiscalyear(2000);

                    $this->data['banks']=$this->sm->get_banks(array('bank_inst_id'=>$this->inst_id,'bank_inst_type'=>$this->inst_type),FALSE);
                    $view='exm/vw_exms_bank_balance';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }
            }else{
                $view='exm/vw_exms_permission_denied';
            }

            $this->theme->title($this->data['page_title'])->load($view, $this->data);


        }else{

            redirect($this->data['base_url']);
        }
    }


    public function indexCashBalance(){

        if(session_userdata('isAdminLoggedin')){

            $this->data['page_title']='Cash Balance';
            $ams_cash_accounts_add_access= check_access_control($this->data['userdata'],'ams_cash_accounts','view');
            $this->data['ams_cash_accounts_add_balance_access']= check_access_control($this->data['userdata'],'ams_cash_accounts','add_balance');

            if($this->ams_access=='yes'){

                if($ams_cash_accounts_add_access=='yes'){

                    $view='exm/vw_exms_cash_balance';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }

                $this->data['fiscal_year']=fiscalyear(2000);
            }else{
                $view='exm/vw_exms_permission_denied';
            }

            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    } 


    public function onLoadAccountsCategoryForm(){

        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {

                /*$category_id = post_data('category_id');
                $category_data = $this->ctvm->get_accounts_category_data(array('category_id' => $category_id));

                if (!empty($category_data)) {
                    $this->data['category_data'] = $category_data;
                }

                $this->data['category_id'] = $category_id;*/

                $account_types=$this->vm->get_accounts_category_types(null,FALSE);
                $this->data['account_types']=$account_types;

                $return['html'] = $this->theme->view('_pages/exm/vw_exms_accounts_category_data_dyna', $this->data, true);

                json_headers($return);
            } else {
                redirect($this->data['base_url']);
            }
        } else {
            redirect($this->data['base_url']);
        }
    }


    public function onAddEditAccountsCategory()
    {
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {
                try {
                    if ($this->ams_access == 'yes') {
                        // Load form validation library
                        $this->load->library('form_validation');

                        // Set validation rules
                        $this->form_validation->set_rules('category_name', 'Category Name', 'required|trim|max_length[255]');
                        $this->form_validation->set_rules('category_description', 'Category Description', 'trim|max_length[500]');
                        $this->form_validation->set_rules('category_status', 'Category Status', 'required|in_list[active,inactive]');
                        $this->form_validation->set_rules('category_type', 'Category Type', 'required'); // Replace `type1` and `type2` with actual types
                        $this->form_validation->set_rules('_category_id', 'Category ID', 'trim');

                        if ($this->form_validation->run() == FALSE) {
                            // Validation failed
                            $return['error'] = validation_errors();
                        }else{
                            
                            // Retrieve POST data
                            $_category_id = post_data('_category_id');
                            $category_name = post_data('category_name');
                            $category_description = post_data('category_description');
                            $category_status = post_data('category_status');
                            $category_type = post_data('category_type');
                            $category_code=post_data('category_code');
                            $category_description=post_data('category_description');
                            $user_id = $this->data['userdata']->user_id;

                            $category_type_data=$this->vm->get_accounts_category_types(array('type_id'=>$category_type));

                            // Prepare category data
                            $_category_data = [
                                'category_inst_id' => $this->inst_id,
                                'category_inst_type' => $this->inst_type,
                                'category_name' => $category_name,
                                'category_code' => $category_code,
                                'category_description' => $category_description,
                                'category_type' => $category_type_data->type_group,
                                'category_type_id'=>$category_type,
                                'is_editable'=>'yes',
                                'category_status'=> $category_status,
                            ];

                            if (!empty($_category_id)) {
                                $ams_chart_of_accounts_edit_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','edit');
                                
                                if($ams_chart_of_accounts_edit_access=='yes'){
                                    // Update existing category
                                    $category_id = decode_data($_category_id);
                                    $get_vendor_category_data = $this->ctvm->get_accounts_category_data(['category_id' => $category_id]);

                                    if (!empty($get_vendor_category_data)) {
                                        $_category_data['category_updated_by'] = $user_id;
                                        $_category_data['category_updated_at'] = date('Y-m-d');

                                        $updated = $this->ctvm->update_accounts_category_data($_category_data, ['category_id' => $category_id]);

                                        if ($updated) {
                                            $return['success'] = 'Category has been updated.';
                                        } else {
                                            $return['error'] = 'Category not updated.';
                                        }
                                    } else {
                                        $return['error'] = 'Category not found to update.';
                                    }
                                }else{                                    
                                    $return['error'] = 'You do not have permission to edit this category.';
                                }                                
                            } else {
                                $ams_chart_of_accounts_add_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','add');
                                if($ams_chart_of_accounts_add_access=='yes'){
                                    // Add new category
                                    $get_vendor_category_data = $this->ctvm->get_accounts_category_data([
                                        'category_inst_id' => $this->inst_id,
                                        'category_inst_type' => $this->inst_type,
                                        'category_name' => $category_name
                                    ]);

                                    if (empty($get_vendor_category_data)) {
                                        $_category_data['category_created_by'] = $user_id;

                                        $added = $this->ctvm->store_accounts_category_data($_category_data);

                                        if ($added) {
                                            $return['success'] = 'Category added successfully.';
                                        } else {
                                            $return['error'] = 'Category not added.';
                                        }
                                    } else {
                                        $return['error'] = 'Category already exists in the system.';
                                    }
                                }else{                                    
                                    $return['error'] = 'You do not have the required permission to add new category.';
                                }
                                
                            }
                        }                        
                    } else {
                        $return['error'] = 'You do not have the required permission.';
                    }
                } catch (Exception $e) {
                    // Handle exception
                    $return['error'] = 'An unexpected error occurred: ' . $e->getMessage();
                }

                // Send JSON response
                json_headers($return);
            } else {
                redirect($this->data['base_url']);
            }
        } else {
            redirect($this->data['base_url']);
        }
    }


    public function onDeleteAccountsCategory(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $category_id=post_data('category_id');

                if(!empty($category_id)){
                    if($this->ams_access=='yes'){

                        $ams_chart_of_accounts_delete_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','delete');

                        if($ams_chart_of_accounts_delete_access=='yes'){
                            $category_id=decode_data($category_id);

                            $category_data=$this->ctvm->get_accounts_category_data(array('category_id'=>$category_id));
        
                            if(!empty($category_data)){

                                $get_category_payment_data=$this->fm->get_payment_details(array('details_accounting_type_id'=>$category_id,'details_inst_id'=>$this->inst_id));

                                if(empty($get_category_payment_data)){
                                    $deleted=$this->ctvm->delete_accounts_category_data(array('category_id'=>$category_id));

                                    if($deleted){
                                        $return['success']='Category deleted successfully';
                                    }else{
                                        $return['error']='Category not deleted';
                                    }
                                }else{
                                    $return['error']='You don\'t have the persmission to delete this category.';
                                }
                                
                            }else{
                                $return['error']='No data found to remove.';
                            }
                        }else{
                            $return['error']='You don\'t have the persmission to delete this category.';
                        }

                        
                    }else{
                        $return['error']='You don\'t have the persmission';
                    }
                }else{
                    $return['error']='Data manipulation not permitted';
                }

                json_headers($return);
            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onSearchAccountsCategory(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $ams_chart_of_accounts_edit_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','edit');
                $ams_chart_of_accounts_delete_access= check_access_control($this->data['userdata'],'ams_chart_of_accounts','delete');

                $param['column_order'] = array(
                    null,
                    'category_name'
                );

                $param['category_inst_id']=$this->inst_id;
                $param['category_inst_type']=$this->inst_type;

                $param['column_search'] = array('category_name');
                $param['order'] = array('category_id' => 'ASC');
                $posts=$this->input->post();

                $list = $this->ctvm->_get_accounts_category_data($posts,$param,FALSE,FALSE);

                $data = array();
                $no = isset($posts['start'])?$posts['start']:0;

                $action='';

                foreach ($list as $cat){
                    $no++;

                    $row = array();
                    
                    $category_type_data=$this->vm->get_accounts_category_types(array('type_id'=>$cat->category_type_id));

                    $row[]  =   $no;
                    $row[]  =   $cat->category_code;
                    $row[]  =   $cat->category_name;
                    $row[]  =   strtoupper($category_type_data->type_name);
                    $row[]  =   strtoupper($cat->category_type);

                    if($cat->category_status=='active'){
                        $status='<span class="badge badge-success">Active</span>';
                    }else if($cat->category_status=='inactive'){
                        $status='<span class="badge badge-danger">Inactive</span>';
                    }

                    $row[]  =   $status;

                    $action='<div class="btn-group" role="group" aria-label="Basic example">';
                    if($cat->is_editable=='yes'){
                        
                        if($ams_chart_of_accounts_edit_access=='yes'){
                            $action.='<button type="button" class="btn btn-xs btn-dark btn_edit_account_category" data-category_id="'.encode_data($cat->category_id).'" data-category_name="'.$cat->category_name.'" data-category_description="'.$cat->category_description.'" data-category_status="'.$cat->category_status.'"><i class="fa fa-edit"></i></button>';
                        }

                        if($ams_chart_of_accounts_delete_access=='yes'){
                            $action.='<button class="btn btn-xs btn-danger btn_delete_account_category" data-category_id="'.encode_data($cat->category_id).'"><i class="fa fa-trash"></i></button>';
                        }

                        if($ams_chart_of_accounts_edit_access=='no' && $ams_chart_of_accounts_delete_access=='no'){
                            $action.='<span class="badge badge-dark">Not permitted</span>';
                        }  
                    }

                    $action.='</div>';

                    $row[]  =  $action;

                    $data[] = $row; 
                }

                $output = array(
                    "draw" => isset($posts['draw'])?$posts['draw']:'',
                    "recordsTotal" => $this->ctvm->_get_accounts_category_data($posts,$param,TRUE),
                    "recordsFiltered" => $this->ctvm->_get_accounts_category_data($posts,$param,TRUE),
                    "data" => $data,
                );
                
                echo json_encode($output);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    //Cash Balance
    public function onAddEditCashBalance(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $cash_id=decode_data(post_data('_bank'));

                $balance_amount=post_data('cash_opening_balance');

                $creator_id=$this->data['userdata']->user_id;

                $get_balance_data=$this->sm->get_cash_balance(array('balance_inst_id'=>$this->inst_id,'balance_status'=>'active'));

                if(!empty($get_balance_data)){
                    if($get_balance_data->balance_adjusted_amount>0){
                        $new_balance=$get_balance_data->balance_opening_amount+$balance_amount;
                    }else{
                        $new_balance=$balance_amount;
                    }
                    
                    $balance_adjusted_amount=$balance_amount;
                }else{
                    $new_balance=$balance_amount;
                    $balance_adjusted_amount=0;
                }

                $data_to_insert=array(
                    'balance_inst_id'=>$this->inst_id,
                    'balance_inst_type'=>$this->inst_type,
                    'balance_opening_amount'=>$new_balance,
                    'balance_adjusted_amount'=>$balance_adjusted_amount,
                    'balance_status'=>'active',
                    'balance_is_credit_debit'=>'credit',
                    'balance_created_at'=>date('Y-m-d H:i:s'),
                    'balance_created_by'=>$creator_id
                );

                if(!empty($get_balance_data)){
                    if($get_balance_data->balance_adjusted_amount>0){
                        $balance_id=$this->sm->store_cash_balance_data($data_to_insert);
                    }else{
                        $balance_id=$get_balance_data->balance_id;
                        if($get_balance_data->balance_adjusted_amount>0){
                            $this->sm->update_cash_balance_data(array('balance_status'=>'inactive','balance_updated_at'=>date('Y-m-d H:i:s'),'balance_updated_by'=>$creator_id),array('balance_id'=>$balance_id));
                        }else{
                            $this->sm->update_cash_balance_data(array('balance_opening_amount'=>$new_balance,'balance_updated_at'=>date('Y-m-d H:i:s'),'balance_updated_by'=>$creator_id),array('balance_id'=>$balance_id));
                        }                            
                    }                        
                }else if(empty($get_balance_data)){
                    $balance_id=$this->sm->store_cash_balance_data($data_to_insert);
                }

                if($balance_id){
                    $return['success']='Balance added successfully';
                }else{
                    $return['error']='Balance not added.';
                }

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onDeleteBalance(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                if($this->ctms_access=='yes'){

                    $balance_id=post_data('balance_id');
                    $user_id=$this->data['userdata']->user_id;

                    if(!empty($balance_id)){

                        $balance_id=decode_data($balance_id);

                        $deleted=$this->ctpm->delete_cash_balance_data(array('balance_id'=>$balance_id));

                        if($deleted){
                            $return['success']='Data deleted successfully.';
                        }else{
                            $return['error']='Data not deleted.';
                        }

                    }else{
                        $return['error']='Data not found in the system.';
                    }

                }else{
                    $return['error']='You don\'t have the permission';
                }

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onSearchCashBalanceList(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $institute_data=check_institute($this->data['userdata']);
                $inst_id=$institute_data['institute_id'];

                $param['inst_id']=$inst_id;
                $param['column_order'] = array(
                    null,
                    'balance_financial_year'
                );

                $param['column_search'] = array('balance_financial_year');
                $param['order'] = array('balance_id' => 'DESC');
                $posts=$this->input->post();

                $list = $this->sm->_get_cash_balance($posts,$param,FALSE,FALSE);                
                
                $data = array();
                $no = isset($posts['start'])?$posts['start']:0;

                $action='';

                foreach ($list as $bank){
                    $no++;

                    $row = array();

                    $row[]  =   $no;
                    // $row[]  =   $bank->balance_financial_year;
                    $row[]  =   number_format($bank->balance_opening_amount,2);
                    $row[]  =   number_format($bank->balance_adjusted_amount,2);                    
                    $row[]  =   date('d-m-Y',strtotime($bank->balance_created_at));

                    if(in_array($bank->balance_is_credit_debit, array('credit','transfer_credit'))){
                        $row[]  =   '<span class="badge badge-success">Credit</span>';
                    }else if(in_array($bank->balance_is_credit_debit, array('debit','transfer_debit'))){
                        $row[]  =   '<span class="badge badge-danger">Debit</span>';
                    }

                    if($bank->balance_status=='active'){
                        $row[]  =   '<span class="badge badge-success">Active</span>';
                    }else{
                        $row[]  =   '<span class="badge badge-dark">inactive</span>';
                    }

                    // if($bank->balance_status=='active'){
                    //     $action='<button class="btn btn-xs btn-dark btn_edit_cash_balance"  data-balance_id="'.encode_data($bank->balance_id).'" data-balance_value="'.$bank->balance_opening_amount.'" data-fiscal_year="'.$bank->balance_financial_year.'"><i class="fa fa-edit"></i></button>
                    // <button class="btn btn-xs btn-danger btn_delete_cash_balance" data-balance_id="'.encode_data($bank->balance_id).'"><i class="fa fa-trash"></i></button>';
                    // }else{
                    //     $action='';
                    // }

                    //$action='';

                    //$row[]  =   $action;

                    $data[] = $row; 
                }

                $output = array(
                    "draw" => isset($posts['draw'])?$posts['draw']:'',
                    "recordsTotal" => $this->sm->_get_cash_balance($posts,$param,TRUE),
                    "recordsFiltered" => $this->sm->_get_cash_balance($posts,$param,TRUE),
                    "data" => $data,
                );
                
                echo json_encode($output);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    //Bank Balance
    public function onAddEditBankBalance(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $bank_id=post_data('bank_id');
                $balance_amount=post_data('bank_opening_balance');
                $financial_year=post_data('bank_balance_fiscal_year');
                //$add_to_prev_balance=post_data('');

                $creator_id=$this->data['userdata']->user_id;

                $get_balance_data=$this->ctpm->get_bank_balance(array('balance_inst_id'=>$this->inst_id,'balance_financial_year'=>$financial_year,'balance_bank_id'=>$bank_id,'balance_status'=>'active'));

                $this->ctpm->update_bank_balance_data(array('balance_bank_id'=>$bank_id,'balance_status'=>'inactive','balance_updated_at'=>date('Y-m-d H:i:s'),'balance_updated_by'=>$creator_id),array('balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_bank_id'=>$bank_id));

                $data_to_insert=array(
                    'balance_bank_id'=>$bank_id,
                    'balance_inst_id'=>$this->inst_id,                    
                    'balance_inst_type'=>$this->inst_type,
                    'balance_opening_amount'=>$balance_amount,
                    'balance_financial_year'=>$financial_year,
                    'balance_status'=>'active',
                    'balance_created_at'=>date('Y-m-d H:i:s'),
                    'balance_created_by'=>$creator_id
                );

                $balance_id=$this->ctpm->store_bank_balance_data($data_to_insert);

                if($balance_id){

                    $return['success']='Balance added successfully';
                }else{
                    $return['error']='Balance not added.';
                }

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onSearchBankBalanceList(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $institute_data=check_institute($this->data['userdata']);
                $inst_id=$institute_data['institute_id'];

                $param['inst_id']=$inst_id;
                $param['column_order'] = array(
                    null,
                    'balance_financial_year'
                );

                $param['column_search'] = array('balance_financial_year','bank_name','bank_account_no');
                $param['order'] = array('bank_id' => 'DESC');
                $posts=$this->input->post();


                $param['inst_id']=$this->inst_id;
                $param['inst_type']=$this->inst_type;

                $list = $this->ctpm->_get_bank_balance($posts,$param,FALSE,FALSE);                
                
                $data = array();
                $no = isset($posts['start'])?$posts['start']:0;

                $action='';

                foreach ($list as $bank){
                    $no++;

                    $row = array();

                    $row[]  =   $no;
                    $row[]  =   $bank->balance_financial_year;
                    $row[]  =   $bank->bank_name.'<br>A/C No:'.$bank->bank_account_no;
                    $row[]  =   number_format($bank->balance_opening_amount,2);
                    $row[]  =   number_format($bank->balance_adjusted_amount,2);                    
                    $row[]  =   date('d-m-Y',strtotime($bank->balance_created_at));

                    if($bank->balance_status=='active'){
                        $action='<button class="btn btn-xs btn-dark btn_edit_bank_balance" data-bank_id="'.$bank->balance_bank_id.'" data-balance_value="'.$bank->balance_opening_amount.'" data-fiscal_year="'.$bank->balance_financial_year.'"><i class="fa fa-edit"></i></button>
                    <button class="btn btn-xs btn-danger btn_delete_bank_balance" data-balance_id="'.encode_data($bank->balance_id).'"><i class="fa fa-trash"></i></button>';
                    }else{
                        $action='';
                    }

                    $row[]  =   $action;

                    $data[] = $row; 
                }

                $output = array(
                    "draw" => isset($posts['draw'])?$posts['draw']:'',
                    "recordsTotal" => $this->ctpm->_get_bank_balance($posts,$param,TRUE),
                    "recordsFiltered" => $this->ctpm->_get_bank_balance($posts,$param,TRUE),
                    "data" => $data,
                );
                
                echo json_encode($output);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }



    //Vendor Payment
    

    public function onGenerateVendorBill(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                if($this->ctms_access=='yes'){
                    $user_id=$this->data['userdata']->user_id;
                    $user_type=$this->data['userdata']->user_type;

                    $vendor_id=post_data('ctm_bill_vendor_id');
                    $vendor_type=post_data('ctm_bill_vendor_type');

                    $item_category=post_data('ctm_bill_account_category');

                    $ctm_purchase_date=post_data('ctm_purchase_date');

                    $ctm_bill=$this->input->post('ctm_bill');

                    $ctm_invoice_no=ge_rand_code('CAINV',3,TRUE);

                    $bill_data=array();

                    $total_amount=0;

                    if(!empty($ctm_bill)){
                        foreach ($ctm_bill as $key => $value) {
                            $bill_item=$value['item'];
                            $bill_item_qty=$value['qty'];
                            $bill_item_amount=$value['amount'];

                            if(!empty($bill_item) && !empty($bill_item_qty) && !empty($bill_item_amount)){

                                $total_amount=$total_amount+$bill_item_amount;

                                $bill_data[]=array(
                                    'order_inst_id'=>$this->inst_id,
                                    'order_inst_type'=>$this->inst_type,
                                    'order_vendor_id'=>$vendor_id,
                                    'order_qty'=>$bill_item_qty,
                                    'order_item_description'=>$bill_item,
                                    'order_payment_amount'=>$bill_item_amount,
                                    'order_invoice_code'=>$ctm_invoice_no
                                );
                            }
                        }


                        if(!empty($bill_data)){
                            if(!empty($total_amount) && is_numeric($total_amount)){

                                $payment_data=array(                                
                                    'ctm_inst_id'=>$this->inst_id,
                                    'ctm_inst_parent_id'=>$this->inst_parent_id,
                                    'ctm_inst_type'=>$this->inst_type,
                                    'ctm_vendor_id'=>$vendor_id,
                                    'ctm_vendor_category_id'=>$vendor_type,
                                    'ctm_account_category_id'=>$item_category,
                                    'ctm_invoice_no'=>$ctm_invoice_no,
                                    'ctm_purchase_date'=>date('Y-m-d',strtotime($ctm_purchase_date)),
                                    'ctm_payment_amount'=>$total_amount,
                                    'ctm_pay_mode'=>'n/a',                               
                                    'ctm_payment_paid'=>'no',
                                    'created_by'=>$user_id,
                                    'created_by_type'=>$user_type
                                );

                                $payment_id=$this->ctpm->store_payment_data($payment_data);

                                if($payment_id){

                                    $order_inserted=$this->ctpm->store_order_data($bill_data,TRUE);

                                    if($order_inserted){

                                        if(isset($_FILES['ctm_vendor_submitted_bill']) && $_FILES['ctm_vendor_submitted_bill']['name']!=''){

                                            if($this->inst_type=='institute'){
                                                $storage_dir='institutes/'.$this->inst_code.'/vendors/'.date('Y');
                                            }else if($this->inst_type=='institute_branch'){
                                                $storage_dir='institutes/'.$this->inst_code.'/vendors/'.date('Y');
                                            }

                                            $vendor_bill_file=array(
                                                'file_size'=>'5',
                                                'file_name'=>'ctm_vendor_submitted_bill',
                                                'file_types'=>'png,jpg,jpeg',
                                                'file_type_of'=>'vendor',
                                                'file_storage_type'=>'vendor_bill',
                                                'file_storage_dir'=>$storage_dir,
                                                'file_storage_type_id'=>$payment_id,
                                                'file_parent_id'=>$this->inst_parent_id,
                                                'file_compress'=>false,
                                                'file_operation_type'=>'new',
                                                'file_uploaded_by'=>$user_id
                                            );
            
                                            $this->onUploadFiles($vendor_bill_file);
                                        }

                                        $this->ctpm->update_order_data(array('order_payment_id'=>$payment_id),array('order_invoice_code'=>$ctm_invoice_no));

                                        $return['success']='Invoice generated.';
                                        
                                    }else{
                                        $return['error']='Data not saved.Try after sometime.';
                                    }
                                }else{
                                    $return['error']='Data not saved.Try after sometime.';
                                }

                            }else{
                                $return['error']='Data error occurred.';
                            }
                        }else{
                            $return['error']='No data found to process';
                        }                       
                    }else{
                        $return['error']='No data found to process';
                    }
                }else{
                    $return['error']='You don\'t have the permission';
                }   

                json_headers($return); 

            }else{
                 redirect($this->data['base_url']);
            }
        }else{
             redirect($this->data['base_url']);
        }
    }


    public function onLoadInvoiceData(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                if($this->ctms_access=='yes'){
                    $payment_id=post_data('payment_id');

                    if(!empty($payment_id)){
                        $payment_id=decode_data($payment_id);

                        $this->data['bank_data']=$this->sm->get_banks(array('bank_inst_id'=>$this->inst_id,'bank_inst_type'=>$this->inst_type,'bank_status'=>'active'),FALSE);

                        $this->data['payment_data']=$this->ctpm->get_payment_data(array('ctm_payment_id'=>$payment_id));

                        $order_data=$this->ctpm->get_order_data(array('order_payment_id'=>$payment_id),FALSE);

                        $this->data['order_data']=$order_data;

                        $return['html']=$this->theme->view('_pages/exm/vw_exms_vendor_bills_invoice',$this->data,true);

                    }else{
                        $return['error']='No data found';
                    }

                    
                }else{
                    $return['error']='You don\'t have the permission';
                }

                json_headers($return);    

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onLoadCanteenBalances(){
       if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $payment_mode=post_data('pay_mode');
                $bank_id=post_data('bank_id');

                if($payment_mode=='cash'){
                    $cash_balance=$this->ctpm->get_cash_balance(array('balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));

                    if(!empty($cash_balance)){
                        $return['balance']=($cash_balance->balance_adjusted_amount>0)?number_format($cash_balance->balance_adjusted_amount):number_format($cash_balance->balance_opening_amount);
                    }else{
                        $return['balance']='none';
                    }
                    
                }else if($payment_mode=='cheque'){
                    $bank_balance_data=$this->ctpm->get_bank_balance(array('balance_bank_id'=>$bank_id,'balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));

                    if(!empty($bank_balance_data)){
                        $return['balance']=($bank_balance_data->balance_adjusted_amount>0)?number_format($bank_balance_data->balance_adjusted_amount):number_format($bank_balance_data->balance_opening_amount);
                    }else{
                        $return['balance']='none';
                    }
                }

                
                json_headers($return);                

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onPayVendorPayment(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $user_id=$this->data['userdata']->user_id;
                $user_type=$this->data['userdata']->user_type;

                $payment_id=post_data('payment_id');
                $pay_mode=post_data('ctm_pay_mode');
                $cheque_no=post_data('ctm_pay_cheque_no');
                $cheque_bank=post_data('ctm_cheque_bank');

                $balance=0;

                if(!empty($payment_id)){
                    $payment_id=decode_data($payment_id);

                    if($pay_mode=='cheque' && empty($cheque_no)){

                        $return['error']='Please provide cheque no';

                    }else if($pay_mode=='cheque' && $cheque_bank==0){

                        $return['error']='Please provide Bank details';

                    }
                    else{
                        $payment_data=$this->ctpm->get_payment_data(array('ctm_payment_id'=>$payment_id));

                        $details_msg=ucwords($pay_mode).' paid';


                        if($pay_mode=='cash'){
                            $in_hand_balance_details=$this->ctpm->get_cash_balance(array('balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));

                            $balance=($in_hand_balance_details->balance_adjusted_amount>0)?$in_hand_balance_details->balance_adjusted_amount:$in_hand_balance_details->balance_opening_amount;

                            $account_balance=($in_hand_balance_details->balance_adjusted_amount>0)?($in_hand_balance_details->balance_adjusted_amount-$payment_data->ctm_payment_amount):($in_hand_balance_details->balance_opening_amount-$payment_data->ctm_payment_amount);
                        }

                        if($balance>$payment_data->ctm_payment_amount){
                            if(!empty($payment_data)){
                                $payment_details=array(
                                    'details_type'=>'canteen_payment',
                                    'details_payment_type'=>'canteen_vendor_fees',
                                    'details_type_text'=>'Canteen vendor payment for invoice no '.$payment_data->ctm_invoice_no,
                                    'details_payment_id'=>$payment_id,
                                    'details_type_id'=>$payment_data->ctm_vendor_id,
                                    'details_inst_id'=>$this->inst_id,
                                    'details_parent_inst_id'=>$this->inst_parent_id,
                                    'details_txn_id'=>'TXN'.$payment_id.date('Ymd'),
                                    'details_cheque_no'=>$cheque_no,
                                    'details_pay_id'=>null,
                                    'details_pay_order_id'=>null,
                                    'details_order_id'=>$payment_data->ctm_invoice_no.'_canteen_vendor',
                                    'details_order_code'=>$payment_data->ctm_invoice_no,
                                    'details_amount'=>$payment_data->ctm_payment_amount,
                                    'details_pay_currency'=>'INR',
                                    'details_accounting_type'=>'expenditure',
                                    'details_status'=>'success',
                                    'details_gateway_status'=>'',
                                    'details_msg'=>'',
                                    'details_created_by_type'=>$user_type,
                                    'details_created_by'=>$user_id,
                                    'details_created_at'=>date('Y-m-d'),
                                    'details_gateway_created_at'=>date('Y-m-d')
                                );


                                $payment_data_inserted=$this->fm->store_payment_details($payment_details);

                                if($payment_data_inserted){                                

                                    if($pay_mode=='cash'){
                                        $this->ctpm->update_payment_data(array('ctm_payment_paid'=>'yes','ctm_pay_mode'=>$pay_mode),array('ctm_payment_id'=>$payment_id));
                                        $this->ctpm->update_cash_balance_data(array('balance_adjusted_amount'=>$account_balance),array('balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));
                                    }else if($pay_mode=='cheque'){
                                        $this->ctpm->update_payment_data(array('ctm_payment_paid'=>'cheque_to_clear','ctm_pay_mode'=>$pay_mode,'ctm_payment_bank'=>$cheque_bank,'ctm_payment_checq_no'=>$cheque_no),array('ctm_payment_id'=>$payment_id));
                                    }

                                    $return['success']='Payment successfull';
                                }else{
                                    $return['error']='Payment error';
                                }

                            }else{
                                $return['error']='Payment data not available.';
                            }
                        }else{
                            $return['error']='Insufficient cash to disburse.Canteen Cash balance needs to be updated.';
                        }

                            
                    }
                }else{
                    $return['error']='Payment data not found in the system';
                }
                    
                json_headers($return);           

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onMarkPayment(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $payment_id=post_data('payment_id');

                $user_id=$this->data['userdata']->user_id;

                $user_type=$this->data['userdata']->user_type;
                ;
                if(!empty($payment_id)){
                    $payment_id=decode_data($payment_id);
                    $payment_data=$this->ctpm->get_payment_data(array('ctm_payment_id'=>$payment_id));

                    if(!empty($payment_data)){

                        $updated=$this->ctpm->update_payment_data(array('ctm_payment_paid'=>'yes','updated_at'=>date('Y-m-d'),'updated_by_type'=>$this->data['userdata']->user_type,'updated_by'=>$user_id),array('ctm_payment_id'=>$payment_id));

                        if($updated){

                            $bank_balance_data=$this->ctpm->get_bank_balance(array('balance_bank_id'=>$payment_data->ctm_payment_bank,'balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));

                            if(!empty($bank_balance_data)){
                                if($bank_balance_data->balance_opening_amount>0){
                                    $balance_value=$bank_balance_data->balance_opening_amount-$payment_data->ctm_payment_amount;
                                }else if($bank_balance_data->balance_adjusted_amount>0){
                                    $balance_value=$bank_balance_data->balance_adjusted_amount-$payment_data->ctm_payment_amount;
                                }

                                $this->ctpm->update_bank_balance_data(array('balance_adjusted_amount'=>$balance_value,'balance_updated_by'=>$user_id,'balance_updated_at'=>date('Y-m-d')),array('balance_bank_id'=>$payment_data->ctm_payment_bank,'balance_inst_id'=>$this->inst_id,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));
                            }


                            $return['success']='Payment data updated';
                        }else{
                            $return['error']='Data not updated';
                        }


                    }else{
                        $return['error']='Payment data not found';
                    }


                }else{
                    $return['error']='Payment data not found';
                }

                json_headers($return);


            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }

    /***INCOME & Expense Accounts***/
    public function indexIncomeAccounts(){
        if(session_userdata('isAdminLoggedin')){
            $this->data['page_title']='Incomes';

            if($this->ams_access=='yes'){
                $ams_income_access= check_access_control($this->data['userdata'],'ams_income','view');
                $ams_income_add_access= check_access_control($this->data['userdata'],'ams_income','add');
                $ams_income_edit_access= check_access_control($this->data['userdata'],'ams_income','edit');

                $this->data['ams_income_add_access']=$ams_income_add_access;
                $this->data['ams_income_edit_access']=$ams_income_edit_access;

                if($ams_income_access=='yes'){
                    $cash_balance=$this->sm->get_cash_balance(array('balance_status'=>'active'));           

                    $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE);

                    if(!empty($_bank_accounts)){
                        foreach ($_bank_accounts as $key => $value) {
                            $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'));
                            if(!empty($bank_balance)){
                                $bank_accounts[]=array(
                                    'bank_id'=>$value->bank_id,
                                    'bank_name'=>$value->bank_name,
                                    'bank_account_no'=>$value->bank_account_no
                                );
                            }
                        }
                    }

                    $this->data['bank_accounts'] = $bank_accounts;
                    $this->data['cash_balance']=$cash_balance;
                    
                    $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'income'),FALSE);
                    $view='exm/vw_exms_accounts_income';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }
            }else{
                $view='exm/vw_exms_permission_denied';
            }
            
            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }

    public function indexExpenseAccounts(){
        if(session_userdata('isAdminLoggedin')){
            $this->data['page_title']='Expense';

            if($this->ams_access=='yes'){
                $bank_accounts=[];
                $ams_expense_access= check_access_control($this->data['userdata'],'ams_expense','view');
                $ams_expense_add_access= check_access_control($this->data['userdata'],'ams_expense','add');
                $ams_expense_edit_access= check_access_control($this->data['userdata'],'ams_expense','edit');

                $this->data['ams_expense_add_access']=$ams_expense_add_access;
                $this->data['ams_expense_edit_access']=$ams_expense_edit_access;

                if($ams_expense_access=='yes'){
                    $cash_balance=$this->sm->get_cash_balance(array('balance_status'=>'active'),TRUE,$this->inst_code);           

                    $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE,$this->inst_code);

                    if(!empty($_bank_accounts)){
                        foreach ($_bank_accounts as $key => $value) {
                            $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'),TRUE,$this->inst_code);
                            if(!empty($bank_balance)){
                                $bank_accounts[]=array(
                                    'bank_id'=>$value->bank_id,
                                    'bank_name'=>$value->bank_name,
                                    'bank_account_no'=>$value->bank_account_no
                                );
                            }
                        }
                    }

                    $this->data['bank_accounts'] = $bank_accounts;
                    $this->data['cash_balance']=$cash_balance;
                    $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'expense'),FALSE,$this->inst_code);
                    $view='exm/vw_exms_accounts_expense';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }
            }else{
                $view='exm/vw_exms_permission_denied';
            }
            
            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function indexTransferAccounts(){
        if(session_userdata('isAdminLoggedin')){
            $this->data['page_title']='Fund Transfer';
            $this->data['module_name']='Accounts Fund Transfer Management';

            if($this->ams_access=='yes'){
                $bank_accounts=[];
                $ams_fund_transfer_view_access= check_access_control($this->data['userdata'],'ams_fund_transfer','view');
                $ams_fund_transfer_add_access= check_access_control($this->data['userdata'],'ams_fund_transfer','add');
                $ams_expense_edit_access= check_access_control($this->data['userdata'],'ams_fund_transfer','edit');

                $this->data['ams_fund_transfer_add_access']=$ams_fund_transfer_add_access;
                $this->data['ams_expense_edit_access']=$ams_expense_edit_access;

                if($ams_fund_transfer_view_access=='yes'){
                    $cash_balance=$this->sm->get_cash_balance(array('balance_status'=>'active'),TRUE,$this->inst_code);           

                    $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE,$this->inst_code);

                    if(!empty($_bank_accounts)){
                        foreach ($_bank_accounts as $key => $value) {
                            $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'),TRUE,$this->inst_code);
                            if(!empty($bank_balance)){
                                $bank_accounts[]=array(
                                    'bank_id'=>$value->bank_id,
                                    'bank_name'=>$value->bank_name,
                                    'bank_account_no'=>$value->bank_account_no
                                );
                            }
                        }
                    }

                    $this->data['bank_accounts'] = $bank_accounts;
                    $this->data['cash_balance']=$cash_balance;
                    $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'expense'),FALSE,$this->inst_code);
                    $view='exm/vw_exms_accounts_transfer';
                }else{
                    $view='exm/vw_exms_permission_denied';
                }
            }else{
                $view='exm/vw_exms_permission_denied';
            }
            
            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }



    public function onSearchIncomeList(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $institute_data=check_institute($this->data['userdata']);
                $inst_id=$institute_data['institute_id'];

                $param['column_order'] = array(
                    null,
                    'details_amount',
                    'details_discount_amount'
                );

                $param['column_search'] = array('details_accounting_type');
                $param['order'] = array('details_id' => 'DESC');
                $posts=$this->input->post();
                $ams_expense_delete_access= check_access_control($this->data['userdata'],'ams_expense','delete');
                $ams_expense_edit_access= check_access_control($this->data['userdata'],'ams_expense','edit');


                $param['inst_id']=$inst_id;

                $param['accounting_type']=$posts['accounting_type'];

                if(isset($posts['data_of_session']) && $posts['data_of_session']>0){
                    $param['session_id']=$posts['data_of_session'];
                }

                if(isset($posts['data_of_course']) && $posts['data_of_course']>0){
                    $param['course_id']=$posts['data_of_course'];
                }


                if(isset($posts['data_of_student']) && $posts['data_of_student']>0){
                    $param['student_id']=$posts['data_of_student'];
                }


                if(isset($posts['data_of_start_date']) && !empty($posts['data_of_start_date'])){
                    $param['start_date']=date('Y-m-d',strtotime($posts['data_of_start_date']));
                }

                if(isset($posts['data_of_end_date']) && !empty($posts['data_of_end_date'])){
                    $param['end_date']=date('Y-m-d',strtotime($posts['data_of_end_date']));
                }


                $list = $this->fm->__get_payments_details($posts,$param,FALSE,FALSE,FALSE);

                //print_obj($list);die;
                
                
                $data = array();
                $no = isset($posts['start'])?$posts['start']:0;

                $action='';

                $current_date=date('Y-m-d');
                $current_month=date('m');
                $current_year=date('Y');

                $_total_income_in_current_date=$this->fm->__get_fees_details_total(array('details_inst_id'=>$inst_id,'details_accounting_type'=>'income','DATE(details_created_at)'=>$current_date),'details_amount',$this->inst_code);

                $_total_income_in_current_month=$this->fm->__get_fees_details_total(array('details_inst_id'=>$inst_id,'details_accounting_type'=>'income','MONTH(details_created_at)'=>$current_month,'YEAR(details_created_at)'=>$current_year),'details_amount',$this->inst_code);

                $_total_income_in_current_year=$this->fm->__get_fees_details_total(array('details_inst_id'=>$inst_id,'details_accounting_type'=>'income','YEAR(details_created_at)'=>$current_year),'details_amount',$this->inst_code);

                $total_income='0';
                $total_income_in_current_date=(!empty($_total_income_in_current_date) && $_total_income_in_current_date[0]->total)?$_total_income_in_current_date[0]->total:'0';
                $total_income_in_current_month=(!empty($_total_income_in_current_month) && $_total_income_in_current_month[0]->total)?$_total_income_in_current_month[0]->total:'0';
                $total_income_in_current_year=(!empty($_total_income_in_current_year) && $_total_income_in_current_year[0]->total)?$_total_income_in_current_year[0]->total:'0';

                foreach ($list as $fees){
                    $no++;

                    $row = array();

                    $agent_payment=$this->fm->get_payment_details(array('details_order_code'=>$fees->details_order_code,'details_type'=>'agent_payment'),$this->inst_code);

                    if(!empty($agent_payment)){
                        $agent_paid_out=$agent_payment->details_amount;
                    }else{
                        $agent_paid_out='0';
                    }

                    $_total_income=$fees->details_amount-($fees->details_discount_amount+$agent_paid_out);


                    $course_data=$this->sessm->get_session_course(array('session_inst_id'=>$inst_id,'session_course_id'=>$fees->details_course_id,'session_id'=>$fees->details_sess_id),TRUE,$this->inst_code);

                    if(!empty($fees->stu_mid_name)){
                        $student_name=$fees->stu_first_name.' '.$fees->stu_mid_name.' '.$fees->stu_last_name;
                    }else{
                        $student_name=$fees->stu_first_name.' '.$fees->stu_last_name;
                    }

                    $details_payment_type='<span class="badge badge-xs badge-success">'.strtoupper(str_replace("_", " ", $fees->details_payment_type)).'</span>';

                    if($fees->details_type=='new_admission'){
                        $admission_data=$this->adm->get_admission_data(array('admission_id'=>$fees->details_type_id),TRUE,$this->inst_code);
                        $admission_code='Admission Code:'.$admission_data->admission_code;                        
                    }else if($fees->details_type=='seat_booking'){
                        $seatbooking_data=$this->adm->get_seat_booking_data(array('booking_id'=>$fees->details_type_id),TRUE,$this->inst_code);
                        $admission_code='Booking Code:'.$seatbooking_data->booking_code;
                    }

                    $student_name.='<br>Code:'.$fees->stu_user_code.'<br>Course:'.$fees->course_code.'<br>Session:'.$fees->session_start_year.'-'.$fees->session_end_year.'<br>'.$admission_code;

                    $created_date=date('d-m-Y',strtotime($fees->details_created_at));

                    $row[]  =   $no;
                    
                    if($fees->details_vendor_id!=0){
                        $row[]  =   'A/C Head:'.$fees->category_name.'<br>'.$fees->details_type_text.'<br>Vendor:'.$fees->vendor_name;
                    }else{
                        $row[]  =   'A/C Head:'.$fees->category_name.'<br>'.$fees->details_type_text;
                    }

                    if($fees->details_payment_platform!='old_payment_before_software'){
                        $details_payment_platform=strtoupper($fees->details_payment_platform);
                    }else{
                        $details_payment_platform='OLD PAYMENT';
                    }
                    
                    $row[]  =   $details_payment_platform;
                    $row[]  =   $created_date;
                    $row[]  =   $fees->details_amount;

                    if($fees->details_type=='other'){
                        $action='<div class="btn-group" role="group" aria-label="Basic example">';
                        if($ams_expense_edit_access=='yes'){
                            $action.='<button type="button" class="btn btn-xs btn-dark btn_edit_payment" data-payment_id="'.encode_data($fees->details_id).'" data-name="'.$fees->details_type_text.'" data-amount="'.$fees->details_amount.'" data-created_at="'.$created_date.'" data-payment_method="'.$fees->details_payment_platform.'" data-description="'.$fees->details_payment_note.'" data-ac_head="'.$fees->details_accounting_type_id.'"><i class="fa fa-edit"></i></button>';
                        }

                        if($ams_expense_delete_access=='yes'){
                            $action.='<button type="button" class="btn btn-xs btn-danger btn_del_accounts" data-payment_id="'.encode_data($fees->details_id).'" data-account_type="'.$posts['accounting_type'].'"><i class="fa fa-trash"></i></button>';
                        }

                        if($ams_expense_edit_access=='no' && $ams_expense_delete_access=='no'){
                            $action.='<span class="badge badge-danger">Not permitted</span>';
                        }
                                    
                                    
                        $action.='</div>';
                    }else{
                        $action='';
                    }

                    $row[]  = $action;

                    $data[] = $row; 
                }

                $output = array(
                    "draw" => isset($posts['draw'])?$posts['draw']:'',
                    "recordsTotal" => $this->fm->__get_payments_details($posts,$param,FALSE,TRUE),
                    "recordsFiltered" => $this->fm->__get_payments_details($posts,$param,FALSE,TRUE),
                    "data" => $data,
                    "total_income"=>$total_income,
                    "total_income_in_current_date"=>$total_income_in_current_date,
                    "total_income_in_current_month"=>$total_income_in_current_month,
                    "total_income_in_current_year"=>$total_income_in_current_year
                );
                
                echo json_encode($output);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    /**Add Income data*/
    public function onAddIncomesExpense() {
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {
    
                // Load the form validation library
                $this->load->library('form_validation');
    
                // Set validation rules
                $this->form_validation->set_rules('account_income_name', 'Income Name', 'required|regex_match[/^[a-zA-Z0-9\s,.-]+$/]', [
                    'required' => 'The Income Name field is required.',
                    'regex_match' => 'The Income Name field can only contain letters, numbers, spaces, commas, hyphens, and dots.'
                ]);
                $this->form_validation->set_rules('account_head', 'Account Head', 'required|greater_than[0]', [
                    'required' => 'The Account Head field is required.',
                    'greater_than' => 'The Account Head field must be greater than zero.'
                ]);
                $this->form_validation->set_rules('account_amount', 'Account Amount', 'required|greater_than[0]', [
                    'required' => 'The Account Amount field is required.',
                    'greater_than' => 'The Account Amount must be greater than zero and a valid number.'
                ]);
               
                $this->form_validation->set_rules('account_transact_date', 'Transaction Date', 'required', [
                    'required' => 'The Transaction Date field is required.'
                ]);
                $this->form_validation->set_rules('account_transact_desc', 'Transaction Description', 'regex_match[/^[a-zA-Z0-9\s,.:-]*$/]', [
                    'regex_match' => 'The Transaction Description field can only contain letters, numbers, spaces, commas, hyphens, and dots.'
                ]);
    
                // Run validation
                if ($this->form_validation->run() == FALSE) {
                    // Validation failed, send validation errors as response
                    $return['errors'] = $this->form_validation->error_array();
                } else {
                    // If validation passes, process the data
                    $emp_id = decode_data(session_userdata('admin_id'));
                    $payment_id = $this->input->post('payment_id');
                    $vendor_id=post_data('account_vendor_id');
                    $account_income_name = post_data('account_income_name');
                    $account_head = post_data('account_head');
                    $account_amount = post_data('account_amount');
                    $account_payment_method = post_data('account_payment_method');
                    $account_transact_date = post_data('account_transact_date');
                    $account_transact_desc = post_data('account_transact_desc');
                    $account_cheque_no = post_data('account_cheque_no');
                    $accounting_type=post_data('accounting_type');
                    $account_credit_debit=post_data('account_credit_debit');
                    $storage_dir='institutes/'.$this->inst_code.'/expenses/'.date('Y');

                    $db_group=$this->db_group;
    
                    if (!empty($payment_id)) {
                        $payment_id = decode_data($payment_id);
                    } else {
                        $payment_id = 0;
                    }
    
                    $inst_parent_id = $this->inst_parent_id;
                    $inst_id = $this->inst_id;
                    $inst_type = $this->inst_type;
                    $user_type= $this->user_type;

                    if($accounting_type=='expenditure'){
                        if($user_type=='employee'){
                            $user_data=$this->um->get_user(array('user_id'=>$emp_id),$user_type,null,$db_group);
                            $expense_limit=$user_data->emp_expense_limit;
                        }else{
                            $expense_limit=null;
                        }

                        if($expense_limit==null){
                            $can_do_expense=true;
                        }else if($expense_limit!=null && $account_amount<=$expense_limit){
                            $can_do_expense=true;
                        }else if($expense_limit!=null && $account_amount>$expense_limit){
                            $can_do_expense=false;
                        }else if($expense_limit==0){
                            $can_do_expense=false;
                        }
                    } else{
                        $can_do_expense=true;
                    }                   

                    if($can_do_expense==true){                        
                        $data_to_add = compact('inst_parent_id', 'account_income_name', 'account_transact_date', 'emp_id', 'inst_id', 'vendor_id', 'account_payment_method', 'account_transact_desc', 'account_amount', 'account_head', 'inst_type', 'account_cheque_no','accounting_type','account_credit_debit','db_group');
        
                        $details_id = store_accounts_details($data_to_add, $payment_id);

                        if($details_id!=0){

                            if(!empty($_FILES['account_files']['name']) && $_FILES['account_files']['name']!=''){
                                $expense_account_file=array(
                                    'file_size'=>'5',
                                    'file_name'=>'account_files',
                                    'file_types'=>'png,jpg,jpeg,webp,pdf',
                                    'file_type_of'=>'institute',
                                    'file_storage_type'=>'expense_account_vendor_bill',
                                    'file_storage_dir'=>$storage_dir,
                                    'file_storage_type_id'=>$details_id,
                                    'file_parent_id'=>$this->inst_id,
                                    'file_compress'=>false,
                                    'file_operation_type'=>'new',
                                    'file_uploaded_by'=>$emp_id
                                );
        
                               $file_id=$this->onUploadFiles($expense_account_file,$db_group);

                               //print_obj($file_id);
                                
                            }

                            //die();


                            if ($payment_id == 0) {
                                $return['success'] = ($accounting_type=='income')?'Accounts Income has been added successfully':'Accounts Expense has been added successfully';
                            } else {
                                $return['success'] = ($accounting_type=='income')?'Accounts Income has been updated successfully':'Accounts Expense has been updated successfully';
                            }
                        }else{
                            $return['error'] = 'Expense can not be added as there is no cash or bank balance available in the system.';
                        } 
                    }else if($can_do_expense==false){
                        $return['error']='You can not add this expense as it exceeds the limit of your account Rs.'.number_format($expense_limit,2);
                    }   
                      
                }
    
                json_headers($return);
                session_write_close();
            } else {
                redirect($this->data['base_url']);
            }
        } else {
            redirect($this->data['base_url']);
        }
    }

    public function onLoadExpenseData(){
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {

                $payment_id=post_data('payment_id');
                $expense_data=array();
                $vendor_file='';

                if(!empty($payment_id)){
                    $payment_id=decode_data($payment_id);

                    $expense_data=$this->fm->get_payment_details(array('details_id'=>$payment_id),$this->db_group); 
                    
                    $vendor_file=$this->sm->get_file(array('storage_type'=>'expense_account_vendor_bill','storage_type_of'=>'institute','storage_type_id'=>$payment_id),$this->db_group);

                    if(!empty($vendor_file)){
                        $vendor_file=$this->data['base_url'].'/'.$vendor_file->media_disk_path_relative;
                    }
                }

                $this->data['expense_data']=$expense_data;

                $cash_balance=$this->sm->get_cash_balance(array('balance_status'=>'active'),TRUE,$this->db_group);           

                $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE,$this->db_group);

                if(!empty($_bank_accounts)){
                    foreach ($_bank_accounts as $key => $value) {
                        $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'),TRUE,$this->db_group);
                        if(!empty($bank_balance)){
                            $bank_accounts[]=array(
                                'bank_id'=>$value->bank_id,
                                'bank_name'=>$value->bank_name,
                                'bank_account_no'=>$value->bank_account_no
                            );
                        }
                    }
                }

                $vendors=$this->vm->get_vendor_data(array('vendor_inst_id'=>$this->inst_id,'vendor_inst_type'=>$this->inst_type),FALSE,$this->db_group);

                if(!empty($vendors)){
                    foreach ($vendors as $key => $value) {
                        $_vendors[]=array(
                            'vendor_id'=>$value->vendor_id,
                            'vendor_name'=>$value->vendor_name,
                            'selected'=>(!empty($vendor_id) && ($value->vendor_id==$vendor_id)?'selected':'')
                        );
                    }
                }
                

                $this->data['bank_accounts'] = $bank_accounts;
                $this->data['cash_balance']=$cash_balance;
                $this->data['vendors']=$_vendors;
                $this->data['vendor_file']=$vendor_file; 
                $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'expense'),FALSE,$this->db_group);

                $return['html']=$this->theme->view('_pages/exm/vw_exms_expense_data_dyna',$this->data,true);

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }

    public function onLoadIncomeData(){
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {

                $payment_id=post_data('payment_id');
                $expense_data=array();

                if(!empty($payment_id)){
                    $payment_id=decode_data($payment_id);

                    $expense_data=$this->fm->get_payment_details(array('details_id'=>$payment_id));                    
                }

                $this->data['expense_data']=$expense_data;

                $cash_balance=$this->sm->get_cash_balance(array('balance_status'=>'active'));           

                $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE);

                if(!empty($_bank_accounts)){
                    foreach ($_bank_accounts as $key => $value) {
                        $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'));
                        if(!empty($bank_balance)){
                            $bank_accounts[]=array(
                                'bank_id'=>$value->bank_id,
                                'bank_name'=>$value->bank_name,
                                'bank_account_no'=>$value->bank_account_no
                            );
                        }
                    }
                }

                $vendors=$this->vm->get_vendor_data(array('vendor_inst_id'=>$this->inst_id,'vendor_inst_type'=>$this->inst_type),FALSE);

                if(!empty($vendors)){
                    foreach ($vendors as $key => $value) {
                        $_vendors[]=array(
                            'vendor_id'=>$value->vendor_id,
                            'vendor_name'=>$value->vendor_name,
                            'selected'=>(!empty($vendor_id) && ($value->vendor_id==$vendor_id)?'selected':'')
                        );
                    }
                }

                $this->data['bank_accounts'] = $bank_accounts;
                $this->data['cash_balance']=$cash_balance;
                $this->data['vendors']=$_vendors;
                $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'income'),FALSE);

                $return['html']=$this->theme->view('_pages/exm/vw_exms_income_data_dyna',$this->data,true);

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }

    public function onDeleteIncomeExpense(){
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {

                $payment_id=post_data('payment_id');

                if(!empty($payment_id)){
                    $payment_id=decode_data($payment_id);

                    $deleted=$this->fm->delete_payment_details(array('details_id'=>$payment_id));

                    if($deleted){
                        $return['success']='Data deleted successfully.';
                    }else{
                        $return['error']='Data not deleted.';
                    }

                }else{
                    $return['error']='Data not found in the system.';
                }

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    /***Fund Transfer***/
    public function onAddFundTransferForm(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $ams_fund_transfer_add_access= check_access_control($this->data['userdata'],'ams_fund_transfer','add');

                if($ams_fund_transfer_add_access=='yes'){
                    $this->load->library('form_validation');
                    $same_bank=false;
                    $cash_to_cash=false;

                    $this->form_validation->set_rules('account_transfer_amount', 'Transfer Amount', 'required|numeric|greater_than[0]');
                    // $this->form_validation->set_rules('transfer_from', 'Transfer From', 'required|alpha_numeric_spaces');
                    // $this->form_validation->set_rules('transfer_to', 'Transfer To', 'required|alpha_numeric_spaces');
                    $this->form_validation->set_rules('account_transfer_purpose', 'Transfer Purpose', 'required|alpha_numeric_spaces');
        
                    if ($this->form_validation->run() == FALSE) {
                        $return['error'] = validation_errors();
                    }else{

                        //$transfer_id=post_data('transfer_id');
                        $transfer_amount=post_data('account_transfer_amount');
                        $toAccount=post_data('toAccount');
                        $fromAccount=post_data('fromAccount');
                        $transfer_purpose=post_data('account_transfer_purpose');
                        $account_from_bank=post_data('account_from_bank');
                        $account_to_bank=post_data('account_to_bank');

                        $creator_id=$this->data['userdata']->user_id;

                        if($toAccount=='to_bank'){
                            $to_bank_name=$account_to_bank;
                        }else{
                            $to_bank_name=0;
                        }

                        if($fromAccount=='from_bank'){
                            $from_bank_name=$account_from_bank;
                            $get_balance_data=$this->sm->get_bank_balance(array('balance_inst_id'=>$this->inst_id,'balance_bank_id'=>$account_from_bank,'balance_inst_type'=>$this->inst_type,'balance_status'=>'active'));
                        }else{
                            $from_bank_name=0;
                            $get_balance_data=$this->sm->get_cash_balance(array('balance_inst_id'=>$this->inst_id,'balance_status'=>'active'));
                        }

                        if($toAccount=='to_bank' && $fromAccount=='from_bank'){
                            if($account_to_bank==$account_from_bank){
                                $same_bank=true;
                            }
                        }else if($toAccount=='to_cash' && $fromAccount=='from_cash'){
                            $cash_to_cash=true;
                        }

                        if($same_bank==true){
                            $return['error']='From and To bank cannot be same';
                        }else if($cash_to_cash==true){
                            $return['error']='Cash to Cash transaction can not be done';
                        }else{
                            if($transfer_amount<=$get_balance_data->balance_opening_amount){
                                $get_transfer_data=$this->fm->get_fund_transfer(array('transfer_id'=>$transfer_id));

                                $transfer_data=array(
                                    'intitute_id'=>$this->inst_id,
                                    'intitute_parent_id'=>$this->inst_parent_id,
                                    'amount'=>$transfer_amount,
                                    'purpose'=>$transfer_purpose,
                                    'from_payment_method'=>$fromAccount,
                                    'to_payment_method'=>$toAccount,
                                    'from_bank_name'=>$from_bank_name,                        
                                    'to_bank_name'=>$to_bank_name,
                                    'status'=>($this->user_role=='1')?'approved':'pending',
                                    'created_by'=>$creator_id,
                                    'created_by_type'=>$this->data['userdata']->user_type,
                                    'transfer_date'=>date('Y-m-d'),
                                    'created_at'=>date('Y-m-d H:i:s')                      
                                );

                                if(!empty($get_transfer_data)){                    

                                    $updated=$this->fm->update_fund_transfer($transfer_data,array('transfer_id'=>$transfer_id));

                                    if($updated){
                                        $return['success']='Transfer has been updated.';
                                    }else{
                                        $return['error']='Transfer not updated.';
                                    }
                                }else{
                                    $transfer_id=$this->fm->store_fund_transfer($transfer_data);

                                    if($transfer_id && $this->user_role=='1'){
                                        if($fromAccount=='from_bank' && $toAccount=='to_bank'){
                                            store_bank_balance_data($to_bank_name,$this->inst_id,$creator_id,$transfer_amount,$transfer_id,'transfer_credit');
                                            store_bank_balance_data($from_bank_name,$this->inst_id,$creator_id,$transfer_amount,$transfer_id,'transfer_debit');
                                        }else if($fromAccount=='from_bank' && $toAccount=='to_cash'){
                                            store_cash_balance_data($this->inst_id,$this->inst_type,$creator_id,$transfer_amount,$transfer_id,'transfer_credit');
                                            store_bank_balance_data($from_bank_name,$this->inst_id,$creator_id,$transfer_amount,$transfer_id,'transfer_debit');
                                        }else if($fromAccount=='from_cash' && $toAccount=='to_bank'){
                                            store_bank_balance_data($to_bank_name,$this->inst_id,$creator_id,$transfer_amount,$transfer_id,'transfer_credit');
                                            store_cash_balance_data($this->inst_id,$this->inst_type,$creator_id,$transfer_amount,$transfer_id,'transfer_debit');
                                        }
                                    }

                                    $return['success']='Transfer has been added.';
                                }
                            }else{
                                $return['error']='Insufficient funds to transfer.';
                            } 
                        }   
                    }
                }else{
                    $return['error']='You are not authorized to transfer funds.';
                }             

                json_headers($return);
                    
            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onDeleteFundTransfer(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $ams_fund_transfer_delete_access= check_access_control($this->data['userdata'],'ams_fund_transfer','delete');

                if($ams_fund_transfer_delete_access=='yes'){
                    $transfer_id=post_data('transfer_id');

                    if(!empty($transfer_id)){
                        $transfer_id=decode_data($transfer_id);

                        $deleted=$this->fm->delete_fund_transfer(array('transfer_id'=>$transfer_id));

                        if($deleted){
                            $return['success']='Transfer has been deleted.';
                        }else{
                            $return['error']='Transfer not deleted.';
                        }

                    }else{
                        $return['error']='Data not found in the system.';
                    }
                }else{
                    $return['error']='You are not authorized to delete this transfer.';
                }

                

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }

    public function onLoadTransferData(){
        if (session_userdata('isAdminLoggedin') == TRUE && session_userdata('admin_id')) {
            if ($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD') == 'POST') {

                $transfer_id=post_data('transfer_id');
                $expense_data=array();

                if(!empty($transfer_id)){
                    $transfer_id=decode_data($transfer_id);

                    $transfer_data=$this->fm->get_payment_details(array('transfer_id'=>$transfer_id));                    
                }

                $this->data['transfer_data']=$transfer_data;

                $_bank_accounts = $this->sm->get_banks(array('bank_status' => 'active'),FALSE);

                if(!empty($_bank_accounts)){
                    foreach ($_bank_accounts as $key => $value) {
                        $bank_balance=$this->sm->get_bank_balance(array('balance_bank_id'=>$value->bank_id,'balance_status'=>'active'));
                        if(!empty($bank_balance)){
                            $bank_accounts[]=array(
                                'bank_id'=>$value->bank_id,
                                'bank_name'=>$value->bank_name,
                                'bank_account_no'=>$value->bank_account_no
                            );
                        }
                    }
                }

                $this->data['bank_accounts'] = $bank_accounts;

                $return['html']=$this->theme->view('_pages/exm/vw_exms_accounts_transfer_data_dyna',$this->data,true);

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onSearchFundTransferList(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $ams_fund_transfer_edit_access= check_access_control($this->data['userdata'],'ams_fund_transfer','edit');
                $ams_fund_transfer_delete_access= check_access_control($this->data['userdata'],'ams_fund_transfer','delete');

                $param['intitute_id']=$this->inst_id;
                $param['column_order'] = array(
                    null,
                    'purpose'
                );

                $param['column_search'] = array('purpose');
                $param['order'] = array('transfer_id' => 'DESC');
                $posts=$this->input->post();

                $list = $this->fm->_get_fund_transfer($posts,$param,FALSE,FALSE);                
                
                $data = array();
                $no = isset($posts['start'])?$posts['start']:0;

                $action='';

                foreach ($list as $fundt){
                    $no++;

                    $row = array();

                    if($fundt->from_payment_method=='from_bank'){
                        $from_payment_method='BANK';                        
                    }else if($fundt->from_payment_method=='from_cash'){
                        $from_payment_method='CASH';
                    }

                    if($fundt->to_payment_method=='to_bank'){
                        $to_payment_method='BANK';
                    }else if($fundt->to_payment_method=='to_cash'){
                        $to_payment_method='CASH';
                    }

                    if($fundt->status=='approved'){
                        $status='<span class="badge badge-sm badge-success">APPROVED</span>';
                    }else if($fundt->status=='not_approved'){
                        $status='<span class="badge badge-sm badge-danger">NOT APPROVED</span>';
                    }else if($fundt->status=='pending'){
                        $status='<span class="badge badge-sm badge-warning">PENDING</span>';
                    }

                    $action='<div class="btn-group" role="group" aria-label="Basic example">';

                    if($ams_fund_transfer_edit_access=='yes' && $fundt->status!=='approved'){
                        $action.='<button type="button" class="btn btn-xs btn-dark btn_transfer_edit" data-transfer_id="'.encode_data($fundt->transfer_id).'" data-purpose="'.$fundt->purpose.'" data-amount="'.$fundt->amount.'" data-from_payment_method="'.$fundt->from_payment_method.'" data-to_payment_method="'.$fundt->to_payment_method.'" data-status="'.$fundt->status.'"><i class="fa fa-edit"></i></button>';
                    }

                    if($ams_fund_transfer_delete_access=='yes' && $fundt->status!=='approved'){
                        $action.='<button type="button" class="btn btn-xs btn-danger btn_transfer_del" data-transfer_id="'.encode_data($fundt->transfer_id).'" data-purpose="'.$fundt->purpose.'" data-amount="'.$fundt->amount.'" data-from_payment_method="'.$fundt->from_payment_method.'" data-to_payment_method="'.$fundt->to_payment_method.'" data-status="'.$fundt->status.'"><i class="fa fa-trash"></i></button>';
                    }

                    if($ams_fund_transfer_edit_access=='no' && $ams_fund_transfer_delete_access=='no' && $fundt->status!=='approved'){
                        $action.='<span class="badge badge-dark">OERATION NOT PERMITTED</span>';
                    }else{
                        $action.='<span class="badge badge-dark">OERATION NOT REQUIRED</span>';
                    }

                    $action.='</div>';

                    $row[]  =   $fundt->purpose;
                    $row[]  =   number_format($fundt->amount,2);
                    $row[]  =   $status;
                    $row[]  =   $from_payment_method;
                    $row[]  =   $to_payment_method;
                    $row[]  =   $action;

                    $data[] = $row; 
                }

                $output = array(
                    "draw" => isset($posts['draw'])?$posts['draw']:'',
                    "recordsTotal" => $this->fm->_get_fund_transfer($posts,$param,TRUE),
                    "recordsFiltered" => $this->fm->_get_fund_transfer($posts,$param,TRUE),
                    "data" => $data,
                );
                
                echo json_encode($output);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }

    //Liabilities
    public function indexLiabilities(){
        if(session_userdata('isAdminLoggedin')){
            $this->data['page_title']='Liabilities';            
            $this->data['module_name']='Accounts Liabilities';            
            if($this->ams_access=='yes'){
                $view='exm/vw_exms_accounts_liabilities';
            }else{
                $view='exm/vw_exms_permission_denied';
            }

            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }

    public function onLoadLiabilitiesForm(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $entry_id=post_data('entry_id');

                $liability_data=[];

                $this->data['account_heads'] = $this->ctvm->get_accounts_category_data(array('is_editable'=>'yes','category_type'=>'liabilities'),FALSE);


                // if(!empty($entry_id)){
                //     $entry_id=decode_data($entry_id);

                //     $liability_data=$this->fm->get_payment_details(array('details_id'=>$entry_id));                    
                // }

                $this->data['liability_data']=$liability_data;

                $return['html']=$this->theme->view('_pages/exm/vw_exms_accounts_liabilities_data_dyna',$this->data,true);

                json_headers($return);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }


    //Balance Sheet
    public function indexBalanceSheet(){
        if(session_userdata('isAdminLoggedin')){
            $this->data['page_title']='Balance Sheet';
            $this->data['module_name']='Accounts Balance Sheet';

            if($this->ams_access=='yes'){
                $this->data['fiscal_year']=fiscalyear(2000);

                $this->data['accounts']='';

                $incomes=array();
                $total_cat_incomes=array();
                $total_incomes=0;

                $expenses=array();
                $total_cat_expenses=array();
                $total_expenses=0;

                $start_date=first_date_of_year();
                $end_date=last_date_of_year();

                //Incomes
                $income_p_type=$this->vm->get_accounts_category_types(array('type_group'=>'income'),FALSE);

                if(!empty($income_p_type)){
                    foreach ($income_p_type as $key => $value) {
                        $income_types=$this->vm->get_accounts_category_data(array('category_type_id'=>$value->type_id),FALSE);
                        $_total_cat_income=0;
                        foreach ($income_types as $k => $v) {
                            $credit_value=$this->fm->_get_payments_details_total(array('details_accounting_dr_cr'=>'credit','details_accounting_type'=>'income','details_accounting_type_id'=>$v->category_id,'DATE(details_created_at_actual)>='=>$start_date,'DATE(details_created_at_actual)<='=>$end_date));
                            $_total_cat_income=$_total_cat_income+$credit_value[0]->total;
                            $_incomes[$value->type_id][]=array(
                                'category_name'=>$v->category_name,
                                'category_code'=>$v->category_code,
                                'category_id'=>$v->category_id,
                                'category_amount_cr_value'=>number_format($credit_value[0]->total,2)
                            );
                        }

                        $incomes[$value->type_name]=$_incomes[$value->type_id];
                        $total_cat_incomes[$value->type_name]=number_format($_total_cat_income,2);
                        $total_incomes=$total_incomes+$_total_cat_income;
                    }                
                }

                $this->data['incomes']=$incomes;
                $this->data['total_cat_incomes']=$total_cat_incomes;
                $this->data['total_incomes']=number_format($total_incomes,2);
                
                //Expense
                $expense_p_type=$this->vm->get_accounts_category_types(array('type_group'=>'expense'),FALSE);


                if(!empty($expense_p_type)){
                    foreach ($expense_p_type as $key => $value) {
                        $expense_types=$this->vm->get_accounts_category_data(array('category_type_id'=>$value->type_id),FALSE);
                        $_total_cat_expense=0;
                        foreach ($expense_types as $k => $v) {
                            $debit_value=$this->fm->_get_payments_details_total(array('details_accounting_dr_cr'=>'debit','details_accounting_type'=>'expenditure','details_accounting_type_id'=>$v->category_id,'DATE(details_created_at_actual)>='=>$start_date,'DATE(details_created_at_actual)<='=>$end_date));

                            $_total_cat_expense=$_total_cat_expense+$debit_value[0]->total;
                            $_expenses[$value->type_id][]=array(
                                'category_name'=>$v->category_name,
                                'category_code'=>$v->category_code,
                                'category_id'=>$v->category_id,
                                'category_amount_dr_value'=>number_format($debit_value[0]->total,2)
                            );
                        }

                        $expenses[$value->type_name]=$_expenses[$value->type_id];
                        $total_cat_expenses[$value->type_name]=number_format($_total_cat_expense,2);
                        $total_expenses=$total_expenses+$_total_cat_expense;
                    }                
                }

                $this->data['expenses']=$expenses;
                $this->data['total_cat_expenses']=$total_cat_expenses;
                $this->data['total_expenses']=number_format($total_expenses,2);
                
                $this->data['start_date']=$start_date;
                $this->data['end_date']=$end_date;
                $view='exm/vw_exms_accounts_balance_sheet';
            }else{
                $view='exm/vw_exms_permission_denied';
            }

            $this->theme->title($this->data['page_title'])->load($view, $this->data);
        }else{
            redirect($this->data['base_url']);
        }
    }


    public function onLoadBalanceSheet(){
        if(session_userdata('isAdminLoggedin')==TRUE && session_userdata('admin_id')){
            if($this->input->is_ajax_request() && $this->input->server('REQUEST_METHOD')=='POST'){

                $start_date=post_data('start_date');
                $end_date=post_data('end_date');
                $incomes=array();

                if(empty($start_date) && empty($end_date)){
                    $start_date=date('Y').'-01-01';
                    $end_date=date('Y').'-12-31';
                }

                //Asset
                $assets_type=$this->vm->get_accounts_category_types(array('type_group'=>'assets'),FALSE);

                if(!empty($assets_type)){
                    foreach ($assets_type as $key => $value) {
                        $assets[]=array(
                            'category_name'=>$value->type_name,
                            'category_id'=>$value->type_id,
                            'category_type'=>$value->type_group,
                            'category_amount'=>$this->vm->get_accounts_category_amount(array('category_id'=>$value->type_id,'category_type'=>$value->type_group,'start_date'=>$start_date,'end_date'=>$end_date))
                        );
                    }                
                }

                //Liabilities


                //Income

                $income_p_type=$this->vm->get_accounts_category_types(array('type_group'=>'income'),FALSE);

                if(!empty($income_p_type)){
                    foreach ($income_p_type as $key => $value) {
                        $income_types=$this->vm->get_accounts_category_data(array('category_type_id'=>$value->type_id),FALSE);

                        foreach ($income_types as $k => $v) {
                            $incomes[$value->type_name][]=array(
                                'category_name'=>$v->category_name,
                                'category_id'=>$v->category_id,
                                'category_amount_value'=>''
                            );
                        }
                    }                
                }


                //Expense

                $this->data['incomes']=$incomes;
                $return['html']=$this->theme->view('_pages/exm/vw_exms_accounts_balance_sheet_dyna',$this->data,true);

            }else{
                redirect($this->data['base_url']);
            }
        }else{
            redirect($this->data['base_url']);
        }
    }
}

MMCT - 2023