File: /home/cafsindia/uds.cafsinfotech.in/application/controllers/Process_payroll_fms.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Action_controller.php");
class Process_payroll_fms extends Action_controller{
public function __construct(){
parent::__construct('process_payroll_fms');
}
// LOAD PAGE QUICK LINK,FILTERS AND TABLE HEADERS
public function index(){
$this->create_formula_file();
//PERSONAL AREA
$per_area_rslt = $this->query_build_function('personal_code,personal_name','cw_sap_personal_area','','trans_status = 1 and FIND_IN_SET(personal_code, "'.$this->logged_area_access.'") ');
$per_area_list = "";
foreach($per_area_rslt as $for){
$personal_code = $for['personal_code'];
$personal_name = $for['personal_name'];
if($personal_code !== ""){
$per_area_list .= "<option data-value='".$personal_code."' value='".trim($personal_code)."' >".trim($personal_name)."</option>";
}
}
$data['per_area_list'] = $per_area_list;
$excel_format_qry = 'select prime_excel_format_id,excel_name from cw_util_excel_format where excel_module_id = "transactions_fms" and trans_status = 1';
$excel_format = $this->db->query("CALL sp_a_run ('SELECT','$excel_format_qry')");
$excel_result = $excel_format->result();
$excel_format->next_result();
$excel_format_drop[""] = "---- Excel Format ----";
foreach($excel_result as $excel){
$prime_excel_format_id = $excel->prime_excel_format_id;
$excel_name = $excel->excel_name;
$excel_format_drop[$prime_excel_format_id] = $excel_name;
}
$data['excel_format_drop'] = $excel_format_drop;
$data['module_id'] = "transactions_fms";
$data['encKey'] = $this->generateKey();
$this->load->view("$this->control_name/manage",$data);
}
//PROCESS PAYROLL SETTINGS BASED PAYROLL INPUT COLUMNS SELECT
public function payroll_filter_pick_column($type){
$payroll_filter_col_rslt = $this->payroll_filter_col_setting();
$payroll_filter_arr = $this->pay_picklist_get_function("filter",$payroll_filter_col_rslt,$type);
return $payroll_filter_arr;
}
public function payroll_filter_col_setting(){
$payroll_filter_column_qry = 'select prime_form_id,field_type,pick_list,pick_list_type,view_name,pick_table,pick_display_value,label_name,auto_prime_id,auto_dispaly_value,cw_process_payroll_settings.mandatory_column from cw_form_setting inner join cw_process_payroll_settings on cw_process_payroll_settings.map_column = cw_form_setting.label_name where prime_module_id = "employees" and cw_form_setting.trans_status = 1 and cw_process_payroll_settings.trans_status = 1 and cw_process_payroll_settings.filter_column = 1 ORDER BY cw_process_payroll_settings.prime_process_payroll_settings_id ASC';
$payroll_filter_column_data = $this->db->query("CALL sp_a_run ('SELECT','$payroll_filter_column_qry')");
$payroll_filter_column_rslt = $payroll_filter_column_data->result();
$payroll_filter_column_data->next_result();
return $payroll_filter_column_rslt;
}
public function pro_mon_payroll_data(){
$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);
}
$process_month = $this->input->post("process_month");
// $process_type = (int)$this->input->post("process_type");
$sel_cols = "";
$join_table = "";
$join_whre_cond = "";
$group_by = "";
$sel_cols = ',cw_sap_personal_area.personal_code,cw_sap_personal_area.personal_name';
$join_table = ' INNER JOIN cw_sap_personal_area ON cw_sap_personal_area.personal_code = cw_transactions_fms.personal_code';
$join_whre_cond = ' and cw_sap_personal_area.trans_status = 1';
$group_by = ' GROUP BY cw_sap_personal_area.personal_code';
$trans_qry = 'select cw_transactions_fms.employee_code,cw_transactions_fms.emp_name'.$sel_cols.' from cw_transactions_fms'.$join_table.' where cw_transactions_fms.trans_status = 1 and cw_transactions_fms.process_month = "'.$process_month.'"'.$join_whre_cond.$group_by;
$trans_info = $this->db->query("CALL sp_a_run ('SELECT','$trans_qry')");
$trans_rslt = $trans_info->result_array();
$trans_info->next_result();
echo json_encode($trans_rslt);
}
//DR CODE START FOR PROJECT ID FETCH BASED ON PERSONAL CODE AND PROCESS MONTH
public function project_id_fetch(){
$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);
}
$personal_code = $this->input->post('personal_code');
// $search_month = $this->input->post('search_month');
$process_month = $this->input->post("process_month");
$process_mode = $this->input->post("process_mode");
$delete_type = $this->input->post("delete_type");
$entry_flag = "";
//FOR ACTIVE PROJECT ONLY SHOULD SHOW IN PICKLIST
$start_date = date("Y-m-d",strtotime('01-'.$process_month));
$end_date = date("Y-m-t",strtotime($start_date));
if((int)$process_mode === 3 || ((int)$process_mode === 2 && (int)$delete_type === 1)){//view payroll and delete payroll and transactions
$pro_id_qry = 'SELECT pro_id,pro_desc FROM cw_sap_project WHERE cw_sap_project.pro_personal_area_id = "'.$personal_code.'" and cw_sap_project.pro_start_date <= "'.$start_date.'" and cw_sap_project.pro_end_date >= "'.$end_date.'" and cw_sap_project.trans_status = 1';
}else{
if((int)$delete_type === 2){
$entry_flag = ' and cw_trans_failure_log.r_flag = "C" ';
}else
if((int)$delete_type === 3){
$entry_flag = ' and cw_trans_failure_log.r_flag = "L" ';
}else
if((int)$delete_type === 4){
$entry_flag = ' and cw_trans_failure_log.r_flag = "O" ';
}
$pro_id_qry = 'SELECT cw_sap_project.pro_id,cw_sap_project.pro_desc FROM cw_sap_project INNER JOIN cw_sap_wbs ON cw_sap_wbs.wbs_project_id = cw_sap_project.pro_id INNER JOIN cw_trans_failure_log ON cw_trans_failure_log.wbs_element = cw_sap_wbs.wbs_id WHERE cw_sap_project.pro_personal_area_id = "'.$personal_code.'" AND cw_sap_project.pro_start_date <= "'.$start_date.'" AND cw_sap_project.pro_end_date >= "'.$end_date.'" AND cw_sap_project.trans_status = 1 AND cw_trans_failure_log.process_month="'.$process_month.'" '.$entry_flag.' GROUP BY cw_sap_project.pro_id';
}
// GROUP BY cw_sap_project.pro_id
$pro_id_info = $this->db->query("CALL sp_a_run ('SELECT','$pro_id_qry')");
$pro_id_rslt = $pro_id_info->result_array();
$pro_id_info->next_result();
$pro_list = "<option value = ''>---- Select Project ----</option>";
foreach($pro_id_rslt as $for){
$prime_id = $for['prime_sap_project_id'];
$pro_id = $for['pro_id'];
$pro_desc = $for['pro_desc'];
$pro_list .= "<option value = '$pro_id' data-value = '$pro_id'> $pro_desc</option>";
}
echo $pro_list;
}
//DR CODE FOR WBS ELEMENT FETCH BASED ON PERSONAL AREA AND PROJECT ID AND PROCESS MONTH
public function get_wbs(){
$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');
$process_month = $this->input->post('process_month');
$personal_code = $this->input->post('personal_code');
$project_id = $this->input->post('project_id');
$process_mode = (int)$this->input->post('process_mode');
$delete_type = (int)$this->input->post('delete_type');
$start_date = date("Y-m-d",strtotime('01-'.$process_month));
$end_date = date("Y-m-t",strtotime($start_date));
if((int)$process_mode === 3 || ((int)$process_mode === 2 && $delete_type === 1)){
$get_wbs_qry = 'SELECT DISTINCT cw_sap_wbs.prime_sap_wbs_id,cw_sap_wbs.wbs_id,cw_sap_wbs.wbs_desc FROM cw_sap_wbs INNER JOIN cw_transactions_fms ON (cw_transactions_fms.personal_code = cw_sap_wbs.wbs_personal_area_id AND cw_transactions_fms.project_id = cw_sap_wbs.wbs_project_id AND cw_transactions_fms.wbs_element = cw_sap_wbs.wbs_id) WHERE cw_sap_wbs.trans_status = 1 AND cw_sap_wbs.wbs_personal_area_id = "'.$personal_code.'" AND cw_transactions_fms.process_month = "'.$process_month.'" AND cw_transactions_fms.project_id = "'.$project_id.'" AND cw_transactions_fms.personal_code = "'.$personal_code.'" AND cw_transactions_fms.trans_status = 1';
}else{
if((int)$delete_type === 2){
$entry_flag = ' and cw_trans_failure_log.r_flag = "C" ';
}else
if((int)$delete_type === 3){
$entry_flag = ' and cw_trans_failure_log.r_flag = "L" ';
}else{
$entry_flag = ' and cw_trans_failure_log.r_flag = "O" ';
}
$get_wbs_qry = 'SELECT DISTINCT cw_sap_wbs.prime_sap_wbs_id,cw_sap_wbs.wbs_id,cw_sap_wbs.wbs_desc FROM cw_sap_wbs INNER JOIN cw_trans_failure_log ON cw_trans_failure_log.wbs_element = cw_sap_wbs.wbs_id WHERE cw_sap_wbs.trans_status = 1 AND cw_trans_failure_log.personal_code = "'.$personal_code.'" AND cw_sap_wbs.wbs_project_id ="'.$project_id.'" AND cw_trans_failure_log.process_month="'.$process_month.'" '.$entry_flag.' '; //GROUP BY cw_sap_wbs.wbs_id
}
$get_wbs_info = $this->db->query("CALL sp_a_run ('SELECT','$get_wbs_qry')");
$get_wbs_rslt = $get_wbs_info->result_array();
$get_wbs_info->next_result();
$wbs_list = "<option value = ''>---- Select Wbs ----</option>";
foreach($get_wbs_rslt as $for){
$prime_id = $for['prime_sap_wbs_id'];
$wbs_id = $for['wbs_id'];
$wbs_desc = $for['wbs_desc'];
$wbs_list .= "<option value = '$wbs_id' data-value = '$wbs_id'> $wbs_desc</option>";
}
echo $wbs_list;
}
//DR CODE START FOR PROCESS MONTH BASED EMPLOYEE CODE GET
public function get_emp_code(){
$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');
$process_month = $this->input->post('process_month');
$personal_code = $this->input->post('personal_code');
$project_id = $this->input->post('project_id');
$wbs_element = $this->input->post('wbs_element');
$process_mode = (int)$this->input->post('process_mode');
$delete_type = (int)$this->input->post('delete_type');
if((int)$process_mode === 3 || ((int)$process_mode === 2 && $delete_type === 1)){ //view payroll or delete payroll and transactions
$emp_qry = 'SELECT cw_transactions_fms.emp_name,cw_transactions_fms.employee_code
from cw_transactions_fms where cw_transactions_fms.trans_status = 1 and cw_transactions_fms.process_month = "'.$process_month.'" and cw_transactions_fms.personal_code = "'.$personal_code.'" and cw_transactions_fms.project_id = "'.$project_id.'" and cw_transactions_fms.wbs_element = "'.$wbs_element.'" GROUP BY cw_transactions_fms.employee_code';
}else{
if((int)$delete_type === 2){
$entry_flag = ' and cw_trans_failure_log.r_flag = "C" ';
}else
if((int)$delete_type === 3){
$entry_flag = ' and cw_trans_failure_log.r_flag = "L" ';
}else{
$entry_flag = ' and cw_trans_failure_log.r_flag = "O" ';
}
$emp_qry = 'SELECT cw_employees.emp_name,cw_employees.employee_code FROM cw_employees
INNER JOIN cw_trans_failure_log ON cw_trans_failure_log.employee_code = cw_employees.employee_code
INNER JOIN cw_sap_wbs ON cw_sap_wbs.wbs_id= cw_trans_failure_log.wbs_element WHERE cw_sap_wbs.wbs_project_id = "'.$project_id.'" AND cw_trans_failure_log.personal_code="'.$personal_code.'" AND cw_trans_failure_log.wbs_element="'.$wbs_element.'" AND cw_trans_failure_log.process_month="'.$process_month.'"'.$entry_flag;
}
$trans_info = $this->db->query("CALL sp_a_run ('SELECT','$emp_qry')");
$trans_rslt = $trans_info->result_array();
$trans_info->next_result();
$emp_list = "<option value = ''>---- Select Employee ----</option>";
foreach($trans_rslt as $for){
$emp_code = $for['employee_code'];
$emp_name = $for['emp_name'];
$emp_list .= "<option value = '$emp_code ~ $emp_name' data-value = '$emp_code'> $emp_name</option>";
}
echo $emp_list;
}
//LOAD PAGE TABLE VIEW WITH DATA BASED ON SEARCH FILTERS
public function process_payroll_fms(){
$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);
}
$post_data = $this->input->post();
unset($post_data['process_month']);
unset($post_data['process_mode']);
// unset($post_data['process_type']);
// unset($post_data['employee_code']);
$filter_qry = http_build_query($post_data, '', ',');
// $filter_qry
if(!$filter_qry){
echo json_encode(array('success' => true,'message' => "Monthly Input Filter Setting not Mapped Please Map Filter Setting Columns..."));
exit(0);
}else{
$payroll_filter_setting_rslt = $this->payroll_filter_col_setting();
$filter_qry = "";
foreach($payroll_filter_setting_rslt as $setting){
$label_name = $setting->label_name;
$label_id = $this->input->post("$label_name");
$mandatory_col = (int)$setting->mandatory_column;
if($label_id){
$filter_qry .= ' and cw_transactions_fms.'.$label_name.' = "' . $label_id . '"';
}
}
}
$process_month = $this->input->post("process_month");
$personal_code = $this->input->post('personal_code');
$project_id = $this->input->post('project_id');
$wbs_element = $this->input->post('wbs_element');
// $wbs_element = $wbs_element[0];
$employee_code = $this->input->post('employee_code');
$emp_split = explode('~', $employee_code ?? "");
$employee_code = trim($emp_split[0]);
// $employee_code = $employee_code[0];
$process_mode = (int)$this->input->post("process_mode");
$delete_type = (int)$this->input->post('delete_type');
$logged_id = $this->logged_id;
$filter_qry = ' and cw_transactions_fms.personal_code = "'.$personal_code.'" and cw_transactions_fms.project_id = "'.$project_id.'"';
$del_filter_qry = ' and cw_trans_failure_log.personal_code = "'.$personal_code.'"';
if($wbs_element){
$filter_qry .= ' and cw_transactions_fms.wbs_element = "'.$wbs_element.'"';
$del_filter_qry .= ' and cw_trans_failure_log.wbs_element="'.$wbs_element.'"';
}
if($employee_code){
$filter_qry .= ' and cw_transactions_fms.employee_code = "'.$employee_code.'"';
$del_filter_qry .= ' and cw_trans_failure_log.employee_code = "'.$employee_code.'"';
}
if($process_mode === 2){//DELETE PAYROLL
if($delete_type === 1){ //transactions employees
$sap_trans_sts_chk = 'select count(*) as status_count from cw_transactions_fms where cw_transactions_fms.process_month = "'.$process_month.'" '.$filter_qry.'';
}else{
if((int)$delete_type === 2){
$entry_flag = ' and cw_trans_failure_log.r_flag = "C" ';
}else
if((int)$delete_type === 3){
$entry_flag = ' and cw_trans_failure_log.r_flag = "L" ';
}else{
$entry_flag = ' and cw_trans_failure_log.r_flag = "O" ';
}
$sap_trans_sts_chk = 'select count(*) as status_count from cw_trans_failure_log
INNER JOIN cw_pre_audit_salary ON cw_pre_audit_salary.wbs_element = cw_trans_failure_log.wbs_element WHERE cw_pre_audit_salary.project_id = "'.$project_id.'" AND cw_trans_failure_log.process_month="'.$process_month.'" AND cw_pre_audit_salary.process_month="'.$process_month.'" AND cw_pre_audit_salary.audit_status= 1 and cw_trans_failure_log.trans_status = 1 '.$entry_flag.$del_filter_qry;
}
$trans_sts_info = $this->db->query("CALL sp_a_run ('SELECT','$sap_trans_sts_chk')");
$trans_sts_rslt = $trans_sts_info->result_array();
$trans_sts_info->next_result();
$sap_trans_count = (int)$trans_sts_rslt[0]['status_count'];
if($sap_trans_count === 0){
echo json_encode(array('success' => FALSE,'message' => "No Records Found.!"));
exit(0);
}else{
$save_result = $this->db->query("CALL itsp_delete_prcpay('$project_id','$wbs_element','$process_month','$employee_code','$logged_id','$delete_type')");
$save_result_rslt = $save_result->result();
$save_result->next_result();
if((int)$save_result_rslt[0]->result === 1){
$table_view = $this->transaction_data($process_month,$filter_qry);
$tbl_count = (int)$table_view['table_count'];
$tbl_view = $table_view['table_content'];
if($tbl_count === $sap_trans_count){
echo json_encode(array('success' => FALSE,'message' => "There is no data to delete!"));
exit(0);
}else{
if($tbl_view){
echo json_encode(array('success' => TRUE,'message' =>"Payroll Process Deleted.The following records display below can't delete as it neither failed nor reversed.",'table_content' => $tbl_view));
exit(0);
}else{
echo json_encode(array('success' => TRUE,'message' =>"Payroll Process Deleted.",'table_content' => $tbl_view));
exit(0);
}
}
}else
if((int)$save_result_rslt[0]->result === 2){
echo json_encode(array('success' => FALSE,'message' => "Future Month Payroll Already Exist.. PLease Reverse the Future month and try again..!"));
exit(0);
}else
if((int)$save_result_rslt[0]->result === 3){
$table_view = $this->transaction_data($process_month,$filter_qry);
$tbl_view = $table_view['table_content'];
echo json_encode(array('success' => FALSE,'message' => "Arrear has been processed for this combination.Kindly delete it and process again.!",'table_content' => $tbl_view));
exit(0);
}
}
}else
if($process_mode === 3){//VIEW PAYROLL
$table_view = $this->transaction_data($process_month,$filter_qry);
$tbl_view = $table_view['table_content'];
if(!$tbl_view){
echo json_encode(array('success' => FALSE, 'message' =>"No Records Found.!"));
}else{
echo json_encode(array('success' => TRUE, 'message' =>"See payroll details.!",'table_content' =>$tbl_view));
}
}
}
//SELECT PAYROLL DATA IN TABLE FORMAT
public function transaction_data($process_month,$filter_qry){
$form_setting_query = 'SELECT prime_form_id,view_name,label_name,field_type,pick_list_type,pick_list,pick_table,auto_prime_id,auto_dispaly_value from cw_form_setting where prime_module_id = "employees" and input_view_type in (1,2) and transaction_type in (1,2,3) and (earn_payroll_check = "1" or ded_payroll_check = "1") and trans_status = "1" order by payroll_sort asc';
$form_setting_info = $this->db->query("CALL sp_a_run ('SELECT','$form_setting_query')");
$form_setting_rslt = $form_setting_info->result();
$form_setting_info->next_result();
$table_name = "cw_transactions_fms";
$thead_line = "";
$thead = "";
$select_query = "";
$pick_query = "";
foreach($form_setting_rslt as $form){
$prime_form_id = (int)$form->prime_form_id;
$view_name = $form->view_name;
$label_name = $form->label_name;
$field_type = (int)$form->field_type;
$pick_list_type = (int)$form->pick_list_type;
$pick_list = $form->pick_list;
$pick_table = $form->pick_table;
$auto_prime_id = $form->auto_prime_id;
$auto_dispaly_value = $form->auto_dispaly_value;
if($label_name == "role"){
$view_name = "Category";
}
if((int)$field_type === 4){
$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y") as '.$label_name.' , ';
}else
if(($field_type === 5) || ($field_type === 7)){
if($pick_list_type === 1){
$pick_list_val = explode(",",$pick_list ?? "");
$pick_list_val_1 = $pick_list_val[0];
$pick_list_val_2 = $pick_list_val[1];
$pick_query_as = $pick_table."_".$prime_form_id;
$select_query .= "$pick_query_as.$pick_list_val_2 as $label_name , ";
$pick_query .= " left join $pick_table as $pick_query_as on $pick_query_as.$pick_list_val_1 = $table_name.$label_name ";
}else
if($pick_list_type === 2){
$pick_list_val_1 = $pick_table."_id";
$pick_list_val_2 = $pick_table."_value";
$pick_list_val_3 = $pick_table."_status";
$pick_query_as = $pick_table."_".$prime_form_id;
$select_query .= "$pick_query_as.$pick_list_val_2 as $label_name , ";
$pick_query .= " left join $pick_table as $pick_query_as on $pick_query_as.$pick_list_val_1 = $table_name.$label_name ";
}
}else
if($field_type === 9){
$pick_query_as = $pick_table."_".$prime_form_id;
$select_query .= "$pick_query_as.$auto_dispaly_value as $label_name,";
$pick_query .= " left join $pick_table as $pick_query_as on $pick_query_as.$auto_prime_id = $table_name.$label_name ";
}else{
$select_query .= "$table_name.$label_name , ";
}
if((int)$i === 1){
$th_style = "class='hard_left'";
}else
if((int)$i === 2){
$th_style = "class='next_left'";
}else{
$th_style = "";
}
$thead_line .= "<th $th_style>$view_name</th>";
$i++;
}
$thead = "<tr>$thead_line</tr>";
$select_query = rtrim($select_query,',');
$select_query = rtrim($select_query,' , ');
$trans_status = " left join cw_employees on cw_employees.employee_code = cw_transactions_fms.employee_code where ".$table_name.".trans_status = 1 and cw_transactions_fms.process_month = \"".$process_month."\"";
$final_qry = "select $select_query $query_key from $table_name $pick_query $trans_status $filter_qry";
$final_data = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
$final_result = $final_data->result();
$final_data->next_result();
$final_count = count($final_result ?? []);
$table_content = "";
if(empty($final_result)){
return 1; // [MS 12-12-2024]
}else{
$tr_line = "";
foreach($final_result as $rslt){
$td_line = "";
$j = 1;
foreach($rslt as $value){
if((int)$j === 1){
$cls = "class='hard_left'";
}else
if((int)$j === 2){
$cls = "class='next_left'";
}else{
$cls = "";
}
$td_line .= "<td $cls>$value</td>";
$j++;
}
$tr_line .= "<tr>$td_line</tr>";
}
$table_content = "<div class='outer'><div class='inner'><table class='table table-bordered display' id='detail_list' style='box-shadow:none;'>
<thead>
$thead
</thead>
<tbody>
$tr_line
</tbody>
</table></div></div>";
$result = array('table_content' => $table_content,'table_count'=>$final_count);
return $result;
}
}
//CREATE_FORMULA_FILE
public function create_formula_file(){ //file path with server
$filename = dirname(__FILE__)."/"."Payroll_calculation_model.php";
$filename = str_replace('controllers','models',$filename);
if(file_exists($filename)){
$created_date = date("Y-m-d H:i:s",filemtime($filename));
$isupdated_qry = 'SELECT count(*) as tot_count FROM cw_payroll_formula WHERE trans_created_date >= "'.$created_date.'" or trans_updated_date >= "'.$created_date.'"';
$isupdated_data = $this->db->query("CALL sp_a_run ('SELECT','$isupdated_qry')");
$isupdated_result = $isupdated_data->result();
$isupdated_data->next_result();
$tot_count = (int)$isupdated_result[0]->tot_count;
$loan_updated_qry = 'SELECT count(*) as tot_count FROM cw_loan WHERE trans_created_date >= "'.$created_date.'" or trans_updated_date >= "'.$created_date.'"';
$loan_updated_data = $this->db->query("CALL sp_a_run ('SELECT','$loan_updated_qry')");
$loan_updated_result = $loan_updated_data->result();
$loan_updated_data->next_result();
$loan_tot_count = (int)$loan_updated_result[0]->tot_count;
if((int)$tot_count > 0 || (int)$loan_tot_count > 0){
$can_process = true;
}else{
$can_process = false;
}
}else{
$can_process = true;
//END Total Earnings and Total Deduction Auto Calculate
}
//$can_process = true;
//get function name and map column and input value
$statutory_map_qry = 'select map_column,statutory_function_name as function_name,input_column from cw_payroll_function inner join cw_statutory_function on cw_statutory_function.prime_statutory_function_id =cw_payroll_function.function_name where cw_payroll_function.trans_status = 1';
$statutory_map_data = $this->db->query("CALL sp_a_run ('SELECT','$statutory_map_qry')");
$statutory_map_result = $statutory_map_data->result();
$statutory_map_data->next_result();
$statutory_map_list = array();
foreach($statutory_map_result as $statutory_map){
$map_column = $statutory_map->map_column;
$function_name = $statutory_map->function_name;
$input_column = $statutory_map->input_column;
$statutory_map_list[$map_column] = array('map_column'=>$map_column,'function_name'=> $function_name, 'input_column'=>$input_column, 'sts'=>false);
}
if($can_process){
$map_qry = 'select formula_for,out_column,payroll_formula,formula_mode from cw_payroll_formula where cw_payroll_formula.trans_status = 1';
$data = $this->db->query("CALL sp_a_run ('SELECT','$map_qry')");
$map_result = $data->result();
$data->next_result();
$map_list = array();
foreach($map_result as $map_result_map){
$formula_for = $map_result_map->formula_for;
$out_column = $map_result_map->out_column;
$payroll_formula = $map_result_map->payroll_formula;
$formula_mode = $map_result_map->formula_mode;
$this->sort_formula($formula_for,$out_column,$payroll_formula,$formula_mode);
}
$oldmask = umask(0);
$formula_temp_file = dirname(__FILE__)."/"."Payroll_calculation_model.php";
$formula_temp_file = str_replace('controllers','models',$formula_temp_file);
fopen("$formula_temp_file", "w");
file_put_contents("$formula_temp_file",$final_code);
chmod($formula_temp_file, 0777);
umask($oldmask);
}
}
//sorting formula updates
public function sort_formula($formula_for,$out_column,$payroll_formula,$formula_mode){
$preg_match_inputs = preg_match_all('#\@(.*?)\@#', $payroll_formula,$preg_match_inputsvalue);
$preg_match_inputsvalue_count = count($preg_match_inputsvalue[1] ?? []);
$input_match_column = implode('","',$preg_match_inputsvalue[1] ?? []);
$input_match_column ='"'.$input_match_column.'"';
$qu_find_sortorder='select IFNULL(MIN(formula_order), 0) as formula_order_min, IFNULL(MAX(formula_order), 0) as formula_order_max from cw_payroll_formula where formula_for = "'.$formula_for.'" and (out_column="'.$out_column.'" or out_column in ('.$input_match_column.')) and trans_status = 1 order by formula_order desc';
$max_min_data = $this->db->query("CALL sp_a_run ('SELECT','$qu_find_sortorder')");
$max_min_rslt = $max_min_data->result();
$max_min_data->next_result();
$outcolum_maxorder = $max_min_rslt[0]->formula_order_max;
$outcolum_minorder = $max_min_rslt[0]->formula_order_min;
$outcolum_order = $outcolum_maxorder;
$min = $outcolum_minorder;
$qu_find_sortorder_data='select out_column,formula_order from cw_payroll_formula where formula_for = "'.$formula_for.'" and (formula_mode !=1 or out_column="'.$out_column.'") and formula_order between "'.$min.'" and "'.$outcolum_maxorder.'" and trans_status = 1 order by formula_order asc';
$max_min_sort_data = $this->db->query("CALL sp_a_run ('SELECT','$qu_find_sortorder_data')");
$max_min_sort_rslt = $max_min_sort_data->result();
$max_min_sort_data->next_result();
foreach ($max_min_sort_rslt as $result){
$out_column_db = $result->out_column;
$formula_order = $result->formula_order;
if($out_column==$out_column_db){
if((int)$formula_mode === 1){
$upd_sort = 'UPDATE cw_payroll_formula SET formula_order = 1 where formula_for = "'.$formula_for.'" and out_column = "'.$out_column.'" and trans_status = 1';
}else{
$upd_sort = 'UPDATE cw_payroll_formula SET formula_order = "'.$outcolum_order.'" where formula_for = "'.$formula_for.'" and out_column = "'.$out_column.'" and trans_status = 1';
}
$this->db->query("CALL sp_a_run ('RUN','$upd_sort')");
}else{
$upd_sort = 'UPDATE cw_payroll_formula SET formula_order = "'.$min.'" where formula_for = "'.$formula_for.'" and out_column="'.$out_column_db.'" and formula_order="'.$formula_order.'" and formula_mode !=1 and trans_status = 1';
$this->db->query("CALL sp_a_run ('RUN','$upd_sort')");
$min++;
}
}
if((int)$formula_mode !== 1){
$find_max_order_qry ='select IFNULL(MAX(formula_order), 0) as max_order from cw_payroll_formula where formula_for = "'.$formula_for.'" and trans_status = 1 and out_column != "net_pay" order by formula_order desc';
$max_order_data = $this->db->query("CALL sp_a_run ('SELECT','$find_max_order_qry')");
$max_order_rslt = $max_order_data->result();
$max_order_data->next_result();
$max_order = $max_order_rslt[0]->max_order;
$i = (int)$max_order + 1;
if($max_order){
$upd_sort_net = 'UPDATE cw_payroll_formula SET formula_order = "'.$i.'" where formula_for = "'.$formula_for.'" and out_column = "net_pay"';
$this->db->query("CALL sp_a_run ('RUN','$upd_sort_net')");
}
}
}
// Sheet Name display in import page
public function sheet_name(){
$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);
}
$file_path = $this->input->post('file_path');
$filename = dirname(__FILE__)."/php_excel/PHPExcel/IOFactory.php";
include($filename);
$excel_obj = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_path);
$sheet_count = $excel_obj->getSheetCount();
$sheet_name = array();
for($i= 0; $i< $sheet_count; $i++){
$sheet = $excel_obj->getSheet($i);
$sheet_name[] = $sheet->getTitle();
}
echo json_encode(array('sheet_name' =>$sheet_name));
}
//excel maaping format
public function fms_excel($Payload){
//Decryption
$_POST = $this->cryptoDecrypt(base64_decode(urldecode($Payload)));
$module_id = $this->input->post('module_id');
$excel_format = $this->input->post('excel_format');
$excel_format_qry = 'select excel_name,excel_line_column_name,excel_line_value from cw_util_excel_format_line inner join cw_util_excel_format on cw_util_excel_format.prime_excel_format_id = cw_util_excel_format_line.prime_excel_format_id where excel_line_module_id = "'.$module_id.'" and cw_util_excel_format_line.prime_excel_format_id ="'.$excel_format.'" and cw_util_excel_format_line.trans_status = 1 and cw_util_excel_format.trans_status = 1 GROUP BY excel_line_column_name';
$excel_format = $this->db->query("CALL sp_a_run ('SELECT','$excel_format_qry')");
$excel_result = $excel_format->result();
$excel_format->next_result();
$get_view_name_query = 'SELECT view_name,label_name FROM `cw_form_setting` WHERE trans_status = 1 and prime_module_id = "employees"';
$column_info = $this->db->query("CALL sp_a_run ('SELECT','$get_view_name_query')");
$column_rslt = $column_info->result_array();
$column_info->next_result();
$column_rslt = array_reduce($column_rslt ?? [], function ($result, $arr) {
$result[$arr['label_name']] = $arr['view_name'];
return $result;
}, array());
$excel_name = str_replace(' ', '_', $excel_result[0]->excel_name);
require_once APPPATH."/controllers/php_excel/PHPExcel.php";
$obj = new PHPExcel();
//Set the first row as the header row
foreach($excel_result as $excel){
$view_name = $column_rslt[$excel->excel_line_column_name];
$col_name = $excel->excel_line_column_name;
$excel_line_value = $excel->excel_line_value;
if(!$view_name){
$view_name = str_replace('_', ' ', $excel->excel_line_column_name);
}
$obj->getActiveSheet()->setCellValue($excel_line_value."1", $view_name);
}
// Rename worksheet name
$filename= $module_id.".xls"; //save our workbook as this file name
ob_end_clean();
header('Content-Type: application/vnd.ms-excel'); //mime type
header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
header('Cache-Control: max-age=0'); //no cache
ob_end_clean();
//save it to Excel5 format (excel 2003 .XLS file), change this to 'Excel2007' (and adjust the filename extension, also the header mime type)
//if you want to save it as .XLSX Excel 2007 format
$objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($obj, 'Excel5');
//force user to download the Excel file without writing it to server's HD
$objWriter->save('php://output');
echo json_encode(array('success' => TRUE, 'output' => $excelOutput));
}
//SAVE IMPORT FILE PATH
public function save_import(){
$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);
}
$module_id = $this->control_name;
$process_month = $this->input->post('transaction_month');
$excel_format = $this->input->post('excel_format');
$excel_file_path = $this->input->post('excel_file_path');
$excel_sheet_name = $this->input->post('excel_sheet_name');
$excel_start_row = $this->input->post('excel_start_row');
$excel_end_row = $this->input->post('excel_end_row');
$logged_id = $this->session->userdata('logged_id');
$today_date = date("Y-m-d h:i:s");
$import_query = 'INSERT INTO cw_month_import (module_id,excel_format,excel_file_path,excel_sheet_name,excel_start_row,excel_end_row,process_month,trans_created_by,trans_created_date) VALUES ("'.$module_id.'","'.$excel_format.'","'.$excel_file_path.'","'.$excel_sheet_name.'","'.$excel_start_row.'","'.$excel_end_row.'","'.$process_month.'","'.$logged_id.'","'.$today_date.'")';
$import_info = $this->db->query("CALL sp_a_run ('INSERT','$import_query')");
$import_result = $import_info->result();
$import_info->next_result();
$import_id = $import_result[0]->ins_id;
echo $this->do_excel_payroll_import($import_id,$process_month);
}
//IMPORT DATA FROM FILE PATH
public function do_excel_payroll_import($import_id,$process_month){
$filename = dirname(__FILE__)."/php_excel/PHPExcel/IOFactory.php";
include($filename);
if($import_id < 0){
return json_encode(array('success' => false, 'message' => "Invalid file upload"));
}
$excel_path_qry = 'select * from cw_month_import where import_id = "'.$import_id.'"';
$excel_path_info = $this->db->query("CALL sp_a_run ('SELECT','$excel_path_qry')");
$excel_path_result = $excel_path_info->result();
$excel_path_info->next_result();
if(!$excel_path_result){
return json_encode(array('success' => false, 'message' => "Invalid file upload"));
}else{
$this->prime_table = "cw_transactions_fms";
$excel_file_path = $excel_path_result[0]->excel_file_path;
$module_id = "transactions_fms";
$excel_format = $excel_path_result[0]->excel_format;
$excel_sheet_name = (int)$excel_path_result[0]->excel_sheet_name;
$excel_row_start = (int)$excel_path_result[0]->excel_start_row;
$excel_row_end = (int)$excel_path_result[0]->excel_end_row;
$process_month = $excel_path_result[0]->process_month;
$lock_pay_qry = 'SELECT * FROM cw_payroll WHERE pay_month = "'.$process_month.'" AND status = 1 AND trans_status = 1';
$lock_pay_data = $this->db->query("CALL sp_a_run ('SELECT','$lock_pay_qry')");
$lock_num_rows = $lock_pay_data->num_rows();
$lock_pay_data->next_result();
if((int)$lock_num_rows > 0){
return json_encode(array('success' => false, 'message' => "payroll is locked for this month, please unlocked to upload the files"));
exit(0);
}
$format_qry = 'SELECT * FROM cw_util_excel_format WHERE prime_excel_format_id = "'.$excel_format.'" AND cw_util_excel_format.trans_status = 1';
$format_info = $this->db->query("CALL sp_a_run ('SELECT','$format_qry')");
$format_rslt = $format_info->result();
$format_info->next_result();
if(!$format_rslt){
return json_encode(array('success' => false, 'message' => "Please add excel format before import"));
}else{
$exist_column_name = explode(",",$format_rslt[0]->exist_column_name ?? "");
$excel_format_qry = 'SELECT pick_list_import,mandatory_field,date_type,prime_module_id,date_type,unique_field,pick_list_import,view_name,label_name,field_type,pick_table,pick_list_type,pick_list,mandatory_field,field_isdefault,excel_line_column_name,excel_line_value FROM cw_util_excel_format_line INNER JOIN cw_form_setting ON label_name = excel_line_column_name WHERE excel_line_module_id = "'.$module_id.'" AND prime_excel_format_id = "'.$excel_format.'" AND cw_form_setting.prime_module_id = "employees" AND cw_util_excel_format_line.trans_status = 1 ORDER BY prime_excel_format_line_id ASC';
$excel_format = $this->db->query("CALL sp_a_run ('SELECT','$excel_format_qry')");
$excel_format_result = $excel_format->result();
$excel_format->next_result();
if(!$excel_format_result){
return json_encode(array('success' => false, 'message' => "Please map excel cell column before import"));
}else{
try{
$excel_obj = \PhpOffice\PhpSpreadsheet\IOFactory::load($excel_file_path);
}catch(Exception $e){
die('Error loading file "' . pathinfo($excel_file_path, PATHINFO_BASENAME). '": ' . $e->getMessage());
return json_encode(array('success' => false, 'message' => "Invalid file or path"));
}
$sheet = $excel_obj->getSheet($excel_sheet_name);
if($excel_row_end){
$total_rows = $excel_row_end;
}else{
$total_rows = $sheet->getHighestRow();
}
$highest_column = $sheet->getHighestColumn();
//QRY FOR GET A FORM SETTING BASED EMPLOYEE MASTER PAYROLL COLUMNS(INPUTS)
$form_qry = 'SELECT prime_form_id,prime_module_id,label_name,view_name,field_type,pick_list_type,pick_list,pick_table,pick_display_value,pick_list_import,auto_prime_id,auto_dispaly_value FROM cw_form_setting WHERE cw_form_setting.prime_module_id IN ("employees") AND transaction_type != 4 AND field_type != 10 AND cw_form_setting.trans_status = "1"';
$form_info = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
$form_info_rslt = $form_info->result();
$form_info->next_result();
//ARRAY FOR CHECK A PICKLIST DATA ARE VALID OR NOT
$all_pick_import_arr = $this->get_pick_list_data($form_info_rslt);
//CHECKING VALIDAITON
$columnwise_result = $this->excel_columnwise_validation($sheet,$excel_obj,$import_type,$excel_format_result,$excel_row_start,$total_rows,$module_id,$unq_result,$process_month,$all_pick_import_arr);
$err_column_array = $columnwise_result['err_column_array'];
$err_column_tabview = $columnwise_result['err_column_tabview'];
$err_column_count = count($err_column_array['error'] ?? []);
$err_column = implode(",",(array_unique($err_column_array['error'] ?? [])) ?? []);
if((int)$err_column_count > 0){
$table_info = $this->get_excel_error_ui($err_column_tabview);
echo json_encode(array('success'=>false,'message'=>"Column Wise Error",'table_info'=>$table_info));
exit(0);
}else{
$rowwise_result = $this->excel_rowwise_validation($sheet,$excel_obj,$import_type,$excel_format_result,$excel_row_start,$total_rows,$module_id,$unq_result,$process_month,$all_pick_import_arr);
$err_column_array = $rowwise_result['err_column_array'];
$err_column_tabview = $rowwise_result['err_column_tabview'];
$err_column_count = count($err_column_array['error'] ?? []);
$err_column = implode(",",(array_unique($err_column_array['error'] ?? [])) ?? []);
if((int)$err_column_count > 0){
$table_info = $this->get_excel_error_ui($err_column_tabview);
echo json_encode(array('success'=>false,'message'=>"Row wise Error",'table_info'=>$table_info));
exit(0);
}else{
// IMPORT TO DB
$final_result = $this->final_excel_import($module_id,$sheet,$import_type,$excel_format_result,$excel_row_start,$total_rows,$exist_column_name,$process_month,$all_pick_import_arr);
}
}
}
}
}
}
//COLUMNWISE VALIDATION.
public function excel_columnwise_validation($sheet,$excel_obj,$import_type,$excel_format_result,$excel_row_start,$total_rows,$module_id,$unq_result,$process_month,$all_pick_import_arr){
$err_column_tabview = array();
$array_uniq = array();
//EMPLOYEE EXIST VALIDATION
$new_qry = 'SELECT employee_code FROM cw_employees WHERE trans_status = 1 and DATE_FORMAT(cw_employees.date_of_joining, "%Y-%m") <= DATE_FORMAT(str_to_date("01-'.$process_month.'", "%d-%m-%Y") , "%Y-%m") and (cw_employees.termination_status = 0 or (cw_employees.termination_status = 1 and DATE_FORMAT(cw_employees.resignation_date, "%Y-%m") >= DATE_FORMAT(str_to_date("01-'.$process_month.'", "%d-%m-%Y") , "%Y-%m")))';
$new_info = $this->db->query("CALL sp_a_run ('SELECT','$new_qry')");
$new_rslt = $new_info->result_array();
$new_info->next_result();
$new_emp_code = array_column($new_rslt ?? [], 'employee_code');
foreach($excel_format_result as $key => $value){
$mandatory_field = (int)$value->mandatory_field;
$label_name = $value->label_name;
$view_name = $value->view_name;
$unique_field = $value->unique_field;
$field_type = (int)$value->field_type;
$pick_table = $value->pick_table;
$pick_list_type = (int)$value->pick_list_type;
$excel_line_value = $value->excel_line_value;
$pick_list_import = (int)$value->pick_list_import;
$pick_list = $value->pick_list;
$module_id = $value->prime_module_id;
$get_cell_value = $sheet->rangeToArray("$excel_line_value$excel_row_start:$excel_line_value$total_rows", NULL, TRUE, TRUE, TRUE);
$i = $excel_row_start;
$excel_line_column_name = $value->excel_line_column_name;
foreach($get_cell_value as $common_value){
foreach($common_value as $col_key =>$col_value){
if($excel_line_column_name === "employee_code"){
$employee_code = $col_value;
if(!in_array($employee_code,$new_emp_code)){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "Invalid - [$employee_code] is not exist..!";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
if($trans_rslt[$employee_code] === '2'){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "[$employee_code] - Record has already been imported for the month.";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
}
//EMPTY COLUMN VALUE
if(empty($col_value) && !is_numeric($col_value) && $mandatory_field === 1){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = ": Invalid - Empty Columns and Invalid Data - Please verify the data..!";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}else{
if($field_type === 2){ // FOR DECIMAL
$excel_float = $sheet->getCell("$col_key$i")->getValue();
if(!is_numeric($excel_float) && !empty($excel_float)){
if((int)$this->validateDecimal($excel_float) === 0) {
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "[$col_value] - Invalid... Please map the correct Decimal";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name . " " . $msg_line;
}
}
}elseif($field_type === 3){ // FOR INTEGER
$excel_int = $sheet->getCell("$col_key$i")->getValue();
if(!empty($excel_int)){
if(!is_numeric($excel_int)){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "[$col_value] - Invalid... Please map The correct number";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
}
}elseif($field_type === 4){ // FOR DATE
$cell = $sheet->getCell("$col_key$i");
$excelDateValue = $cell->getValue();
# Convert the raw date value to a PHP date object
$dateObj = PHPExcel_Shared_Date::ExcelToPHPObject($excelDateValue);
$formattedDate = $dateObj->format('d-m-Y');
if($date_type === 1){ //DATE-MONTH-YEAR
if(!empty($formattedDate)){
if((int)$this->validateDOB($formattedDate) === 0){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "[$col_value]: Invalid - Please use the correct Date format (DD-MM-YYYY).!";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
}
}
}elseif(($field_type === 5) || ($field_type === 7)){ // FOR PICKLIST
// if($all_pick_import_arr[$module_id][$pick_list_type][$label_name]){
foreach($all_pick_import_arr as $pick){
if($pick[$module_id][$label_name]){
$pick_list_val = explode(",",$pick_list ?? "");
$pick_list_val_1 = $pick_list_val[0];
$pick_list_val_2 = $pick_list_val[1];
if($excel_line_column_name === "role" && $pick_list_type === 1){
if(in_array($col_value, $pick[$module_id][$label_name][$pick_list_val_2])){
$category= array_search($col_value, $pick[$module_id][$label_name][$pick_list_val_2] ?? []);
}
}
if($pick_list_import === 1 && !in_array($col_value,$pick[$module_id][$label_name][$pick_list_val_1])){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "Invalid Data[$col_value] is Present Please Check it.!";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
if($pick_list_import === 2 && !in_array($col_value,$pick[$module_id][$label_name][$pick_list_val_2])){
$err_column_array['error']["$excel_line_value$i"] = $view_name;
$msg_line = "Invalid Data[$col_value] is Present Please Check it.!";
$err_column_tabview['error']["$excel_line_value$i"] = $view_name." ".$msg_line;
}
}
}
}
}
$i++;
}
}
}
$check_array = array("err_column_array" => $err_column_array,"err_column_tabview" => $err_column_tabview);
return $check_array;
}
//ROW WISE VALIDATION
public function excel_rowwise_validation($sheet,$excel_obj,$import_type,$excel_format_result,$excel_row_start,$total_rows,$module_id,$unq_result,$process_month,$all_pick_import_arr){
//PAY ST COMBINATION
$start_date = date("Y-m-t",strtotime('01-'.$process_month));
$end_date = date("Y-m-d",strtotime('01-'.$process_month));
//status = 1 and
$pay_qry = 'select wbs_element,position,category,status from cw_pay_structure where from_date <= "'.$start_date.'" and to_date >= "'.$end_date.'"';
$pay_info = $this->db->query("CALL sp_a_run ('SELECT','$pay_qry')");
$pay_rslt = $pay_info->result_array();
$pay_info->next_result();
$emp_fil_rslt = array();
foreach($pay_rslt as $arr){
$emp_fil_rslt[$arr['position']][$arr['wbs_element']][$arr['category']] = $arr['status'];
}
//SUCCESS RECORDS SHOULD NOT ALLOW TO IMPORT
$trans_qry = 'SELECT employee_code,position,wbs_element,role,sap_trans_status FROM '.$this->prime_table.' WHERE transactions_month = "'.$process_month.'" AND sap_trans_status = 2 ';
$trans_info = $this->db->query("CALL sp_a_run ('SELECT','$trans_qry')");
$trans_rslt = $trans_info->result_array();
$trans_info->next_result();
$trans_data = array();
foreach($trans_rslt as $trans){
$trans_data[$trans['employee_code']][$trans['position']][$trans['wbs_element']][$trans['role']] = $trans['sap_trans_status'];
}
for($row = $excel_row_start; $row <= $total_rows;$row++){
foreach($excel_format_result as $excel_info){
$label_name = $excel_info->label_name;
$field_type = (int)$excel_info->field_type;
$text_type = (int)$excel_info->text_type;
$excel_line_column_name = $excel_info->excel_line_column_name;
$excel_line_value = $excel_info->excel_line_value;
$view_name = $excel_info->view_name;
$pick_list_type = (int)$excel_info->pick_list_type;
$pick_list = $excel_info->pick_list;
$pick_table = $excel_info->pick_table;
$pick_list_import = (int)$excel_info->pick_list_import;
$mandatory_field = (int)$excel_info->mandatory_field;
$field_length = (int)$excel_info->field_length;
$module_id = $excel_info->prime_module_id;
$get_cell_value = trim($sheet->getCell("$excel_line_value$row")->getCalculatedValue());
if($excel_line_column_name === "employee_code"){
$employee_code = $get_cell_value;
}
if($excel_line_column_name === "position"){
$position = $get_cell_value;
}
if($excel_line_column_name === "wbs_element"){
$wbs_element = $get_cell_value;
}
if($excel_line_column_name === "role" ){
foreach($all_pick_import_arr as $pick){
if($pick[$module_id][$label_name]){
$pick_list_val = explode(",",$pick_list ?? "");
$pick_list_val_1 = $pick_list_val[0];
$pick_list_val_2 = $pick_list_val[1];
if($pick_list_type === 1){
if(in_array($get_cell_value, $pick[$module_id][$label_name][$pick_list_val_2])){
$category= array_search($get_cell_value, $pick[$module_id][$label_name][$pick_list_val_2] ?? []);
}
}
}
}
}
}
//PAY ST COMBINATION VALIDATION
if($wbs_element && $position && $category){
if($trans_data[$employee_code][$position][$wbs_element][$category] === '2'){
$err_column_array['error']["$row"] = $view_name;
$msg_line = "payroll has been posted for this combination.Kindly check!";
$err_column_tabview['error']["$row"] = $msg_line;
}elseif(!$emp_fil_rslt[$position][$wbs_element]){
$err_column_array['error']["$row"] = $view_name;
$msg_line = " Paystructure not Available for this WBS and Position...";
$err_column_tabview['error']["$row"] = $msg_line;
}elseif(!$emp_fil_rslt[$position][$wbs_element][$category]){
$err_column_array['error']["$row"] = $view_name;
$msg_line = " Paystructure not Available for this Activity No and Category...";
$err_column_tabview['error']["$row"] = $msg_line;
}
}
}
$check_array = array("err_column_array" => $err_column_array,"err_column_tabview" => $err_column_tabview);
return $check_array;
}
//FINAL IMPORT
public function final_excel_import($module_id,$sheet,$import_type,$excel_format_result,$excel_row_start,$total_rows,$exist_column_name,$process_month,$all_pick_import_arr){
$insert_data = array();
$update_data = array();
$created_on = date("Y-m-d H:i:s");
for($row = $excel_row_start; $row <= $total_rows; $row++){
$prime_column_val = "";
$prime_cell_val = "";
foreach($excel_format_result as $excel_info){
$label_id = $excel_info->label_name;
$module_id = $excel_info->prime_module_id;
$field_isdefault = (int)$excel_info->field_isdefault;
$mandatory_field = (int)$excel_info->mandatory_field;
$field_type = (int)$excel_info->field_type;
$pick_table = $excel_info->pick_table;
$pick_list_type = (int)$excel_info->pick_list_type;
$pick_list = $excel_info->pick_list;
$excel_line_column_name = $excel_info->excel_line_column_name;
$excel_line_value = $excel_info->excel_line_value;
$pick_list_import = (int)$excel_info->pick_list_import;
$get_cell_value = trim($sheet->getCell("$excel_line_value$row")->getCalculatedValue());
// FOR DATE
if($field_type === 4){
$get_cell_value = trim(date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell("$excel_line_value$row")->getCalculatedValue())));
}
if(($field_type === 5) || ($field_type === 7)){ // FOR PICKLIST
foreach($all_pick_import_arr as $pick){
if($pick[$module_id][$label_id]){
$pick_list_val = explode(",",$pick_list ?? "");
$pick_list_val_1 = $pick_list_val[0];
$pick_list_val_2 = $pick_list_val[1];
if($pick_list_import === 2 && $pick_list_type === 1){
if(in_array($get_cell_value, $pick[$module_id][$label_id][$pick_list_val_2])){
$get_cell_value = array_search($get_cell_value, $pick[$module_id][$label_id][$pick_list_val_2] ?? []);
}
}
}
}
}
if($field_isdefault === 1){
if($excel_line_column_name === "employee_code"){
$employee_code = $get_cell_value;
}
if($excel_line_column_name === "wbs_element"){
$wbs_element = $get_cell_value;
}
if($excel_line_column_name === "position"){
$position = $get_cell_value;
}
$prime_column_val .= $excel_line_column_name.",";
$prime_cell_val .= '"'.$get_cell_value.'",';
}
}
//FOR DUPLICATE RECORDS.
$key = $employee_code . '-' . $wbs_element . '-' . $position;
$check_query = 'SELECT COUNT(*) AS count,prime_transactions_fms_id as prime_id FROM '.$this->prime_table.' WHERE employee_code = "'.$employee_code.'" AND wbs_element = "'.$wbs_element.'" AND position = "'.$position.'" AND transactions_month = "'.$process_month.'" ';
$check_info = $this->db->query("CALL sp_a_run ('SELECT','$check_query')");
$check_result = $check_info->result();
$check_info->next_result();
$prime_transactions_fms_id = $check_result[0]->prime_id;
$check_count = (int)$check_result[0]->count;
if($check_count > 0){
//UPDATE
$update_data[$key] = array('prime_id' => $prime_transactions_fms_id,'employee_code' => $employee_code,'wbs_element' => $wbs_element,'position' => $position,'prime_column_val' => rtrim($prime_column_val, ","),'prime_cell_val' => rtrim($prime_cell_val, ","));
}else{
//INSERT
$insert_data[$key] = array('employee_code' => $employee_code,'wbs_element' => $wbs_element,'position' => $position,'prime_column_val' => rtrim($prime_column_val, ","),'prime_cell_val' => rtrim($prime_cell_val, ","));
}
}
//BULK INSERT
if($insert_data){
$insert_values = array();
$insert_query = 'INSERT INTO '.$this->prime_table.' ('.$insert_data[key($insert_data)]['prime_column_val'].', process_month,transactions_month,trans_updated_by, trans_updated_date) VALUES ';
foreach($insert_data as $data){
$insert_values[] = '('.$data['prime_cell_val'].', "'.$process_month.'", "'.$process_month.'","'.$this->logged_id.'", "'.$created_on.'")';
}
$insert_query .= implode(',', $insert_values ?? []);
$insert_info = $this->db->query("CALL sp_a_run ('INSERT','$insert_query')");
$insert_result = $insert_info->result();
$insert_info->next_result();
}
//UPDATE
foreach($update_data as $data){
$prime_update_val = '';
$column_name = explode(',', $data['prime_column_val'] ?? "");
$cell_value = explode(',', $data['prime_cell_val'] ?? "");
foreach($column_name as $index => $col_name){
if(isset($cell_value[$index])){
$col_value = $cell_value[$index];
$prime_update_val .= $col_name .'='.''.$col_value.',';
}
}
$prime_update_val .= 'trans_updated_by = "'.$this->logged_id.'", trans_updated_date = "'.$created_on.'"';
$update_query = 'UPDATE '.$this->prime_table.' SET '.$prime_update_val.' WHERE prime_transactions_fms_id="'.$data['prime_id'].'"';
$this->db->query($update_query);
}
echo json_encode(array('success' => true,'message' => "Successfully file imported"));
}
//GENERATING ARRAY FOR PICKLIST
public function get_pick_list_data($pick_column_rslt){
$pick_list_data = array();
foreach($pick_column_rslt as $setting){
$label_id = $setting->label_name;
$field_type = (int)$setting->field_type;
$pick_list_type = (int)$setting->pick_list_type;
$pick_list = $setting->pick_list;
$pick_table = $setting->pick_table;
$module_id = $setting->prime_module_id;
$pick_list_import = (int)$setting->pick_list_import;
//FOR PICKLIST
if(($field_type === 5) || ($field_type === 7)){
if($pick_list_type === 1 ){
$pick_list_val = explode(",",$pick_list ?? "");
$pick_list_val_1 = $pick_list_val[0];
$pick_list_val_2 = $pick_list_val[1];
$pick_query = 'SELECT '.$pick_list.' FROM '.$pick_table.' ';
$pick_data = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
$pick_result = $pick_data->result();
$pick_data->next_result();
$prime_id = array_map(function($val) use($pick_list_val_1){
return $val->$pick_list_val_1;
}, $pick_result);
$prime_val = [];
foreach ($pick_result as $val) {
$prime_val[$val->$pick_list_val_1] = $val->$pick_list_val_2;
}
$pick_list_data[] = [$module_id => [$label_id => [$pick_list_val_1 => $prime_id,$pick_list_val_2 => $prime_val]]];
}elseif($pick_list_type === 2){
$pick_list_val_1 = $pick_table."_id";
$pick_list_val_2 = $pick_table."_value";
$pick_list_val_3 = $pick_table."_status";
$pick_query = 'SELECT count(*) AS rslt_count FROM '.$pick_table.' WHERE '.$pick_list_val_2.' = "'.$col_value.'"';
$pick_data = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
$pick_result = $pick_data->result();
$pick_data->next_result();
foreach($pick_result as $row){
$prime_id = $row->$pick_list_val_1;
$prime_val = $row->$pick_list_val_2;
// $pick_list_data[$module_id] = [$pick_list_type => [$label_id => [$pick_list_val_1 => $prime_id,$pick_list_val_2 => $prime_val]]];
$pick_list_data[] = [$module_id => [$label_id => [$pick_list_val_1 => $prime_id,$pick_list_val_2 => $prime_val]]];
}
}
}
}
return $pick_list_data;
}
}
?>