<?php

class Biometrico extends Conexion
{

    /* =============================================
    VER DATOS DE BIOMETRICO POR ID
    ============================================= */
    public function Biometrico_Gestion($id) 
    {
        $conectar = parent::conectar();
        parent::set_names();

        $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.biometricodbk, bio.estado, bio.observacion,
                CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE bio.biometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $id);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Biometrico_por_ID($biometricoId)
    {

        $conectar = parent::conectar();

        parent::set_names();

        $sql = "SELECT bio.usubiometricodbk, bio.personadbk, bio.mac, bio.descripcion, bio.estado, bio.jornadadbk, 
                CONCAT(bio.personadbk, ' - ', per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS usuario
                FROM usuario_biometrico bio                               
                INNER JOIN persona per ON per.personadbk = bio.personadbk
                WHERE bio.usubiometricodbk = ?
                ";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $biometricoId);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    /* =============================================
    ELIMINAR DATOS DE BIOMETRICO POR ID
    ============================================= */

    public function Eliminar_por_ID($biometricoId)
    {

        $conectar = parent::conectar();

        parent::set_names();

        $sql = "

                DELETE FROM biometrico WHERE biometricodbk = ?

                ";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $biometricoId);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    /* =============================================
    IMPRIMIR TABLA DE BIOMETRICO
    ============================================= */

    public function Consultar($fil)
    {
        $conectar = parent::conectar();

        parent::set_names();

        switch ($fil) 
        {
            case "all":
                $sql = "SELECT usubiometricodbk, usuario_biometrico.estado as estado,
                CONCAT(persona.pnombre,' ',persona.papellido,' ', persona.snombre,' ', persona.sapellido) as nombre
                FROM usuario_biometrico LEFT JOIN persona ON persona.personadbk = usuario_biometrico.personadbk";

                break;

            case "H":

                $sql = "";

                break;

            case "M":

                $sql = "";

                break;

            case "D":

                $sql = "";

                break;

        }

        $sql = $conectar->prepare($sql);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Guardar($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "INSERT INTO usuario_biometrico (personadbk, jornadadbk estado)
                VALUES (?,?,?,?,?)";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["personabdk"]);

        $sql->bindValue(2, $datos["jornadadbk"]);

        $sql->bindValue(3, $datos["estado"]);

        $sql->execute();

        return $datos;
    }

    public function Actualizar($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "UPDATE usuario_biometrico SET personadbk = ?, jornadadbk = ?, estado = ? WHERE usubiometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["personabdk"]);

        $sql->bindValue(2, $datos["jornadadbk"]);

        $sql->bindValue(3, $datos["estado"]);

        $sql->bindValue(4, $datos["biometricodbk"]);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Estado($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "UPDATE usuario_biometrico SET estado = ? WHERE usubiometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["estado"]);

        $sql->bindValue(2, $datos["id"]);

        $sql->execute();
    
        return $resultado = $sql->fetchAll();
    }

    public function Day($day) {
        switch ($day) {
            case "Monday":
                $day = "Lunes";
                break;
            case "Tuesday":
                $day = "Martes";
                break;
            case "Wednesday":
                $day = "Miercoles";
                break;
            case "Thursday":
                $day = "Jueves";
                break;
            case "Friday":
                $day = "Viernes";
                break;
            case "Saturday":
                $day = "Sabado";
                break;
            case "Sunday":
                $day = "Domingo";
                break;
        }

        return $day;
    }
    public function Eliminar($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "DELETE FROM usuario_biometrico WHERE usubiometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["id"]);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }
    
    public function Consultar_Biometrico($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "SELECT * FROM biometrico WHERE biometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["id"]);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Eliminar_Registro($id) 
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "DELETE FROM biometrico WHERE biometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $id);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Registro($datos)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "SELECT usubiometricodbk, jornadadbk FROM usuario_biometrico WHERE personadbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $datos["personadbk"]);

        $sql->execute();

        $fetch = $sql->fetchAll();

        $usuariodbk = $fetch[0]["usubiometricodbk"];
        $jornadadbk = $fetch[0]["jornadadbk"];
     
        if (count($fetch) > 0) 
        {   
            if(!$datos["admin"])
            {
                if(!self::IsMobile())
                {
                    if(self::CompareAddress(self::GetAddress()))
                    {
                        $sede = self::GetSede(self::GetAddress());

                        
                        $sql = "SELECT * FROM biometrico WHERE usubiometricodbk = ? 
                        AND tipo_registro = ? 
                        AND fecha_registro = ?";

                        $sql = $conectar->prepare($sql);

                        $sql->bindValue(1, $fetch[0]["usubiometricodbk"]);

                        $sql->bindValue(2, $datos["tipo"]);

                        $sql->bindValue(3, $datos["fecha"]);

                        $sql->execute();

                        $resultado = $sql->fetchAll();

                        if (count($resultado) > 0) 
                        {
                            return $resultado = array("status" => "error", "message" => "Ya se registro el tipo de asistencia");
                        }
                        else
                        {
                            $day = self::Day(date("l", strtotime($datos["fecha"])));

                            $sql = "SELECT * FROM jornada_detalle WHERE jornadadbk = ? AND dia = ?";

                            $sql = $conectar->prepare($sql);

                            $sql->bindValue(1, $jornadadbk);

                            $sql->bindValue(2, $day);
                                        
                            $sql->execute();

                            $resultado = $sql->fetchAll();

                            if (count($resultado) > 0)
                            {
                                $response = array();
                                $hora = strtotime($resultado[0]["hora_inicio"]);
                                $hora = date("H:i:s", $hora);
                    
                                $hora_registro = strtotime($datos["hora"]);
                                $hora_registro = date("H:i:s", $hora_registro); 

                                $salida_almuerzo = strtotime("13:00:00");
                                $salida_almuerzo = date("H:i:s", $salida_almuerzo);

                                $entrada_almuerzo = strtotime("14:00:00");
                                $entrada_almuerzo = date("H:i:s", $entrada_almuerzo);

                                switch($_POST["tipo"])
                                {
                                    case "ENTRADA_INICIAL":

                                        if($hora_registro > $hora)
                                        {
                                            $response = self::ValidTtype("TARDANZA", "Llegada tarde", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        else
                                        {
                                            $response = self::ValidTtype("REGULAR", "Sin observacion", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        break;

                                    case "SALIDA_FINAL":

                                        if($hora_registro < $hora)
                                        {
                                            $response = self::ValidTtype("SALIDA ANTICIPADA", "Salida anticipada", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        else
                                        {
                                            $response = self::ValidTtype("REGULAR", "Sin observacion", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        break;

                                    case "SALIDA_ALMUERZO":

                                        if($hora_registro > $salida_almuerzo)
                                        {
                                            $response = self::ValidTtype("REGULAR", "Sin observacion", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        else
                                        {
                                            $response = self::ValidTtype("SALIDA ANTICIPADA", "Salida de almuerzo antes", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        break;
                                    case "ENTRADA_ALMUERZO":

                                        if($hora_registro < $entrada_almuerzo)
                                        {
                                            $response = self::ValidTtype("REGULAR", "Sin observacion", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        else
                                        {
                                            $response = self::ValidTtype("TARDANZA", "Llegada tarde de almuerzo", $datos, $usuariodbk, $sede[0]["sededbk"]);
                                        }
                                        break;
                                }
                                return $response;
                            }
                            else
                            {
                                return $resultado = array("status" => "error", "message" => "No se encontro la jornada");
                            }
                        }
                    }
                    else
                    {
                        return $resultado = array("status" => "error", "message" => "No se encontro la sede del usuario");
                    }
                }
                else
                {
                    return $resultado = array("status" => "error", "message" => "El registro solo se puede realizar desde un dispositivo que no sea movil");
                }
            } 
            else 
            {
                if($datos["actualizar"])
                {
                    $sql = "UPDATE biometrico 
                    SET tipo_registro = ?, fecha_registro = ?, hora_registro = ?, usubiometricodbk = ?, perupdatedbk = ?, estado = ?, observacion = ? 
                    WHERE biometricodbk = ?"; 

                    $sql = $conectar->prepare($sql);

                    $sql->bindValue(1, $datos["tipo"]);

                    $sql->bindValue(2, $datos["fecha"]);

                    $sql->bindValue(3, $datos["hora"]);

                    $sql->bindValue(4, $fetch[0]["usubiometricodbk"]);

                    $sql->bindValue(5, $_SESSION["usuariodbk"]);

                    $sql->bindValue(6, $datos["estado"]);

                    $sql->bindValue(7, $datos["observacion"]);

                    $sql->bindValue(8, $datos["biometricodbk"]);

                    $sql->execute();

                    return $resultado = array("status" => "success", "message" => "Registro actualizado");
                }
                else 
                {
                    $sql = "SELECT * FROM biometrico WHERE usubiometricodbk = ? 
                    AND tipo_registro = ? 
                    AND fecha_registro = ?";

                    $sql = $conectar->prepare($sql);

                    $sql->bindValue(1, $fetch[0]["usubiometricodbk"]);

                    $sql->bindValue(2, $datos["tipo"]);

                    $sql->bindValue(3, $datos["fecha"]);

                    $sql->execute();

                    $resultado = $sql->fetchAll();

                    if (count($resultado) > 0) 
                    {
                        return $resultado = array("status" => "error", "message" => "Ya se registro el tipo de asistencia");
                    } 
                    else 
                    {
                        $sql = "INSERT INTO biometrico (usubiometricodbk,tipo_registro,fecha_registro,hora_registro,percreatedbk,perupdatedbk, observacion,estado, sededbk) 
                        VALUES (?,?,?,?,?,?,?,?,?)";

                        $sql = $conectar->prepare($sql);


                        $sql->bindValue(1, $fetch[0]["usubiometricodbk"]);

                        $sql->bindValue(2, $datos["tipo"]);

                        $sql->bindValue(3, $datos["fecha"]);

                        $sql->bindValue(4, $datos["hora"]);

                        $sql->bindValue(5, $_SESSION["usuariodbk"]);

                        $sql->bindValue(6, $_SESSION["usuariodbk"]);

                        $sql->bindValue(7, $datos["observacion"]);

                        $sql->bindValue(8, $datos["estado"]);

                        $sql->bindValue(9, $fetch[0]["sededbk"]);

                        $sql->execute();

                        return $resultado = array("status" => "success", "message" => "Registro exitoso");
                    }
                }
            }
        }
        else
        {
            return $resultado = array("status" => "error", "message" => "No se encontro el usuario, por favor contacte al administrador");
        }
    }

    public function ValidTtype($estado, $observacion, $datos, $usuario, $sede)
    {
        $conectar = parent::conectar();
        
        $sql = "INSERT INTO biometrico (usubiometricodbk,tipo_registro,fecha_registro,hora_registro,percreatedbk,perupdatedbk, observacion, estado, sededbk) 

        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $usuario);

        $sql->bindValue(2, $datos["tipo"]);

        $sql->bindValue(3, $datos["fecha"]);

        $sql->bindValue(4, $datos["hora"]);

        $sql->bindValue(5, $_SESSION["usuariodbk"]);

        $sql->bindValue(6, $_SESSION["usuariodbk"]);

        $sql->bindValue(7, $observacion);

        $sql->bindValue(8, $estado);

        $sql->bindValue(9, self::GetAddress());

        $sql->execute();

        return $resultado = array("status" => "success", "message" => "Registro exitoso");
    }
    public function Listar_Biometrico($fil)
    {
        $conectar = parent::conectar();

        parent::set_names();

        switch($fil)
        {
            case "all":
                $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.sededbk, sed.nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN sedes sed ON sed.sededbk = bio.sededbk
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE per.personadbk = ?";

                break;
        }

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $_SESSION["usuariodbk"]);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Listar_Biometrico_Gestion($fil, $año, $mes, $dia, $usuario)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "";

        if($fil == "all")
        {
            if(!empty($año) && !empty($mes) && !empty($dia) && !empty($usuario))
            {
                $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.biometricodbk, bio.estado, bio.observacion,
                CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE YEAR(bio.fecha_registro) = ? AND MONTH(bio.fecha_registro) = ? AND DAY(bio.fecha_registro) = ? AND per.personadbk = ?";
            }
            else
            {
                $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.biometricodbk, bio.estado, bio.observacion,
                CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk";
            }
        }
        
        $sql = $conectar->prepare($sql);
        
        $sql->bindValue(1, $año);
        $sql->bindValue(2, $mes);
        $sql->bindValue(3, $dia);
        $sql->bindValue(4, $usuario);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public static function IsMobile()
    {
        $user_agent = $_SERVER['HTTP_USER_AGENT'];

        $mobile_agents = array("Mobile","Android","iPhone","iPad","BlackBerry","iPod","Opera Mini","IEMobile");

        $mobile_browser = "0";

        foreach($mobile_agents as $device)
        {
            if(strstr($user_agent, $device))
            {
                $mobile_browser++;
            }
        }

        if($mobile_browser > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public function GetSede($string)
    {
        try
        {
            $conectar = parent::conectar();
            parent::set_names();

            $sql = "SELECT * FROM sedes WHERE ubicacion = ?";

            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $string);

            $sql->execute();

            $res = $sql->fetchAll();

            return $res;
        }
        catch(Exception $e)
        {
            return false;
        }
    }

    public static function GetAddress()
    {
        $tz = new DateTimeZone('America/Guayaquil');

        $token = md5($tz->getLocation()['latitude'].$tz->getLocation()['longitude']);

        return "Token.Ra." . $token;
    }
    
    public function CompareAddress($string)
    {
        try
        {
            $conectar = parent::conectar();
            parent::set_names();

            $sql = "SELECT * FROM sedes WHERE ubicacion = ?";
            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $string);

            $sql->execute();

            $res = $sql->fetchAll();
          
            if(count($res) > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch(Exception $e)
        {
            return false;
        }
    }

    public static function VerifyAddress($string)
    {
        $tz = new DateTimeZone('America/Guayaquil');

        $token = md5($tz->getLocation()['latitude'].$tz->getLocation()['longitude']);

        if($token == $string)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public function Select($search)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $sql = "SELECT ubio.personadbk, per.personadbk, per.pnombre, per.papellido, per.snombre, per.sapellido, per.tipo
                FROM usuario_biometrico ubio
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE per.pnombre LIKE ? OR per.papellido LIKE ? OR per.snombre LIKE ? OR per.sapellido LIKE ?";
            
        $sql = $conectar->prepare($sql);
        
        $sql->bindValue(1, "%$search%");
        $sql->bindValue(2, "%$search%");
        $sql->bindValue(3, "%$search%");
        $sql->bindValue(4, "%$search%");

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Report_Fetch($date)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $month = substr($date, 5, 2);
        $year = substr($date, 0, 4);

        $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.biometricodbk, bio.estado, bio.observacion,
                CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE YEAR(bio.fecha_registro) = ? AND MONTH(bio.fecha_registro) = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $year);
        $sql->bindValue(2, $month);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Report_Details($date, $user)
    {
        $conectar = parent::conectar();

        parent::set_names();

        $month = substr($date, 5, 2);
        $year = substr($date, 0, 4);

        $sql = "SELECT bio.tipo_registro, bio.fecha_registro, bio.hora_registro, bio.usubiometricodbk, 
                ubio.usubiometricodbk, ubio.personadbk, per.personadbk, bio.biometricodbk, bio.estado, bio.observacion,
                CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
                FROM biometrico bio
                LEFT JOIN usuario_biometrico ubio
                ON ubio.usubiometricodbk = bio.usubiometricodbk 
                LEFT JOIN persona per ON per.personadbk = ubio.personadbk
                WHERE YEAR(bio.fecha_registro) = ? AND MONTH(bio.fecha_registro) = ? AND bio.usubiometricodbk = ?";

        $sql = $conectar->prepare($sql);

        $sql->bindValue(1, $year);
        $sql->bindValue(2, $month);
        $sql->bindValue(3, $user);

        $sql->execute();

        return $resultado = $sql->fetchAll();
    }

    public function Report($datos) 
    {
        $conectar = parent::conectar();

        parent::set_names();
        
        if(empty($datos))
        {
            $sql = "SELECT ubio.usubiometricodbk FROM usuario_biometrico ubio";

            $sql = $conectar->prepare($sql);

            $sql->execute();

            $resultado = $sql->fetchAll();

            $data = array();

            foreach($resultado as $row)
            {
                $regular = 0;
                $tardanza = 0;
                $salida_anticipada = 0;

                $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                        CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                        FROM biometrico bio
                        INNER JOIN usuario_biometrico ubio
                        ON bio.usubiometricodbk = ubio.usubiometricodbk
                        INNER JOIN persona per
                        ON per.personadbk = ubio.personadbk
                        WHERE ubio.usubiometricodbk = ? AND bio.estado = 'REGULAR'
                        GROUP BY bio.estado
                    ";

                $sql = $conectar->prepare($sql);

                $sql->bindValue(1, $row['usubiometricodbk']);

                $sql->execute();

                $resultado = $sql->fetchAll();

                foreach($resultado as $row)
                {
                    $regular = $row['estado'];
                }

                $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                        CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                        FROM biometrico bio
                        INNER JOIN usuario_biometrico ubio
                        ON bio.usubiometricodbk = ubio.usubiometricodbk
                        INNER JOIN persona per
                        ON per.personadbk = ubio.personadbk
                        WHERE ubio.usubiometricodbk = ? AND bio.estado = 'TARDANZA'
                        GROUP BY bio.estado
                    ";

                $sql = $conectar->prepare($sql);

                $sql->bindValue(1, $row['usubiometricodbk']);

                $sql->execute();

                $resultado = $sql->fetchAll();

                foreach($resultado as $row)
                {
                    $tardanza = $row['estado'];
                }

                $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                        CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                        FROM biometrico bio
                        INNER JOIN usuario_biometrico ubio
                        ON bio.usubiometricodbk = ubio.usubiometricodbk
                        INNER JOIN persona per
                        ON per.personadbk = ubio.personadbk
                        WHERE ubio.usubiometricodbk = ? AND bio.estado = 'SALIDA ANTICIPADA'
                        GROUP BY bio.estado
                    ";

                $sql = $conectar->prepare($sql);

                $sql->bindValue(1, $row['usubiometricodbk']);

                $sql->execute();

                $resultado = $sql->fetchAll();

                foreach($resultado as $row)
                {
                    $salida_anticipada = $row['estado'];
                }

                $data[] = array(
                    'nombre' => $row['nombre'],
                    'regular' => $regular,
                    'tardanza' => $tardanza,
                    'salida_anticipada' => $salida_anticipada,
                    'action' => '<a href="/biometrico?op=download_report" class="btn btn-sm btn-danger"><i class="fas fa-download"></i></a>'
                );
            }

            return $data;
        }
        else
        {

            $sql = "SELECT ubio.usubiometricodbk, 
            CONCAT(' ', per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre
            FROM usuario_biometrico ubio 
            INNER JOIN persona per ON per.personadbk = ubio.personadbk
            WHERE ubio.personadbk = ?";

            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $datos['usuario']);

            $sql->execute();

            $resultado = $sql->fetchAll();

            $data = array();

            $regular = 0;
            $tardanza = 0;
            $salida_anticipada = 0;

            $id = $resultado[0]['usubiometricodbk'];
            $nombre = $resultado[0]['nombre'];


            $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                    CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                    FROM biometrico bio
                    INNER JOIN usuario_biometrico ubio
                    ON bio.usubiometricodbk = ubio.usubiometricodbk
                    INNER JOIN persona per
                    ON per.personadbk = ubio.personadbk
                    WHERE ubio.usubiometricodbk = ? AND bio.estado = 'REGULAR' AND fecha_biometrico BETWEEN ? AND ?
                    GROUP BY bio.estado
                ";

            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $id);
            $sql->bindValue(2, $datos['date_desde']);
            $sql->bindValue(3, $datos['date_hasta']);

            $sql->execute();

            $resultado = $sql->fetchAll();

            foreach($resultado as $row)
            {
                $regular = $row['estado'];
            }

            $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                    CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                    FROM biometrico bio
                    INNER JOIN usuario_biometrico ubio
                    ON bio.usubiometricodbk = ubio.usubiometricodbk
                    INNER JOIN persona per
                    ON per.personadbk = ubio.personadbk
                    WHERE ubio.usubiometricodbk = ? AND bio.estado = 'TARDANZA' AND fecha_biometrico BETWEEN ? AND ?
                    GROUP BY bio.estado
                ";

            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $id);
            $sql->bindValue(2, $datos['date_desde']);
            $sql->bindValue(3, $datos['date_hasta']);
            $sql->execute();

            $resultado = $sql->fetchAll();

            foreach($resultado as $row)
            {
                $tardanza = $row['estado'];
            }

            $sql = "SELECT COUNT(bio.estado) AS estado, bio.usubiometricodbk,
                    CONCAT(per.pnombre, ' ', per.papellido, ' ', per.snombre, ' ', per.sapellido) AS nombre 
                    FROM biometrico bio
                    INNER JOIN usuario_biometrico ubio
                    ON bio.usubiometricodbk = ubio.usubiometricodbk
                    INNER JOIN persona per
                    ON per.personadbk = ubio.personadbk
                    WHERE ubio.usubiometricodbk = ? AND bio.estado = 'SALIDA ANTICIPADA' AND fecha_biometrico BETWEEN ? AND ?
                    GROUP BY bio.estado
                ";

            $sql = $conectar->prepare($sql);

            $sql->bindValue(1, $id);
            $sql->bindValue(2, $datos['date_desde']);
            $sql->bindValue(3, $datos['date_hasta']);

            $sql->execute();

            $resultado = $sql->fetchAll();

            foreach($resultado as $row)
            {
                $salida_anticipada = $row['estado'];
            }

            $data[] = array(
                'nombre' => $nombre,
                'regular' => $regular,
                'tardanza' => $tardanza,
                'salida_anticipada' => $salida_anticipada,
                'action' => '<a href="/biometrico?op=download_report" class="btn btn-sm btn-danger"><i class="fas fa-download"></i></a>'
            );
            
            return $data;
        }
    }
}