<?php if ( ! defined('BASEPATH')) exit('No esta permitido el acceso directo al script');
/*Mauricio García - garmauco@gmail.com, developer@3mas1r.com*/
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Shared\Date;
class Importar_contrato extends CI_Controller{
	public function __construct()
	{
		/*Cargamos los metodos asociados a la clase CI_Controller, por medio de una inyección de dependencias*/
		parent:: __construct();
        $this->load->model('Usuario_model');
        if( !$this->session->userdata('isLoggedIn') ) {
					redirect('login');
				}
        else{
           $this->load->model('Usuario_model');
           $this->load->helper(array('url','html','form'));
           //$this->load->model('Importar_usuario_model');


           $this->Usuario_model->last_activity($this->session->userdata('documento'));
        }
	}

	public function index()
	{
		$rol=$this->Usuario_model->usuario_rol($this->session->userdata('documento'));
		if ($rol > MODULE_USUARIO){
			redirect('dashboard');
		}
                $this->show_form(SUPERADMIN);
    }

    public function show_form($access = USUARIO, $model = NULL, $page='index', $id = NULL, $title='Importar Contratos', 
    $pagination=NULL,$modal=NULL, $info=NULL, $infoErr=NULL, $infoDup=NULL){
        if ($access >= $this->session->userdata('rol')){// Permisos de Acceso
            $data['empresas'] = $this->Usuario_model->empresas();
            $data['modalDelete'] =$modal;/*Vista usada para la confirmacion de eliminacion de un registro*/
            $data['content'] = "importar_contrato/".$page;
            $data['pagination'] = $pagination;
            $data['title_page'] = $title;
            $data['dataInfo'] = $info; //listar Contratos en vista Lista
            $data['dataInfoErr'] = $infoErr; //listar Contratos con errores en vista Lista
            $data['dataInfoDup'] = $infoDup; //listar Contratos Duplicados en vista Lista
            
            //$data['test'] = $this->Usuario_model->seguridad_social("eps","0sdd");
            $data['scriptjs'] = "importar_contrato/scriptjs";
            $this->load->view("templates/layout", $data);
        }
    }
    
    function formato_fecha($fecha){
        //$fecha_f = $fecha;
       //$fecha_f=date_format($fecha,"Y-m-d");
       $f_exp = explode("/",$fecha);
       if ($f_exp[1] <= 9 && strlen($f_exp[1]) == 1){
           $f_exp[1]="0".$f_exp[1];
       }
       if ($f_exp[0] <= 9 && strlen($f_exp[0]) == 1){
        $f_exp[0]="0".$f_exp[0];
        }
       $fecha_f=$f_exp[2]."-".$f_exp[0]."-".$f_exp[1];

       return $fecha_f;
    }

    public function upload() {
        $data = array();
        //$fetchData[]=NULL;
        //$fetchDataErr[]=NULL;
         // Load form validation library
         $opc_empresa = $this->input->post('empresa');
         //echo $opc_empresa; die();
         $this->load->library('form_validation');
         $this->form_validation->set_rules('fileURL', 'Upload File', 'callback_checkFileValidation');
         if($this->form_validation->run() == false) {
            
            $this->show_form(SUPERADMIN);       
         } else {
            // If file uploaded
            if(!empty($_FILES['fileURL']['name'])) { 
                // get file extension
                $extension = pathinfo($_FILES['fileURL']['name'], PATHINFO_EXTENSION);
                $hoy = date("Y-m-d H:i:s");
                if($extension == 'csv'){
                    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
                } elseif($extension == 'xlsx') {
                    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
                } else {
                    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
                }
                // file path
                $spreadsheet = $reader->load($_FILES['fileURL']['tmp_name']);
                $allDataInSheet = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
            
                // array Count
                $arrayCount = count($allDataInSheet);
                $flag = 0;
                $createArray = array('Documento',
                                    'Empresa','Fecha_Ingreso','Fecha_Retiro','Cargo','Salario','Estado','Transporte');
                $makeArray = array('Documento' => 'Documento', 
                            'Empresa' => 'Empresa', 'Fecha_Ingreso' => 'Fecha_Ingreso', 'Fecha_Retiro' => 'Fecha_Retiro',
                            'Cargo' => 'Cargo', 'Salario' => 'Salario', 'Estado' => 'Estado', 'Transporte' => 'Transporte');
                
                $SheetDataKey = array();
                foreach ($allDataInSheet as $dataInSheet) {
                    foreach ($dataInSheet as $key => $value) {
                        if (in_array(trim($value), $createArray)) {
                            $value = preg_replace('/\s+/', '', $value);
                            $SheetDataKey[trim($value)] = $key;
                        } 
                    }
                }
                $dataDiff = array_diff_key($makeArray, $SheetDataKey);
                if (empty($dataDiff)) {
                    $flag = 1;
                }
                // match excel sheet column
                if ($flag == 1) {
                    for ($i = 2; $i <= $arrayCount; $i++) {
                        $addresses = array();
                        $documento = $SheetDataKey['Documento'];
                        
                        $empresa = $SheetDataKey['Empresa'];
                        $fecha_inicial = $SheetDataKey['Fecha_Ingreso'];
                        $fecha_retiro = $SheetDataKey['Fecha_Retiro'];
                        $cargo = $SheetDataKey['Cargo'];
                        $salario = $SheetDataKey['Salario'];
                        $estado = $SheetDataKey['Estado'];
                        $transporte = $SheetDataKey['Transporte'];
                        
                        $documento = filter_var(trim($allDataInSheet[$i][$documento]), FILTER_SANITIZE_STRING);
                        //echo "Fecha inicial ".$allDataInSheet[$i][$fecha_inicial]."-----";
                        //echo "Fecha retiro ".$allDataInSheet[$i][$fecha_retiro]."-----<br>";
                        //Datos Contrato
                        $empresa = filter_var(trim($allDataInSheet[$i][$empresa]), FILTER_SANITIZE_STRING);
                        $fecha_inicial = filter_var(trim($allDataInSheet[$i][$fecha_inicial]), FILTER_SANITIZE_STRING);
                        
                        //$fecha_inicial = $allDataInSheet[$i][$fecha_inicial];
                        $fecha_retiro = filter_var(trim($allDataInSheet[$i][$fecha_retiro]), FILTER_SANITIZE_STRING);
                        //$fecha_retiro = $allDataInSheet[$i][$fecha_retiro];
                        $cargo = filter_var(trim($allDataInSheet[$i][$cargo]), FILTER_SANITIZE_STRING);
                        $salario = filter_var(trim($allDataInSheet[$i][$salario]), FILTER_SANITIZE_STRING);
                        $estado = filter_var(trim($allDataInSheet[$i][$estado]), FILTER_SANITIZE_STRING);
                        $transporte = filter_var(trim($allDataInSheet[$i][$transporte]), FILTER_SANITIZE_STRING);
                        
                        $documento = str_replace(".", "", $documento);
                        $documento = str_replace(",", "", $documento);
                        $salario = str_replace(".", "", $salario);
                        $salario = str_replace(",", "", $salario);
                        $documento_existe = $this->Usuario_model->documento_existe($documento);
                        
                        
                        if ($opc_empresa == "T"){
                            $empresa = $this->Usuario_model->codigo_empresa($empresa);
                        }
                        else{
                            $empresa = $opc_empresa;
                        }
                        
                        if ($documento_existe == 0 && ($empresa != 0 && $empresa != NULL) && $cargo != NULL && 
                            $fecha_inicial != NULL && $salario != NULL){// usuario existe
                            $usuario = $this->Usuario_model->id_usuario($documento);
                            //echo $fecha_inicial."-- ";
                            //$fecha_inicial=date_create($fecha_inicial);
                            //$fecha_inicial=date_format($fecha_inicial, 'Y-m-d');
                            //echo "+".$fecha_inicial."++ ";
                            $fecha_inicial = $this->formato_fecha($fecha_inicial);
                            //echo $fecha_inicial."**** ";
                            
                            $contrato_existe = $this->Usuario_model->contrato_existe($empresa,$usuario,$fecha_inicial);
                            if ($contrato_existe == FALSE){
                                if ($fecha_retiro == NULL){
                                    $sin_finalizar =1;
                                    $fecha_retiro=NULL;
                                }
                                else{
                                    //$fecha_retiro = $this->formato_fecha($fecha_retiro);
                                    //$fecha_retiro=date_create($fecha_retiro);
                                    //$fecha_retiro=date_format($fecha_retiro, 'Y-m-d');
                                    $fecha_retiro = $this->formato_fecha($fecha_retiro);
                                    $sin_finalizar = 0;
                                }
                                //echo" -- ".$fecha_retiro."<br>";
                                if (strtolower($estado) != "i"){//if estado es diferente a i se pasa todo a 1
                                    $estado="1";
                                }
                                if (strtolower($transporte) != "s"){//if estado es diferente a i se pasa todo a 1
                                    $transporte="1";
                                }

                                $cargo = $this->Usuario_model->codigo_cargo($cargo);
                                $nombre_cargo = $this->Usuario_model->nombre_cargo($cargo);
                                $salario=strtoupper($salario);
                                
                                $fetchData[] = array('empresa' => $empresa, 'usuario' => $usuario, 
                                        'fecha_inicial' => $fecha_inicial, 'fecha_final' => $fecha_retiro,
                                        'sin_finalizar' => $sin_finalizar, 'cargo' => $cargo, 'asignacion_mensual' => $salario, 
                                        'transporte'=> $transporte, 'estado' => $estado);
                                $fetchDataInfo[] = array('documento' => $documento, 'empresa' => $empresa,  
                                        'fecha_inicial' => $fecha_inicial, 'cargo' => $nombre_cargo, 'salario' => $salario);
                            }
                            else{    
                                 $fetchDataDup[] = array('documento' => $documento, 'empresa' => $empresa,  
                                'fecha_inicial' => $fecha_inicial, 'cargo' => $cargo, 'salario' => $salario);
                            }
                        }
                        else {//Si las validaciones de cargo, empresa, salario y documento son falsas
                            if ($empresa != NULL){
                                $fetchDataErr[] = array('documento' => $documento, 'empresa' => $empresa,  
                                'fecha_inicial' => $fecha_inicial, 'cargo' => $cargo, 'salario' => $salario);
                            }
                        }
                    }   
                    //die();
                    if (isset($fetchDataInfo)){
                        //print_r($fetchData);
                        //die();
                        $data['dataInfo'] = $fetchDataInfo;
                        $this->Usuario_model->setBatchImport($fetchData);
                        $this->Usuario_model->importData('contrato');
                    }
                    else{// si las validaciones hacen que la variable no obtenga datos se envia como NULL para evitar errores en la vista
                        $data['dataInfo'] = NULL;
                    }

                    if (isset($fetchDataErr)){
                        $data['dataInfoErr'] = $fetchDataErr;
                    }
                    else{// si las validaciones hacen que la variable no obtenga datos se envia como NULL
                        $data['dataInfoErr'] = NUll;
                    }

                    if (isset($fetchDataDup)){
                        $data['dataInfoDup'] = $fetchDataDup;
                    }
                    else{// si las validaciones hacen que la variable no obtenga datos se envia como NULL
                        $data['dataInfoDup'] = NUll;
                    }
                    
                    if ($i == 2){
                        $this->form_validation->set_message('checkFileValidation', 'El Archivo no contiene Datos!.');
                        $this->show_form(SUPERADMIN,  NULL, 'index', NULL, 'Importar Contratos<br><br><span class="alert alert-danger">  El Archivo no tiene Datos!</span>');
                    }

                } else {
                    echo "Importe el archivo correcto, no coinciden las columnas de la hoja de Excel";
                }
                $this->show_form(SUPERADMIN, NULL, 'lista', NULL, 'Lista de Contratos Importados',NULL,NULL,$data['dataInfo'],$data['dataInfoErr'],$data['dataInfoDup']);
            }              
        }
    }

    
    // checkFileValidation
    public function checkFileValidation($string) {
      $file_mimes = array('text/x-comma-separated-values', 
        'text/comma-separated-values', 
        'application/octet-stream', 
        'application/vnd.ms-excel', 
        'application/x-csv', 
        'text/x-csv', 
        'text/csv', 
        'application/csv', 
        'application/excel', 
        'application/vnd.msexcel', 
        'text/plain', 
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      );
      if(isset($_FILES['fileURL']['name'])) {
            $arr_file = explode('.', $_FILES['fileURL']['name']);
            $extension = end($arr_file);
            if(($extension == 'xlsx' || $extension == 'xls' || $extension == 'csv') && in_array($_FILES['fileURL']['type'], $file_mimes)){
                return true;
            }else{
                $this->form_validation->set_message('checkFileValidation', 'Por favor, elija el archivo correcto.');
                return false;
            }
        }else{
            $this->form_validation->set_message('checkFileValidation', 'Por favor, elija un archivo.');
            return false;
        }
    }











/*
    function load_data()
    {
     $result = $this->Usuario_model->select();
     $output = '
      <h3 align="center">Detalles de usuario importados del archivo CSV</h3>
           <div class="table-responsive">
            <table class="table table-bordered table-striped">
             <tr>
              <th>#</th>
              <th>Documento</th>
              <th>Nombre</th>
              <th>Apellido</th>
              <th>Genero</th>
              <th>Email</th>
             </tr>
     ';
     $count = 0;
     if($result->num_rows() > 0)
     {
      foreach($result->result() as $row)
      {
       $count = $count + 1;
       $output .= '
       <tr>
        <td>'.$count.'</td>
        <td>'.$row->documento.'</td>
        <td>'.$row->nombre.'</td>
        <td>'.$row->apellido.'</td>
        <td>'.$row->genero.'</td>
        <td>'.$row->email.'</td>
       </tr>
       ';
      }
     }
     else
     {
      $output .= '
      <tr>
          <td colspan="5" align="center">Informaci&oacute;n no disponible</td>
         </tr>
      ';
     }
     $output .= '</table></div>';
     echo $output;
    }
   
    function import()
    {
        $hoy = date("Y-m-d H:i:s");    
     $file_data = $this->csvimport->get_array($_FILES["csv_file"]["tmp_name"]);
     foreach($file_data as $row)
     {
        $eps= $this->Usuario_model->seguridad_social("eps",$row["eps"]);
        $afp= $this->Usuario_model->seguridad_social("eps",$row["afp"]);
        $arl= $this->Usuario_model->seguridad_social("eps",$row["arl"]);
      $data[] = array(
            'id' => NULL,
            'documento' => $row["documento"],
            'email' => $row["email"],
            'nombre'  => $row["apellido"],
             'apellido'  => $row["apellido"],
             'genero'   => $row["genero"],
             'password'   => $row["password"],
             'imagen' => NULL,
             'rol' => "3",
             'eps' => $eps,
             'afp' => $afp,
             'arl' => $arl,
             'ccf' => $row["ccf"],
             'estado' => "1",
             'ultima_actividad' => $hoy,
             'fecha_cambio_pass' => 0,
             'token' => 0

      );
     }
     $this->Usuario_model->insert($data);
    }
    */

}//end class
?>
