<?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;
class Importar_usuario 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 Usuarios', $pagination=NULL,$modal=NULL, $info=NULL, $infoErr=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_usuario/".$page;
            $data['pagination'] = $pagination;
            $data['title_page'] = $title;
            $data['dataInfo'] = $info; //listar usuarios en vista Lista
            $data['dataInfoErr'] = $infoErr; //listar usuarios con errores en vista Lista
            //$data['test'] = $this->Usuario_model->seguridad_social("eps","0sdd");
            $data['scriptjs'] = "importar_usuario/scriptjs";
            $this->load->view("templates/layout", $data);
        }
    }
    

    public function upload() {
        $data = array();
        //$fetchData[]=NULL;
        //$fetchDataErr[]=NULL;
         // Load form validation library
         $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', 'Email', 'Nombres', 'Apellidos', 'Genero', 'Password', 'EPS', 'AFP', 'ARL', 'CCF',);
                $makeArray = array('Documento' => 'Documento', 'Email' => 'Email', 'Nombres' => 'Nombres', 'Apellidos' => 'Apellidos', 
                            'Genero' => 'Genero', 'Password' => 'Password', 'EPS' => 'EPS', 'AFP' => 'AFP', 'ARL' => 'ARL', 'CCF' => 'CCF');
                
                $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'];
                        $email = $SheetDataKey['Email'];
                        $nombre = $SheetDataKey['Nombres'];
                        $apellido = $SheetDataKey['Apellidos'];
                        $genero = $SheetDataKey['Genero'];
                        $password = $SheetDataKey['Password'];
                        $eps = $SheetDataKey['EPS'];
                        $afp = $SheetDataKey['AFP'];
                        $arl = $SheetDataKey['ARL'];
                        $ccf = $SheetDataKey['CCF'];
                        
                        $documento = filter_var(trim($allDataInSheet[$i][$documento]), FILTER_SANITIZE_STRING);
                        $email = filter_var(trim($allDataInSheet[$i][$email]), FILTER_SANITIZE_STRING);
                        //$nombre = filter_var(trim($allDataInSheet[$i][$nombre]), FILTER_SANITIZE_EMAIL);
                        //$apellido = filter_var(trim($allDataInSheet[$i][$apellido]), FILTER_SANITIZE_STRING);
                        $nombre = $allDataInSheet[$i][$nombre];
                        $apellido = $allDataInSheet[$i][$apellido];
                        
                        $genero = filter_var(trim($allDataInSheet[$i][$genero]), FILTER_SANITIZE_STRING);
                        $password = filter_var(trim($allDataInSheet[$i][$password]), FILTER_SANITIZE_STRING);
                        $x_eps = filter_var(trim($allDataInSheet[$i][$eps]), FILTER_SANITIZE_STRING);
                        $x_afp = filter_var(trim($allDataInSheet[$i][$afp]), FILTER_SANITIZE_STRING);
                        $x_arl = filter_var(trim($allDataInSheet[$i][$arl]), FILTER_SANITIZE_STRING);
                        $ccf = filter_var(trim($allDataInSheet[$i][$ccf]), FILTER_SANITIZE_STRING);
                        $eps= $this->Usuario_model->seguridad_social("eps",$x_eps);
                        $afp= $this->Usuario_model->seguridad_social("afp",$x_afp);
                        $arl= $this->Usuario_model->seguridad_social("arl",$x_arl);
                        
                        $documento = str_replace(".", "", $documento);
                        $documento = str_replace(",", "", $documento);
                        $documento_existe = $this->Usuario_model->documento_existe($documento);

                        if ($documento_existe == 1 && ($genero == "M" || $genero == "F")){
                            if ($email == NULL){
                                $email=$documento."@servimostemporales.com";
                            }
                            if ($password == NULL){
                                $password=sha1($documento);
                            }
                            else{
                                $password=sha1($password);
                            }
                            $fetchData[] = array('documento' => $documento, 'email' => $email, 
                                    'nombre' => $nombre, 'apellido' => $apellido, 'genero' => $genero,
                                    'password' => $password, 'imagen' => NULL, 'rol' => "3", 'eps' => $eps, 'afp' => $afp,
                                    'arl' => $arl, 'ccf' => $ccf, 'estado' => "1", 'ultima_actividad' => $hoy, 
                                    'fecha_cambio_pass' => 0, 'token' => 0);
                        }//if documento existe
                        else if ($documento_existe == 0 || ($genero != "M" || $genero != "F")){
                            $fetchDataErr[] = array('documento' => $documento, 'email' => $email, 
                            'nombre' => $nombre, 'apellido' => $apellido, 'genero' => $genero,
                            'password' => $password, 'imagen' => NULL, 'rol' => "3", 'eps' => $eps, 'afp' => $afp,
                            'arl' => $arl, 'ccf' => $ccf, 'estado' => "1", 'ultima_actividad' => $hoy, 
                            'fecha_cambio_pass' => 0, 'token' => 0);
                        }
                    }   
                    
                    if (isset($fetchData)){
                        //print_r($fetchData);
                        //die();
                        $data['dataInfo'] = $fetchData;
                        $this->Usuario_model->setBatchImport($fetchData);
                        $this->Usuario_model->importData('usuario');
                    }
                    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 ($i == 2){
                        $this->form_validation->set_message('checkFileValidation', 'El Archivo no contiene Datos!.');
                        $this->show_form(SUPERADMIN,  NULL, 'index', NULL, 'Importar Usuarios <br><br><span class="alert alert-danger">  El Archivo no tiene Datos!</span>');
                    }

                } else {
                    echo "Importe el archivo correcto, no coincide con la columna de la hoja de Excel";
                }
                $this->show_form(SUPERADMIN, NULL, 'lista', NULL, 'Lista de Usuarios Importados',NULL,NULL,$data['dataInfo'],$data['dataInfoErr']);
            }              
        }
    }

    
    // 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
?>
