File: /home/cafsindia/uds.cafsinfotech.in/application/controllers_bk/Payslip_view.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Action_controller.php");
require_once ('./application/libraries/PDFMerger.php');
use PDFMerger\PDFMerger;
class Payslip_view extends Action_controller{
public function __construct(){
parent::__construct('payslip_view');
}
// LOAD PAGE QUICK LINK,FILTERS AND TABLE HEADERS
public function index(){
//PAGE INFO FUNCTION
$data['encKey'] = $this->generateKey();
$this->load->view("$this->control_name/manage");
}
// FUNCTION FOR GET PROJECT DETAILS WHEN TYPE AUTOCOMPLETE SEARCH BOX
public function get_project(){
$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);
}
$search_term = $this->input->post_get('term');
$from_month = $this->input->post_get('from_month');
$project_id = $this->input->post_get('project_id');
$project = str_replace(',', '","', $project_id);
$start_date = date("Y-m-t",strtotime('01-'.$from_month));
$end_date = date("Y-m-d",strtotime('01-'.$from_month));
$final_qry = 'select pro_personal_area_id,pro_id,CONCAT(pro_id," - ",pro_desc) as project from cw_sap_project where pro_start_date <= "'.$start_date.'" and pro_end_date >= "'.$end_date.'" and trans_status=1 and (pro_desc LIKE "%'.$search_term.'%" OR pro_id LIKE "%'.$search_term.'%") and trans_status = 1 and pro_personal_area_id IN ("'.$project.'")';
$final_data = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
$final_result = $final_data->result();
$final_data->next_result();
foreach ($final_result as $rslt) {
$project_area_id = $rslt->pro_personal_area_id;
$proj_desc = $rslt->project;
$project_id = $rslt->pro_id;
$suggestions[] = array(
'value' => $project_id,
'label' => "$proj_desc",
'display_name'=>"$proj_desc"
);
}
if (empty($suggestions)) {
$suggestions[] = array(
'value' => "0",
'label' => "No data found for this search"
);
}
echo json_encode($suggestions);
}
//FUNCTION FOR WBS ELEMENT BASED ON DATE AND PROJECT WHEN TYPE AUTOCOMPLETE BOX
public function get_wbs_element(){
$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);
}
$search_term = $this->input->post_get('term');
$from_month = $this->input->post_get('from_month');
$project_id = $this->input->post_get('project_id');
$area_access = $this->input->post_get('area_access');
$start_date = date('Y-m-d', strtotime("01-".$from_month));
$get_wbs_qry = 'select wbs_id,CONCAT(wbs_id," - ",wbs_desc) as wbs_data from cw_sap_wbs where wbs_start_date <= "'.$start_date.'" and wbs_end_date >= "'.$start_date.'" and trans_status = 1 and (wbs_desc LIKE "%'.$search_term.'%" OR wbs_id LIKE "%'.$search_term.'%") and trans_status = 1 and wbs_project_id = "'.$project_id.'"';
$wbs_data = $this->db->query("CALL sp_a_run ('SELECT','$get_wbs_qry')");
$wbs_result = $wbs_data->result();
$wbs_data->next_result();
foreach ($wbs_result as $rslt) {
$wbs_id = $rslt->wbs_id;
$wbs_desc = $rslt->wbs_data;
$suggestions[] = array(
'value' => $wbs_id,
'label' => "$wbs_desc",
'display_name'=>"$wbs_desc"
);
}
if (empty($suggestions)) {
$suggestions[] = array(
'value' => "0",
'label' => "No data found for this search"
);
}
echo json_encode($suggestions);
}
//FUNCTION FOR CHECK ENTRY IS EXIST IN TRANSACTION FMS TABLE, BASED ON MONTH AND PROJECT AND EMPLOYEE CODE (IF EXIST AND PAYSLIP AVAILABLE IN FOLDER AND VIEW PAYSLIP)
public function check_payslip(){
$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);
}
$cat_id = $this->input->post('category');
$user_right = $this->input->post('user_right');
$emp_code = $this->input->post('emp_code');
$from_month = $this->input->post('from_month');
$project_id = $this->input->post('project_id');
$wbs_id = $this->input->post('wbs_id');
$pdf_type = (int)$this->input->post('pdf_type');
$db_name = $this->config->item("db_name");
//GE PAYSLIP BASED ON FROM COMPANY INFORMATION TABLE
$company_info = $this->company_info();
$payslip_based_on = $company_info[0]->payslip_based_on;
$this->logged_area_access = $this->session->userdata('logged_area_access');
if(!$payslip_based_on){
echo json_encode(array('success' => false,'message' =>"No data available in company_information"));
exit(0);
}else{
//WHERE CONDITION ONLY FOR BRANCH USER(3)
if((int)$user_right === 1 || (int)$user_right === 2 || (int)$user_right === 3){
if($wbs_id){
$where_cond = ' and project_id = "'.$project_id.'" and wbs_element = "'.$wbs_id.'" and process_month = "'.$from_month.'" and personal_code in ('.$this->logged_area_access.')';
}else{
$where_cond = ' and project_id = "'.$project_id.'" and process_month = "'.$from_month.'" and personal_code in ('.$this->logged_area_access.')';
}
}else{
//WHERE CONDITION FOR ALL USER ROLE
$where_cond = ' and employee_code = "'.$emp_code.'" and process_month = "'.$from_month.'"';
}
//QUERY FOR PAYSLIP BASED ON FROM EMPLOYEE TABLE
$payslip_list_qry = 'select '.$payslip_based_on.',employee_code from cw_transactions_fms where trans_status=1 '.$where_cond.' ';
$payslip_info = $this->db->query("CALL sp_a_run ('SELECT','$payslip_list_qry')");
$payslip_result = $payslip_info->result();
$payslip_info->next_result();
$payslip_based_val = $payslip_result[0]->$payslip_based_on;
//GET DETAILS FROM FORM SETTING (EX.TABLENAME,FIELD TYPE )
$form_setting_qry = 'select label_name,view_name,pick_table,pick_list,field_type,pick_display_value,auto_prime_id from cw_form_setting where prime_module_id = "employees" and trans_status = 1 and label_name = "'.$payslip_based_on.'"';
$form_setting_info = $this->db->query("CALL sp_a_run ('SELECT','$form_setting_qry')");
$form_setting_rslt = $form_setting_info->result();
$form_setting_info->next_result();
$payslip_field_type = $form_setting_rslt[0]->field_type;
$payslip_pick_table = $form_setting_rslt[0]->pick_table;
$display_pick_val = $form_setting_rslt[0]->pick_display_value;
$display_pick_arr = explode(',', $display_pick_val ?? "");
$display_pick_val1 = $display_pick_arr[0];
$display_pick_val2 = $display_pick_arr[1];
$payslip_sel_column = $payslip_pick_table.'.'.$display_pick_val1.' as '.$payslip_based_on.','.$payslip_pick_table.'.'.$display_pick_val2.',';
//CONDITION FOR AUTOCOMPLETE
if($payslip_field_type == 9){
$payslip_pick_id = $form_setting_rslt[0]->auto_prime_id;
}else{
$payslip_pick_list = $form_setting_rslt[0]->pick_list;
$pick_list_arr = explode(',', $payslip_pick_list ?? "");
$pick_list_val1 = $pick_list_arr[0];
$pick_list_val2 = $pick_list_arr[1];
$payslip_pick_id = $pick_list_val1;
}
if(!$payslip_sel_column){
echo json_encode(array('success' => false,'message' =>"No Records Available"));
}else{
if($pdf_type === 2){
$wbs_group = "group by $payslip_based_on";
}
$emp_query = 'select '.$payslip_sel_column.'employee_code,emp_name from cw_transactions_fms inner join '.$payslip_pick_table.' on '.$payslip_pick_table.'.'.$payslip_pick_id.' = cw_transactions_fms.'.$payslip_based_on.' where cw_transactions_fms.trans_status = 1 '.$where_cond.' '.$wbs_group.' ';
$emp_info = $this->db->query("CALL sp_a_run ('SELECT','$emp_query')");
$emp_rslt = $emp_info->result();
$emp_info->next_result();
$payslip_rslt = $emp_rslt[0]->$payslip_based_on;
$Payslip_based_folder = ucwords(str_replace(" ", "_",$payslip_rslt));
$merge_arr = ['process_month' => $from_month,'wbs_element' => $wbs_id,'project_id' => $project_id];
if(!$payslip_result){
echo json_encode(array('success' => false,'message' =>"No data found"));
exit(0);
}else{
$pdf_name_query = 'SELECT cw_print_info.print_info_name FROM cw_sap_wbs JOIN cw_print_info ON cw_sap_wbs.payslip_design = cw_print_info.prime_print_info_id WHERE cw_sap_wbs.wbs_id = "'.$payslip_based_val.'" AND cw_sap_wbs.payslip_status = 1';
$pdf_name_info = $this->db->query("CALL sp_a_run ('SELECT','$pdf_name_query')");
$pdf_name_result = $pdf_name_info->result();
$pdf_name_info->next_result();
$pdf_name = $pdf_name_result[0]->print_info_name;
$pdf_name = strtolower(str_replace(" ","_",$pdf_name));
$module_id = "employees";
$start_date = date('Y-m-d', strtotime("01-".$from_month));
$start = strtotime($start_date);
$month = strtotime($start_date);
$Payslip_based_folder = strtolower($Payslip_based_folder);
$payslip_folder = $payslip_based_on."_".$Payslip_based_folder;
$payslip_month = date('m-Y', $month);
$payslip_month_name = date('F Y', $month);
$tble_line = "";
$tble_no_line = "";
$i = 0;
//CONDITION FOR PDF TYPE IS COMBINED(2)
if($pdf_type === 2){
foreach($emp_rslt as $folder_path){
$file_name = strtolower(str_replace(" ", "_",$folder_path->wbs_element));
$file_desc = strtolower(str_replace(" ", "_",$folder_path->wbs_desc));
$file_desc = preg_replace('/[^A-Za-z]/', '_', $file_desc);
$folder_name = strtolower($payslip_based_on."_".$file_desc);
$file_name = $db_name."_".$file_name;
$enc_file = base64_encode($file_name);
$enc_file_name = $this->encryptFilename($enc_file,$db_name);
$payslip_based = $enc_file_name."_".$file_desc;
$file_path = "pdf_generation/$module_id/$pdf_name/$payslip_month/$folder_name/$payslip_based.pdf";
if(file_exists($file_path)){
$file_path = base_url().$file_path;
$enc_file_path = base64_encode($file_path);
$filename = dirname(__FILE__).$file_path;
$filename = str_replace("application\controllers","",$filename);
$tble_line .= "<tr><td style='text-align:center;'>$folder_path->wbs_desc</td><td style='text-align:center'><a class = 'btn btn-primary btn-xs' id = pdf_view_$folder_path->wbs_element style='margin-right:5px' onclick = pdf_viewer('$enc_file_path','$folder_path->wbs_element')><span class='fa fa-eye' > </span> view </a><a class='btn btn-primary btn-xs' onclick=download_payslip('download_$folder_path->wbs_element','$enc_file_path') id='download_$folder_path->wbs_element' download '><span class='fa fa-download' download> </span>Download</a></td></tr>";
}
}
// MERGE ALL BTN
if((int)$user_right === 1 || (int)$user_right === 2 || (int)$user_right === 3){
$import_url = site_url("payslip_view/merge_all/");
$merge_arr_json = urlencode(json_encode($merge_arr));
$import_url = " $import_url?data=$merge_arr_json";
$tfoot_list = "<tfoot><tr class='gradeU'><td></td><td style='text-align:center;'><a class='btn btn-primary btn-sm' href='$import_url' ><span class='fa fa-download'> </span> Merge All </a></td></tr></tfoot>";
}
if($tble_line){
$table_data = "<table class = 'table table-striped table-bordered' id = 'emp_details'><thead><tr><th style = 'text-align:center;'>WBS</th><th style = 'text-align:center;'>Action</th></tr></thead><tbody>$tble_line</tbody>$tfoot_list</table>";
}
if($table_data){
echo json_encode(array('success' => true,'table_data' => $table_data,'user_right'=> $user_right));
}else{
echo json_encode(array('success' => false,'message' =>"Payslip Not Available",'user_right'=> $user_right));
}
}else{
foreach($emp_rslt as $index_key => $rslt_data){
$final_rslt[][$rslt_data->employee_code] = array("emp_name" => $rslt_data->emp_name,"employee_code" => $rslt_data->employee_code,$payslip_based_on => $rslt_data->$payslip_based_on,"wbs_desc" => $rslt_data->wbs_desc);
}
foreach($final_rslt as $key => $rslt){
foreach($rslt as $file_path){
$file_name = strtolower(str_replace(" ", "_",$file_path[$payslip_based_on]));
$file_name = str_replace('/', '_',$file_name);
$file_desc = strtolower(str_replace(" ", "_",$file_path['wbs_desc']));
$file_desc = str_replace('/', '_',$file_desc);
$file_desc = preg_replace('/[^A-Za-z]/', '_', $file_desc);
$folder_name = strtolower($payslip_based_on."_".$file_desc);
$emp_code = $file_path['employee_code'];
$wbs_element = $file_path[$payslip_based_on];
$path_name = $db_name."_".$emp_code;
$enc_file = base64_encode($path_name);
$enc_file_path = $enc_file."_".$emp_code;
$enc_file_path = $this->encryptFilename($enc_file_path,$db_name);
$enc_file_path = $enc_file_path."_".$emp_code;
$emp_result_arr[$i] = $file_path['employee_code'];
$file_path = "pdf_generation/$module_id/$pdf_name/$payslip_month/$folder_name/$enc_file_path.pdf";
$zip_file_path = "$module_id/$pdf_name/$payslip_month";
$enc_zip_path = base64_encode($zip_file_path);
if(file_exists($file_path)){
$file_path = base_url().$file_path;
$enc_path = base64_encode($file_path);
$filename = dirname(__FILE__).$file_path;
$filename = str_replace("application\controllers","",$filename);
$tble_line .= " <tr class='gradeU'><td>$payslip_month_name</td><td>$wbs_element</td><td>$emp_code</td><td><a class = 'btn btn-primary btn-xs' id = 'pdf_view_$emp_code' onclick = pdf_viewer('$enc_path',$emp_code)><span class='fa fa-eye' > </span> view </a></td></tr>";
}
$i++;
}
}
foreach($emp_result_arr as $key => $value){
$file_name = $db_name."_".$value;
$enc_file = base64_encode($file_name);
$enc_file_path = $enc_file."_".$value;
$enc_file_path = $this->encryptFilename($enc_file_path,$db_name);
$enc_file_path = $enc_file_path."_".$value;
$emp_code_arr[$key] = $enc_file_path;
}
//IF ROLE IS BRANCH USER ENABLE DOWNLOAD ZIP
if((int)$user_right === 1 || (int)$user_right === 2 || (int)$user_right === 3 && $emp_code_arr){
$rslt = array_unique($emp_code_arr ?? []);
$emp_result_arr = '"'.implode('.pdf","', $rslt ?? []).'.pdf"';
$tfoot_list = "<tfoot><tr class = 'gradeU'><td></td><td style='text-align:center;'><a class='btn btn-primary btn-sm' onclick = download_zip('$enc_zip_path','$emp_result_arr') ><span class='fa fa-download' > </span> Download All </a></td><td></td><td></td></tr></tfoot>";
}
$tbl_body = "";
$tbl_body = $tble_line;
if($tbl_body){
$table_data = " <table class = 'table table-striped table-bordered' id='emp_details'><thead><tr><th>Payslip Month</th><th>WBS Element</th><th>Employee Code</th><th>Action</th></tr></thead><tbody>$tbl_body</tbody>$tfoot_list</table>";
echo json_encode(array('success' => true,'table_data' => $table_data,'user_right'=> $user_right));
}else{
echo json_encode(array('success' => false,'message' =>"Payslip Not Available",'user_right'=> $user_right));
}
}
}
}
}
}
//MERGE ALL -> NB[15-04-2024]
public function merge_all(){
$pdf = new PDFMerger;
$files_array = urldecode($this->input->get('data'));
$filter_data = json_decode($files_array, true);
$company_info = $this->company_info();
$payslip_based_on = $company_info[0]->payslip_based_on;
$db_name = $this->config->item("db_name");
$process_month = $filter_data['process_month'];
$project_id = $filter_data['project_id'];
$wbs_element = $filter_data['wbs_element'];
$this->logged_area_access = $this->session->userdata('logged_area_access');
if($wbs_element){
$where_cond = ' AND project_id = "'.$project_id.'" AND wbs_element = "'.$wbs_element.'" AND process_month = "'.$process_month.'" and personal_code in ('.$this->logged_area_access.')';
}else{
$where_cond = ' AND project_id = "'.$project_id.'" AND process_month = "'.$process_month.'" AND personal_code IN ('.$this->logged_area_access.')';
}
//FOR DYNAMIC QRY BUILDUP.
$form_setting_qry = 'SELECT label_name,view_name,pick_table,pick_list,field_type,pick_display_value,auto_prime_id FROM cw_form_setting WHERE prime_module_id = "employees" AND trans_status = 1 AND label_name = "'.$payslip_based_on.'"';
$form_setting_info = $this->db->query("CALL sp_a_run ('SELECT','$form_setting_qry')");
$form_setting_rslt = $form_setting_info->result();
$form_setting_info->next_result();
$payslip_field_type = $form_setting_rslt[0]->field_type;
$payslip_pick_table = $form_setting_rslt[0]->pick_table;
$display_pick_val = $form_setting_rslt[0]->pick_display_value;
$display_pick_arr = explode(',', $display_pick_val ?? "");
$display_pick_val1 = $display_pick_arr[0];
$display_pick_val2 = $display_pick_arr[1];
$payslip_sel_column = $payslip_pick_table.'.'.$display_pick_val1.' as '.$payslip_based_on.','.$payslip_pick_table.'.'.$display_pick_val2.',';
//CONDITION FOR AUTOCOMPLETE
if($payslip_field_type == 9){
$payslip_pick_id = $form_setting_rslt[0]->auto_prime_id;
}else{
$payslip_pick_list = $form_setting_rslt[0]->pick_list;
$pick_list_arr = explode(',', $payslip_pick_list ?? "");
$pick_list_val1 = $pick_list_arr[0];
$pick_list_val2 = $pick_list_arr[1];
$payslip_pick_id = $pick_list_val1;
}
//TO RETIEVE PDF NAME
$payslip_list_qry = 'SELECT '.$payslip_based_on.',employee_code FROM cw_transactions_fms WHERE trans_status=1 '.$where_cond.' ';
$payslip_info = $this->db->query("CALL sp_a_run ('SELECT', '$payslip_list_qry')");
$payslip_result = $payslip_info->result();
$payslip_info->next_result();
$payslip_based_val = $payslip_result[0]->$payslip_based_on;
$pdf_name_query = 'SELECT cw_print_info.print_info_name FROM cw_sap_wbs JOIN cw_print_info ON cw_sap_wbs.payslip_status = cw_print_info.prime_print_info_id WHERE cw_sap_wbs.wbs_id = "'.$payslip_based_val.'" AND cw_sap_wbs.payslip_status = 1;';
$pdf_name_info = $this->db->query("CALL sp_a_run ('SELECT','$pdf_name_query')");
$pdf_name_result = $pdf_name_info->result();
$pdf_name_info->next_result();
$pdf_name = $pdf_name_result[0]->print_info_name;
$pdf_name = strtolower(str_replace(" ","_",$pdf_name));
$module_id = "employees";
//TO RETRIEVE WBS ID & DESC
$emp_query = 'SELECT '.$payslip_sel_column.'employee_code,emp_name FROM cw_transactions_fms INNER JOIN '.$payslip_pick_table.' ON '.$payslip_pick_table.'.'.$payslip_pick_id.' = cw_transactions_fms.'.$payslip_based_on.' WHERE cw_transactions_fms.trans_status = 1 '.$where_cond.' GROUP BY '.$payslip_based_on.' ';
$emp_info = $this->db->query("CALL sp_a_run ('SELECT','$emp_query')");
$emp_rslt = $emp_info->result();
//BUILD FILE PATH
foreach($emp_rslt as $folder_path){
$file_name = strtolower(str_replace(" ", "_",$folder_path->wbs_element));
$file_desc = strtolower(str_replace(" ", "_",$folder_path->wbs_desc));
$file_desc = preg_replace('/[^A-Za-z]/', '_', $file_desc);
$folder_name = strtolower($payslip_based_on."_".$file_desc);
$file_name = $db_name."_".$file_name;
$enc_file = base64_encode($file_name);
$enc_file_name = $this->encryptFilename($enc_file,$db_name);
$payslip_based = $enc_file_name."_".$file_desc;
$file_path = "pdf_generation/$module_id/$pdf_name/$process_month/$folder_name/$payslip_based.pdf";
if(file_exists($file_path)){
$pdf->addPDF($file_path, 'all');
}
}
//MERGE ALL
$pdf->merge('download', 'merged_file.pdf');
}
//FUNCTION FOR DOWNLOAD ZIP FILE
public function download_zip(){
$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);
}
$emp_codes = $this->input->post("emp_codes");
$emp_codes = str_replace('"', '', $emp_codes);
$emp_code_arr = explode(',', $emp_codes ?? "");
$path_name = strtolower($this->input->post('path_name'));
$path = "./pdf_generation/".$path_name."/";
$zip = new ZipArchive();
$filename = "./pdf_generation/".$path_name.".zip";
unlink($filename);
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit("cannot open <$filename>\n");
}
$dir = $path;
if (is_dir($dir)){
if ($dh = opendir($dir)){
while (($file = readdir($dh)) !== false){
if($file != '' && $file != '.' && $file != '..'){
$file_name = $path.$file.'/';
if (is_dir($file_name)){
if ($dhs = opendir($file_name)){
while (($files = readdir($dhs)) !== false){
if (in_array($files, $emp_code_arr)){
if (is_file($file_name.$files)) {
if($files != '' && $files != '.' && $files != '..'){
$zip->addFile($file_name.$files);
}
}
}
}
closedir($dhs);
}
}
}
}
closedir($dh);
}
}
$zip->close();
$filename = str_replace("./","",$filename);
echo json_encode(array('success' => true,'filename' => $filename));
}
}
?>