MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //home/cafsindia/.trash/application.1/controllers/Invalid_punch_approval.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Action_controller.php");
class Invalid_punch_approval  extends Action_controller{	
	public function __construct(){
		parent::__construct('invalid_punch_approval');
	}
	
	// LOAD PAGE QUICK LINK,FILTERS AND TABLE HEADERS
	public function index(){
		$data['key'] = $this->generateKey();
		$this->load->view("$this->control_name/manage",$data);
	}

	public function request_status(){
		$this->search_info();
		$module_sts       = (int)$this->module_sts;
		if(!$module_sts){
			echo json_encode(array('success' => FALSE, 'message' => "Search  Info Query Process Error..!"));
			exit(0);
		}else{
			$role_condition   = "";
			if($this->role_condition){
				$role_condition = $this->role_condition;
			}
			
			$inv_log_qry   = ' SELECT * FROM cw_invalid_punch_log WHERE trans_status = 1 and inv_status = 1 ';
		    $inv_log_info  = $this->db->query("CALL sp_a_run ('SELECT','$inv_log_qry')");
		    $inv_log_qry_rslt  = $inv_log_info->result();
		    $inv_log_info->next_result();

		    $log_arr = array();
		    foreach($inv_log_qry_rslt as $qry_record){
		    	$log_arr[$qry_record->shift_date][$qry_record->user_id][] = $qry_record;
		    }

			# Retrieve data from approval table.
			$status_qry  = 'SELECT cw_invalid_punch_approval.device_code,cw_invalid_punch_approval.employee_code,cw_invalid_punch_approval.emp_name,cw_invalid_punch_approval.shift_name,cw_invalid_punch_approval.first_approval_status,cw_invalid_punch_approval.second_approval_status,cw_invalid_punch_approval.shift_date,cw_approval_type.approval_type FROM cw_invalid_punch_approval JOIN cw_approval_type ON cw_invalid_punch_approval.approve_type = cw_approval_type.prime_approval_type_id JOIN cw_invalid_punch_request ON cw_invalid_punch_request.prime_invalid_punch_request_id = cw_invalid_punch_approval.prime_invalid_punch_request_id WHERE cw_invalid_punch_approval.inv_status = 1 AND cw_invalid_punch_request.inv_status = 2  '.$role_condition.' ';
			$status_info = $this->db->query("CALL sp_a_run ('SELECT','$status_qry')");
			$status_rslt = $status_info->result();
			$status_info->next_result();
			if($status_rslt){
				$row     = 1;
				$ts_line = "";
				foreach($status_rslt as $status){
					$device_code            = $status->device_code;
					$employee_code          = $status->employee_code;
					$emp_name               = $status->emp_name;
					$shift_name             = $status->shift_name;
					$approve_type           = $status->approval_type;
					$shift_date             = date('d-m-Y', strtotime($status->shift_date));
					$first_approval_status  = $status->first_approval_status;
					$second_approval_status = $status->second_approval_status;
					$status_arr_rslt        = $log_arr[$status->shift_date][$device_code];
					$ts_line .= "<tr id='row_$row'>
					<td>$employee_code</td>
					<td>$emp_name</td>
					<td>$shift_date</td>  
					<td>$approve_type</td>  
					<td>
					    <div class='accordion' id='accordionExample$row'>
					        <div class='card'>
					            <div class='card-header' id='headingOne$row'>
					                <h2 class='mb-0'>
					                    <button class='btn btn-link' type='button' data-toggle='collapse' data-target='#statusCollapse$row' aria-expanded='false' aria-controls='statusCollapse$row' onclick='statusAccordion($row)'>
					                        <i class='fa fa-eye'></i> View
					                    </button>
					                </h2>
					            </div>
					            <div id='statusCollapse$row' class='collapse' aria-labelledby='headingOne$row' data-parent='#accordionExample$row'>
					                <div class='card-body'>
					                    <form id='formData_$row' >
					                        <table class='table table-bordered'>";
					   	$i = 1;
					    $validationIds = array();
					    foreach($status_arr_rslt as $record){
					    	$prime_id = $record->prime_invalid_punch_log_id;
					        $id       = $record->user_id;
					        $remarks  = $record->remarks;
					        $validationIds[] = $prime_id;
					    	$inpunch  = date('d-m-Y H:i:s', strtotime($record->in_punch));
					        $outpunch = date('d-m-Y H:i:s', strtotime($record->out_punch));
							$ts_line .= "<tr>
								<td>
									<input type='hidden' name='prime_id[]' value='$prime_id' >
							    </td>
							    <td>
							    	<input type='hidden' name='in_punch[]' value='$inpunch' >
							        <label for='in_punch' >In Punch</label><br/>
							        <span>$inpunch</span>
							    </td>
							    <td>
							    	<input type='hidden' name='out_punch[]' value='$outpunch' >
							        <label for='out_punch' >Out Punch</label><br/>
							        <span>$outpunch</span>
							    </td>";
							if($remarks){
								$ts_line .= "<td><label for='remarks' >Remarks</label><br/><span name ='remarks'>$remarks</span></td>";
							}else{
								$ts_line .= " <td><span>-</span><br/></td>";
							}
							if($remarks){
								$ts_line .= "<td>
							    	<label for='status' class='required'>Status</label><br/>
									<select id ='status_$prime_id' onchange='status_change(\"$prime_id\")' name ='status[]'>
									  <option value=''>--select--</option>
									  <option value='approved'>Approved</option>
									  <option value='rejected'>Rejected</option>
									</select>
							    </td>";
							}else{
								$ts_line .= "<td><span>-</span></td>";
							}
							$ts_line .= "<td> <span id='spanid_$prime_id'>-</span>
											<div id='reason-group_$prime_id' style='display: none;'>
											<label for='reason' class='required'>Reason</label>
											<textarea name='reason[]' id='reason_$prime_id' class='form-control input-sm' placeholder='Reason' required></textarea></div>
										</td>";
							$ts_line .= "</tr>";
							$i++;
					    }

					    $validationIds = json_encode($validationIds);
					    $ts_line .= "<tr><td colspan='6' style='text-align: center;'><button type='button' id='submit_$row' class='btn-submit btn btn-primary btn-xs' onclick='submitForm(\"$row\",\"$status->shift_date\",\"$status->device_code\",$validationIds)'>Submit</button></td></tr>";
					    $ts_line .= "</table></form></div></div></div></div></td></tr>";
					    $row++;
					}
				}
			# Generate final table for display.
			$track_content = "<table class='table table-striped table-bordered' id='status_list'><thead><tr><th>Employee Code</th><th>Employee Name</th><th>shift date</th><th>Approve Type</th><th>options</th></tr></thead><tbody>$ts_line</tbody></table>";
			echo json_encode(array('success' => TRUE, 'message' => "Log",'track_content'=>$track_content));
		}
	}

	//FINAL APPROVAL SUBMIT.
	public function submitForm(){
		$encString         = file_get_contents('php://input');
		$_POST             = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Invalid Request..','table_data' => ""));
			exit(0);
		}
	    $prime_id_arr      = $this->input->post('prime_id_arr');
	    $status_arr        = $this->input->post('status_arr');
	    $reason_arr        = $this->input->post('reason_arr');
	    $row               = $this->input->post('row');
	    $user_id           = $this->input->post('user_id');
	    $shift_date        = $this->input->post('shift_date');
	    $logged_emp_code   = $this->logged_emp_code;		
	    $created_on        = date('Y-m-d H:i:s');
	    $count             = count($prime_id_arr); //get array count
	    $approved_arr      = array();
	    for($i=0;$i<$count;$i++){ //loop through post data
	    	$prime_id      = $prime_id_arr[$i];
	    	$status        = $status_arr[$prime_id];
	    	$reason        = $reason_arr[$i];
	    	if($status !== "" && $status !== "0"){ //update approver given details
	    		$approved_arr[$prime_id] = $status;
	    		$upd_query = 'UPDATE cw_invalid_punch_log SET status = "'.$status.'", reason = "'.$reason.'" WHERE prime_invalid_punch_log_id = "'.$prime_id.'" ';
				$upd_rslt  = $this->db->query($upd_query);
	    	}	    	
	    }	      		

		# Based on leave approval final status updation.
   		$approval_qry    = 'SELECT prime_invalid_punch_approval_id,prime_invalid_punch_request_id,first_approval_status,second_approval_status,cw_employees.approve_type,cw_invalid_punch_approval.first_approval,cw_invalid_punch_approval.second_approval,cw_invalid_punch_approval.approval_status,cw_invalid_punch_approval.employee_code FROM cw_invalid_punch_approval JOIN cw_employees on cw_invalid_punch_approval.employee_code = cw_employees.employee_code WHERE cw_invalid_punch_approval.inv_status = 1 AND shift_date = "'.$shift_date.'" and cw_invalid_punch_approval.device_code = "'.$user_id.'"';
   		$approval_info   = $this->db->query("CALL sp_a_run ('SELECT','$approval_qry')");
		$approval_rslt   = $approval_info->result();
		$approval_info->next_result();
		foreach($approval_rslt as $rslt){
			$approval_id            = (int)$rslt->prime_invalid_punch_approval_id;
			$request_id             = (int)$rslt->prime_invalid_punch_request_id;
			$employee_code          = $rslt->employee_code;
			$first_approval         = $rslt->first_approval;
			$second_approval        = $rslt->second_approval;
			$first_approval_status  = (int)$rslt->first_approval_status;
			$second_approval_status = (int)$rslt->second_approval_status;
			$approve_type           = (int)$rslt->approve_type;
			if($logged_emp_code === $first_approval && $first_approval_status === 1){
				$first_approval_status = 2;
			}elseif($logged_emp_code === $second_approval && $second_approval_status === 1){
				$second_approval_status = 2;
			}

			if($approve_type === 1){ //ANYONE
				if($first_approval_status === 2 || $second_approval_status  === 2){
					$approval_status = 2;
				}else{
					$approval_status = 1;
				}
			}else
			if($approve_type === 2){ //BOTH
				if($first_approval_status === 2 && $second_approval_status  === 2){
					$approval_status = 2;
				}else{
					$approval_status = 1;
				}
			}else
			if($approve_type === 3){ //ONLY FIRST LEVEL
				if($first_approval_status === 2){
					$approval_status = 2;
				}else{
					$approval_status = 1;
				}
			}else
			if($approve_type === 4){ //ONLY SECOND LEVEL
				if($second_approval_status === 2){
					$approval_status = 2;
				}else{
					$approval_status = 1;
				}
			}
			if((int)$approval_status === 2){
				foreach ($approved_arr as $key => $value) { //FOR INSERTING DATA INTO TIMELOG
					if($value === 'approved'){
						//In punch Query
						$in_query = 'INSERT INTO cw_time_log (user_id, device_id, log_date, record_type, trans_created_by, trans_created_date) SELECT user_id,"INVIN",in_punch,"in","1","'.$created_on.'" from cw_invalid_punch_log where prime_invalid_punch_log_id = "'.$key.'" and in_punch not in (select log_date from cw_time_log where user_id = "'.$user_id.'" and trans_status = 1)';
						//echo $in_query;
			    		$this->db->query($in_query);

			    		//Out punch Query
						$out_query = 'INSERT INTO cw_time_log (user_id, device_id, log_date, record_type, trans_created_by, trans_created_date) SELECT user_id,"INVOUT",out_punch,"out","1","'.$created_on.'" from cw_invalid_punch_log where prime_invalid_punch_log_id = "'.$key.'" and out_punch not in (select log_date from cw_time_log where user_id = "'.$user_id.'" and trans_status = 1)';
						//echo $out_query;
			    		$this->db->query($out_query);
					}			    	
				}
			}
		}
		# Update transaction status in cw_invalid_punch_approval   			
		$upd_app_sts     = 'UPDATE cw_invalid_punch_approval SET trans_updated_date = "'.$created_on.'",trans_updated_by= "'.$this->logged_id.'",inv_status = 2,first_approval_status = "'.$first_approval_status.'",second_approval_status = "'.$second_approval_status.'",approval_status = "'.$approval_status.'" WHERE prime_invalid_punch_approval_id = "'.$approval_id.'"';
		$this->db->query("CALL sp_a_run ('RUN','$upd_app_sts')");
		$upd_req_sts     = 'UPDATE cw_invalid_punch_request SET first_approval_status = "'.$first_approval_status.'",second_approval_status = "'.$second_approval_status.'",approval_status = "'.$approval_status.'" WHERE prime_invalid_punch_request_id = "'.$request_id.'"';
		$this->db->query("CALL sp_a_run ('RUN','$upd_req_sts')");

		$final_approval   = 'UPDATE cw_invalid_punch SET apr_status = 2 WHERE shift_date = "'.$shift_date.'" AND user_id = "'.$user_id.'" and apr_status = 1';
		$this->db->query("CALL sp_a_run ('RUN','$final_approval')");

		$final_approval   = 'UPDATE cw_invalid_punch_log SET inv_status = 2 WHERE shift_date = "'.$shift_date.'" AND user_id = "'.$user_id.'" and inv_status = 1';
		$this->db->query("CALL sp_a_run ('RUN','$final_approval')");
		
		/*$info        = $this->db->query("CALL itsp_prcatt ('$shift_date','$shift_date','$employee_code')");
		$result      = $info->result();
		$info->next_result();
		if($result){*/
			echo json_encode(array('success' => TRUE, 'message' => "Successfully Approved.!", 'row_id' => $row));  
		/*}else{
			echo json_encode(array('success' => FALSE, 'message' => "Please try After sometime..!", 'row_id' => $row));  
		}*/
	 		
	}
}
?>