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/hrm/

[  Home  ][  C0mmand  ][  Upload File  ]

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


/**
 * 
 */
class Attendance  extends BaseAdminController
{
    protected $inst_id='';
    protected $inst_parent_id='';
    protected $inst_code='';
    protected $inst_type='';
    protected $hrms_access='';
    protected $attendance_settings='';

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

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

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

        $this->load->model(array('hrm/attendance_model'=>'hrmadm','hrm/leaves_model'=>'hrmlvm','hrm/hrmsettings_model'=>'hrmsm'));

        $hrm_settings=$this->hrmsm->get_hrm_settings(array('hrm_settings_inst_id'=>$this->inst_id,'hrm_settings_inst_type'=>$this->inst_type,'hrm_settings_type'=>'attendance_settngs'));

        if(!empty($hrm_settings)){
            $this->attendance_settings=unserialize($hrm_settings->hrm_settings_value);
        }

        // $this->load->library('calendar');
    }


    public function indexUserAttendance(){
        if(session_userdata('isAdminLoggedin')){

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

            if($this->hrms_access=='yes'){
                $user_id=$this->data['userdata']->user_id;
                $prefs = array(
                        'show_next_prev'=>true,
                        'next_prev_url'   => 'http://example.com/index.php/calendar/show/'
                );

                $this->load->library('calendar', $prefs);

                $this->data['calender']= $this->calendar->generate();

                //$rangeMonthDate=rangeMonthDate(date('m'),date('Y'),'d-m-Y');

                //print_obj($rangeMonthDate);die;


                $today=date('Y-m-d');

                $todays_data=$this->hrmadm->get_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'DATE(att_date)'=>$today));

                $this->data['current_month']=date('m');
                $this->data['current_year']=date('Y');

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

                $view='hrm/employees/vw_attendance';
            }else{
                $view='hrm/vw_permission_denied';
            }

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

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


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

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

                    $record_type=post_data('record_type');

                    $today=date('Y-m-d');
                    $current_year=date('Y');
                    $today_time=date('Y-m-d H:i A');
                    $current_month=date('m');
                    $total_absent=0;

                    $attendance_data=$this->hrmadm->get_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'DATE(att_date)'=>$today));

                    if($record_type=='check_in'){
                        if(empty($attendance_data)){

                            $in_time=$this->attendance_settings['check_in_time'];
                            $in_grace_time=$today.' '.$this->attendance_settings['check_in_grace_time'];


                            $last_absent_late_data=$this->hrmadm->get_last_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'att_status'=>'absent(for lates)'),NULL,'att_id');

                            //print_obj($last_absent_late_data);die;

                            //Late Count
                            if(!empty($last_absent_late_data)){
                                $total_lates=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'DATE(att_date)>'=>$last_absent_late_data->att_date,'att_status'=>'present(late)'));
                            }else{
                                $total_lates=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'att_status'=>'present(late)'));
                            }

                            $last_absent_data=$this->hrmadm->get_last_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'att_leave_deducted'=>'yes'),NULL,'att_id');

                           // print_obj($last_absent_data);die;

                            //Absent Count

                            //Auto Leave calculation 

                            
                            if(!empty($last_absent_data)){
                                $total_absent_lates=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'DATE(att_date)>'=>$last_absent_data->att_date,'att_status'=>'absent(for lates)'));

                                $_total_absent=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'DATE(att_date)>'=>$last_absent_data->att_date,'att_status'=>'absent'));

                                $total_absent=$total_absent_lates+$_total_absent;
                            }else{

                                $total_absent_lates=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'att_status'=>'absent(for lates)'));

                                $_total_absent=$this->hrmadm->get_total_attendance(array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'MONTH(att_date)'=>$current_month,'att_status'=>'absent'));

                                $total_absent=$total_absent_lates+$_total_absent;
                            }

                            //echo $total_absent;die;

                            $ctoday_time=strtotime($today_time);
                            $cin_grace_time=strtotime($in_grace_time);
                            $absent_on_late=$this->attendance_settings['absent_on_late'];
                            $absent_on_leave=$this->attendance_settings['absent_on_leave'];
                            $auto_leave_deduction_from=$this->attendance_settings['auto_leave_deduction_from'];

                            if($total_absent>=$absent_on_leave){
                                $current_leave_stock=$this->hrmlvm->get_employee_leave(array('leave_inst_id'=>$this->inst_id,'leave_inst_type'=>$this->inst_type,'leave_emp_id'=>$user_id,'leave_type_id'=>$auto_leave_deduction_from,'leave_year'=>$current_year));

                                if(!empty($current_leave_stock)){
                                    $leave_remain=$current_leave_stock->leave_remain-1;
                                    $leave_deduction=$current_leave_stock->leave_deduction+1;

                                    $leave_stock_data=array(
                                        'leave_inst_id'=>$this->inst_id,
                                        'leave_inst_type'=>$this->inst_type,
                                        'leave_emp_id'=>$user_id,
                                        'leave_type_id'=>$auto_leave_deduction_from,
                                        'leave_year'=>$current_year,
                                        'leave_remain'=>$leave_remain,
                                        'leave_deduction'=>$leave_deduction,
                                        'leave_deduction_reason'=>'More than '.$absent_on_late.' absent counted for the month of '.date('F, Y'),
                                        'leave_deduction_date'=>date('Y-m-d')
                                    );

                                    $leave_deducted=$this->hrmlvm->update_employee_leave($leave_stock_data,array('leave_inst_id'=>$this->inst_id,'leave_inst_type'=>$this->inst_type,'leave_emp_id'=>$user_id,'leave_type_id'=>$auto_leave_deduction_from,'leave_year'=>$current_year));
                                }
                            }
                            

                            if($total_lates>=$absent_on_late){
                                $att_status='absent(for lates)';
                            }else{
                               if($ctoday_time>$cin_grace_time){
                                    $att_status='present(late)';
                                }else{
                                    $att_status='present';
                                } 
                            }                                

                            $att_data=array(
                                'att_emp_id'=>$user_id,
                                'att_inst_id'=>$this->inst_id,
                                'att_inst_type'=>$this->inst_type,
                                'att_date'=>$today,
                                'att_check_in'=>date('Y-m-d H:i:s'),
                                'att_status'=>$att_status
                            );

                            $added=$this->hrmadm->store_attendance($att_data);

                            if($added){
                                if(isset($leave_deducted)){
                                    $this->hrmadm->update_attendance(array('att_leave_deducted'=>'yes'),array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'DATE(att_date)'=>$today));
                                }
                                

                                $return['success']='You have successfully checked in '.date('d-m-Y').'. Don\'t forget to check out at the end of the day!';
                            }else{
                                $return['error']='System error occurred.';
                            }


                        }else{
                            $return['error']='Attendance already taken';
                        }
                    }else if($record_type=='check_out'){
                        if(!empty($attendance_data)){
                            $att_data=array(
                                'att_emp_id'=>$user_id,
                                'att_inst_id'=>$this->inst_id,
                                'att_inst_type'=>$this->inst_type,
                                'att_date'=>$today,
                                'att_check_out'=>date('Y-m-d H:i:s'),
                                'att_status'=>'present'
                            );

                            $added=$this->hrmadm->update_attendance($att_data,array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'DATE(att_date)'=>$today));

                            if($added){
                                $return['success']='Attendance has marked for '.date('d-m-Y');
                            }else{
                                $return['error']='System error occurred.';
                            }
                        }else{
                            $return['error']='Data error occurred.';
                        }
                    }
                }else{
                    $return['error']='Permission denied';
                }

                
                json_headers($return);

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


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

                //echo $this->inst_id;

                //Attendance Settings
                // $att=array(
                //     'check_in_time'=>'9:30 AM',
                //     'check_in_grace_time'=>'9:45 AM',
                //     'check_out_time'=>'5:30 PM',
                //     'absent_on_late'=>'3',
                //     'absent_on_leave'=>'3',
                //     'auto_leave_deduction_from'=>'2',
                //     'weekdays'=>array('0','6')
                // );

                // echo serialize($att);die;


                $week_days=$this->attendance_settings['weekdays'];

                //print_obj($in_time);die;


                $month=post_data('selected_month');
                $year=post_data('selected_year');
                //$current_date=post_data('selected_date');

                $data_list=array();
                $wdays=array();

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

                //echo $user_id;die;

                $rangeMonthDate=rangeMonthDate($month,$year,'Y-m-d');

                $duration='-NA-';
                $status='-NA-';
                $check_in='-NA-';
                $check_out='-NA-';
                $remarks='-NA-';

                //$week_days=$this->hrmlvm->get_leave_weekly(array('weekday_inst_id'=>$this->inst_id,'weekday_inst_type'=>$this->inst_type,'weekday_status'=>'active'),FALSE);

                // if(!empty($week_days)){
                //     foreach ($week_days as $key => $value) {
                //         $wdays[]=$value;
                //     }
                // }

                //print_obj($week_days);die;

                if(!empty($rangeMonthDate)){

                    foreach ($rangeMonthDate as $key => $value) {

                        $day_num=date('w',strtotime($value));

                        $data_param=array('att_emp_id'=>$user_id,'att_inst_id'=>$this->inst_id,'att_inst_type'=>$this->inst_type,'DATE(att_date)'=>$value);

                        $month_data[$value]=$this->hrmadm->get_attendance($data_param);

                        if(!empty($month_data)){
                            $status=(!empty($month_data[$value]->att_status))?ucwords($month_data[$value]->att_status):'-NA-';
                            $check_in=(!empty($month_data[$value]->att_status))?date('H:i a',strtotime($month_data[$value]->att_check_in)):'-NA-';
                            $check_out=(!empty($month_data[$value]->att_check_out))?date('H:i a',strtotime($month_data[$value]->att_check_out)):'-NA-';
                            $_duration=(!empty($month_data[$value]->att_check_out))?date_diff_formatted($month_data[$value]->att_check_in,$month_data[$value]->att_check_out):'';
                            $duration=(!empty($_duration))?$_duration:'-NA-';
                            $remarks=$month_data->att_remarks;
                        }


                        $att_date=date('d-m-Y',strtotime($value));

                        $att_id=(!empty($month_data[$value]))?$month_data[$value]->att_id:'0';


                        $data_list[]=array(
                            'att_date'=>$att_date,
                            'att_status'=>$status,
                            'att_check_in'=>$check_in,
                            'att_check_out'=>$check_out,
                            'att_duration'=>$duration,
                            'att_remarks'=>(!empty($remarks))?$remarks:'-NA-',
                            'att_week_day'=>(in_array($day_num, $week_days))?date('l',strtotime($value)).'(Weekday)':'',
                            'att_edit'=>'<button type="button" class="btn btn-xs btn-dark btn_edit_attendance" data-att_id="'.$att_id.'" data-att_date="'.$att_date.'" data-att_check_in="'.$check_in.'" data-att_check_out="'.$check_out.'"><i class="fa fa-pencil"></i></button>'
                        );
                    }
                }

                //print_obj($data_list);die;

                $this->data['attendance_list']=$data_list;


                $return['html']=$this->theme->view('_pages/hrm/employees/vw_attendance_list', $this->data,true);
                $return['selected_month_year']=get_month_from_number($month).' '.$year;

                json_headers($return);


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

MMCT - 2023