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/uds.cafsinfotech.in/application/views/pay_structure/manage.php
<?php 
    $this->load->view("partial/header"); 

    $access_data    = $this->session->userdata('access_data');
    $access_add     = (int)$access_data[$controller_name]['access_add'];
    $access_update  = (int)$access_data[$controller_name]['access_update'];
    $access_delete  = (int)$access_data[$controller_name]['access_delete'];
    $access_search  = (int)$access_data[$controller_name]['access_search']; 
    $access_export  = (int)$access_data[$controller_name]['access_export'];
    $access_import  = (int)$access_data[$controller_name]['access_import'];
    $page_name      = ucwords(str_replace("_"," ",$controller_name));
    $uniqueId       = "prime_".$controller_name."_id";
    $category       = $this->session->userdata('logged_role');
    $employee_code  = $this->session->userdata('logged_emp_code');
    $user_role      = $this->session->userdata('logged_user_role');
    
    $import_url     = site_url($controller_name ."/import/");
    $breadcrumb     = "";
    if($access_import === 1){
        $breadcrumb = "<li>
                        <a class='btn btn-xs btn-primary import' data-btn-submit= 'Submit' title='Import $page_name' href='$import_url' data_form='$controller_name' > <span class='fa fa-cloud-upload'>&nbsp</span> Import $page_name
                        </a>
                    </li>";
    }
    
?>

<div class='row title_content'>
    <div class='col-md-2 col-xs-4'>
        <h1 class='page_txt'><?php echo $page_name;?></h1>
    </div>
    <div class='col-md-10 col-xs-8'>
        <ol class="breadcrumb">
            <?php  echo $breadcrumb; ?> 
        </ol>
    </div>
</div>
<div id="holder" class="form-inline">
    <div class="col-md-12">
    <!-- FOR DYNAMIC PAY STRUCTURE BUILD FORM CODE -->
    <?php 
        $employee_type          = "";
        $pay_check_col          = "";
        $ajax_post_data         = "";
        $vaildation_add_chk     = "";
        $vaildation_filter_chk  = "";
        $document_load_script   = "";
        $datalist_validate      = "";
        $pay_edit_arr           = array();
        $pick_arr_data          = array();
        foreach($pay_add_filter_setting as $setting){
            $prime_module_id    = "employees";
            $prime_form_id      = (int)$setting->prime_form_id;
            $label_id           = $setting->label_name;
            $label_name         = ucwords($setting->view_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;
            $pick_display       = $setting->pick_display_value;
            $pick_list_import   = (int)$setting->pick_list_import;
            $mandatory_col      = (int)$setting->mandatory_column;
            $auto_prime_id      = $setting->auto_prime_id;
            $auto_dispaly_value = $setting->auto_dispaly_value;
            $depen_pick_list    = (int)$setting->dependent_pick_list;
            $depen_pick_input   = $setting->dependent_pick_input;
            $table_column1      = $setting->table_column1;
            $table_column2      = $setting->table_column2;
            $required           = "";
            $readonly           = "";
            $display            = "";
            $width              = "";
            //FOR MADATORY FIELD
            if($label_id && $mandatory_col === 1){
                $required        = " required";
            }
            //FORM LABLE CREATE(INPUT NAME)
            $form_label      = form_label($label_name, $label_id, array('class' => "control-label$required"));
            //PICKLIST
            if((int)$field_type === 5 || (int)$field_type === 9){
                $option_data    = "";
                if($label_id === "personal_code"){
                   $option_data = $per_area_list;
                   $style      = "width:14%;";
                }
                if($label_id === "position"){
                    $style      = "width:20%;";
                }
                if($label_id === "activity_no"){
                    $width      = "width:17%;";
                }
                //PICKLIST FORM INPUT
                $hid_input_name = "hid_".$label_id; 
                $hidden_id      = $label_id."_hidden_".$prime_form_id;

                if($label_id !== 'network_id'){
                    $datalist_validate .= '[name="'.$hid_input_name.'"],';
                    $form_input = "<input list='list_$label_id' name='$hid_input_name' id='$hid_input_name' value = '' class='form-control $dis_class' placeholder='Search $label_name' size='50'><datalist id='list_$label_id'>$option_data</datalist>";
                    $hidden_input = form_input( array("name"=>$input_name, "id"=>$label_id,"value"=>$input_value,"type"=>"hidden"));
                    echo "<div class='form-group' style = '$dispaly' > $form_label $hidden_input $form_input</div>";
                }
            }   
            //jquery input ajax submit value get and jquery validation check for based on pay structure add and filter columns
            $pay_check_col          .= "var $label_id"."_val = $('#$label_id').val(); \n";
            if($label_id && $mandatory_col === 1){
                $vaildation_add_chk .= $label_id."_val !== '' && ";
            }
            $vaildation_filter_chk  .= $label_id."_val !== '' || ";
            $ajax_post_data         .= "$label_id:$label_id"."_val,";
        }
        $datalist_validate       = rtrim($datalist_validate,",");
        $vaildation_add_chk      = rtrim($vaildation_add_chk,' && ');
        $vaildation_filter_chk   = rtrim($vaildation_filter_chk,' || ');
        //code using only for personal code input based
        $vaildation_filter_chk   = rtrim($vaildation_filter_chk,' && ');
        $ajax_post_data          = rtrim($ajax_post_data,',');

        if($vaildation_add_chk === ""){
            $vaildation_add_chk = "0";
        }
        if($vaildation_filter_chk === ""){
            $vaildation_filter_chk = "0";
        }

        //------------------- end -----------
        $error_info    =  "";
        if($pay_add_filter_setting[0]) {
        ?>
        <div class='form-group' style="margin-top: 12px;width:5px !important;display:inline !important;">
            <button class = "btn btn-info" id="add">Add</button>
            <button class = "btn btn-edit" id="search">History</button>
        </div>
        <?php       
        }else{
            $error_info     = "toastr.error('To First Map a Filter Column in Pay Structure Settings Module');";
            $toastr_fadeout = "toastr.options.fadeOut = 3000";
        }
        ?>
    </div>
</div>
<div class="row" style='width: 100%;'>  
    <div id="search_pay_struct_data" class='col-md-12' style='display: none;'>  
        <table id="search_pay_struct_table" class='table table-hover'></table>
    </div>
</div>

<div style = 'margin:0px 10px;'>
    <div style="display: none;" id="add_pay_struct_data">
        <table id="add_pay_struct_table" style = "width:100%;" class='table table-hover'>
            <thead class="thead-dark">
                <tr>
                    <th scope="col">Category</th>
                    <th scope="col">PTax Location</th>
                    <th scope="col">Employee Type</th>
                    <th scope="col">Apply Date</th>
                    <th scope="col" style = 'display: none;'>To Date</th>
                    <th scope="col" style = 'display: none;'>Effective Date</th>
                    <th scope="col" style = 'display: none;'>Day Condition</th>
                    <th scope="col" id="day_count_head" style="display:none;">Day Count</th>
                    <th scope="col">PF Limit</th>
                    <!-- <th scope="col">ESI Limit</th>   -->
                    <th scope="col" style="display:none;">Prime Pay Id</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><select id="category" name="category" class='form-control select2'><?php echo $category_list ?></select></td>
                    <td><select id="tax_location" name="tax_location" class='form-control select2'></select></td>
                    <td><select id="employee_type" name="employee_type" class='form-control select2'><?php echo $emp_type_list ?></select></td>
                    <td><div class="controls" style="position: relative"><input type='text' id='from_date' name='from_date' value ='' class='form-control input-sm datepicker' placeholder = "Apply Date" size="5"></div></td>
                    <td style = 'display: none;'><div class="controls" style="position: relative"><input type='text' id='to_date' name='to_date' value = "31-12-2099" class='form-control datepicker' placeholder = "To Date" size="5"></div></td>
                    <td style = 'display: none;'><div class="controls" style="position: relative"><input type='text' id='effective_date' name='effective_date' value ='' class='form-control datepicker' placeholder = "Effective Date" size="5"></div></td>
                    <td style = 'display: none;'><select id="day_condition" name="day_condition" class='form-control select2'><?php echo $day_cond_list ?></select></td>
                    <td style="display:none;"><select id="day_count" name="day_count" class='form-control select2'><?php echo $day_count_list ?></select></td>
                    <td><select id="pf_limit" name="pf_limit" class='form-control select2'><?php echo $status_list ?></select></td>
                    <!-- <td><select id="esi_limit" name="esi_limit" class='form-control select2'><?php echo $status_list ?></select></td> -->
                    <td style="display:none;"><div class="controls" style="position: relative;"><input type='hidden' id='prime_id' name='prime_id' value ='0' class='form-control' size="5"></div></td>
                </tr>
            </tbody>
        </table>
    </div>
</div>  
<div class="row" id = "ear_ded_pay_struct_data" style = "display: none;">
    <div class="col-md-7">
        <div id="ear_pay_struct_data">  
        </div>
    </div>
    <div class="col-md-5">
        <div id="ded_pay_struct_data">  
        </div>
    </div>
</div>
<div id = "ear_ded_button" style = "display: none;margin-bottom:20px">
    <button class='btn btn-primary btn-sm' id="pay_struct_save" name='pay_struct_save'>Save</button>
</div>

<script type="text/javascript">
$(document).ready(function (){
    $('.modal-dialog').draggable({ handle: ".modal-header" });  
    //error through for payroll filter not mapping 
    <?php echo $error_info; ?>
    <?php echo $toastr_fadeout ?>
    var datalist_validate  = '<?php echo $datalist_validate; ?>';

    //Amount input digit should be 4 when category is per day.
    var category = $("#category").val();
    validate_amount(category);
    $("#category").change(function(){
        var category = $("#category").val();
        validate_amount(category);
    });
    
    //Datalist selected value fetch 
    $(document).on('change', 'input'+datalist_validate, function(){
        var selected_value = $(this).val();
        var list           = $(this).attr('list');
        var id             = $(this).attr('id');
        var attr_id        = list.replace('list_', '');
        var data_value     = $('#'+list+' option[value=\"' + selected_value + '\"]').attr('data-value');
        var data_text      = $('#'+list+' option[value=\"' + selected_value + '\"]').text();
        if(data_value){
            $('#'+attr_id).val(data_value);
            if(attr_id === 'wbs_element'){ //If Wbs Changed then Activity should fetch based on wbs
                get_pick_data(data_value);
                // fetch_network(data_value);
                $('#'+list).prop('readonly', true);                  
                $('#position_div,#activity_no_div').remove();  //clear span empty
                $('#position,#activity_no').val(''); 
                $('input[name="hid_position"],input[name="hid_activity_no"]').val(''); //input empty
                $('#list_position,#list_activity_no').empty();    //datalist empty      
            }else if(attr_id === 'personal_code'){
                $('#wbs_element_div,#position_div,#activity_no_div').remove();
                $('#wbs_element,#position,#activity_no').val('');
                $('input[name="hid_wbs_element"],input[name="hid_position"],input[name="hid_activity_no"]').val('');  
                $('#list_position,#list_wbs_element,#list_activity_no').val('');
                $('#list_position,#list_activity_no,#list_wbs_element').empty();
            }
            $('#'+attr_id+'_div').remove();    
            if(attr_id && data_value){
                $("#"+id).prop("readonly", true);                
                $("#"+attr_id).parent().append('<span id ="'+attr_id+'_div" ><b>'+data_text+'</b> <a style="cursor:pointer;float: right;" onClick=clear_btn("'+attr_id+'")> <i class="fa fa-remove" aria-hidden="true"></i> </a></span>');
            }else{
                $('#'+attr_id+'_div').remove();
            } 
         }else{       
         //alert(attr_id+"-"+id);
            $("#"+id).prop("readonly", false);
            if(attr_id === 'wbs_element'){                
                $('#network_id').val('');
            }
            $('#'+id).val('');
            $('#'+attr_id).val('');
         }
    });
    /* LOAD SCRIPT */
    <?php   
        //echo "$document_load_script";
    ?>    
    var rslt_data     = 0;
     $(document).on('input paste', '#hid_wbs_element', function(e){
        var name          = $(this).attr('name');
        var list          = $(this).attr('list');
        var name          = name.replace("hid_","");
        var attr_id       = name.replace("[]","");
        var personal_code = $('#personal_code').val();
        if(personal_code){
            var term      = $(this).val();
            if(term.length < 4){
                rslt_data  = 0;
            }
            if(term.length >= 4 && rslt_data === 0){  
                rslt_data = 1;   
                // Encryption
                var encKey  = '<?php echo $encKey; ?>';
                var data    = {term:term,personal_code:personal_code};
                var encData = encrypt(encKey,data);            
                $.ajax({
                    url: '<?php echo site_url("$controller_name/get_wbs"); ?>',
                    type: 'post',
                    data:encData,				
					contentType: 'text/plain',
                    success: function(data){                        
                        var rslt = JSON.parse(data);
                        $("#"+list).html('');
                        if(rslt.success){
                            $.each(rslt.search_rslt, function(i, value){
                            $("#"+list).append("<option data-value='"+value.wbs_id+"'  value='"+$.trim(value.wbs_id)+"' >"+$.trim(value.wbs_desc)+"</option>");
                            });
                        }else{
                            toastr.error(rslt.message);
                            var rslt_data  = 0;
                            $("#wbs_element_div").remove('');
                            $('#hid_wbs_element,#wbs_element').val('');
                        }                                           
                    },
                    beforeSend: function(){
                        $("#"+list).attr('disabled','disabled');
                        $("#span_"+attr_id).remove('');
                        $("#"+attr_id).parent().append('<span id="span_'+attr_id+'" style="color:#CC3366;"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Loading...</span>');
                    },
                    complete: function() {                        
                        $("#"+list).attr('disabled',false);
                        $("#span_"+attr_id).remove('');
                    }
                });      
            }
        }else{
            toastr.error("Please Choose Personal Area...!");
            return false;
        }        
    });

    //CATEGORY ON CHANGE CONDITION
    $('#category').on('change',function(e){
        var category   = $("#add_pay_struct_data #category").val();
        //pay structure already exist check and then if not exist then show a earning and deduction wages table create 
        if(category){
            validate_amount(category);
            show_pay_structure(category);
        } 
    });

     $(function(){
        $(".datepicker").datetimepicker({
            format: 'DD-MM-YYYY',
            //debug: true
        });
    });
    //CALL SELECT FUNCTION
    select_option();
    
    //empty the input when the value is 0.00 -> NB[29-09-23]
    $(document).on("focus",".decimals",function(e) {
        var val = $(this).val();
        if(val === '0' || val === '0.00'){
            $(this).val('');
        }
    });

    //----- DR CODE FOR TABLE (UPARROW) CLICK SHOULD ABOVE INPUT FOCUS and (DOWNARROW) CLICK SHOULD (BELOW INPUT) FOCUS THIS SAME AS FOLLOWD BY (RIGHT AND LEFT ARROW) START ------
    document.onkeydown =
    function updownintable(e) {
        switch (e.key) {
        case 'ArrowUp':
            var el      = document.activeElement;
            var act_id  = el.id;
            if(act_id){
                var active  = $(el).closest('tr').prev().children('td').children('#'+act_id);
                if (active != null) {
                    active.focus();
                }
            }
            break;
        case 'ArrowDown':
            var el      = document.activeElement;
            var act_id  = el.id;
            if(act_id){
                var active  = $(el).closest('tr').next().children('td').children('#'+act_id);
                if (active != null) {
                    active.focus();
                }
            }
            break;
        case 'ArrowLeft':
            var el      = document.activeElement;
            var act_id  = el.id;
            if(act_id){
                var foc_id  = $(el).closest('td').prev('td').children().attr('id');
                var active  = $(el).closest('td').prev('td').children('#'+foc_id);
                if (active != null) {
                    active.focus();
                }
            }
            break;
        case 'ArrowRight':
            var el      = document.activeElement;
            var act_id  = el.id;
            if(act_id){
                var foc_id  = $(el).closest('td').next('td').children().attr('id');
                var active  = $(el).closest('td').next('td').children('#'+foc_id);
                if (active != null) {
                    active.focus();
                }
            }
            break;
        }
    };
    //------- DR CODE FOR TABLE (UPARROW) CLICK SHOULD ABOVE INPUT FOCUS and (DOWNARROW) CLICK SHOULD (BELOW INPUT) FOCUS END ------
    //------- DR CODE for UP AND DOWN ARROW CLICK DON'T CHANGE A VALUE FOR EXAMPLE(DROPDOWN) START ------
    var keys = {};
    window.addEventListener("keydown",
        function(e){
            keys[e.keyCode] = true;
            switch(e.keyCode){
                // case 37: case 39: case 38: case 40: e.preventDefault(); break; // Arrow keys
                // case 32: e.preventDefault(); break; // Space
                default: break; // do not block other keys
            }
        },
    false);
    window.addEventListener('keyup',
        function(e){
            keys[e.keyCode] = false;
        },
    false);
    //------- DR CODE for UP AND DOWN ARROW CLICK DON'T CHANGE A VALUE EXAMPLE(DROPDOWN) END------



     //from date and effective date on change condition
    $("#from_date,#effective_date").on("dp.hide",function (e) {
        var from_date          = $('#add_pay_struct_data #from_date').val();
        var to_date            = $('#add_pay_struct_data #to_date').val();  
        var effective_date     = $('#add_pay_struct_data #effective_date').val();
        var category           = parseInt($('#add_pay_struct_data #category').val());
        var personal_code      = $('#personal_code').val();
        var wbs_element        = $('#wbs_element').val();
        var position           = $('#position').val();
        var activity_no        = $('#activity_no').val();
        var network_id         = $('#network_id').val();
        var prime_id           = $('#add_pay_struct_data #prime_id').val();

        var day = from_date.split("-")[0];
        if(day !== "01") {
            $('#add_pay_struct_data #from_date').val('');
            toastr.error("Please select apply date 1st day of the Month...!");
            return false;
        }
        if(category === "" || category === 0){
            toastr.error("Please Choose Category..!");
            $('#add_pay_struct_data #from_date').val('');
            return false;
        }else
        if(personal_code === "" || wbs_element === "" || position === ""){
            toastr.error("Please Choose All Above Mandatory Fields..!");
            $('#add_pay_struct_data #from_date').val('');
            return false;
        }else{  
            date_check_validation(category,personal_code,wbs_element,position,activity_no,network_id,from_date,to_date,prime_id);   
        }
    });
    //day count restrictions updated
    $("#day_count > option").slice(1,20).remove();

    //day condition on change
    $('#add_pay_struct_table #day_condition').on('change',function(e){
        var day_condition   = $("#add_pay_struct_table #day_condition").val();
        var change_tab_id   = "#add_pay_struct_table";
        //for variable
        day_cond_hide_show(day_condition,change_tab_id);
    });
    
    $('#search_pay_struct_table #day_condition').on('change',function(e){
        var day_condition   = $("#search_pay_struct_table #day_condition").val();
        var change_tab_id   = "#search_pay_struct_table";
        day_cond_hide_show(day_condition,change_tab_id); //for variable
    });

    //ADD BTN
    $("#add").on('click', function(e){
        <?php echo $pay_check_col;?>;
        if(<?php echo $vaildation_add_chk;?>){
            var personal_code = $("#personal_code").val();
            var wbs_element   = $("#wbs_element").val();
            var activity_no   = $("#activity_no").val();
            var act_value     = $('#list_activity_no option[data-value=\"' + activity_no + '\"]').attr('value');
            var act           = duplicate_act_no(wbs_element,act_value); //ASYNC FUNC
            act.then(function(result){
                if(result){
                    tax_location_append(personal_code);
                    $("#add_pay_struct_data #category,#tax_location,#from_date,#effective_date,#day_condition,#day_count,#pf_limit,#esi_limit,#prime_id").val('');
                    $("#add_pay_struct_data #to_date").val('31-12-2099');
                    select_option();
                    $("#add_pay_struct_data").show();
                    $("#search_pay_struct_data,#ear_ded_pay_struct_data,#ear_ded_button").hide();
                    $("#add_pay_struct_data #category,#tax_location,#from_date,#effective_date,#day_condition,#day_count,#pf_limit,#esi_limit").attr("readonly",false); 
                }else{
                    toastr.error("Duplicate activity no for same wbs found.please contact admin!");
                }
            });       
        }else{
            toastr.error("Please Choose All Show Fields..!");
        }
    });

    //search by pay structure on click function 
    $("#search").on('click', function(e){
        search_pay_structure();
    });

    $("#pay_struct_save").on("click",function() {
        var click_details      = $("#add_pay_struct_data tbody").find('tr');
        let action             = "save";
        var prime_id           = $(click_details).find("td").find("#prime_id").val();
        //function for save a pay structure and pay structure line data
        save_pay_structure(click_details,action,prime_id);
    });

    //onclick function for add pf and esi gross based on onclick by a amount and pf and esi yes no option
    $(document).on('focusin', '#amount', function(e){
        $(this).data('val', $(this).val());
    }).on('change','#amount', function(e){
        var click_id     = $(this).attr("id");
        var click_row    = $(this);
        var old_val      = Number($(this).data("val"));
    });

     //onclick function for add pf and esi gross based on onclick by a amount and pf and esi yes no option
    $(document).on('change','#pf_applicable,#esi_applicable', function (e) {
        var click_id     = $(this).attr("id");
        var click_row    = $(this);
        var new_val      = $(this).val();
        var old_val      = $(this).attr('data-val');
        $(this).attr('data-val', new_val);
        var exempt_id    = '';
        if(parseInt(new_val) === 1){
            if(click_id === 'pf_applicable'){
                exempt_id  = 'pf_exempt';
            }else
            if(click_id === 'esi_applicable'){
                exempt_id  = 'esi_exempt';
            }
            $('#'+exempt_id).val(2);
            $('#'+exempt_id).attr('checked',false);
        }
    });

    $(document).on('change','#pf_exempt,#esi_exempt,#lwf_exempt', function(e) {
        var change_id     = $(this).attr("id");
        var change_val    = "";
        var prime_id      = $("#add_pay_struct_table tbody").find('tr').find("td").find("#prime_id").val();

        if(change_id === "lwf_exempt"){
            if(this.checked) {
                $('#'+change_id).val(1);
            }else{
                $('#'+change_id).val(2);
            }
        }else{
            if(change_id === "pf_exempt"){
                var change_val   = 'pf_applicable';
            }else
            if(change_id === "esi_exempt"){
                var change_val   = 'esi_applicable';
            }
            if(this.checked) {
                if(change_val){
                    $('#'+change_id).val(1);
                    $("#ear_pay_struct_data tbody").find("tr").find("td").find('#'+change_val).val(2);
                }
            }else{
                //FUNCTION 25AUG22 CALL FOR IF UNCHECK BY USER THEN PREVIOUS VALUE APPEND
                prev_exempt_val_append(prime_id,change_val);
                $('#'+change_id).val(2);
            }
        }
        select_option();   
    });

    //----- DR CODE FOR TABLE (UPARROW) CLICK SHOULD ABOVE INPUT FOCUS and (DOWNARROW) CLICK SHOULD (BELOW INPUT) FOCUS THIAS SAME AS FOLLOWD BY (RIGHT AND LEFT ARROW) START ------
    document.onkeydown =
    function updownintable(e) {
        switch (e.key) {
        case 'ArrowUp':
            var el      = document.activeElement;
            var act_id  = el.id;
            var active  = $(el).closest('tr').prev().children('td').children('#'+act_id);
            if (active != null) {
                active.focus();
            }
            break;
        case 'ArrowDown':
            var el      = document.activeElement;
            var act_id  = el.id;
            var active  = $(el).closest('tr').next().children('td').children('#'+act_id);
            if (active != null) {
                active.focus();
            }
            break;
        case 'ArrowLeft':
            var el      = document.activeElement;
            var act_id  = el.id;
            var foc_id  = $(el).closest('td').prev('td').children().attr('id');
            var active  = $(el).closest('td').prev('td').children('#'+foc_id);
            if (active != null) {
                active.focus();
            }
            break;
        case 'ArrowRight':
            var el      = document.activeElement;
            var act_id  = el.id;
            var foc_id  = $(el).closest('td').next('td').children().attr('id');
            var active  = $(el).closest('td').next('td').children('#'+foc_id);
            if (active != null) {
                active.focus();
            }
            break;
        }
    };
    //------- DR CODE FOR TABLE (UPARROW) CLICK SHOULD ABOVE INPUT FOCUS and (DOWNARROW) CLICK SHOULD (BELOW INPUT) FOCUS END ------

    //------- DR CODE for UP AND DOWN ARROW CLICK DON'T CHANGE A VALUE FOR EXAMPLE(DROPDOWN) START ------
    var keys = {};
    window.addEventListener("keydown",
        function(e){
            keys[e.keyCode] = true;
            switch(e.keyCode){
                case 37: case 39: case 38: case 40: e.preventDefault(); break; // Arrow keys
                // case 32: e.preventDefault(); break; // Space
                default: break; // do not block other keys
            }
        },
    false);
    window.addEventListener('keyup',
        function(e){
            keys[e.keyCode] = false;
        },
    false);
    //------- DR CODE for UP AND DOWN ARROW CLICK DON'T CHANGE A VALUE EXAMPLE(DROPDOWN) END------

    //SATHISH FOR SELECT2 INPUT AUTO FOCUS START
    $('.select2').on('select2:select', function(e){
        $(this).focus();
        e.preventDefault(); 
    });
    //SATHISH FOR SELECT2 INPUT AUTO FOCUS END
    
    $("a.import").click(function(event){
        event.preventDefault();
        var action      = $(this).attr('data-btn-submit');
        var title       = $(this).attr('title');
        var control     = $(this).attr('href');
        var form_id     = "save_import";
        view_form_data(action,title,control,form_id);
    });

    $(document).on('paste','input[name="hid_personal_code"],[name="hid_wbs_element"],[name="hid_position"],[name="hid_activity_no"]', function (e) {
        var pastedData = e.originalEvent.clipboardData.getData('text').trim();
       var list        = $(this).attr('list');
       var attr_id     = list.replace("list_","");
       if(pastedData){
        $('#'+attr_id).val(pastedData);
       }
    });
});

//-------------------------------- FUNCTION MODE START ------------------------------------------------
//function select call for using select2 based dropdown list
function select_option(){
    //setTimeout(function(){ 
        $('.select2').select2({
            placeholder: '---- Select ----',
            allowClear: true,
            // dropdownParent: $('.modal-dialog')
        });
        $('.select2-tags').select2({
            tags: true,
            tokenSeparators: [',']
        });
    //}, 100);
}
function validate_amount(category){
    $(document).off("input paste", "#amount");
    $(document).on("input paste", "#amount", function (evt){
        //condition for allow only in deciamls not all others
        var self = $(this);
        self.val(self.val().replace(/[^0-9\.]/g, ''));
        if((evt.which != 46 || self.val().indexOf('.') != -1) && (evt.which < 48 || evt.which > 57)){
            evt.preventDefault();
        } 
        if(category === "2" && self.val().length > 6){
            let value = parseFloat(self.val());
            if(!isNaN(value) && value >= 1000000){
                self.val(self.val().substr(0,5));
            }
        }
        if(category === "3" && self.val().length > 3){
            let value = parseFloat(self.val());
            if(!isNaN(value) && value >= 1000){
                self.val(self.val().substr(0, 3));
            }
        }
    });
}
//Get Pickdata on change wbs
function get_pick_data(wbs_element){
    var send_url        = '<?php echo site_url("$controller_name/get_pick_data");?>';
    // Encryption
    var encKey  = '<?php echo $encKey; ?>';
    var data    = {wbs_element:wbs_element};
    var encData = encrypt(encKey,data);
    $.ajax({
        type: 'POST',
        url: send_url,
        data:encData,				
        contentType: 'text/plain',  //get activity and position details
        beforeSend: function(){
            $("#list_position,#list_activity_no").attr('disabled','disabled');
            $("#list_position,#activity_no").parent().append('<span class="span_loader" style="color:#CC3366;"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Loading...</span>');
        },
        complete: function() {                        
            $("#list_position,#list_activity_no").attr('disabled',false);
            $(".span_loader").remove('');
        },
        success: function(data) {
            var rslt = JSON.parse(data);
            if(rslt.success){
                 if(rslt.position_rslt){ //Position option fetch
                    $("#list_position").html('');
                    $.each(rslt.position_rslt, function(key, value){
                        if(value.position_code !== ""){
                            $("#list_position").append("<option data-value='"+value.position_code+"'  value='"+$.trim(value.position_code)+"' >"+$.trim(value.position_name)+"</option>");
                        }
                    });
                }
                if(rslt.activity_rslt){ //Activity option fetch
                    $("#list_activity_no").html('');
                    $.each(rslt.activity_rslt, function(key, value){
                        if(value.prime_sap_activity_id !== ""){
                            $("#list_activity_no").append("<option data-value='"+value.prime_sap_activity_id+"'  value='"+$.trim(value.act_no)+"' >"+$.trim(value.act_desc)+"</option>");
                        }
                    });
                }else{
                    toastr.error('Activity not Available for this WBS.. <button type="button" class="btn-xs btn clear btn-toastr" onclick="toastr.clear()">OK</button>' , 'Error Message:');
                }
                if(rslt.network_rslt){ // Hidden Network value fetch
                    $('#network_id').val(rslt.network_rslt[0].wbs_network_id);                   
                }
            }else{
                toastr.error(rslt.message);
            }        
        }
    });
}

//date greater and lesser validation
function date_check_validation(category,personal_code,wbs_element,position,activity_no,network_id,from_date,to_date,prime_id){
    var check_from_date    = moment(from_date, 'DD-MM-YYYY').format('YYYY-MM-DD');  
    var check_to_date      = moment(to_date, 'DD-MM-YYYY').format('YYYY-MM-DD');
    if(from_date && to_date){
        if(check_from_date > check_to_date){
            toastr.error("To Date Should be Greater than From Date");
            $('#add_pay_struct_data #from_date').val('');
            return false;
        }else{
            //payroll exist check function
            payroll_process_check(category,personal_code,wbs_element,position,activity_no,network_id,check_from_date,prime_id);
            
        }
    }
}

//FUNCTION FOR CHECK A PAYROLL PROCESS EXIST BESED ON FORM DATE AND CATEGORY
function payroll_process_check(category,personal_code,wbs_element,position,activity_no,network_id,from_date,prime_id){
    var send_url    = '<?php echo site_url("$controller_name/payroll_process_check");?>';
    // Encryption
    var encKey  = '<?php echo $encKey; ?>';
    var data    = {category:category,personal_code:personal_code,wbs_element:wbs_element,position:position,activity_no:activity_no,network_id:network_id,from_date:from_date,prime_id:prime_id};
    var encData = encrypt(encKey,data);
    $.ajax({
        type: 'POST',
        url: send_url,
        data:encData,				
        contentType: 'text/plain',
        success: function(data) {
            var rslt = JSON.parse(data);
            if(rslt.success){
                toastr.success(rslt.message);
            }else{
                toastr.error(rslt.message);
                $('#add_pay_struct_data #from_date').val('');
                return false;
            }
        }
    });
}

//EXIST PAY STRUCTURE CHECK AND IF NOT EXIST THEN SHOW A EAR AND DED WAGE DETAILS IN TABLE
function show_pay_structure(category){
    var send_url        = '<?php echo site_url("$controller_name/show_pay_structure");?>'
   /* var status_list     = <?php echo json_encode($status_list); ?>;
    var category_arr    = <?php echo json_encode($category_arr); ?>;
    var status_arr      = <?php echo json_encode($status_arr); ?>;
    var day_cond_arr    = <?php echo json_encode($day_cond_arr); ?>;
    var day_count_arr   = <?php echo json_encode($day_count_arr); ?>;*/
    //for dynamic add column from pay structure table (pay structure check validation add variable data)
    <?php echo $pay_check_col; ?>;
    // Encryption
    var encKey  = '<?php echo $encKey; ?>';
    var data    = {<?php echo $ajax_post_data ?>,category:category};
    var encData = encrypt(encKey,data);
    $.ajax({
        type: 'POST',
        url: send_url,
        data:encData,				
        contentType: 'text/plain',//for dynamic filter column based to post a data from(pay structure table) based on pay structure filter settings
        success: function(data) {
            var rslt = JSON.parse(data);
            if(rslt.success){   
                toastr.success(rslt.message);
                //FUNCTION FOR CREATE TO APPEND A DATA TO EARNINGS AND DEDUCTION TABLE 
                $("#ear_ded_button").show();  
                ear_ded_table_create(rslt);
            }else{
                toastr.error(rslt.message);
                //FUNCTION FOR HIDE A EARNINGS AND DEDUCTION TABLE 
                pay_struct_line_table_toggle();
            }
        }
    });
}
//FUNCTION FOR SEARCH A EXIST PAY STRUCTURE
//function search_pay_structure(struct_set_pick){ 
function search_pay_structure(){
    var personal_code = $("#personal_code").val();
    tax_location_append(personal_code);

    //var payroll_exist_arr  = <?php //echo json_encode($payroll_exist_arr); ?>;
    var emp_type_arr       = {"": "---- Employee Type ----", 1: "Internal", 2: "External"};   
    var send_url           = '<?php echo site_url("$controller_name/search_pay_structure");?>';
    //for dynamic filter column based data get from(pay structure table) based on pay structure filter settings
    <?php echo $pay_check_col; ?>;

    if(personal_code_val && wbs_element_val){
        $("#add_pay_struct_data,#ear_ded_pay_struct_data,#ear_ded_button").hide();
        $("#search_pay_struct_data").show();
    
        //for table search input
        var search    =  $("input[type='search']").val();
        // Encryption
        var encKey  = '<?php echo $encKey; ?>';
        var data    = {search:search,<?php echo $ajax_post_data ?>};
        var encData = encrypt(encKey,data);
        $.ajax({
            type: 'POST',
            url: send_url,
            data:encData,				
            contentType: 'text/plain',//for dynamic filter column based to post a data from(pay structure table) based on pay structure filter settings
            beforeSend: function () {
                $('#search_pay_struct_table').html('<h4 style="color:#CC3366;text-align:center;"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Loading...</h4>'); 
            },
            success: function(data) {
                $('#search_pay_struct_table').empty();
                var rslt = JSON.parse(data);
                var exist_arr       = rslt.exist_arr;
                var arr_trans       = rslt.arr_trans;
                var arr_info        = rslt.arr_info;
                if(rslt.success){ 
                    // toastr.success(rslt.message);
                    $table = $('#search_pay_struct_table').DataTable({
                        destroy: true,
                        processing: true,
                        lengthMenu: [[10,25,50,100,500,-1],[10,25,50,100,500,"All"]],
                        language:{                                  
                            searchPlaceholder: "Search records",
                            search: "",
                        },
                        scrollX: true,
                        data: rslt.table_rslt,
                        columns: [
                            { title: "WBS Element",data: "wbs_element",
                                render:function(value) {
                                    return "<span id='activity_no'>"+value+"</span>"}},
                            { title: "Position",data: "position",
                                render:function(value) {
                                    return "<span id='position'>"+value+"</span>"}},
                            { title: "Category",data: "category",
                                render:function(value) {
                                    return "<span id='category'>"+value+"</span>"}},

                            { title: "PTax Location",data: "tax_location",
                                render:function(value) {
                                    return "<span id='tax_location1'>"+value+"</span>"}},

                            { title: "Employee Type",data: "employee_type",id: "employee_type_head", visible: false,
                                render:function(value) {
                                    return "<span id='employee_type'>"+emp_type_arr[value]+"</span>"}},

                            { title: "Apply Date",data: "from_date", 
                                render:function(value) {
                                    return "<span id='from_date'>"+moment(value ,"YYYY-MM-DD").format('DD-MM-YYYY')+"</span>"}},
                                    
                            { title: "To Date",data: "to_date",
                                // , visible: false
                                render:function(value) {
                                    return "<span id='to_date'>"+moment(value ,"YYYY-MM-DD").format('DD-MM-YYYY')+"</span>"}},

                            { title: "Effective Date",data: "effective_date", visible: false, 
                                render:function(value) {
                                    return "<span id='effective_date'>"+moment(value ,"YYYY-MM-DD").format('DD-MM-YYYY')+"</span>"}},

                            { title: "Day Condition",data: "day_condition", visible: false,
                                render:function(value) {
                                    return "<span id='day_condition'>"+value+"</span>"}},
                        
                            { title: "Day Count",data: "day_count",id: "day_count_head", visible: false,
                                render:function(value) {
                                    return "<span id='day_count'>"+value+"</span>"}},

                            { title: "PF Limit",data: "pf_limit",id: "pf_limit_head",
                                render:function(value) {
                                    return "<span id='pf_limit'>"+value+"</span>"}},

                            /*{ title: "ESI Limit",data: "esi_limit",id: "esi_limit_head",
                                render:function(value) {
                                    return "<span id='esi_limit'>"+value+"</span>"}},*/

                            { title: "Gross Amt",data: "gross",id: "gross_head",
                                render:function(value) {
                                    return "<span id='gross'>"+value+"</span>"}},

                            { title: "PF Gross",data: "pf_gross",id: "pf_gross_head",
                                render:function(value) {
                                    return "<span id='pf_gross'>"+value+"</span>"}},

                            { title: "ESI Ceiling Gross",data: "esi_gross",id: "esi_gross_head",
                                render:function(value) {
                                    return "<span id='esi_gross'>"+value+"</span>"}},

                            { title: "Edit",data: "prime_id",
                                render:function(value,type,row){
                                //condition for exist check 
                                    if(exist_arr && exist_arr[value]){
                                        var check_status_arr = exist_arr[value]['check_status'].split(',');
                                        // if(parseInt(exist_arr[value]['check_status']) === 1){
                                        if(check_status_arr.includes("1")){
                                            return "<input type='button' id='edit' name='edit' value = 'View' class='btn btn-xs btn-success' onclick = save_pay_structure($(this),'view',"+value+")>";
                                        }else{
                                            if(arr_trans && arr_trans[value]){
                                                return "<input type='button' id='edit' name='edit' value = 'View' class='btn btn-xs btn-success' onclick = save_pay_structure($(this),'view',"+value+")>";
                                            }else{
                                                return "<input type='button' id='edit' name='edit' value = 'Edit' class='btn btn-xs btn-success' onclick = save_pay_structure($(this),'edit',"+value+")>";
                                            }                                           
                                        }  
                                    }else 
                                    if(arr_trans && arr_trans[value]){
                                        return "<input type='button' id='edit' name='edit' value = 'View' class='btn btn-xs btn-success' onclick = save_pay_structure($(this),'view',"+value+")>";
                                    }else{
                                        return "<input type='button' id='edit' name='edit' value = 'Edit' class='btn btn-xs btn-success' onclick = save_pay_structure($(this),'edit',"+value+")>";
                                    }
                                }                               
                            },
                            { title: "Copy",data: "prime_id",
                                render:function(value) {
                                    //condition for exist check
                                    return "<input type='button' id='copy' name='copy' value = 'Copy' class='btn btn-xs btn-info' onclick = save_pay_structure($(this),'copy',"+value+")>"
                                }
                            },
                            { title: "Delete",data: "prime_id",
                                render:function(value,type,row){
                                    var status = parseInt(row.status);
                                    //condition for exist check
                                    if((exist_arr && exist_arr[value]) || (arr_info && arr_info[value])){
                                        return "";
                                    }else{ //If Cats entry and arrear entry not created
                                        if(status === 1){
                                            //ACTIVE PAY STRUCTURE SHOULD ONLY ALLOW TO DELETE
                                            return "<input type='button' id='delete' name='delete' value = 'delete' class='btn btn-xs btn-edit' onclick = delete_pay_structure($(this),"+value+")>";
                                        }else{
                                            return "";
                                        }
                                    }                             
                                }
                            },
                        ]
                    }); 
                    //DR CODE START FOR DATATABLE EXPORT OPTION ADD 23AUG22
                    var table_option = "<table><tr><td id='export' style='padding:10px 6px;'></td><td id='import' style='padding:10px 6px;'></td></tr></table>";
                    $("#search_pay_struct_table_filter").append(table_option);      
                    var buttons = new $.fn.dataTable.Buttons($table,{
                        buttons: [{
                            extend: 'collection',
                            text: 'Export',
                            buttons: [
                                {extend:'csv',exportOptions:{modifier:{order:'index',page:'all',search:'none'},columns:':visible'}},
                                {extend:'excel',exportOptions:{modifier:{order :'index',page: 'all',search:'none'},columns:':visible'}},
                            ]
                        }]
                    }).container().appendTo($('#export'));
                    $("input[type='search']").addClass('form-control'); 
                    // $("select[name='search_pay_struct_table_length']" ).addClass('form-control input-sm');
                    if(rslt.ear_table_rslt){
                        serach_table_col_hi_show();
                        //FUNCTION FOR CREATE TO APPEND A DATA TO EARNINGS AND DEDUCTION TABLE 
                        $("#ear_ded_button").hide();
                        ear_ded_table_create(rslt);
                    }
                    
                    select_option();    
                }else{
                    toastr.error(rslt.message);
                    $("#search_pay_struct_data").hide();                
                    //FUNCTION FOR HIDE A EARNINGS AND DEDUCTION TABLE 
                    pay_struct_line_table_toggle();
                }
            }
        });
    }else{
        toastr.error("Please Choose Personal Area and WBS..!");
    }
}

//view and save and copy pay structure function
function save_pay_structure(click_details,action,prime_id){
    var status_list     = <?php echo json_encode($status_list); ?>;
    var category_arr    = <?php echo json_encode($category_arr); ?>;
    //var pro_tax_arr     = <?php echo json_encode($pro_tax_arr); ?>;
    var status_arr      = <?php echo json_encode($status_arr); ?>;
    var day_cond_arr    = <?php echo json_encode($day_cond_arr); ?>;
    var day_count_arr   = <?php echo json_encode($day_count_arr); ?>;
    var emp_type_arr    = <?php echo json_encode($emp_type_arr); ?>;

    //DR CODE START FOR COPY PAY STRUCTURE CONFIRM BOX ADD 23AUG22 
    if(action === "copy"){
        if (!confirm('Are You Sure You Want to Copy this Pay Structure?')) {
            return false;
        }
    }
    //DR CODE END FOR COPY PAY STRUCTURE CONFIRM BOX ADD 23AUG22 

    if(action === "view"){
        $("#ear_ded_button").hide();
    }else{
        $("#ear_ded_button").show();
    }

    if(action === "edit" || action === "view" || action === "copy"){
        //TO CLICK BY EDIT BUTTON THEN PAY STRUCTURE SETTINGS BASED PICKLIST INPUT DATA FETCH FOR USER VIEW PURPOSE
        //if(prime_id){
            //pay_struct_search_drop_fetch(prime_id,struct_set_pick);
        //}
        var table_data       = $('#search_pay_struct_table').DataTable().row($(click_details).closest("tr")).data();
        var category         = table_data['category'];
        var tax_location     = table_data['tax_location'];
        var from_date        = table_data['from_date'];
        from_date            = moment(from_date ,"YYYY-MM-DD").format('DD-MM-YYYY');
        var to_date          = table_data['to_date'];
        to_date              = moment(to_date ,"YYYY-MM-DD").format('DD-MM-YYYY');
        var effective_date   = table_data['effective_date'];
        effective_date       = moment(effective_date ,"YYYY-MM-DD").format('DD-MM-YYYY');
        var day_condition    = table_data['day_condition'];
        var day_count        = table_data['day_count'];
        var pf_limit         = table_data['pf_limit'];
        var esi_limit        = table_data['esi_limit'];
        var employee_type    = table_data['employee_type'];
        var activity_no      = table_data['activity'];
    }else{
        var category         = $(click_details).find("td").find("#category").val();
        var tax_location     = $(click_details).find("td").find("#tax_location").val();
        var from_date        = $(click_details).find("td").find("#from_date").val();
        var to_date          = $(click_details).find("td").find("#to_date").val();
        var effective_date   = $(click_details).find("td").find("#effective_date").val();
        var day_condition    = $(click_details).find("td").find("#day_condition").val();
        var day_count        = $(click_details).find("td").find("#day_count").val();
        var pf_limit         = $(click_details).find("td").find("#pf_limit").val();
        var esi_limit        = $(click_details).find("td").find("#esi_limit").val();
        var employee_type    = $(click_details).find("td").find("#employee_type").val();
        var activity_no      = $(click_details).find("td").find("#activity").val();
    }
    
    //for dynamic filter column from(pay structure table) based on pay structure filter setting
    <?php echo $pay_check_col; ?>;

    //for only work for edit operation (because we click a edit button then same add table list but data are fetched and table inputs are editable) 
    if(action === "edit" || action === "view" || action === "copy"){
        $("#add_pay_struct_data").show();
        $("#search_pay_struct_data").hide();
        if(category_arr){
            $("#add_pay_struct_data #category").val(category_arr[category]);
            category  = category_arr[category];
        }
        validate_amount(category);
        /*if(pro_tax_arr){
            
            $("#add_pay_struct_data #tax_location").val(pro_tax_arr[tax_location]);
            tax_location  = pro_tax_arr[tax_location];
        }*/
        $("#add_pay_struct_data #employee_type").val(employee_type);
        $("#add_pay_struct_data #from_date").val(from_date);
        $("#add_pay_struct_data #to_date").val(to_date);
        $("#add_pay_struct_data #effective_date").val(effective_date);
        if(day_cond_arr){
            $("#add_pay_struct_data #day_condition").val(day_cond_arr[day_condition]);
            day_condition   = day_cond_arr[day_condition];
        }
        if(day_count_arr){
            $("#add_pay_struct_data #day_count").val(day_count_arr[day_count]);
            day_count       = day_count_arr[day_count];
        }
        if(status_arr){
            $("#add_pay_struct_data #pf_limit").val(status_arr[pf_limit]);
            $("#add_pay_struct_data #esi_limit").val(status_arr[esi_limit]);
            pf_limit       = status_arr[pf_limit];
            esi_limit      = status_arr[esi_limit];
        }
        $("#add_pay_struct_data #prime_id").val(prime_id);
        if(action === "view"){
            $("#add_pay_struct_data #category,#add_pay_struct_data #tax_location,#add_pay_struct_data #employee_type,#add_pay_struct_data #from_date,#add_pay_struct_data #to_date,#add_pay_struct_data #effective_date,#add_pay_struct_data #day_condition,#add_pay_struct_data #day_count,#add_pay_struct_data #pf_limit,#add_pay_struct_data #esi_limit").attr("readonly","readonly");
        }
        if(action === "edit" || action === "copy"){
            $("#add_pay_struct_data #category,#add_pay_struct_data #tax_location,#add_pay_struct_data #employee_type,#add_pay_struct_data #from_date,#add_pay_struct_data #to_date,#add_pay_struct_data #effective_date,#add_pay_struct_data #day_condition,#add_pay_struct_data #day_count,#add_pay_struct_data #pf_limit,#add_pay_struct_data #esi_limit").attr("readonly",false);
        }
        if(action === "edit"){
            $("#add_pay_struct_data #from_date").attr("readonly","readonly");
        }
    }
    if(!effective_date){
        effective_date = from_date;
    }
    if(!day_condition){
        day_condition = 2;
    }    
    //for day condition based hide and show
    var change_tab_id   = "#add_pay_struct_table";
    day_cond_hide_show(day_condition,change_tab_id);
    select_option();
    // && esi_limit
    if(category && tax_location && employee_type && from_date && day_condition && pf_limit){
        // && effective_date
        /*if(parseInt(day_condition) === 1){
            if(!parseInt(day_count)){
                toastr.error("Please Choose all Fields From Table..!");
                return false;
            }
        }*/
        //for pay structure line table related data
        let ear_table = $("#ear_pay_struct_data tbody");
        let ded_table = $("#ded_pay_struct_data tbody");
        var ear_obj   = {};
        var ded_obj   = {};

        ear_table.find("tr").each(function(index, element) {
            if($(element).find("td").find("#wage_code").val()){
                ear_obj[index] = {
                    wage_code: $(element).find("td").find("#wage_code").val(),
                    wage_name: $(element).find("td").find("#wage_name").val(),
                    hrms_field_name: $(element).find("td").find("#hrms_field_name").val(),
                    amount: $(element).find("td").find("#amount").val(),
                    pf_applicable: $(element).find("td").find("#pf_applicable").val(),
                    esi_applicable: $(element).find("td").find("#esi_applicable").val(),
                    pt_applicable: $(element).find("td").find("#pt_applicable").val(),
                    prime_pay_line_id: $(element).find("td").find("#prime_pay_line_id").val(),
                    prime_pay_struct_id: $(element).find("td").find("#prime_pay_struct_id").val()
                };
            }
        });
        ded_table.find("tr").each(function(index, element) {
            if($(element).find("td").find("#wage_code").val()){
                ded_obj[index] = {
                    wage_code: $(element).find("td").find("#wage_code").val(),
                    wage_name: $(element).find("td").find("#wage_name").val(),
                    hrms_field_name: $(element).find("td").find("#hrms_field_name").val(),
                    amount: $(element).find("td").find("#amount").val(),
                    pf_applicable: "",
                    esi_applicable: "",
                    pt_applicable: "",
                    prime_pay_line_id: $(element).find("td").find("#prime_pay_line_id").val(),
                    prime_pay_struct_id: $(element).find("td").find("#prime_pay_struct_id").val()
                };
            }
        });
        //JSON to string conversion for convert a ajax send json data format
        var json_ear_obj = JSON.stringify(ear_obj);
        var json_ded_obj = JSON.stringify(ded_obj);

        var pf_exempt    = $("#ear_pay_struct_table").find("tr").find("th").find("#pf_exempt").val();
        var esi_exempt   = $("#ear_pay_struct_table").find("tr").find("th").find("#esi_exempt").val();
        var lwf_exempt   = $("#ear_pay_struct_table").find("tr").find("th").find("#lwf_exempt").val();

        var status       = "true";
        if(action === "save"){
            <?php echo $pay_check_col; ?>;
            if(<?php echo $vaildation_add_chk; ?>){
                status   = "true";
            }else{
                status   = "false";
            }
        }

        var send_url     = '<?php echo site_url("$controller_name/save_pay_structure");?>';
        if(status === "true"){
            $('#pay_struct_save').attr('disabled','disabled');
            $("#pay_struct_save").html("<i class='fa fa-spinner fa-spin'></i> Processing...");
            var personal_code = $('#personal_code').val();
            var wbs_element   = $('#wbs_element').val();
            var position      = $('#position').val();
            // Encryption
            var encKey  = '<?php echo $encKey; ?>';
            var data    = {action:action,prime_id:prime_id,category:category,tax_location:tax_location,from_date:from_date,to_date:to_date,effective_date:effective_date,day_condition:day_condition,day_count:day_count,pf_limit:pf_limit,esi_limit:esi_limit,employee_type,pf_exempt,esi_exempt,lwf_exempt,<?php echo $ajax_post_data ?>,json_ear_obj,json_ded_obj,personal_code:personal_code,wbs_element:wbs_element,position:position};
            var encData = encrypt(encKey,data);
            $.ajax({
                type: 'POST',
                url: send_url,
                data:encData,				
                contentType: 'text/plain',
                success: function(data) {
                    $('#pay_struct_save').attr('disabled',false);
                    $("#pay_struct_save").html("Save");
                    var rslt = JSON.parse(data);
                    if(rslt.success){   
                        toastr.success(rslt.message);
                        //make Selected data
                        $('#personal_code').val(rslt.personal_code);
                        $('#wbs_element').val(rslt.wbs_element);
                        $('#position').val(rslt.position);
                        $('#network_id').val(rslt.network_id);
                        $('#activity_no').val(rslt.activity_no);
                        $('input[name="hid_wbs_element"]').val(rslt.wbs_element);
                        $('input[name="hid_position"]').val(rslt.position);
                        $('input[name="hid_personal_code"]').val(rslt.personal_code);
                        var act_value = $('#list_activity_no option[data-value=\"' + rslt.activity_no + '\"]').attr('value');
                        $('input[name="hid_activity_no"]').val(act_value);
                        $("#add_pay_struct_data #tax_location").val(rslt.tax_location).trigger('change');
                        var wbs_text  = $('#list_wbs_element option[value=\"' + rslt.wbs_element + '\"]').text();
                        var pos_text  = $('#list_position option[value=\"' + rslt.position + '\"]').text();
                        var act_text  = $('#list_activity_no option[data-value=\"' + rslt.activity_no + '\"]').text();
                        $("#wbs_element_div").remove();
                        $("#wbs_element").parent().append('<span id ="wbs_element_div" ><b>'+wbs_text+'</b> <a style="cursor:pointer;float: right;" onClick=clear_btn("wbs_element")> <i class="fa fa-remove" aria-hidden="true"></i> </a></span>');
                        $("#position_div").remove();
                        $("#position").parent().append('<span id ="position_div" ><b>'+pos_text+'</b> <a style="cursor:pointer;float: right;" onClick=clear_btn("position")> <i class="fa fa-remove" aria-hidden="true"></i> </a></span>');
                        $("#activity_no_div").remove();
                        if(act_text){
                            $("#activity_no").parent().append('<span id ="activity_no_div" ><b>'+act_text+'</b> <a style="cursor:pointer;float: right;" onClick=clear_btn("activity_no")> <i class="fa fa-remove" aria-hidden="true"></i> </a></span>'); 
                        }
                        //FUNCTION FOR CREATE TO APPEND A DATA TO EARNINGS AND DEDUCTION TABLE 
                        if(action === "view"){
                            $("#ear_ded_button").hide();  
                        }else{
                            $("#ear_ded_button").show();  
                        }
                        ear_ded_table_create(rslt);
                    }else{
                        toastr.error(rslt.message);
                        // search_pay_structure(struct_set_pick);
                        //FUNCTION FOR HIDE A EARNINGS AND DEDUCTION TABLE 
                        // pay_struct_line_table_toggle();
                        return false;
                    }
                    //if pay structure was saved then not view that save data
                    if(action === "save"){
                        $("#add_pay_struct_data,#search_pay_struct_data,#ear_ded_pay_struct_data,#ear_ded_button").hide();
                    }
                }
            });
        }else{
            toastr.error("Please Choose all Mandatory Fields..!");
            return false;
        }
    }else{
        toastr.error("Please Choose all Fields From Table..!");
        return false;
    }
}

//delete pay structure function
function delete_pay_structure(click_details,prime_id){
    $("#delete").html("<i class='fa fa-spinner fa-spin'></i> Processing...");
    $("#delete").attr('disabled','disabled');  
    var status_list      = <?php echo json_encode($status_list); ?>;
    var category_arr     = <?php echo json_encode($category_arr); ?>;
   // var pro_tax_arr      = <?php echo json_encode($pro_tax_arr); ?>;
    //TABLE DATA GET
    var table_data       = $('#search_pay_struct_table').DataTable().row($(click_details).closest("tr")).data();
    var category         = table_data['category'];
    category             = category_arr[category];
   /* var tax_location     = table_data['tax_location'];
    tax_location         = pro_tax_arr[tax_location];*/
    var from_date        = table_data['from_date'];
    from_date            = moment(from_date ,"YYYY-MM-DD").format('DD-MM-YYYY');
    var to_date          = table_data['to_date'];
    to_date              = moment(to_date ,"YYYY-MM-DD").format('DD-MM-YYYY');
    //CONFIRMATION AJAX CALL
    $.confirm({
        title: 'Confirm!',
        content: "Are you sure to Delete?",
        type: 'red',
        typeAnimated: true,
        buttons: {
            tryAgain: {
                text: 'Ok',
                btnClass: 'btn-red',
                action: function(){
                    // Encryption
                    var encKey  = '<?php echo $encKey; ?>';
                    var data    = {prime_id:prime_id,category:category,from_date:from_date,to_date:to_date};
                    var encData = encrypt(encKey,data);
                    $.ajax({
                        type: 'POST',
                        url: '<?php echo site_url("$this->control_name/delete_pay_structure");?>',
                        data:encData,				
					    contentType: 'text/plain',
                        success: function(data){
                            var rslt = JSON.parse(data);
                            if(rslt.success){
                                toastr.success(rslt.message);
                                search_pay_structure();
                            }else{
                                toastr.error(rslt.message);                 
                            }
                            $("#delete").attr('disabled',false);
                            $("#delete").html("Delete");
                        }
                    });
                }
            },
            close: function(){
                $("#delete").attr('disabled',false);
                $("#delete").html("Delete");
            }
        }
    });
}

//FUNCTION FOR CREATE TO APPEND A DATA TO EARNINGS AND DEDUCTION TABLE 
function ear_ded_table_create(rslt){
    var status_list     = <?php echo json_encode($status_list); ?>;
    var action          = rslt.action;
    $("#ear_ded_pay_struct_data").show();
    $("#ear_pay_struct_data").html(rslt.ear_table_rslt);  
    $("#ded_pay_struct_data").html(rslt.ded_table_rslt); 
    $("#ear_pay_struct_data .select").append(status_list); 
    
    //DR CODE END FOR COPY THE SAME PAY STRUCTURE 22 AUG22
    if(rslt.pf_exempt === 1){
        $("#ear_pay_struct_data #pf_exempt").attr("checked",true); 
    }
    if(rslt.esi_exempt === 1){
        $("#ear_pay_struct_data #esi_exempt").attr("checked",true); 
    }
    if(rslt.lwf_exempt === 1){
        $("#ear_pay_struct_data #lwf_exempt").attr("checked",true); 
    }

    var drop_select_arr = rslt.drop_select_arr;
    //for select a pt and esi and pf dropdown data
    $("#ear_pay_struct_data tbody").find("tr").each(function(index, element) {
        var prime_line_id   =  $(element).find("td").find("#prime_pay_line_id").val();
        var wage_code       =  $(element).find("td").find("#wage_code").val();
        //only for earnings(formula type 1)
        $(element).find("td").find("#pf_applicable").val(drop_select_arr[prime_line_id][wage_code]['pf_applicable']);
        $(element).find("td").find("#esi_applicable").val(drop_select_arr[prime_line_id][wage_code]['esi_applicable']);
        $(element).find("td").find("#pt_applicable").val(drop_select_arr[prime_line_id][wage_code]['pt_applicable']);
    });

    //DR CODE START FOR COPY THE SAME PAY STRUCTURE 22 AUG22
    if(action === "copy"){
        $("#add_pay_struct_data #prime_id").val(0);
        $("#ear_pay_struct_data #prime_pay_line_id").val(0);
        $("#ear_pay_struct_data #prime_pay_struct_id").val(0); 
        $("#ded_pay_struct_data #prime_pay_line_id").val(0);
        $("#ded_pay_struct_data #prime_pay_struct_id").val(0); 
        $("#add_pay_struct_data #to_date").val('31-12-2099');
    }else{
        $("#add_pay_struct_data #prime_id").val(rslt.prime_id);
    }
    select_option();
}

//function for hide a pay structure line table  
function pay_struct_line_table_toggle(){
    $("#ear_ded_pay_struct_data,#ear_ded_button").hide();  
    $("#ear_pay_struct_data").html();  
    $("#ded_pay_struct_data").html();
}

//if we search a personal code then wbs and position and activity and etc(inputs are based on pay structure settings)
function pay_struct_search_drop_fetch(prime_id,struct_edit_pick){
    //var struct_edit_pick   = <?php echo json_encode($pay_add_filter_pick_column); ?>;
    var send_url           = '<?php echo site_url("$controller_name/pay_struct_search_drop_fetch");?>'
    if(prime_id){
        // Encryption
        var encKey  = '<?php echo $encKey; ?>';
        var data    = {prime_id:prime_id};
        var encData = encrypt(encKey,data);
        $.ajax({
            type: 'POST',
            url: send_url,
            data:encData,				
            contentType: 'text/plain',
            success: function(data) {
                var rslt = JSON.parse(data);
                if(rslt.success){
                    var input_rslt   = rslt.input_rslt;
                    var act_no_list  = rslt.sap_act_no_list;
                    <?php foreach($pay_add_filter_setting as $setting){
                        $prime_form_id  = (int)$setting->prime_form_id;
                        $field_type     = (int)$setting->field_type;
                        $label_id       = $setting->label_name;
                        $hidden_id      = $label_id."_hidden_".$prime_form_id;
                        
                        if($label_id !== "category"){
                            echo "if(input_rslt){
                                var input_data  = input_rslt['$label_id'];
                                
                                //DR CODE START FOR WBS BASED ACTIVITY FETCH(BUT WBS NOT CHOOSE SO ACTIVITY PICKLIST LABEL EMPTY) 25AUG22
                                if('$label_id' === 'activity_no'){
                                    $('#holder #activity_no').html(act_no_list);
                                }
                                //DR CODE START FOR WBS BASED ACTIVITY FETCH(BUT WBS NOT CHOOSE SO ACTIVITY PICKLIST LABEL EMPTY) 25AUG22

                                if('$label_id' === 'network_id'){
                                    var option   = '<option value = '+input_data+'>' + input_data + '</option>';
                                    $('#holder #network_id').html(option);
                                }
                                $('#holder #$label_id').val(input_data);

                                if($field_type === 5){
                                    $('#$label_id'+'_div').remove();
                                    $('<div id =\"$label_id'+'_div\"><b>'+struct_edit_pick[\"$label_id\"][input_data]+' </b></div>').insertAfter('#holder #$label_id');
                                    // style = \"color:blue;\"
                                }
                                if($field_type === 9){
                                    $('#holder #$hidden_id').val(struct_edit_pick['$label_id'][input_data]);
                                    $('#$label_id'+'_div').remove();
                                    $('<div id =\"$label_id'+'_div\"><b>'+struct_edit_pick[\"$label_id\"][input_data]+'</b> &nbsp; <a style=cursor:pointer;float: right; id=clear_btn onClick=clear_btn()><i class=\"fa fa-remove\" aria-hidden=\"true\"></i></a></div>').insertAfter('#holder #$hidden_id');
                                    // style = \"color:blue;\"
                                    $('#$label_id'+'_div').attr('disabled','disabled');
                                }
                            }";
                        }
                    } ?>
                }
            }
        });
    }
}

//date condition hide and show
function day_cond_hide_show(day_condition,change_tab_id){
    if(parseInt(day_condition) === 1){
        $('#day_count_head').show();
        $(''+change_tab_id+' #day_count').parent().show();
    }else{
        $('#day_count_head').hide();
        $(''+change_tab_id+' #day_count').parent().hide();
        $(''+change_tab_id+' #day_count').val('');
        select_option();
    }
}

//add pf and esi gross based on onclick by a amount and pf esi yes no option
function add_pf_esi_gross(click_id,click_row,old_val){
    var amount          = Number(($(click_row).closest("tr").find("#amount").val()));
    var pf_applicable   = $(click_row).closest("tr").find("#pf_applicable").val();
    var esi_applicable  = $(click_row).closest("tr").find("#esi_applicable").val();
    var table_name      = $(click_row).closest("table").attr("id");

    var len             = $('#'+table_name+' tr').length;
    //code for get a last and before last row 
    var pf_gross_amt    = Number(($('#'+table_name+' tr').eq(len - 2).find("td").find("#amount").val()));
    var esi_gross_amt   = Number(($('#'+table_name+' tr').eq(len - 1).find("td").find("#amount").val()));

    if(click_id){
        var tot_pf_gross_amt   = 0;
        var tot_esi_gross_amt  = 0;
        if(click_id === "amount"){
            var sum_amt      =   amount - old_val;      
            if(pf_applicable === "1"){
                tot_pf_gross_amt   = pf_gross_amt + sum_amt;
                $('#'+table_name+' tr').eq(len - 2).find("td").find("#amount").val(tot_pf_gross_amt);
                $('#'+table_name+' tr').eq(len - 1).find("td").find("#amount").val(tot_esi_gross_amt);
            }
            if(esi_applicable === "1"){
                tot_esi_gross_amt  = esi_gross_amt + sum_amt;
                $('#'+table_name+' tr').eq(len - 2).find("td").find("#amount").val(tot_pf_gross_amt);
                $('#'+table_name+' tr').eq(len - 1).find("td").find("#amount").val(tot_esi_gross_amt);
            }
        }else
        if(click_id === "pf_applicable"){
            if(pf_applicable === "1"){
                tot_pf_gross_amt   = pf_gross_amt + amount;
                $('#'+table_name+' tr').eq(len - 2).find("td").find("#amount").val(tot_pf_gross_amt);
            }else
            if(pf_applicable === "2" && old_val === "1"){
                tot_pf_gross_amt   = pf_gross_amt - amount;
                $('#'+table_name+' tr').eq(len - 2).find("td").find("#amount").val(tot_pf_gross_amt);
            }
        }else
        if(click_id === "esi_applicable"){
            if(esi_applicable === "1"){
                tot_esi_gross_amt   = esi_gross_amt + amount;
                $('#'+table_name+' tr').eq(len - 1).find("td").find("#amount").val(tot_esi_gross_amt);
            }else
            if(esi_applicable === "2" && old_val === "1"){
                tot_esi_gross_amt   = esi_gross_amt - amount;
                $('#'+table_name+' tr').eq(len - 1).find("td").find("#amount").val(tot_esi_gross_amt);
            }
        }       
    }
}

//Add readonly option for last two row 
function table_rows_readonly(){
    var len     = $('#ear_pay_struct_table tr').length;
    $('#ear_pay_struct_table tr').eq(len - 2).each(function(index, element) {
        $(element).find("td").find("#wage_code").attr("readonly","readonly");
        $(element).find("td").find("#wage_name").attr("readonly","readonly");
        $(element).find("td").find("#amount").attr("readonly","readonly");
        $(element).find("td").find("#pf_applicable").attr("readonly","readonly");
        $(element).find("td").find("#esi_applicable").attr("readonly","readonly");
        $(element).find("td").find("#pt_applicable").attr("readonly","readonly");   
    });
    $('#ear_pay_struct_table tr').eq(len - 1).each(function(index, element) {
        $(element).find("td").find("#wage_code").attr("readonly","readonly");
        $(element).find("td").find("#wage_name").attr("readonly","readonly");
        $(element).find("td").find("#amount").attr("readonly","readonly");
        $(element).find("td").find("#pf_applicable").attr("readonly","readonly");
        $(element).find("td").find("#esi_applicable").attr("readonly","readonly");
        $(element).find("td").find("#pt_applicable").attr("readonly","readonly");   
    });
}


//for import
function view_form_data(action,title,control,form_id){
    $('.modal').modal({backdrop: 'static', keyboard: false});
    $('.modal-body').html('<div style="text-align: center;padding:50px;color:#4b6fa2;"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Please wait processing....</div>');
    $.ajax({
        type: 'POST',
        url: control,
        dataType: "html",
        success: function (response){                   
            $('.modal-title').html('<h4 class="modal-title">'+title+'</h4>');
            $('.modal-body').html(response);
        }
    });
}
async function call_items(){
     var jsonObj = [];
    var items = {};
   await $.getJSON("./json/cw_sap_wbs.json", function(tags) {     
    /* data now available, initialize autocomplete*/            
        $.each(tags, function(index, value) {
            jsonObj.push(items[value.wbs_id] = value.wbs_id+' ~ '+value.wbs_desc);
        });                
    });
     return items;
}

//FUNCTION FOR WBS ELEMENT CLEAR AND WBS ELEMENT BASED INPUTS ALSO CEAR
function clear_btn(attr_id){
    if(attr_id === 'wbs_element'){                
        $('#position_div,#activity_no_div').remove();                         //clear span remove
        $('#position,#activity_no').val('');                                  //hidden input empty
        $('input[name="hid_position"],input[name="hid_activity_no"]').val('');//input empty
        $('#list_position,#list_activity_no').empty();  
        $('#hid_wbs_element,#hid_position,#hid_activity_no').removeAttr('readonly');                      //datalist empty
    }else if(attr_id === 'personal_code'){
        $('#wbs_element_div,#position_div,#activity_no_div').remove();
        $('#wbs_element,#position,#activity_no').val('');
        $('input[name="hid_wbs_element"],input[name="hid_position"],input[name="hid_activity_no"]').val('');  
        $('#list_position,#list_activity_no,#list_wbs_element').empty();
        $('#hid_personal_code,#hid_wbs_element,#hid_position,#hid_activity_no').removeAttr('readonly');  
    }
    if(attr_id === "position"){
        $('#hid_position').removeAttr('readonly');  
        $('#hid_activity_no').removeAttr('readonly');  
        $('#activity_no').val('');
        $('input[name="hid_activity_no"]').val('');  
        $('#activity_no_div').remove();
    }
    if(attr_id === "activity_no"){
        $('#hid_activity_no').removeAttr('readonly');  
    }
    $('#'+attr_id).removeAttr('readonly');
    $('#'+attr_id+'_div').remove();
    $('#'+attr_id).val('');
    $('input[name="hid_'+attr_id+'"]').val('');
}

function tax_location_append(personal_code){
    var send_url    = '<?php echo site_url("$controller_name/tax_location_append");?>'
    // Encryption
    var encKey  = '<?php echo $encKey; ?>';
    var data    = {personal_code:personal_code};
    var encData = encrypt(encKey,data);
    $.ajax({
        type: 'POST',
        url: send_url,
        data:encData,				
        contentType: 'text/plain',
        success: function(data) {
            var rslt = JSON.parse(data);
            if(rslt.success){
                $("#tax_location").html(rslt.pro_tax_list);
            }else{
                $('#add_pay_struct_data #tax_location').val('');
                return false;
            }
        }
    });
}

//ASYNC FUNC TO FIND SAME ACT NO FOR MORE THAN ONE WBS -> NB[10-04-2024] 
function duplicate_act_no(wbs, act){ 
    var send_url = '<?php echo site_url("$controller_name/duplicate_act_no");?>';
    return new Promise(function(resolve, reject){
        // Encryption
        var encKey  = '<?php echo $encKey; ?>';
        var data    = {wbs: wbs, act: act};
        var encData = encrypt(encKey,data);
        $.ajax({
            type : 'POST',
            url  : send_url,
            data:encData,				
            contentType: 'text/plain',
            success: function(data){
                if(data === '1'){
                    resolve(true);
                }else{
                    resolve(false);
                }
            }
        });
    });
}

//DR CODE START 25AUG22 FOR PF AND ESI APPICABLE PREVIOUS VALUE FETCH BASED ON PF AND ESI EXEMPT (AND EAR TALE PRIME ID BASED)
function prev_exempt_val_append(prime_id,change_val){
    var send_url        = '<?php echo site_url("$controller_name/prev_exempt_val_append");?>'
    // Encryption
    var encKey  = '<?php echo $encKey; ?>';
    var data    = {prime_id:prime_id};
    var encData = encrypt(encKey,data);
    $.ajax({
        type: 'POST',
        url: send_url,
        data:encData,				
        contentType: 'text/plain',
        success: function(data) {
            var rslt   = JSON.parse(data);
            if(rslt.success){
                var exempt_arr    = rslt.exempt_arr;
                $("#ear_pay_struct_data tbody").find("tr").each(function(index, element) {
                    var hrms_field_name = $(element).find("td").find("#hrms_field_name").val();
                    $(element).find("td").find('#'+change_val).val(exempt_arr[hrms_field_name][change_val]);
                });
            }else{
                toastr.error(rslt.message);
                return false;
            }
        }
    });
}

//DR CODE END 25AUG22 FOR PF AND ESI APPICABLE PREVIOUS VALUE FETCH BASED ON PF AND ESI EXEMPT (AND EAR TALE PRIME ID BASED)
function dataSave(prime_id,wbs_id,details){
    var wbs_desc  = details.text();
    $("#holder #wbs_element").val(prime_id);
    $("#holder #wbs_element_hidden_1944").val(wbs_id+' - '+wbs_desc);
}

</script>
<style>
    .pull-right.search {
        display: none !important;
    }
    .columns.columns-right.btn-group.pull-right {
        display: none !important;
    }

    .floatright {
        float:right;
        display: inline;
        padding: 0 1.5em;
    }
    .btn-sm {
        width: 50px !important;
    }
    #ear_ded_save {
        position: absolute;
        right: 32px;
    }
    #pay_struct_save {
        position: absolute;
        right: 40px;
    }

    #ear_pay_struct_data {
        height: 420px;
        overflow: auto;
    }

    .thead-dark {
        position: sticky;
        top: 0; 
        /* z-index: 1; */
     }

    select {
        /* for Firefox */
        -moz-appearance: none;
        /* for Safari, Chrome, Opera */
        -webkit-appearance: none;
    }
    select::-ms-expand {
        display: none;
    }
    #search_pay_struct_table_filter{
        display: flex !important;
    }   
    /* ,.dataTables_length > label */
    .wbs_modal_body{
        width: 80%;
        margin: auto;
    }
    <?php 
        if($access_search === 1){
            echo ".pull-right.search { display: block !important; }";
        }
        if($access_export === 1){
            echo ".columns.columns-right.btn-group.pull-right{display: block !important;}";
        }
    ?>
</style>
<?php $this->load->view("partial/footer"); ?>