File: /home/cafsindia/hrms_allyindian_com/application_bk/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' => 'Url Expired.. Please refresh the page and try again....','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));
}*/
}
}
?>