<?php

class Practica extends Conexion {
    /* =============================================
      VER DATOS DE PRACTICA POR ID
      ============================================= */

    public function Practica_por_ID($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_general                                
                WHERE practicadbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function Actividad_por_ID($actividadId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_actividad                                
                WHERE actividadesdbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $actividadId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function Estados_por_ID($actividadId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_estado                               
                WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $actividadId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function Objetivos_por_ID($objetivosId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_objetivos,prac_carreraobe,prac_objetivoe                               
                WHERE objetivosdbk = ?
                AND carreraobe = carreraobedbk
                AND objetivo_especifico = objetivoedbk
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $objetivosId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function Competencias_por_ID($resultadosId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_resultados,prac_carreracom,prac_competencia                               
                WHERE resultadosdbk = ?
                AND carreracom = carreracomdbk
                AND competencia = competenciadbk
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $resultadosId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function Observaciones1_por_ID($observacionesId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                SELECT * FROM prac_observaciones                                
                WHERE observacionesdbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $observacionesId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }   
    
    /* =============================================
      ELIMINAR DATOS DE CARRERA POR ID
      ============================================= */

    public function Eliminar_por_ID($practicaId) {
                $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_estado WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM prac_horario WHERE practicadbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM prac_objetivos WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM prac_observaciones WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM prac_resultados WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM prac_semana WHERE practica = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        $sql = "
                DELETE FROM `prac_actividad` WHERE semana NOT IN (Select semanadbk FROM prac_semana)
                ";
        $sql = $conectar->prepare($sql);
        $sql->execute();
        $sql = "
                DELETE FROM prac_general WHERE practicadbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $practicaId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function EliminarHorario_por_ID($horarioId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_horario WHERE horariodbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $horarioId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function EliminarObjetivo_por_ID($objetivoId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_objetivos WHERE objetivosdbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $objetivoId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function EliminarResultado_por_ID($resultadoId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_resultados WHERE resultadosdbk = ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $resultadoId);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function EliminarSemana_por_ID($semanaId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_semana WHERE semanadbk = ?;
                DELETE FROM prac_actividad WHERE semana = ?;
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $semanaId);
        $sql->bindValue(2, $semanaId);
        $sql->execute();
        
        return $resultado = $sql->fetchAll();
    }  
    public function EliminarActividad_por_ID($actividadId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_actividad WHERE actividadesdbk = ?;
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $actividadId);
        $sql->execute();
        
        return $resultado = $sql->fetchAll();
    }
    public function EliminarObservacion1_por_ID($observacionesId) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "
                DELETE FROM prac_observaciones WHERE observacionesdbk = ?;
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $observacionesId);
        $sql->execute();
        
        return $resultado = $sql->fetchAll();
    }  
    public function notificar_por_ID($practicadbk,$tabla,$perfil) {
        if($perfil=="ESTUDIANTE"){
            $conectar = parent::conectar();
            parent::set_names();       
            $sql = "SELECT *
                    FROM prac_general,persona
                    WHERE practicadbk = $practicadbk
                    AND estudiante = personadbk";                                              
            $sql = $conectar->prepare($sql);
            $sql->execute();
            $resultado = $sql->fetchAll();        
            foreach ($resultado as $row) {
                $pnombre = $row["pnombre"];
                $snombre = $row["snombre"];
                $papellido = $row["papellido"];
                $sapellido = $row["sapellido"];
            }
            $nombres = $pnombre.' '.$snombre.' '.$papellido.' '.$sapellido;
            $sql = "SELECT *
                    FROM prac_general,persona,usuario
                    WHERE practicadbk = $practicadbk
                    AND docente = personadbk
                    AND usuario.persona = personadbk
                    AND perfil = 'DOCENTE'";                                              
            $sql = $conectar->prepare($sql);
            $sql->execute();
            $resultado = $sql->fetchAll();        
            foreach ($resultado as $row) {
                $usuariodbk = $row["usuariodbk"];
            }
            $sql = "SELECT COUNT(*)as cantidad 
                    FROM notificaciones
                    WHERE not_mensaje = 'La/El estudiante $nombres ha solitado la revisión de su proyecto de prácticas preprofesionales - sección $tabla'
                    AND not_tipo = '$tabla'
                    AND not_estado = 'ACTIVO'";
            $sql = $conectar->prepare($sql);
            $sql->execute();
            $resultado = $sql->fetchAll();        
            foreach ($resultado as $row) {
                $cantidad = $row["cantidad"];
            }
            if($cantidad==0){
                $sql = "INSERT INTO notificaciones  
                    (not_usuariodbk,not_fecha,not_hora,not_mensaje,not_linkrespuesta,not_estado,not_tipo)
                    VALUES (?,?,?,?,?,?,?);
                    ";
                date_default_timezone_set('America/Guayaquil');
                $fecha_actual = date('Y-m-d');       
                $hora_actual = date('H:i:s');  
                $sql = $conectar->prepare($sql);
                $sql->bindValue(1, $usuariodbk);
                $sql->bindValue(2, $fecha_actual);
                $sql->bindValue(3, $hora_actual);
                $sql->bindValue(4, "La/El estudiante ".$nombres." ha solitado la revisión de su proyecto de prácticas preprofesionales - sección $tabla");
                $sql->bindValue(5, "../Paracademico/practica.php");
                $sql->bindValue(6, "ACTIVO");
                $sql->bindValue(7, $tabla);
                $sql->execute();    
            }            
        }
        if($perfil=="DOCENTE"){
            $conectar = parent::conectar();
            parent::set_names();       
            $sql = "SELECT *
                    FROM prac_general,persona
                    WHERE practicadbk = $practicadbk
                    AND estudiante = personadbk";                                              
            $sql = $conectar->prepare($sql);
            $sql->execute();
            $resultado = $sql->fetchAll();        
            foreach ($resultado as $row) {
                $pnombre = $row["pnombre"];
                $snombre = $row["snombre"];
                $papellido = $row["papellido"];
                $sapellido = $row["sapellido"];
            }
            $nombres = $pnombre.' '.$snombre.' '.$papellido.' '.$sapellido;      
            $sql = "UPDATE notificaciones  
                    SET not_estado = 'INACTIVO'
                    WHERE not_mensaje = 'La/El estudiante $nombres ha solitado la revisión de su proyecto de prácticas preprofesionales - sección $tabla'
                    AND not_tipo = '$tabla'";                                              
            $sql = $conectar->prepare($sql);
            $sql->execute();
        }
    }    
    /* =============================================
      IMPRIMIR TABLA DE CARRERA
      ============================================= */

    public function Consultar($fil) {
        $conectar = parent::conectar();
        parent::set_names();
        switch ($fil) {
            case "practica_general":
                if($_SESSION["perfil"]=="DOCENTE"){
                    $personadbk = $_SESSION['personadbk'];
                    $sql = "SELECT practicadbk,CONCAT(papellido,' ',sapellido,' ',pnombre,' ',snombre)as nombre,
                    carrera.descripcion as carrera,horas,prac_general.estado as estado, doc_informe
                    FROM prac_general
                    INNER JOIN persona ON personadbk = estudiante
                    INNER JOIN carrera ON carreradbk = carrera 
                    WHERE docente = $personadbk";                        
                }
                if(($_SESSION["perfil"]=="ADMINISTRADOR")||($_SESSION["perfil"]=="COORDINACION")||($_SESSION["perfil"]=="SECRETARIA")){
                    $sql = "SELECT practicadbk,CONCAT(papellido,' ',sapellido,' ',pnombre,' ',snombre)as nombre,
                    carrera.descripcion as carrera,horas,prac_general.estado as estado, doc_informe
                    FROM prac_general
                    INNER JOIN persona ON personadbk = estudiante
                    INNER JOIN carrera ON carreradbk = carrera";
                }
                if($_SESSION["perfil"]=="ESTUDIANTE"){
                    $personadbk = $_SESSION['personadbk'];
                    $sql = "SELECT practicadbk,CONCAT(papellido,' ',sapellido,' ',pnombre,' ',snombre)as nombre,
                    carrera.descripcion as carrera,horas,prac_general.estado as estado, doc_informe
                    FROM prac_general
                    INNER JOIN persona ON personadbk = estudiante
                    INNER JOIN carrera ON carreradbk = carrera 
                    WHERE personadbk = $personadbk";                        
                }                                                
                break;
            case "practica_proceso":
                if($_SESSION["perfil"]=="ESTUDIANTE"){
                    $personadbk = $_SESSION['personadbk'];
                    $sql = "SELECT
                            practicadbk,
                            CONCAT(papellido,' ',sapellido,' ',pnombre,' ',snombre)as nombre, 
                            carrera.descripcion as carrera,
                            horas,
                            prac_general.estado as estado, 
                            doc_informe,descrip as periodo 
                            FROM prac_general 
                            INNER JOIN persona ON personadbk = estudiante 
                            INNER JOIN carrera ON carreradbk = carrera 
                            INNER JOIN periodo ON periodbk = periodo 
                            WHERE personadbk = $personadbk; ";                        
                }                                
                break;
            case "M":
                $sql = "";
                break;
            case "D":
                $sql = "";
                break;
        }
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function ConsultarHorario($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT horariodbk, hor_dia,
                CASE
                    WHEN hor_dia = 1 THEN 'LUNES'        
                    WHEN hor_dia = 2 THEN 'MARTES'
                    WHEN hor_dia = 3 THEN 'MIERCOLES'
                    WHEN hor_dia = 4 THEN 'JUEVES'
                    WHEN hor_dia = 5 THEN 'VIERNES'
                    WHEN hor_dia = 6 THEN 'SABADO'
                    WHEN hor_dia = 7 THEN 'DOMINGO'
                END AS dia,
                hor_fin,hor_inicio,hor_total,practicadbk
                FROM prac_horario
                WHERE practicadbk = $practicaId;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function ConsultarObjetivo($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_objetivos,prac_objetivoe,prac_carreraobe
                WHERE practica = $practicaId
                AND carreraobedbk = carreraobe
                AND objetivo_especifico = objetivoedbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function ConsultarResultado($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_resultados,prac_competencia,prac_carreracom
                WHERE practica = $practicaId
                AND competencia = competenciadbk
                AND carreracom = carreracomdbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function ConsultarSemana($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_semana,catalogo
                WHERE practica = $practicaId 
                AND semana = catalogodbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function ConsultarHoraSemanal($semanaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT SUM(horas) as horas, SUM(minutos)as minutos
                FROM prac_actividad
                WHERE semana = $semanaId";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        $resultado = $sql->fetchAll();        
        foreach ($resultado as $row) {
            $horas = $row["horas"];
            $minutos = $row["minutos"];
        }
        if ($minutos >= 60) {
            $horasAdicionales = intdiv($minutos, 60); // Horas completas adicionales
            $minutos = $minutos % 60; // Minutos restantes
            $horas = $horas+$horasAdicionales; // Sumar horas adicionales
            $Total=$horas.' horas con '.$minutos.' minutos';
        } else {
            $Total=$horas.' horas con '.$minutos.' minutos';
        }
        return $Total;
    }
    public function ConsultarTotalHoras($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT SUM(horas) as horas, SUM(minutos)as minutos
                FROM prac_actividad,prac_semana
                WHERE practica = $practicaId
                AND prac_actividad.semana = prac_semana.semanadbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        $resultado = $sql->fetchAll();        
        foreach ($resultado as $row) {
            $horas = $row["horas"];
            $minutos = $row["minutos"];
        }
        if ($minutos >= 60) {
            $horasAdicionales = intdiv($minutos, 60); // Horas completas adicionales
            $minutos = $minutos % 60; // Minutos restantes
            $horas = $horas+$horasAdicionales; // Sumar horas adicionales
            $Total=$horas.' horas con '.$minutos.' minutos';
        } else {
            $Total=$horas.' horas con '.$minutos.' minutos';
        }
        return $Total;
    }    
    public function ConsultarNumeroSemanas($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT count(*) as semanas 
                FROM prac_semana,catalogo
                WHERE practica = $practicaId 
                AND semana = catalogodbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function ConsultarActividad($semanaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_actividad
                WHERE semana = $semanaId";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function ConsultarActividadReporte($semanaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_actividad, prac_carreraobe, prac_objetivoe
                WHERE semana = $semanaId
                AND objetivo = carreraobedbk
                AND objetivo_especifico = objetivoedbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function ConsultarActividadInforme($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_actividad,prac_semana
                WHERE practica = $practicaId
                AND prac_actividad.semana = prac_semana.semanadbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function ConsultarObjetivosInforme($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_objetivos,prac_carreraobe, prac_objetivoe
                WHERE practica = $practicaId
                AND carreraobe = carreraobedbk
                AND objetivo_especifico = objetivoedbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }     
    public function ConsultarCompetenciaInforme($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_resultados,prac_carreracom, prac_competencia
                WHERE practica = $practicaId
                AND carreracom= carreracomdbk
                AND competencia = competenciadbk";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function ConsultarObservacion1($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'CENTRO DE PRACTICA'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }   
    public function ConsultarObservacionV($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'VIGENCIA'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function ConsultarObservacionH($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'HORARIO'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function ConsultarObservacionS($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'SUPERVISOR'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function ConsultarObservacionSeg($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'SEGURIDAD'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function ConsultarObservacionObj($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'OBJETIVO'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function ConsultarObservacionRes($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'RESULTADO'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function ConsultarObservacionSem($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'SEMANA'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function ConsultarObservacionCul($practicaId) {
        $conectar = parent::conectar();
        parent::set_names();       
        $sql = "SELECT * 
                FROM prac_observaciones, catalogo
                WHERE practica = $practicaId
                AND fase = 'CULMINACION'
                AND prac_observaciones.estado = catalogodbk;";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
//    public function ConsultarFiltro($periodbk) {
//        $conectar = parent::conectar();
//        parent::set_names();
//        $sql = "SELECT carreradbk,carrera.descripcion as descripcion,catalogo.descripcion as modalidad FROM mallacurricular
//                INNER JOIN carrera ON carreradbk = carrera
//                LEFT JOIN catalogo ON modalidad = catalogodbk
//                WHERE periodo = ?
//                GROUP BY carrera";
//        $sql = $conectar->prepare($sql);
//        $sql->bindValue(1, $periodbk);
//        $sql->execute();
//        return $resultado = $sql->fetchAll();
//    }

    /* =============================================
      ACTUALIZAR O INSERTAR PRACTICA
      ============================================= */

    public function mdlActualizarPracticaGeneral($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        if ($datos["practicadbk"] == "") {
            $sql = "INSERT INTO " . $datos["tabla"] . "  
                (carrera,estudiante,horas,periodo,estado)
                VALUES (?,?,?,?,?);
                ";
            $sql = $conectar->prepare($sql);
            $sql->bindValue(1, $datos["carrera"]);
            $sql->bindValue(2, $datos["estudiante"]);
            $sql->bindValue(3, $datos["horas"]);
            $sql->bindValue(4, $datos["periodo"]);
            $sql->bindValue(5, "ACTIVO");
            $sql->execute();
            $sql = "SELECT max(practicadbk) as practicadbk
                FROM prac_general
                ";
            $sql = $conectar->prepare($sql);    
            $sql->execute();
            $resultado = $sql->fetchAll();        
            foreach ($resultado as $row) {
                $practicadbk = $row["practicadbk"];
            }
            $sql = "INSERT INTO prac_estado  
                (practica)
                VALUES (?);
                ";
            $sql = $conectar->prepare($sql);
            $sql->bindValue(1, $practicadbk);
            $sql->execute();
        } else {
            $sql = "UPDATE " . $datos["tabla"] . " SET
                horas =? 
                WHERE practicadbk = ?;
                ";
            $sql = $conectar->prepare($sql);
            $sql->bindValue(1, $datos["horas"]);            
            $sql->bindValue(2, $datos["practicadbk"]);
            $sql->execute();
        }
        return $resultado = $sql->fetchAll();
    }

    public function mdlActualizarEstado($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET estado = ?
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estado"]);
        $sql->bindValue(2, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlActualizarInstitucion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET institucion = ?, 
                representante_legal = ?,
                cargo_representante = ?,
                fec_convenio = ?
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["institucion"]);
        $sql->bindValue(2, $datos["representante_legal"]);
        $sql->bindValue(3, $datos["cargo_representante"]);
        $sql->bindValue(4, $datos["fec_convenio"]);
        $sql->bindValue(5, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlActualizarEstadoCentro($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET centro_practica = ?, registro_centro=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoCentro"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function mdlActualizarEstadoVigencia($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET vigencia = ?, registro_vigencia=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoVigencia"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlActualizarEstadoHorario($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET horario = ?, registro_horario=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoHorario"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function mdlActualizarEstadoSupervisor($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET supervisor_tecnico = ?, registro_supervisor=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoSupervisor"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlActualizarEstadoSeguridad($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET seguridad = ?, registro_seguridad=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoSeguridad"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlActualizarEstadoObjetivo($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET objetivos = ?, registro_objetivos=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoObjetivo"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function mdlActualizarEstadoResultado($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET resultados = ?, registro_resultados=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoResultado"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function mdlActualizarEstadoSemana($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET semanas = ?, registro_semanas=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoSemana"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlActualizarEstadoCulminacion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET culminacion = ?, registro_culminacion=now()
                WHERE practica = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["estadoCulminacion"]);
        $sql->bindValue(2, $datos["practica"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlActualizarVigencia($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET fec_inicio = ?, fec_fin = ?, area = ? 
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["fec_inicio"]);
        $sql->bindValue(2, $datos["fec_fin"]);        
        $sql->bindValue(3, $datos["area"]);
        $sql->bindValue(4, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlIngresarHorario($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (practicadbk,hor_dia,hor_inicio,hor_fin)
                VALUES (?,?,?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practicadbk"]);
        $sql->bindValue(2, $datos["hor_dia"]);        
        $sql->bindValue(3, $datos["hor_inicio"]);
        $sql->bindValue(4, $datos["hor_fin"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlIngresarObjetivo($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (practica,carreraobe)
                VALUES (?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practicadbk"]);
        $sql->bindValue(2, $datos["carreraobe"]);        
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function mdlIngresarObjetivoC($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET cumplimiento = ?, resultado = ?
                WHERE objetivosdbk= ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["cumplimiento"]);
        $sql->bindValue(2, $datos["resultado"]);
        $sql->bindValue(3, $datos["objetivosdbk"]);        
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlIngresarConclusion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET conclusion = ? 
                WHERE objetivosdbk= ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["conclusion"]);
        $sql->bindValue(2, $datos["objetivosdbk"]);        
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlIngresarCompetenciaC($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET cumplimiento = ?, indicador = ?
                WHERE resultadosdbk= ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["cumplimiento"]);
        $sql->bindValue(2, $datos["indicador"]);
        $sql->bindValue(3, $datos["resultadosdbk"]);        
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlIngresarResultado($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (practica,carreracom)
                VALUES (?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practicadbk"]);
        $sql->bindValue(2, $datos["carreracom"]);        
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlIngresarSemana($datos) {
        $fechaDesde = new DateTime($datos["desde"]);
        $fechaHasta = new DateTime($datos["hasta"]);
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (practica,desde,hasta,semana)
                VALUES (?,?,?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practicadbk"]);
        $sql->bindValue(2, $datos["desde"]);
        $sql->bindValue(3, $datos["hasta"]);
        $sql->bindValue(4, $datos["semana"]);
        $sql->execute();
        $practicadbk = $datos["practicadbk"];
        $sql = "SELECT max(semanadbk) as semanadbk
                FROM prac_semana
                WHERE practica = $practicadbk
                ";                                              
        $sql = $conectar->prepare($sql);
        $sql->execute();
        $resultado = $sql->fetchAll();        
        foreach ($resultado as $row) {
            $semana = $row["semanadbk"];
        }
        $diferencia = $fechaDesde->diff($fechaHasta);
        $diasDiferencia = $diferencia->days;
        $sql->execute();
        $fechaActividad = $fechaDesde;
        for($i = 0;$i<=$diasDiferencia;$i++){
            $sql = "INSERT INTO prac_actividad
                (semana,fecha_actividad)
                VALUES (?,?)";
            $dato = array("fecha_actividad"  => $fechaActividad->format('Y-m-d'));
            $sql = $conectar->prepare($sql);
            $sql->bindValue(1, $semana);
            $sql->bindValue(2, $dato["fecha_actividad"]);
            $fechaActividad->modify('+1 day');
            $sql->execute();
        }
        return $resultado = $sql->fetchAll();
    }
    public function mdlIngresarActividad($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (semana,fecha_actividad,hora_entrada,hora_salida,horas,minutos,objetivo,actividad)
                VALUES (?,?,?,?,?,?,?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["semana"]);
        $sql->bindValue(2, $datos["fecha_actividad"]);
        $sql->bindValue(3, $datos["hora_entrada"]);
        $sql->bindValue(4, $datos["hora_salida"]);
        list($horaEntradaH, $minutoEntradaM) = explode(":", $datos["hora_entrada"]);
        list($horaSalidaH, $minutoSalidaM) = explode(":", $datos["hora_salida"]);
        // Convertir a minutos totales desde la medianoche
        $totalMinutosEntrada = ($horaEntradaH * 60) + $minutoEntradaM;
        $totalMinutosSalida = ($horaSalidaH * 60) + $minutoSalidaM;
        // Calcular la diferencia en minutos
        $diferenciaMinutos = $totalMinutosSalida - $totalMinutosEntrada;
        // Calcular horas y minutos sobrantes
        $horasTrabajadas = intdiv($diferenciaMinutos, 60); // Horas completas
        $minutosSobrantes = $diferenciaMinutos % 60; // Minutos sobrantes
        $sql->bindValue(5, $horasTrabajadas);
        $sql->bindValue(6, $minutosSobrantes);
        $sql->bindValue(7, $datos["objetivo"]);
        $sql->bindValue(8, $datos["actividad"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }  
    public function mdlIngresarObservacion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "INSERT INTO " . $datos["tabla"] . "  
                (practica,fase,observacion,estado,fechaingreso)
                VALUES (?,?,?,?,?)";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practica"]);
        $sql->bindValue(2, $datos["fase"]);
        $sql->bindValue(3, $datos["observacion"]);
        $sql->bindValue(4, $datos["estado"]);
        $sql->bindValue(5, $datos["fechaingreso"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlActualizarObservacion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET observacion = ?, estado = ? 
                WHERE observacionesdbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["observacion"]);
        $sql->bindValue(2, $datos["estado"]);
        $sql->bindValue(3, $datos["observacionesdbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }      
    public function mdlActualizarActividad($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET fecha_actividad = ?,hora_entrada = ?,hora_salida = ?,horas = ?,minutos = ?,objetivo = ?,actividad = ?
                WHERE actividadesdbk= ?
                ";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["fecha_actividad"]);
        $sql->bindValue(2, $datos["hora_entrada"]);
        $sql->bindValue(3, $datos["hora_salida"]);
        list($horaEntradaH, $minutoEntradaM) = explode(":", $datos["hora_entrada"]);
        list($horaSalidaH, $minutoSalidaM) = explode(":", $datos["hora_salida"]);
        // Convertir a minutos totales desde la medianoche
        $totalMinutosEntrada = ($horaEntradaH * 60) + $minutoEntradaM;
        $totalMinutosSalida = ($horaSalidaH * 60) + $minutoSalidaM;
        // Calcular la diferencia en minutos
        $diferenciaMinutos = $totalMinutosSalida - $totalMinutosEntrada;
        // Calcular horas y minutos sobrantes
        $horasTrabajadas = intdiv($diferenciaMinutos, 60); // Horas completas
        $minutosSobrantes = $diferenciaMinutos % 60; // Minutos sobrantes
        $sql->bindValue(4, $horasTrabajadas);
        $sql->bindValue(5, $minutosSobrantes);
        $sql->bindValue(6, $datos["objetivo"]);
        $sql->bindValue(7, $datos["actividad"]);
        $sql->bindValue(8, $datos["actividadesdbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
    public function mdlTotalHoras($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET hor_total = timediff(hor_fin,hor_inicio) where practicadbk = ? and hor_dia = ? and hor_inicio = ? and hor_fin = ?;";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["practicadbk"]);        
        $sql->bindValue(2, $datos["hor_dia"]);        
        $sql->bindValue(3, $datos["hor_inicio"]);
        $sql->bindValue(4, $datos["hor_fin"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlActualizarTutor($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET docente = ?
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["docente"]);
        $sql->bindValue(2, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }
    public function mdlActualizarSupervisorTecnico($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET sup_nombre = ?, sup_cargo = ?, sup_email = ?, sup_telefono = ?, sup_registro = ? 
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["sup_nombre"]);
        $sql->bindValue(2, $datos["sup_cargo"]);
        $sql->bindValue(3, $datos["sup_email"]);
        $sql->bindValue(4, $datos["sup_telefono"]);
        $sql->bindValue(5, $datos["sup_registro"]);
        $sql->bindValue(6, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function mdlActualizarSeguridad($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET fec_capacitacion = ?, P1 = ?, O1 = ?, P2 = ?, O2 = ?, P3 = ?, O3 = ?, P4 = ?, O4 = ?, P5 = ?, O5 = ? 
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["fec_capacitacion"]);
        $sql->bindValue(2, $datos["P1"]);
        $sql->bindValue(3, $datos["O1"]);
        $sql->bindValue(4, $datos["P2"]);
        $sql->bindValue(5, $datos["O2"]);
        $sql->bindValue(6, $datos["P3"]);
        $sql->bindValue(7, $datos["O3"]);
        $sql->bindValue(8, $datos["P4"]);
        $sql->bindValue(9, $datos["O4"]);
        $sql->bindValue(10, $datos["P5"]);
        $sql->bindValue(11, $datos["O5"]);
        $sql->bindValue(12, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    } 
    public function mdlActualizarDocumentacion($datos) {
        $conectar = parent::conectar();
        parent::set_names();
        $sql = "UPDATE " . $datos["tabla"] . "  
                SET doc_informe = ? 
                WHERE practicadbk = ?";
        $sql = $conectar->prepare($sql);
        $sql->bindValue(1, $datos["doc_informe"]);        
        $sql->bindValue(2, $datos["practicadbk"]);
        $sql->execute();
        return $resultado = $sql->fetchAll();
    }    
}

?>

