<?php
/****************************************************************************************
 * DEV: CONTRALORIA DEL ESTADO.
 * MODULO: RECURSOS HUMANOS
 * PROGRAMADORES.________________________________________________________________________
 * | # | NOMBRE.              | CORREO.                              | TELEFONO.
 * | 1 | Fernando Mendoza     | dt.ait.programador1@cgesucre.gob.ve  | 0424-8942068
 * | 2 |
 * |_____________________________________________________________________________________
 *****************************************************************************************/
require_once ROOT.'librerias'.DS.'zklib'.DS.'ZKLib.php';

class controlAsistenciaControlador extends Controlador
{

    private $atIdUsuario;
    private $atControlAsistencia;

    public function __construct()
    {
        parent::__construct();
        Session::metAcceso();
        $this->atIdUsuario = Session::metObtener('idUsuario');
        $this->atControlAsistencia = $this->metCargarModelo('controlAsistencia','procesos');
        $this->atReporteModelo = $this->metCargarModelo('empleadoReporte', 'reportes');

    }

    public function metIndex()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min'
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);
        $this->atVista->metRenderizar('biometricos');
    }

    public function metDataBiometricos()
    {


        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol=Session::metObtener('perfil');
        #capturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "
            SELECT
                    *
                FROM
                    rh_c111_biometricos
                WHERE 1
        ";
        if ($busqueda['value']) {
            #concateno la busqueda si existe, Nota: esto es obligatorio
            $sql .="
                      and
                      ind_biometrico LIKE '%$busqueda[value]%' OR
                      ind_ip LIKE '%$busqueda[value]%'

            ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('ind_biometrico','ind_serial','ind_ip','ind_tipo','num_estatus');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_biometrico';
        $ip = 'ind_ip';

        #construyo el listado de botones
        if (in_array('RH-01-02-00-03-02',$rol)) {
            $campos['boton']['Editar'] = '
                    <button class="modificar logsUsuario btn ink-reaction btn-raised btn-xs btn-primary" data-toggle="modal" data-target="#formModal"
                            data-keyboard="false" data-backdrop="static" title="Editar" idBiometrico="'.$clavePrimaria.'" descripcion="El Usuario a Modificado un Biométrico" titulo="Modificar Biométrico">
                            <i class="fa fa-edit" style="color: #ffffff;"></i>
                    </button>
                ';
        } else {
            $campos['boton']['Editar'] = false;
        }
        if (in_array('RH-01-02-00-03-03',$rol)) {
            $campos['boton']['Descargar'] = '
                    <button class="descargar logsUsuario btn ink-reaction btn-raised btn-xs btn-danger" idBiometrico="'.$clavePrimaria.'" title="Click para Descargar Asistencias"">
                        <i class="md md-file-download" style="color: #ffffff;"></i>
                    </button>
                ';
        } else {
            $campos['boton']['Descargar'] = false;
        }

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);

    }

    public function metNuevoBiometrico()
    {
        $idBiometrico = $this->metObtenerInt('idBiometrico');
        $valido       = $this->metObtenerInt('valido');

        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarJs($js);

        if($valido==1){

            $formTxt=$this->metObtenerTexto('form','txt');
            $formInt   = $this->metObtenerInt('form','int');

            foreach ($formInt as $tituloInt => $valorInt) {
                if(!empty($formInt[$tituloInt])){
                    $validacion[$tituloInt]=$valorInt;
                }else{
                    $validacion[$tituloInt]='';
                }
            }
            foreach ($formTxt as $tituloTxt => $valorTxt) {
                if(!empty($formTxt[$tituloTxt])){
                    $validacion[$tituloTxt]=$valorTxt;
                }else{
                    $validacion[$tituloTxt]='';

                }
            }

            if($idBiometrico===0){
                $validacion['status']='creacion';
                $id = $this->atControlAsistencia->metRegistrarBiometrico(
                    $validacion['ind_ip'], $validacion['ind_biometrico'], $validacion['ind_serial_c'],$validacion['ind_tipo'],$validacion['num_estatus']
                );
            }else{
                $validacion['status']='modificacion';
                $this->atControlAsistencia->metModificarBiometrico($idBiometrico,
                    $validacion['ind_ip'], $validacion['ind_biometrico'], $validacion['ind_serial_c'],$validacion['ind_tipo'],$validacion['num_estatus']
                );
            }

            $validacion['idBiometrico']=$id;

            if(is_array($id)){
                foreach ($validacion as $titulo => $valor){
                    if(strpos($id[2],$validacion[$titulo])){
                        $validacion[$titulo]='error';
                    }
                }
                $validacion['status']='errorSQL';
                echo json_encode($id[2]);
                exit;
            }else{
                if($id==2){//registro duplicado
                    $validacion['status']='Duplicado';
                }
            }
            echo json_encode($validacion);
            exit;

        }

        if($idBiometrico!=0){
            $db=$this->atControlAsistencia->metMostrarBiometrico($idBiometrico);
            $this->atVista->assign('formDB',$db);
        }

        $selectTipo = array('E','S');
        $this->atVista->assign('idBiometrico',$idBiometrico);
        $this->atVista->assign('selectTipo',$selectTipo);
        $this->atVista->metRenderizar('form','modales');
    }

    public function metConectarBiometrico()
    {
        $ip = $_POST['ip'];
        $zk = new ZKLib($ip);
        $conex = $zk->connect();
        if ($conex) {
            $zk->disableDevice();//deshabilito el dispositivo
            $serial = $zk->serialNumber();
            $data['conexion'] = true;
            $serial = str_replace('~SerialNumber=','',$serial);
            $serial = str_replace('\u0000','',$serial);
            $data['serial'] = $serial;
            $zk->enableDevice();
            $zk->disconnect();
        }else{
            $data['conexion'] = false;
            $data['serial'] = 'S/N';
        }
       echo json_encode($data);
    }

    public function metDescargarAsistencias()
    {
        $id = $_POST['idBiometrico'];
        $data_ip = $this->atControlAsistencia->metConsultarIp($id);
        $ip  = $data_ip['ind_ip'];
        $bio = $data_ip['ind_biometrico'];
        $tip = $data_ip['ind_tipo'];

        $ultima_marcacion = $this->atControlAsistencia->metConsultarUltimo($id);
        
        $zk = new ZKLib($ip);
        $conex = $zk->connect();
        
        if ($conex) {
            $attendance = [];
            $data['conexion'] = true;
            $zk->disableDevice();
            $attendance = $zk->getAttendance();
            if(count($attendance) > 0) {
                $ultimaFechaHora = strtotime($ultima_marcacion['fec_fecha'] . ' ' . $ultima_marcacion['fec_hora']); 

                $registroEncontrado = array_filter($attendance, function($registro) use ($ultimaFechaHora) { 
                    $timestamp = strtotime($registro['timestamp']); 
                    return $timestamp == $ultimaFechaHora; 
                }); 
                               
                $registroEncontrado = array_values($registroEncontrado);
                $uid = !empty($registroEncontrado) ? $registroEncontrado[0]['uid']: null;
               
                $indice = array_search($uid, array_column($attendance, 'uid'));
                
                $attendance = array_slice($attendance, $indice + 1);
                
                $marcas = $this->atControlAsistencia->metRegistrarMarcas($attendance,$bio,$tip,$id);
                
                echo json_encode($marcas); 
            }
            $zk->enableDevice();
            $zk->disconnect();
        }else{
            $data['conexion'] = false;
        }

    }

    public function metDescargarMarcas()
    {
        $biometricos = $this->atControlAsistencia->metListarBiometricos();
        $data = array();
        foreach ($biometricos as $bio){
            
            $data[] = array(
                'id' => $bio['pk_num_biometrico'],
                'ip' => $ip,
                'biometrico' => $bio['ind_biometrico'],
                'serial' => $bio['ind_serial'],
                'tipo' => $bio['ind_tipo'],
                'usuarios' => count($usuarios),
                'conex' => 1
            );
        }
        $this->atVista->assign('biometricos',$data);
        $this->atVista->metRenderizar('descargar');
    }

    public function metReportes()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
            //'select2-develop/select2', //nuevo
            'select2/select201ef', // viejo
            //'multi-select/multi-select555c',
            'bootstrap-datepicker/datepicker'
        );
        $complementosJs = array(
            //'select2-develop/select2.min',//nuevo
            'select2/select2.min',//viejo
            //'multi-select/jquery.multi-select'
            'bootstrap-datepicker/bootstrap-datepicker'
        );
        $js = array('materialSiace/core/demo/DemoTableDynamic',  'materialSiace/App', 'materialSiace/core/demo/DemoFormComponents');
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementosJs);
        $this->atVista->metCargarJs($js);
        $validar = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min'
        );
        $this->atVista->metCargarJsComplemento($validar);
        $usuario = Session::metObtener('idUsuario');
        $empleado = $this->atReporteModelo->metUsuario($usuario, 1);
        $pkNumEmpleado = $empleado['pk_num_empleado'];
        $datosEmpleado = $this->atReporteModelo->metEmpleado($pkNumEmpleado);
        $pkNumOrganismo = $datosEmpleado['fk_a001_num_organismo'];
        $listadoDependencia = $this->atReporteModelo->metListarDependencia($pkNumOrganismo, 1, 0);
        $empleado = array(
            'pk_num_organismo' => $pkNumOrganismo
        );
        $listadoOrganismo 		 = $this->atReporteModelo->metListarOrganismo($pkNumOrganismo, 1);
        $tipoNomina 			 = $this->atReporteModelo->metListarNomina();
        $tipoTrabajador 		 = $this->atReporteModelo->metMostrarSelect('TIPOTRAB');
        $listadoEmpleado 		 = $this->atReporteModelo->metConsultarEmpleadosActivo();
        $centroCosto 			 = $this->atReporteModelo->metListarCentroCosto();
        $listadoSexo 			 = $this->atReporteModelo->metListarSexo();
        $listadoGradoInstruccion = $this->atReporteModelo->metListarGradoInstruccion();
        $listadoSerieOcupacional = $this->atReporteModelo->metListarSerieOcupacional();
        $listadoProfesiones 	 = $this->atReporteModelo->metListarProfesiones();
        // Cargar a la vista
        $fecha_actual = date("d/m/Y");
        $this->atVista->assign('fecha_actual', $fecha_actual);
        $this->atVista->assign('listadoDependencia', $listadoDependencia);
        $this->atVista->assign('listadoEmpleado', $listadoEmpleado);
        $this->atVista->metRenderizar('listadoEmpleado');
    }

    public function metGenerarReporteAsistencias()
    {

        ini_set('error_reporting', 'E_ALL & ~E_STRICT');
        $pkNumDependencia = $_GET['pk_num_dependencia'];
        $buscar 		  = $_GET['buscar'];
        $fechaInicio 	= $_GET['fechaInicio'];
        $fechaFin    	= $_GET['fechaFin'];
        $tipo_reporte   = $_GET['tipo_reporte'];
        $orientacion    = 'P';

        // Cambio el formato de las fechas
        if(($fechaInicio!='')&&($fechaFin!=''))
        {
            $explodeInicio  = explode('/', $fechaInicio);
            $fechaInicio 	= $explodeInicio[2].'-'.$explodeInicio[1].'-'.$explodeInicio[0];
            $explodeFin 	= explode('/', $fechaFin);
            $fechaFin 		= $explodeFin[2].'-'.$explodeFin[1].'-'.$explodeFin[0];
        }
        else
        {
            $fechaInicio = '';
            $fechaFin 	 = '';
        }

        if($tipo_reporte=='P'){

            $this->metObtenerLibreria('cabeceraReportes', 'modRH');
            $pdf = new pdfAsistencias($orientacion, 'mm', 'Letter');
            $pdf->SetMargins(8,1,8);
            $pdf->orientacion = $orientacion;
            $pdf->setFecha($_GET['fechaInicio'],$_GET['fechaFin']);
            if($pkNumDependencia!='null'){
                $pdf->setTipoReporte(2);
            }else{
                $pdf->setTipoReporte(1);
            }
            $pdf->AliasNbPages();
            $pdf->AddPage();
            $pdf->SetAutoPageBreak(true, 30);

            $pdf->SetFont('Arial', 'B', 9);
            if($pkNumDependencia!='null'){
                if($buscar!=''){
                    $auxDep = explode(",",$pkNumDependencia);
                    foreach($auxDep as $dep){
                        $listEmpleadosCedula = $this->atControlAsistencia->metConsultarCedulas($buscar);
                        $nombreDependencia = $this->atControlAsistencia->metConsultaNombreDep($dep);
                        $pdf->setHeader($nombreDependencia);
                        foreach ($listEmpleadosCedula as $emp){
                            $cedula = $emp['ind_cedula_documento'];
                            $data = $this->atControlAsistencia->metConsultarMarcas($cedula,$fechaInicio,$fechaFin,$dep,4);
                            foreach($data as $marcas){
                                $explodeFi  = explode('-', $marcas['fec_fecha']);
                                $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                                $pdf->Cell(25, 7, number_format($marcas['ind_cedula'],0,'','.'),0,0,'L');
                                $pdf->Cell(75, 7, utf8_decode($marcas['funcionario']),0,0,'L');
                                $pdf->Cell(25, 7, $fecha,0,0,'L');
                                $pdf->Cell(25, 7, $marcas['fec_hora'],0,0,'L');
                                $pdf->Cell(50, 7, $marcas['ind_biometrico'],0,1,'L');
                            }
                        }
                    }
                    $pdf->Output();
                }else{
                    $auxDep = explode(",",$pkNumDependencia);
                    foreach($auxDep as $dep){
                        $nombreDependencia = $this->atControlAsistencia->metConsultaNombreDep($dep);
                        $data = $this->atControlAsistencia->metConsultarMarcas(false,$fechaInicio,$fechaFin,$dep,3);
                        $pdf->setHeader($nombreDependencia);
                        foreach($data as $marcas){
                            $explodeFi  = explode('-', $marcas['fec_fecha']);
                            $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                            $pdf->Cell(25, 7, number_format($marcas['ind_cedula'],0,'','.'),0,0,'L');
                            $pdf->Cell(75, 7, utf8_decode($marcas['funcionario']),0,0,'L');
                            $pdf->Cell(25, 7, $fecha,0,0,'L');
                            $pdf->Cell(25, 7, $marcas['fec_hora'],0,0,'L');
                            $pdf->Cell(50, 7, $marcas['ind_biometrico'],0,1,'L');
                        }
                    }
                    $pdf->Output();
                }
            }else{
                if($buscar!=''){
                    $listEmpleadosCedula = $this->atControlAsistencia->metConsultarCedulas($buscar);
                    foreach ($listEmpleadosCedula as $emp){
                        $cedula = $emp['ind_cedula_documento'];
                        $data = $this->atControlAsistencia->metConsultarMarcas($cedula,$fechaInicio,$fechaFin,false,1);
                        foreach($data as $marcas){
                            $explodeFi  = explode('-', $marcas['fec_fecha']);
                            $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                            $pdf->Cell(25, 7, number_format($marcas['ind_cedula'],0,'','.'),0,0,'L');
                            $pdf->Cell(75, 7, utf8_decode($marcas['funcionario']),0,0,'L');
                            $pdf->Cell(25, 7, $fecha,0,0,'L');
                            $pdf->Cell(25, 7, $marcas['fec_hora'],0,0,'L');
                            $pdf->Cell(50, 7, $marcas['ind_biometrico'],0,1,'L');
                        }
                    }
                    $pdf->Output();
                }else{
                    $data = $this->atControlAsistencia->metConsultarMarcas(false,$fechaInicio,$fechaFin,false,2);
                    foreach($data as $marcas){
                        $explodeFi  = explode('-', $marcas['fec_fecha']);
                        $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                        $pdf->Cell(25, 7, number_format($marcas['ind_cedula'],0,'','.'),0,0,'L');
                        $pdf->Cell(75, 7, utf8_decode($marcas['funcionario']),0,0,'L');
                        $pdf->Cell(25, 7, $fecha,0,0,'L');
                        $pdf->Cell(25, 7, $marcas['fec_hora'],0,0,'L');
                        $pdf->Cell(50, 7, $marcas['ind_biometrico'],0,1,'L');
                    }
                    $pdf->Output();
                }
            }

        }else{
            //Excel
            $this->metObtenerLibreria('PHPExcel', 'PHPExcel/Classes');
            $objPHPExcel = new PHPExcel();

            // Propiedades del documento
            $objPHPExcel->getProperties()->setCreator("Contraloria del Estado Sucre")
                ->setLastModifiedBy("Contraloria del Estado Sucre")
                ->setTitle("Reporte de Asistencias")
                ->setSubject("Reporte de Asistencias")
                ->setDescription("Reporte de Asistencias de la Contraloria del Estado Sucre")
                ->setKeywords("Listado de Asistencias")
                ->setCategory("Archivo de Asistencias");

            $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
            $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
            $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(40);
            $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
            $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
            $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(25);


            //ENCABEZADO
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:F1');
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A1', 'CONTRALORÍA DEL ESTADO SUCRE')->getRowDimension('1')->setRowHeight(20);
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A2:D2');
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A2', 'DIRECCIÓN DE RECURSOS HUMANOS')->getRowDimension('2')->setRowHeight(20);
            $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A3:D3');
            $objPHPExcel->setActiveSheetIndex(0)
                ->setCellValue('A3', '');
            $boldEncabezado = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));
            $boldTitulo = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER));
            $objPHPExcel->getActiveSheet()->getStyle('A1:E3')->applyFromArray($boldEncabezado);

            // Combino las celdas desde A4 hasta F4 Titulo
			$objPHPExcel->setActiveSheetIndex(0)->mergeCells('A4:F4')->getRowDimension('6')->setRowHeight(20);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A4', 'Reporte de Asistencias')->getStyle('A4')->applyFromArray($boldTitulo);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A5','DESDE: ')->getStyle('A5')->applyFromArray($boldEncabezado);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B5', $_GET['fechaInicio']);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C5', 'HASTA: ')->getStyle('C5')->applyFromArray($boldEncabezado);
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D5', $_GET['fechaFin']);

            if($pkNumDependencia!='null'){
                if($buscar!=''){
                    $auxDep = explode(",",$pkNumDependencia);
                    foreach($auxDep as $dep){
                        $listEmpleadosCedula = $this->atControlAsistencia->metConsultarCedulas($buscar);
                        $nombreDependencia = $this->atControlAsistencia->metConsultaNombreDep($dep);
                        $boldEncabezado = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));
                        $objPHPExcel->getActiveSheet()->getStyle('A7:F7')->applyFromArray($boldEncabezado);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A7','DEPENDENCIA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B7','CEDULA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C7','FUNCIONARIO');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D7','FECHA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E7','HORA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F7','BIOMÉTRICO');
                        foreach ($listEmpleadosCedula as $emp){
                            $cedula = $emp['ind_cedula_documento'];
                            $data = $this->atControlAsistencia->metConsultarMarcas($cedula,$fechaInicio,$fechaFin,$dep,4);
                            $c=8;
                            foreach($data as $marcas){
                                $explodeFi  = explode('-', $marcas['fec_fecha']);
                                $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$c,$marcas['ind_dependencia']);
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$c,number_format($marcas['ind_cedula'],0,'','.'));
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$c,$marcas['funcionario']);
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$c,$fecha);
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$c,$marcas['fec_hora']);
                                $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$c,$marcas['ind_biometrico']);
                                $c++;
                            }
                        }
                    }
                }else{
                    $auxDep = explode(",",$pkNumDependencia);
                    $d=7;
                    foreach($auxDep as $dep){
                        $nombreDependencia = $this->atControlAsistencia->metConsultaNombreDep($dep);
                        $data = $this->atControlAsistencia->metConsultarMarcas(false,$fechaInicio,$fechaFin,$dep,3);
                        $boldEncabezado = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));
                        $objPHPExcel->getActiveSheet()->getStyle('A7:F7')->applyFromArray($boldEncabezado);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A7','DEPENDENCIA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B7','CEDULA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C7','FUNCIONARIO');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D7','FECHA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E7','HORA');
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F7','BIOMÉTRICO');
                        $c=8;
                        foreach($data as $marcas){
                            $explodeFi  = explode('-', $marcas['fec_fecha']);
                            $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$c,$marcas['ind_dependencia']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$c,number_format($marcas['ind_cedula'],0,'','.'));
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$c,$marcas['funcionario']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$c,$fecha);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$c,$marcas['fec_hora']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$c,$marcas['ind_biometrico']);
                            $c++;
                        }
                    }
                }
            }else{
                if($buscar!=''){
                    $boldEncabezado = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));
                    $objPHPExcel->getActiveSheet()->getStyle('A7:F7')->applyFromArray($boldEncabezado);
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A7','DEPENDENCIA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B7','CEDULA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C7','FUNCIONARIO');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D7','FECHA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E7','HORA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F7','BIOMÉTRICO');
                    $listEmpleadosCedula = $this->atControlAsistencia->metConsultarCedulas($buscar);
                    $c=8;
                    foreach ($listEmpleadosCedula as $emp){
                        $cedula = $emp['ind_cedula_documento'];
                        $data = $this->atControlAsistencia->metConsultarMarcas($cedula,$fechaInicio,$fechaFin,false,1);
                        foreach($data as $marcas){
                            $explodeFi  = explode('-', $marcas['fec_fecha']);
                            $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$c,$marcas['ind_dependencia']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$c,number_format($marcas['ind_cedula'],0,'','.'));
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$c,$marcas['funcionario']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$c,$fecha);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$c,$marcas['fec_hora']);
                            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$c,$marcas['ind_biometrico']);
                            $c++;
                        }
                    }

                }else{
                    $boldEncabezado = array('font' => array('bold' => true,'size' => 11),'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT));
                    $objPHPExcel->getActiveSheet()->getStyle('A7:F7')->applyFromArray($boldEncabezado);
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A7','DEPENDENCIA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B7','CEDULA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C7','FUNCIONARIO');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D7','FECHA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E7','HORA');
                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F7','BIOMÉTRICO');
                    $data = $this->atControlAsistencia->metConsultarMarcas(false,$fechaInicio,$fechaFin,false,2);
                    $c=8;
                    foreach($data as $marcas){
                        $explodeFi  = explode('-', $marcas['fec_fecha']);
                        $fecha	= $explodeFi[2].'-'.$explodeFi[1].'-'.$explodeFi[0];
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A'.$c,$marcas['ind_dependencia']);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('B'.$c,number_format($marcas['ind_cedula'],0,'','.'));
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('C'.$c,$marcas['funcionario']);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('D'.$c,$fecha);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('E'.$c,$marcas['fec_hora']);
                        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('F'.$c,$marcas['ind_biometrico']);
                        $c++;
                    }
                }
            }    

            // Redirigir la salida al navegador web de un cliente ( Excel5 )
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="Reporte_Asistencias_'.date("d-m-Y").'.xls"');
            header('Cache-Control: max-age=0');
            // Si usted está sirviendo a IE 9 , a continuación, puede ser necesaria la siguiente
            header('Cache-Control: max-age=1');

            // Si usted está sirviendo a IE a través de SSL , a continuación, puede ser necesaria la siguiente
            header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
            header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
            header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
            header ('Pragma: public'); // HTTP/1.0

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');

            $respuesta = array('estatus' => 1);
            echo json_encode($respuesta);

        }

    }

    /*Se deshabilita este metodo funcionalidad anterior
    public function metIndex()
    {
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min'
        );
        $js= array('materialSiace/App','materialSiace/core/demo/DemoFormComponents');

        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);

        $this->atVista->metRenderizar('transferir');
    }
    */

    #PERMITE TRANSFERIR Y PROCESAR EL ARCHIVO DE ASISTENCIAS
    public function metTransferirAsistencia()
    {
        $tipo    = $this->metObtenerTexto('tipo');
        $destino = "publico/";

        error_reporting(E_ALL);
        set_time_limit(0);

        #cuando se seleciona el archivo
        if(strcmp($tipo,'TRANSFERIR')==0){

            if (isset($_FILES["archivo"]))
            {
                if (is_uploaded_file($_FILES['archivo']['tmp_name'])) {
                    copy($_FILES['archivo']['tmp_name'], $destino.$_FILES['archivo']['name']);
                    $subio = true;
                }
                else{
                    $subio = false;
                }

            }


        }

        #proceso el archivo (boton transferir eventos)
        if(strcmp($tipo,'PROCESAR')==0){

            $archivo = $this->metObtenerTexto('archivo');
            $tipoarc = explode(".",$archivo);

            $archivo = str_replace("C:\\fakepath\\", "", $archivo);
//var_dump(file_exists($destino.$archivo));
            if(file_exists($destino.$archivo)){ //file_exists($destino.$archivo)
                #proceso el archivo
                $this->metObtenerLibreria('IOFactory', 'PHPExcel/Classes/PHPExcel');

                #dependiendo de la extension del archivo inicio el objeto
                if(strcmp($tipoarc[1],'xls')==0 || strcmp($tipoarc[1],'xlsx')==0){
                    $objReader = new PHPExcel_Reader_Excel5();
                }
                if(strcmp($tipoarc[1],'ods')==0){
                    $objReader = new PHPExcel_Reader_OOCalc();
                }

                $objPHPExcel = $objReader->load('publico/'.$archivo);

                //Asigno la hoja de calculo activa
                $objPHPExcel->setActiveSheetIndex(0);
                //Obtengo el numero de filas del archivo
                $numRows = $objPHPExcel->setActiveSheetIndex(0)->getHighestRow();


                for ($i = 1; $i <= $numRows; $i++) {

                    //valido la fecha y hora del archivo antes de guardar en la bd
                    $fecha = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue();
                    $hora  = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue();

                    if(($this->metValidarFecha($fecha)==1) && ($this->metValidarHora($hora)==1)){


                        $informacion[] = array(
                            'fecha' => $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getCalculatedValue(),
                            'hora' => $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getCalculatedValue(),
                            'evento' => $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getCalculatedValue(),
                            'cedula' => $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getCalculatedValue()
                        );
                        $w=1;

                    }else{

                        $w = 0;//ERROR EN ARCHIVO

                    }


                }


                #si hay un error en el archivo
                if($w==0){
                    echo json_encode(2);
                }else{


                    #transfiero los eventos
                    $eventos = $this->atControlAsistencia->metTransferirEventos($informacion);
//var_dump($eventos);exit();
                    if($eventos==1){

                        unlink('publico/'.$archivo);

                        #procesar los eventos
                        $asistencia = $this->atControlAsistencia->metControlAsistencia();

                        if($asistencia==1){
                            echo json_encode($asistencia);
                        }else{
                            echo json_encode($asistencia);
                        }

                    }else{

                        echo json_encode($eventos);

                    }

                }

            }//echo json_encode('Error de direccion del archivo');

        }

    }

    #eventos por procesar
    public function metEventosPorProcesar()
    {
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029'
        );

        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min'
        );
        $js= array('materialSiace/core/demo/DemoTableDynamic','materialSiace/App');
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);

        $this->atVista->metRenderizar('listado');
    }

    #data eventos por procesar
    public function metDataPorProcesar()
    {


        #obtengo los rodes de usuario, Nota: esto es obligatorio
        $rol=Session::metObtener('perfil');
        #capturo la busqueda enviada por la datatabla, Nota: esto es obligatorio
        $busqueda = $this->metObtenerFormulas('search');
        #construyo el sql, Nota: esto es obligatorio
        $sql = "
            SELECT
                    rh_c105_controlasistencia.pk_num_controlasistencia,
                    rh_c105_controlasistencia.fk_rhb001_num_empleado,
                    mp.pk_num_persona,
                    rh_c105_controlasistencia.ind_cedula_empleado,
                    rh_c105_controlasistencia.fec_fecha,
                    rh_c105_controlasistencia.fec_hora,
                    rh_c105_controlasistencia.fec_fecha_format,
                    rh_c105_controlasistencia.fec_hora_format,
                    rh_c105_controlasistencia.ind_evento,
                    rh_c105_controlasistencia.ind_estado,
                    CONCAT_WS(' ',mp.ind_nombre1,mp.ind_nombre2,mp.ind_apellido1,mp.ind_apellido2) AS nombre_empleado,
                    mp.ind_nombre1, mp.ind_nombre2,mp.ind_apellido1,mp.ind_apellido2
                FROM
                    rh_c105_controlasistencia
                INNER JOIN rh_b001_empleado AS me ON me.pk_num_empleado = rh_c105_controlasistencia.fk_rhb001_num_empleado
                INNER JOIN a003_persona AS mp ON mp.pk_num_persona = me.fk_a003_num_persona
                WHERE rh_c105_controlasistencia.ind_estado='S'
        ";
        if ($busqueda['value']) {
            #concateno la busqueda si existe, Nota: esto es obligatorio
            $sql .="
                      and
                      ind_cedula_empleado LIKE '%$busqueda[value]%' OR
                      ind_nombre1 LIKE '%$busqueda[value]%'

            ";
        }

        #creo un arreglo de los campos a mostrar, Nota: esto es obligatorio
        $campos = array('ind_cedula_empleado','nombre_empleado','fec_fecha','fec_hora','ind_evento');
        #campo primario de la tabla, Nota: esto es obligatorio
        $clavePrimaria = 'pk_num_controlasistencia';

        #hago el llamado de la datatabla del controlador principal.
        $this->metDataTabla($sql,$campos,$clavePrimaria);

    }

    public function metProcesarEventos()
    {

        $procesar = $this->atControlAsistencia->metProcesarEventos();

        if($procesar==1){
            echo json_encode($procesar);
        }else{
            echo json_encode($procesar);
        }

    }

    #para validar formato correcto de la fecha en el archivo
    public function metValidarFecha($fecha)
    {
        if(preg_match('/^\d{1,2}\-\d{1,2}\-\d{4}$/', $fecha)==1){
            return 1;
        }
        elseif(preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $fecha)==1){
            return 1;
        }
        else{
            return 0;
        }

    }

    #para validar formato correcto de la hora en el archivo
    public function metValidarHora($fecha)
    {
        if(preg_match('/^\d{2}\:\d{2}$/', $fecha)==1){
            return 1;
        }
        else{
            return 0;
        }

    }



}