/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.siso.horario.MySqlDAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.servlet.jsp.jstl.sql.Result;
import pe.siso.horario.Beans.Aula;
import pe.siso.horario.Beans.Bloque;
import pe.siso.horario.Beans.Docente;
import pe.siso.horario.Beans.Horario;
import pe.siso.horario.DAO.HorarioDAO;

/**
 *
 * @author fcelestino
 */
public class MySqlHorarioDAO implements HorarioDAO {

    @Override
    public int registrarGrupoBloque(String codigoGrupo, String codAula) throws Exception {
        int dato = 1;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String[] arrayAulas = codAula.split("#");
            for (int i = 0; i < arrayAulas.length; i++) {
                String query = "INSERT INTO horario_grupo (cod_gru,codaula,est_hor_gru) VALUES ('" + codigoGrupo + "','" + arrayAulas[i] + "','1')";
                st.executeUpdate(query);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultarCantGrupoBloque(String codAula) throws Exception {
        int cant = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_grupo WHERE codaula='" + codAula + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                cant = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return cant;
    }

    @Override
    public String consultarCodigoGrupo(String codAula) throws Exception {
        String codigo = "";
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_gru FROM horario_grupo WHERE codaula='" + codAula + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                codigo = rs.getString("cod_gru");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return codigo;
    }

    @Override
    public int registrarAsigCurDoceHorario(String codigoAula, String dia, String Posicionbloque, String Hini, String Hfin, String codigoTurno, String codigoCurso, String codigoDocente) throws Exception {
        int dato = 0;
        int codHorario = 0;
        int cantCruce = 0;

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryCant = "SELECT cod_hcd FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "'";
            System.out.println("-(1)-> " + queryCant);
            ResultSet rsCant = st.executeQuery(queryCant);
            if (rsCant.next()) {
                codHorario = rsCant.getInt("cod_hcd");
            }

            if (codHorario == 0) {

                String queryConsultaCruce = "SELECT count(*) as cruce FROM horario_curso_docente  "
                  + "WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + "OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + "OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "'))";
                /*String queryConsultaCruce="SELECT count(*) as cruce FROM horario_curso_docente  " +
                 "WHERE cod_doc='"+codigoDocente+"' and dia='"+dia+"' and (((hor_ini<='"+Hini+"' and hor_fin>='"+Hfin+"') or (hor_ini>'"+Hini+"' and hor_fin<'"+Hfin+"'))  " +
                 "OR (hor_ini>'"+Hini+"' and hor_ini<='"+Hfin+"' and hor_fin>'"+Hfin+"') " +
                 "OR (hor_ini<'"+Hini+"' and hor_fin>='"+Hini+"' and hor_fin<'"+Hfin+"'))";*/
                System.out.println("-(2)-> " + queryConsultaCruce);
                ResultSet rs = st.executeQuery(queryConsultaCruce);
                if (rs.next()) {
                    cantCruce = rs.getInt("cruce");

                }

                if (cantCruce > 0) {
                    //si hay cruce dato=3
                    dato = 3;
                } else {
                    // sino cruce =0
                    String query = " INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd)  "
                      + " VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1')";

                    dato = st.executeUpdate(query);
                    //dato=1
                }

            } else {

                String queryConsultaCruce = " SELECT count(*) as cruce FROM horario_curso_docente  "
                  + "WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + "OR (hor_ini>'" + Hini + "' and hor_ini<='" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + "OR (hor_ini<'" + Hini + "' and hor_fin>='" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "'";

                ResultSet rs = st.executeQuery(queryConsultaCruce);
                if (rs.next()) {
                    cantCruce = rs.getInt("cruce");

                }

                if (cantCruce > 0) {
                    dato = 3;
                } else {
                    String queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "' WHERE cod_hcd='" + codHorario + "' ";

                    dato = st.executeUpdate(queryUpdate);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int cantidadAsignado(String codAula, String dia, String posicionBloque) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE codAula='" + codAula + "' AND dia='" + dia + "' AND pos_blo='" + posicionBloque + "'";
            System.out.println("(3)-- cantidadAsignado -->>>  " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Horario consultarDatosAsignados(String codAula, String dia, String posicionBloque) throws Exception {
        Horario horario = new Horario();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_doc,cod_cur,cod_hcd FROM horario_curso_docente WHERE codAula='" + codAula + "' AND dia='" + dia + "' AND pos_blo='" + posicionBloque + "'";
            System.out.println("(4)-- consultarDatosAsignados -->>>>   " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                horario.setCodigoDocente_HorarioCursoDoc(rs.getString("cod_doc"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setCodHorarioCursoDoc(rs.getString("cod_hcd"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public Bloque consultarCodigoGrupoTurno(String codAula) throws Exception {
        Bloque bloque = new Bloque();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT horario_grupo.cod_gru, grupo_bloque.codTurno FROM horario_grupo "
              + "INNER JOIN grupo_bloque on horario_grupo.cod_gru=grupo_bloque.codGru "
              + "WHERE horario_grupo.codaula='" + codAula + "'";
            System.out.println("(1)-- consultarCodigoGrupoTurno -->>> " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                bloque.setCod_gru(rs.getString("cod_gru"));
                bloque.setTur_gru(rs.getString("codTurno"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;
    }

    @Override
    public ArrayList<Aula> verCruce(String dia, String Hini, String Hfin, String codigoDocente) throws Exception {
        ArrayList<Aula> lista = new ArrayList<Aula>();

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsultaCruce = "SELECT hor.codAula,sede.des_loc,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,  "
              + "tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,turno.desturno  "
              + ",hor.hor_ini,hor.hor_fin,hor.cod_cur,curso.nom_cur FROM horario_curso_docente as hor  "
              + "INNER JOIN aula on aula.codaula=hor.codAula "
              + " INNER JOIN sede on sede.cod_loc=aula.codlocal  "
              + " INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro  "
              + " INNER JOIN centro on centro.codcentro=aula.cocentro  "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno  "
              + " INNER JOIN curso on curso.cod_cur=hor.cod_cur  "
              + " WHERE hor.cod_doc='" + codigoDocente + "' and hor.dia='" + dia + "' and (((hor.hor_ini<='" + Hini + "' and hor.hor_fin>='" + Hfin + "') or (hor.hor_ini>'" + Hini + "' and hor.hor_fin<'" + Hfin + "'))  "
              + " OR (hor.hor_ini>'" + Hini + "' and hor.hor_ini<='" + Hfin + "' and hor.hor_fin>'" + Hfin + "') "
              + " OR (hor.hor_ini<'" + Hini + "' and hor.hor_fin>='" + Hini + "' and hor.hor_fin<'" + Hfin + "'))";

            System.out.println(queryConsultaCruce);
            ResultSet rs = st.executeQuery(queryConsultaCruce);
            while (rs.next()) {
                Aula aula = new Aula();
                aula.setCodigoAula(rs.getInt("codAula"));
                aula.setNombreLocal(rs.getString("des_loc"));
                aula.setNombreTipoCentro(rs.getString("destipocentro"));
                aula.setNombreCentro(rs.getString("descentro"));
                aula.setNombreNivel(rs.getString("desnivel"));
                aula.setNombreTipoGrado(rs.getString("destipogrado"));
                aula.setNombreGrado(rs.getString("desgrado"));
                aula.setNombreSeccion(rs.getString("desseccion"));
                aula.setNombreTurno(rs.getString("desturno"));
                aula.setHoraInicio(rs.getString("hor_ini"));
                aula.setHoraFin(rs.getString("hor_fin"));
                aula.setCodigoCurso(rs.getString("cod_cur"));
                aula.setNombreCurso(rs.getString("nom_cur"));
                lista.add(aula);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    @Override
    public Bloque consultarCodigoGrupoTurno() throws Exception {
        Bloque bloque = new Bloque();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "  SELECT horario_grupo.cod_gru, grupo_bloque.codTurno FROM horario_grupo  "
              + "  INNER JOIN grupo_bloque on horario_grupo.cod_gru=grupo_bloque.codGru ";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {

                bloque.setCod_gru(rs.getString("cod_gru"));
                bloque.setTur_gru(rs.getString("codTurno"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;
    }

    @Override
    public Horario consultarDatosAsignadosExportar(String dia, String posicionBloque) throws Exception {
        Horario horario = new Horario();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_doc,cod_cur FROM horario_curso_docente WHERE dia='" + dia + "' AND pos_blo='" + posicionBloque + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                horario.setCodigoDocente_HorarioCursoDoc(rs.getString("cod_doc"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public int consultacantidadCursos(String codAula) throws Exception {
        int dato = 0;

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT COUNT(codAula) as cantidad from horario_curso_docente  WHERE codAula='" + codAula + "'";

            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {

                dato = rs.getInt("cantidad");

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultacantCursosSinAsignar(String codAula) throws Exception {
        int codigo = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT DISTINCT detbloque.codBlo as codigo FROM "
              + "horario_grupo "
              + "INNER JOIN detbloque ON horario_grupo.cod_gru = detbloque.codGru  "
              + "WHERE codaula='" + codAula + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                codigo = rs.getInt("codigo");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return codigo;
    }

    @Override
    public int cantidadAsignadoExportarTotal(String dia, String posicionBloque) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE  dia='" + dia + "' AND pos_blo='" + posicionBloque + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Bloque consultarCodigoGrupoTurnoDoc(String codDocente) throws Exception {
        Bloque bloque = new Bloque();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "select codAula, dia,pos_blo, hor_ini, hor_fin,cod_cur, cod_tur from horario_curso_docente WHERE cod_doc='" + codDocente + "'";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {

                bloque.setCod_gru(rs.getString("cod_gru"));
                bloque.setTur_gru(rs.getString("codTurno"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;
    }

    @Override
    public int cantidadAsignadoCursosDoc(String codDocente) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE cod_doc='" + codDocente + "' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public ArrayList<Horario> consultarDatosAsignadosDoc(String codDocente, String dia, String posicionBloque) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT "
              + "horario_curso_docente.codAula "
              + "horario_curso_docente.cod_cur, "
              + "curso.nom_cur "
              + "FROM "
              + "horario_curso_docente "
              + "INNER JOIN curso ON horario_curso_docente.cod_cur = curso.cod_cur "
              + "WHERE cod_doc='" + codDocente + "' AND dia='" + dia + "' AND pos_blo='" + posicionBloque + "'";
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setCodAula_HorarioCursoDoc(rs.getString("codAula"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setNombreCurso(rs.getString("nom_cur"));
                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public ArrayList<Horario> horarioDocente(String codDocente) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT horario_curso_docente.cod_tur,horario_curso_docente.codAula,horario_curso_docente.hor_ini, horario_curso_docente.hor_fin,curso.nom_cur,  "
              + " horario_curso_docente.cod_cur, sede.des_loc,horario_curso_docente.dia,horario_curso_docente.cod_doc, nivel.desnivel,tipo_grado.destipogrado, "
              + " grado.desgrado,seccion.desseccion,turno.desturno "
              + " FROM curso  "
              + " INNER JOIN horario_curso_docente ON horario_curso_docente.cod_cur = curso.cod_cur  "
              + " INNER JOIN aula ON horario_curso_docente.codAula = aula.codaula  "
              + " INNER JOIN sede ON aula.codlocal = sede.cod_loc "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno "
              + "WHERE horario_curso_docente.cod_doc='" + codDocente + "' ";
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setCodAula_HorarioCursoDoc(rs.getString("codAula"));
                horario.setDia_HorarioCursoDoc(rs.getString("dia"));
                horario.setPosicionBloque_HorarioCursoDoc("pos_blo");
                horario.setHini_HorarioCursoDoc(rs.getString("hor_ini"));
                horario.setHfin_HorarioCursoDoc(rs.getString("hor_fin"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setCodigoGrupo(rs.getString("cod_tur"));
                horario.setNombreCurso(rs.getString("nom_cur"));
                horario.setNombreSede(rs.getString("des_loc"));
                horario.setNombreNivel(rs.getString("desnivel"));
                horario.setNombreTipoGrado(rs.getString("destipogrado"));
                horario.setNombreGrado(rs.getString("desgrado"));
                horario.setNombreSeccion(rs.getString("desseccion"));
                horario.setNombreTurno(rs.getString("desturno"));

                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int consultarExistenciaHorarioRegistrado(String codAula) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE codAula='" + codAula + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public void limpiarRegistro(String codigoAula, String dia, String Posicionbloque, String Hini, String Hfin, String codigoTurno, String codigoCurso, String codigoDocente) throws Exception {

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String consulta = "SELECT cod_hcd from horario_curso_docente"
              + " where codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "'and hor_ini='" + Hini + "' "
              + "and hor_fin='" + Hfin + "'"
              + "and cod_cur='" + codigoCurso + "' and cod_doc='" + codigoDocente + "' and cod_tur='" + codigoTurno + "' and est_hcd=1 ";

            ResultSet rsCant = st.executeQuery(consulta);

            int codHorario = 0;
            if (rsCant.next()) {
                codHorario = rsCant.getInt("cod_hcd");
                String query = "delete from horario_curso_docente where cod_hcd='" + codHorario + "'";
                st.executeUpdate(query);

            }
            System.out.println("codigo de horario" + codHorario);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

    }

    @Override
    public ArrayList<Aula> verCruce(String codhorario, String dia, String Hini, String Hfin, String codigoDocente) throws Exception {
        ArrayList<Aula> lista = new ArrayList<Aula>();

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsultaCruce = "SELECT hor.codAula,sede.des_loc,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,  "
              + "tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,turno.desturno  "
              + ",hor.hor_ini,hor.hor_fin,hor.cod_cur,curso.nom_cur FROM horario_curso_docente as hor  "
              + "INNER JOIN aula on aula.codaula=hor.codAula "
              + " INNER JOIN sede on sede.cod_loc=aula.codlocal  "
              + " INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro  "
              + " INNER JOIN centro on centro.codcentro=aula.cocentro  "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno  "
              + " INNER JOIN curso on curso.cod_cur=hor.cod_cur  "
              + " WHERE hor.cod_doc='" + codigoDocente + "' and hor.dia='" + dia + "' and (((hor.hor_ini<='" + Hini + "' and hor.hor_fin>='" + Hfin + "') or (hor.hor_ini>'" + Hini + "' and hor.hor_fin<'" + Hfin + "'))  "
              + " OR (hor.hor_ini>'" + Hini + "' and hor.hor_ini<='" + Hfin + "' and hor.hor_fin>'" + Hfin + "') "
              + " OR (hor.hor_ini<'" + Hini + "' and hor.hor_fin>='" + Hini + "' and hor.hor_fin<'" + Hfin + "')) and cod_hcd not in('" + codhorario + "')";

            ResultSet rs = st.executeQuery(queryConsultaCruce);
            while (rs.next()) {
                Aula aula = new Aula();
                aula.setCodigoAula(rs.getInt("codAula"));
                aula.setNombreLocal(rs.getString("des_loc"));
                aula.setNombreTipoCentro(rs.getString("destipocentro"));
                aula.setNombreCentro(rs.getString("descentro"));
                aula.setNombreNivel(rs.getString("desnivel"));
                aula.setNombreTipoGrado(rs.getString("destipogrado"));
                aula.setNombreGrado(rs.getString("desgrado"));
                aula.setNombreSeccion(rs.getString("desseccion"));
                aula.setNombreTurno(rs.getString("desturno"));
                aula.setHoraInicio(rs.getString("hor_ini"));
                aula.setHoraFin(rs.getString("hor_fin"));
                aula.setCodigoCurso(rs.getString("cod_cur"));
                aula.setNombreCurso(rs.getString("nom_cur"));
                lista.add(aula);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int consultarCursos(String codAula, String codTurno, String codCurso) throws Exception {
        int dato = 1;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "select COUNT(cod_cur) as cantidad from horario_curso_docente where codAula='" + codAula + "' and cod_tur='" + codTurno + "' and cod_cur='" + codCurso + " ' ";

            ResultSet rs = st.executeQuery(query);
            // System.out.println(query);
            if (rs.next()) {
                dato = rs.getInt("cantidad");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultarCursos(String codAula, String codTurno, String codCurso, String pos_blo, String dia, String periodo) throws Exception {
        int dato = 1;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "select count(cod_cur) as cantidad from horario_curso_docente where cod_cur='" + codCurso + "'  and codAula='" + codAula + "' and cod_tur='" + codTurno + "' and (dia!='" + dia + "' or pos_blo!='" + pos_blo + "' ) and  cod_per='" + periodo + "'";
            ResultSet rs = st.executeQuery(query);
            System.out.println("-cur->> " + query);
            if (rs.next()) {
                dato = rs.getInt("cantidad");

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int cantidadHorario(String aula, String periodo) throws Exception {
        int cant = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE codaula='" + aula + "' and cod_per='" + periodo + "' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                cant = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return cant;
    }

    @Override
    public int consultarCursos(String codAula, String codTurno, String codCurso, String periodo) throws Exception {
        int dato = 1;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            //String query = "select COUNT(cod_cur) as cantidad from horario_curso_docente where codAula='"+codAula+"' and cod_tur='"+codTurno+"' and cod_cur='"+codCurso+"' and cod_per='"+periodo+"' ";
            String query = "select COUNT(cod_cur) as cantidad from horario_curso_docente where codAula='" + codAula + "' and cod_cur='" + codCurso + "' and cod_per='" + periodo + "' ";
            System.out.println("cruuuceee-->> " + query);
            ResultSet rs = st.executeQuery(query);
            // System.out.println(query);
            if (rs.next()) {
                dato = rs.getInt("cantidad");

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int registrarAsigCurDoceHorario(String codigoAula, String dia, String Posicionbloque, String Hini, String Hfin, String codigoTurno, String codigoCurso, String codigoDocente, String periodo, String codigoGrupo, int codUsuario, int clase, String grupoAulas, String historial,String motivoCambio, String observacion, String condicionTrabajador, String horaAviso) throws Exception {
        int dato = 0;
        int codHorario = 0;
        String codDocReemp = "";
        String codCurReemp = "";
        int cantCruce = 0;
        int libre = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            /* VERIFICAR SI ES UN AULA --> "LIBRE"  */
            String queryLibre = "SELECT count(*) as cant FROM aula WHERE codtipogrado in ('38','40','41') AND codaula='" + codigoAula + "' ";
            System.out.println("-( LIBRE )-> " + queryLibre);
            ResultSet libreRS = st.executeQuery(queryLibre);
            if (libreRS.next()) {
                libre = libreRS.getInt("cant");
            }

            String queryCant = "SELECT cod_hcd,cod_doc,cod_cur FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "' and cod_per='" + periodo + "'";
            System.out.println(">>>>-(1) codHorario-> " + queryCant);
            ResultSet rsCant = st.executeQuery(queryCant);
            if (rsCant.next()) {
                codHorario = rsCant.getInt("cod_hcd");
                codDocReemp = rsCant.getString("cod_doc");
                codCurReemp = rsCant.getString("cod_cur");
            }

            System.out.println("kokoko " + codHorario);

            if (codHorario == 0) {

                // /*  CRUCESSS!!! HABILITAR
                String queryConsultaCruce = "SELECT count(*) as cruce FROM horario_curso_docente  "
                  + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "'))"
                  + " and cod_per='" + periodo + "'    ";
                System.out.println(">>-(2)cruce-> " + queryConsultaCruce);
                ResultSet rs = st.executeQuery(queryConsultaCruce);
                if (rs.next()) {
                    cantCruce = rs.getInt("cruce");

                }
                // */
                if (cantCruce > 0) {
                    //si hay cruce dato=3
                    dato = 3;
                } else {
                    // sino cruce =0
                    String query = "";
                    if (libre == 0) {
                        query = " INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec,cod_gru_aul)  "
                          + " VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";
                    } else {
                        query = " INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec,cod_gru_aul)  "
                          + " VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','0','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";
                    }

                    System.out.println("INSERT-I-> " + query);
                    dato = st.executeUpdate(query);

                    String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'REGISTRADO'," + codUsuario + ")";
                    dato = st.executeUpdate(queryHH1);
                }

            } else {

                /**/ String queryConsultaCruce = " SELECT count(*) as cruce FROM horario_curso_docente  "
                  + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                  + " and cod_per='" + periodo + "' ";

                ResultSet rs = st.executeQuery(queryConsultaCruce);
                if (rs.next()) {
                    cantCruce = rs.getInt("cruce");

                } //*/

                if (cantCruce > 0) {
                    dato = 3;
                } else {
                    String queryUpdate = "";
                    if (libre == 0) {
                        queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                    } else {
                        queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "', est_hcd='0'  WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                    }

                    System.out.println("UPDATE -->> " + queryUpdate);
                    dato = st.executeUpdate(queryUpdate);

                    String estado = "";
                    String queryHH1 = "";
                    switch (historial) {
                        case "editar":
                            estado = "ACTUALIZADO";
                            queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu,cod_doc_reemp,cod_cur_reemp)  "
                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + codCurReemp + "')";
                            break;
                        case "cambioFijo":
                            estado = "CAMBIO FIJO";
                            queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu,cod_doc_reemp,motivoCambio,observacion,condicionTrabajador,cod_cur_reemp)  "
                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + motivoCambio + "','" + observacion + "','" + condicionTrabajador + "','" + codCurReemp +"')";
                            break;
                        case "cambioDia":
                            estado = "CAMBIO DIA";
                            queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu,cod_doc_reemp,motivoCambio,observacion,horaAviso,cod_cur_reemp)  "
                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + motivoCambio + "','" + observacion + "','" + horaAviso +"','" + codCurReemp + "')";
                            break;
                        default:
                    }
                    
                    dato = st.executeUpdate(queryHH1);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public ArrayList<Aula> verCruceIndividual(String dia, String Hini, String Hfin, String codDocente, String periodo) throws Exception {
        ArrayList<Aula> lista = new ArrayList<Aula>();

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsultaCruce = "SELECT hor.codAula,sede.des_loc,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,  "
              + "tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,aula.nombre,turno.desturno  "
              + ",hor.hor_ini,hor.hor_fin,hor.cod_cur,curso.nom_cur FROM horario_curso_docente as hor  "
              + "INNER JOIN aula on aula.codaula=hor.codAula "
              + " INNER JOIN sede on sede.cod_loc=aula.codlocal  "
              + " INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro  "
              + " INNER JOIN centro on centro.codcentro=aula.cocentro  "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno  "
              + " INNER JOIN curso on curso.cod_cur=hor.cod_cur  "
              + " WHERE hor.cod_doc='" + codDocente + "' and hor.dia='" + dia + "' and (((hor.hor_ini<='" + Hini + "' and hor.hor_fin>='" + Hfin + "') or (hor.hor_ini>'" + Hini + "' and hor.hor_fin<'" + Hfin + "'))  "
              + " OR (hor.hor_ini>'" + Hini + "' and hor.hor_ini<'" + Hfin + "' and hor.hor_fin>'" + Hfin + "') "
              + " OR (hor.hor_ini<'" + Hini + "' and hor.hor_fin>'" + Hini + "' and hor.hor_fin<'" + Hfin + "')) "
              + " and hor.cod_per='" + periodo + "'";

            System.out.println("--cruce-->> " + queryConsultaCruce);
            ResultSet rs = st.executeQuery(queryConsultaCruce);
            while (rs.next()) {
                Aula aula = new Aula();
                aula.setCodigoAula(rs.getInt("codAula"));
                aula.setNombreLocal(rs.getString("des_loc"));
                aula.setNombreTipoCentro(rs.getString("destipocentro"));
                aula.setNombreCentro(rs.getString("descentro"));
                aula.setNombreNivel(rs.getString("desnivel"));
                aula.setNombreTipoGrado(rs.getString("destipogrado"));
                aula.setNombreGrado(rs.getString("desgrado"));
                aula.setNombreSeccion(rs.getString("desseccion"));
                aula.setNombre(rs.getString("nombre"));
                aula.setNombreTurno(rs.getString("desturno"));
                aula.setHoraInicio(rs.getString("hor_ini"));
                aula.setHoraFin(rs.getString("hor_fin"));
                aula.setCodigoCurso(rs.getString("cod_cur"));
                aula.setNombreCurso(rs.getString("nom_cur"));
                lista.add(aula);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int registrarAsigCurDoceHorarioMasivo(String cadenaTotal, String hora_inicio, String hora_termino, String dia, String codigoTurno, String codigoCurso, String codigoDocente, String periodo, String codigoGrupo, int codUsuario, int clase) throws Exception {
        int dato = 0;
        int datoCont = 0;
        int codHorario = 0;
        int cantCruce = 0;
        int libre = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            //  CRUCE DE HORARIOS ..... HABILITAR
            String queryCruceMasivo = "SELECT count(*) as cruce FROM horario_curso_docente  "
              + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + hora_inicio + "' and hor_fin>='" + hora_termino + "') or (hor_ini>='" + hora_inicio + "' and hor_fin<='" + hora_termino + "'))  "
              + " OR (hor_ini>='" + hora_inicio + "' and hor_ini<='" + hora_termino + "' and hor_fin>='" + hora_termino + "') "
              + " OR (hor_ini<='" + hora_inicio + "' and hor_fin>='" + hora_inicio + "' and hor_fin<='" + hora_termino + "'))"
              + " and cod_per='" + periodo + "' ";
            // System.out.println("-(masivo)-> "+queryCruceMasivo);
            ResultSet rsMasivo = st.executeQuery(queryCruceMasivo);
            if (rsMasivo.next()) {
                cantCruce = rsMasivo.getInt("cruce");
            }
            // */
            if (cantCruce > 0) {
                dato = 4;
            } else {

                String[] array = cadenaTotal.split("-");

                for (int i = 0; i < array.length; i++) {
                    String[] datos = array[i].split("#");
                    String codigoAula = datos[0];
                    String Posicionbloque = datos[1];
                    String Hini = datos[2];
                    String Hfin = datos[3];

                    // CRUCE ... HABILITAR
                    String queryConsultaCruceMasivo = " SELECT count(*) as cruce FROM horario_curso_docente  "
                      + " WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                      + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                      + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                      + " and cod_per='" + periodo + "' ";
                    System.out.println("555555--->> " + queryConsultaCruceMasivo);
                    ResultSet rs2 = st.executeQuery(queryConsultaCruceMasivo);
                    if (rs2.next()) {
                        cantCruce = rs2.getInt("cruce");
                    }
                    datoCont = datoCont + cantCruce;
                    // */
                }

                if (datoCont > 0) {
                    dato = 5;
                } else {

                    for (int i = 0; i < array.length; i++) {
                        String[] datos = array[i].split("#");
                        String codigoAula = datos[0];
                        String Posicionbloque = datos[1];
                        String Hini = datos[2];
                        String Hfin = datos[3];
                        //System.out.println(codigoAula+"---"+Posicionbloque+"---"+Hini+"---"+Hfin);

                        /* VERIFICAR SI ES UN AULA --> "LIBRE"  */
                        String queryLibre = "SELECT count(*) as cant FROM aula WHERE codtipogrado in ('38','40','41') AND codaula='" + codigoAula + "' ";
                        System.out.println("-( LIBRE )-> " + queryLibre);
                        ResultSet libreRS = st.executeQuery(queryLibre);
                        if (libreRS.next()) {
                            libre = libreRS.getInt("cant");
                        }

                        String queryCant = "SELECT cod_hcd FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "' and cod_per='" + periodo + "' ";
                        //System.out.println("-(1)-> "+queryCant);
                        ResultSet rsCant = st.executeQuery(queryCant);
                        if (rsCant.next()) {
                            codHorario = rsCant.getInt("cod_hcd");
                        }

                        if (codHorario == 0) {
                            // CRUCE  ... HABILITAR
                            String queryConsultaCruce = "SELECT count(*) as cruce FROM horario_curso_docente  "
                              + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                              + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                              + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "'))"
                              + " and cod_per='" + periodo + "'    ";
                            //System.out.println("-(2)-> "+queryConsultaCruce);
                            ResultSet rs = st.executeQuery(queryConsultaCruce);
                            if (rs.next()) {
                                cantCruce = rs.getInt("cruce");

                            }
                            // */
                            if (cantCruce > 0) {
                                //si hay cruce dato=3
                                dato = 3;
                            } else {
                                // sino cruce =0
                                String query = "";
                                if (libre == 0) {
                                    query = "INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec)  "
                                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "','" + clase + "')";
                                } else {
                                    query = "INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec)  "
                                      + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','0','" + periodo + "','" + codigoGrupo + "','" + clase + "')";
                                }

                                dato = st.executeUpdate(query);

                                String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                                  + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'REGISTRADO'," + codUsuario + ")";
                                dato = st.executeUpdate(queryHH1);

                            }

                        } else {
                            // ------------------
                            String queryConsultaCruce = " SELECT count(*) as cruce FROM horario_curso_docente  "
                              + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                              + " OR (hor_ini>'" + Hini + "' and hor_ini<='" + Hfin + "' and hor_fin>'" + Hfin + "') "
                              + " OR (hor_ini<'" + Hini + "' and hor_fin>='" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                              + " and cod_per='" + periodo + "' ";

                            ResultSet rs = st.executeQuery(queryConsultaCruce);
                            if (rs.next()) {
                                cantCruce = rs.getInt("cruce");

                            }
                            // ---------------
                            if (cantCruce > 0) {
                                dato = 3;
                            } else {
                                String queryUpdate = "";
                                if (libre == 0) {
                                    queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                                } else {
                                    queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "', est_hcd='0' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                                }

                                dato = st.executeUpdate(queryUpdate);

                                String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                                  + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'ACTUALIZADO'," + codUsuario + ")";
                                dato = st.executeUpdate(queryHH1);
                            }

                        }

                    }

                }

            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public ArrayList<Aula> verCruceMasivio(String dia, String Hini, String Hfin, String codDocente, String periodo) throws Exception {
        ArrayList<Aula> lista = new ArrayList<Aula>();

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsultaCruce = "SELECT hor.codAula,sede.des_loc,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,  "
              + "tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,aula.nombre,turno.desturno  "
              + ",hor.hor_ini,hor.hor_fin,hor.cod_cur,curso.nom_cur FROM horario_curso_docente as hor  "
              + "INNER JOIN aula on aula.codaula=hor.codAula "
              + " INNER JOIN sede on sede.cod_loc=aula.codlocal  "
              + " INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro  "
              + " INNER JOIN centro on centro.codcentro=aula.cocentro  "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno  "
              + " INNER JOIN curso on curso.cod_cur=hor.cod_cur  "
              + " WHERE hor.cod_doc='" + codDocente + "' and hor.dia='" + dia + "' and (((hor.hor_ini<='" + Hini + "' and hor.hor_fin>='" + Hfin + "') or (hor.hor_ini>='" + Hini + "' and hor.hor_fin<='" + Hfin + "'))  "
              + " OR (hor.hor_ini>='" + Hini + "' and hor.hor_ini<='" + Hfin + "' and hor.hor_fin>='" + Hfin + "') "
              + " OR (hor.hor_ini<='" + Hini + "' and hor.hor_fin>='" + Hini + "' and hor.hor_fin<='" + Hfin + "')) "
              + " and hor.cod_per='" + periodo + "'";

            System.out.println("--cruce-o-->> " + queryConsultaCruce);
            ResultSet rs = st.executeQuery(queryConsultaCruce);
            while (rs.next()) {
                Aula aula = new Aula();
                aula.setCodigoAula(rs.getInt("codAula"));
                aula.setNombreLocal(rs.getString("des_loc"));
                aula.setNombreTipoCentro(rs.getString("destipocentro"));
                aula.setNombreCentro(rs.getString("descentro"));
                aula.setNombreNivel(rs.getString("desnivel"));
                aula.setNombreTipoGrado(rs.getString("destipogrado"));
                aula.setNombreGrado(rs.getString("desgrado"));
                aula.setNombreSeccion(rs.getString("desseccion"));
                aula.setNombreTurno(rs.getString("desturno"));
                aula.setHoraInicio(rs.getString("hor_ini"));
                aula.setHoraFin(rs.getString("hor_fin"));
                aula.setCodigoCurso(rs.getString("cod_cur"));
                aula.setNombreCurso(rs.getString("nom_cur"));
                aula.setNombre(rs.getString("nombre"));
                lista.add(aula);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public Horario consultarDatosHorario(String codigoAula, String dia, String posicion) throws Exception {
        Horario horario = new Horario();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT hr.cod_hcd,hr.codAula,hr.dia,hr.pos_blo,hr.hor_ini,hr.hor_fin,hr.cod_cur,hr.cod_doc,hr.cod_tur,hr.cod_per,hr.codGru,hr.est_hcd, "
              + "cur.nom_cur,pro.apellido,pro.nombre  "
              + "FROM horario_curso_docente AS hr "
              + "INNER JOIN curso as cur ON cur.cod_cur=hr.cod_cur "
              + "INNER JOIN sacoolive3.profesor as pro ON pro.codprofesor=hr.cod_doc "
              + "WHERE hr.codAula='" + codigoAula + "' and hr.dia='" + dia + "' and pos_blo='" + posicion + "'";
            ResultSet rs = st.executeQuery(query);

            if (rs.next()) {
                horario.setH_codigoHorarioCursoDocente(rs.getString("cod_hcd"));
                horario.setH_codigoAula(rs.getString("codAula"));
                horario.setH_dia(rs.getString("dia"));
                horario.setH_posicionBloque(rs.getString("pos_blo"));
                horario.setH_horarioInicio(rs.getString("hor_ini"));
                horario.setH_horarioFinal(rs.getString("hor_fin"));
                horario.setH_codigoCurso(rs.getString("cod_cur"));
                horario.setH_codigoDocente(rs.getString("cod_doc"));
                horario.setH_codigoTurno(rs.getString("cod_tur"));
                horario.setH_codigoGrupo(rs.getString("codGru"));
                horario.setH_estado(rs.getString("est_hcd"));
                horario.setH_nombreCurso(rs.getString("nom_cur"));
                horario.setH_apellidosDocente(rs.getString("apellido"));
                horario.setH_nombreDocente(rs.getString("nombre"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public ArrayList<Horario> consultarDatosHorario(String codigoAula, String codigoPeriodo) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT hr.codSec,hr.cod_hcd,hr.codAula,hr.dia,hr.pos_blo,hr.hor_ini,hr.hor_fin,hr.cod_cur,hr.cod_doc,hr.cod_tur,hr.cod_per,hr.codGru,hr.est_hcd, "
              + "cur.nom_cur,pro.apellido,pro.nombre  "
              + "FROM horario_curso_docente AS hr "
              + "INNER JOIN curso as cur ON cur.cod_cur=hr.cod_cur "
              + "INNER JOIN sacoolive3.profesor as pro ON pro.codprofesor=hr.cod_doc "
              + "WHERE hr.codAula='" + codigoAula + "' and hr.cod_per='" + codigoPeriodo + "' ";
            System.out.println("CONSULTAR DATOS DEL HORARIO " + query);
            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Horario horario = new Horario();
                horario.setH_codigoHorarioCursoDocente(rs.getString("cod_hcd"));
                horario.setH_codigoAula(rs.getString("codAula"));
                horario.setH_dia(rs.getString("dia"));
                horario.setH_posicionBloque(rs.getString("pos_blo"));
                horario.setH_horarioInicio(rs.getString("hor_ini"));
                horario.setH_horarioFinal(rs.getString("hor_fin"));
                horario.setH_codigoCurso(rs.getString("cod_cur"));
                horario.setH_codigoDocente(rs.getString("cod_doc"));
                horario.setH_codigoTurno(rs.getString("cod_tur"));
                horario.setH_codigoGrupo(rs.getString("codGru"));
                horario.setH_estado(rs.getString("est_hcd"));
                horario.setH_nombreCurso(rs.getString("nom_cur"));
                horario.setH_apellidosDocente(rs.getString("apellido"));
                horario.setH_nombreDocente(rs.getString("nombre"));
                horario.setH_clase(rs.getString("codSec"));
                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public Horario consultarDatosHorarioAula(String codigoAula, String codigoPeriodo) throws Exception {

        String base = "horario";
        Horario horario = new Horario();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT DISTINCT hr.codGru,hr.cod_tur FROM horario_curso_docente AS hr  "
              + "WHERE hr.codAula='" + codigoAula + "' and hr.cod_per='" + codigoPeriodo + "' ";
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                horario.setH_codigoGrupo(rs.getString("codGru"));
                horario.setH_codigoTurno(rs.getString("cod_tur"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public void eliminarHorarioCurso(String codHorarioCursoDocente, int codUsuario) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            //--------HISTORIAL---------------------
            String queryHH0 = "SELECT cod_hcd,codAula,dia,pos_blo,hor_ini,hor_fin,cod_cur,cod_doc,cod_tur,cod_per,codGru FROM horario_curso_docente WHERE cod_hcd='" + codHorarioCursoDocente + "'";
            ResultSet rs0 = st.executeQuery(queryHH0);
            if (rs0.next()) {
                String codAula = rs0.getString("codAula");
                String dia = rs0.getString("dia");
                String Posicionbloque = rs0.getString("pos_blo");
                String Hini = rs0.getString("hor_ini");
                String Hfin = rs0.getString("hor_fin");
                String codigoTurno = rs0.getString("cod_tur");
                String codigoCurso = rs0.getString("cod_cur");
                String codigoDocente = rs0.getString("cod_doc");
                String periodo = rs0.getString("cod_per");
                String codigoGrupo = rs0.getString("codGru");

                String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                  + "VALUES ('" + codAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'ELIMINADO'," + codUsuario + ")";
                st.executeUpdate(queryHH1);
            }
            //--------HISTORIAL---------------------

            String query = "DELETE FROM horario_curso_docente WHERE cod_hcd='" + codHorarioCursoDocente + "' ";
            System.out.println(query);
            st.executeUpdate(query);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public void eliminarHorarioTodoAula(String codAula, String periodo, int codUsuario) throws Exception {

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            ArrayList<Horario> datos = new ArrayList<Horario>();
            String queryHH0 = "SELECT cod_hcd,codAula,dia,pos_blo,hor_ini,hor_fin,cod_cur,cod_doc,cod_tur,cod_per,codGru FROM horario_curso_docente WHERE codAula='" + codAula + "' AND cod_per='" + periodo + "'";
            System.out.println("xxxxxxxxx>>>> " + queryHH0);
            ResultSet rs0 = st.executeQuery(queryHH0);
            while (rs0.next()) {
                Horario horario = new Horario();
                horario.setH_dia(rs0.getString("dia"));
                horario.setH_posicionBloque(rs0.getString("pos_blo"));
                horario.setH_horarioInicio(rs0.getString("hor_ini"));
                horario.setH_horarioFinal(rs0.getString("hor_fin"));
                horario.setH_codigoTurno(rs0.getString("cod_tur"));
                horario.setH_codigoCurso(rs0.getString("cod_cur"));
                horario.setH_codigoDocente(rs0.getString("cod_doc"));
                horario.setH_codigoGrupo(rs0.getString("codGru"));

                datos.add(horario);
            }

            for (int i = 0; i < datos.size(); i++) {
                String dia = datos.get(i).getH_dia();
                String Posicionbloque = datos.get(i).getH_posicionBloque();
                String Hini = datos.get(i).getH_horarioInicio();
                String Hfin = datos.get(i).getH_horarioFinal();
                String codigoTurno = datos.get(i).getH_codigoTurno();
                String codigoCurso = datos.get(i).getH_codigoCurso();
                String codigoDocente = datos.get(i).getH_codigoDocente();
                String codigoGrupo = datos.get(i).getH_codigoGrupo();

                String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                  + "VALUES ('" + codAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'ELIMINADO'," + codUsuario + ")";
                System.out.println(queryHH1);
                st.executeUpdate(queryHH1);
            }

            //--------HISTORIAL---------------------
            String query = "DELETE FROM horario_curso_docente WHERE cod_per='" + periodo + "' and codAula='" + codAula + "' ";
            System.out.println(query);
            st.executeUpdate(query);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public int codigoBloque(String codigoGrupo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT DISTINCT codBlo FROM detbloque WHERE codGru='" + codigoGrupo + "' ";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("codBlo");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int cantidaCursosAsignados(String codigoAula, String periodo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT count(*) as cant FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and cod_per='" + periodo + "' ";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int cantidadAsignado(String codAula, String dia, String posicionBloque, String Periodo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE codAula='" + codAula + "' AND dia='" + dia + "' AND pos_blo='" + posicionBloque + "' and cod_per='" + Periodo + "' ";
            System.out.println("(3-)-- cantidadAsignado -->>>  " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Horario consultarDatosAsignados(String codAula, String dia, String posicionBloque, String periodo) throws Exception {
        Horario horario = new Horario();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_doc,cod_cur,cod_hcd FROM horario_curso_docente WHERE codAula='" + codAula + "' AND dia='" + dia + "' AND pos_blo='" + posicionBloque + "' and cod_per='" + periodo + "' ";
            System.out.println("(4)-- consultarDatosAsignados -->>>>   " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                horario.setCodigoDocente_HorarioCursoDoc(rs.getString("cod_doc"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setCodHorarioCursoDoc(rs.getString("cod_hcd"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public ArrayList<Horario> horarioDocente(String codDocente, String periodo) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT curso.cod_pla,horario_curso_docente.cod_tur,horario_curso_docente.codAula,horario_curso_docente.hor_ini, horario_curso_docente.hor_fin,curso.nom_cur,  "
              + " horario_curso_docente.cod_cur, sede.des_loc,horario_curso_docente.dia,horario_curso_docente.cod_doc, nivel.desnivel,tipo_grado.destipogrado, "
              + " grado.desgrado,seccion.desseccion,turno.desturno "
              + " FROM curso  "
              + " INNER JOIN horario_curso_docente ON horario_curso_docente.cod_cur = curso.cod_cur  "
              + " INNER JOIN aula ON horario_curso_docente.codAula = aula.codaula  "
              + " INNER JOIN sede ON aula.codlocal = sede.cod_loc "
              + " INNER JOIN nivel on nivel.codnivel=aula.codnivel  "
              + " INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  "
              + " INNER JOIN grado on grado.codgrado=aula.codgrado  "
              + " INNER JOIN seccion on seccion.codseccion=aula.codseccion  "
              + " INNER JOIN turno on turno.codturno=aula.codturno "
              + " WHERE horario_curso_docente.cod_doc='" + codDocente + "' and horario_curso_docente.cod_per='" + periodo + "' "
              + " ORDER BY horario_curso_docente.dia, horario_curso_docente.hor_ini";
            System.out.println("--zxxxxxzz--->> " + query);
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setCodAula_HorarioCursoDoc(rs.getString("codAula"));
                horario.setDia_HorarioCursoDoc(rs.getString("dia"));
                horario.setPosicionBloque_HorarioCursoDoc("pos_blo");
                horario.setHini_HorarioCursoDoc(rs.getString("hor_ini"));
                horario.setHfin_HorarioCursoDoc(rs.getString("hor_fin"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setCodigoGrupo(rs.getString("cod_tur"));
                horario.setNombreCurso(rs.getString("nom_cur"));
                horario.setNombreSede(rs.getString("des_loc"));
                horario.setNombreNivel(rs.getString("desnivel"));
                horario.setNombreTipoGrado(rs.getString("destipogrado"));
                horario.setNombreGrado(rs.getString("desgrado"));
                horario.setNombreSeccion(rs.getString("desseccion"));
                horario.setNombreTurno(rs.getString("desturno"));
                horario.setCodigoPlana(rs.getString("cod_pla"));

                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int cantidadAsignadoCursosDoc(String codDocente, String periodo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE cod_doc='" + codDocente + "' and cod_per='" + periodo + "' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultacantidadCursos(String codAula, String periodo) throws Exception {
        int dato = 0;

        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT COUNT(codAula) as cantidad from horario_curso_docente  WHERE codAula='" + codAula + "' and cod_per='" + periodo + "'";

            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {

                dato = rs.getInt("cantidad");

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultacantCursosSinAsignar(String codAula, String periodo) throws Exception {
        int codigo = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT DISTINCT d.codBlo as codigo FROM horario_curso_docente AS hr "
              + "INNER JOIN detbloque as d on d.codGru=hr.codGru "
              + "WHERE hr.codAula='" + codAula + "' and hr.cod_per='" + periodo + "' ";
            System.out.println(">->-->> " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                codigo = rs.getInt("codigo");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return codigo;
    }

    @Override
    public Bloque consultarCodigoGrupoTurno(String codAula, String periodo) throws Exception {
        Bloque bloque = new Bloque();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT DISTINCT horario_curso_docente.codGru, grupo_bloque.codTurno  FROM horario_curso_docente "
              + "INNER JOIN grupo_bloque on horario_curso_docente.codGru=grupo_bloque.codGru "
              + "WHERE horario_curso_docente.codAula='" + codAula + "' and horario_curso_docente.cod_per='" + periodo + "'";
            System.out.println("(-1)-- consultarCodigoGrupoTurno -->>> " + query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                bloque.setCod_gru(rs.getString("codGru"));
                bloque.setTur_gru(rs.getString("codTurno"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;
    }

    @Override
    public int cantGrupoHorario(String codigoAula, String periodo) throws Exception {
        int cant = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT COUNT(DISTINCT codAula,cod_per,num_hor) as cantidad FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and cod_per='" + periodo + "' ";

            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                cant = rs.getInt("cantidad");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return cant;
    }

    @Override
    public ArrayList<Horario> horarioHistorial(String periodo) throws Exception {
        ArrayList listaAulas = new ArrayList();
        ArrayList<Horario> lista = new ArrayList<Horario>();
        /*int aula = 0;
         String base = "horario";
         Connection cnx = MySqlDAOFactory.obtenerConexion(base);
         Statement st = cnx.createStatement();
         String query1="SELECT DISTINCT codAula FROM historial_horario WHERE cod_per='"+periodo+"'";
         ResultSet rs1 = st.executeQuery(query1);
         while(rs1.next()){
         aula = rs1.getInt("codAula");
         listaAulas.add(aula);
         }
        
         for(int i=0;i<listaAulas.size(); i++){
            
         String query2 = "SELECT * FROM historial_horario WHERE cod_per='"+periodo+"' AND  codAula='"+listaAulas.get(i)+"' ORDER BY dia,pos_blo,fecha,hora";
         ResultSet rs2 = st.executeQuery(query2);
            
         wi
            
        
         }
        
        
        
         
         while(rs1.next()){
         Horario horario= new Horario();
            
            
         lista.add(horario);
         }*/

        return lista;
    }

    @Override
    public ArrayList<Horario> historial(String periodo, String aula) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT gru.nom_gru,hh.cod_hcd,hh.cod_usu,usu.usu_usu,hh.codAula,hh.dia,hh.pos_blo,hh.hor_ini,hh.hor_fin,hh.cod_cur,cur.nom_cur, "
              + "hh.cod_doc,hh.cod_tur,hh.cod_per,hh.codGru,hh.est_hcd,hh.fecha,hh.hora,hh.accion "
              + "FROM historial_horario as hh "
              + "INNER JOIN grupo_horario AS gru ON gru.cod_gru = hh.codGru "
              + "INNER JOIN usuario as usu on usu.cod_usu=hh.cod_usu "
              + "INNER JOIN curso as cur on cur.cod_cur=hh.cod_cur "
              + " "
              + "WHERE hh.codAula='" + aula + "' and hh.cod_per='" + periodo + "' "
              + "ORDER BY gru.nom_gru,hh.dia,hh.pos_blo,hh.hor_ini,hh.fecha,hh.hora ";
            System.out.println("x-x-x-->>> " + query);
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setH_nombreGrupo(rs.getString("nom_gru"));
                horario.setH_codigoHorarioCursoDocente(rs.getString("cod_hcd"));
                horario.setH_codigoUsuario(rs.getString("cod_usu"));
                horario.setH_nombreUsuario(rs.getString("usu_usu"));
                horario.setH_codigoAula(rs.getString("codAula"));
                horario.setH_dia(rs.getString("dia"));
                horario.setH_posicionBloque(rs.getString("pos_blo"));
                horario.setH_horarioInicio(rs.getString("hor_ini"));
                horario.setH_horarioFinal(rs.getString("hor_fin"));
                horario.setH_codigoCurso(rs.getString("cod_cur"));
                horario.setH_nombreCurso(rs.getString("nom_cur"));
                horario.setH_codigoDocente(rs.getString("cod_doc"));
                /*horario.setH_apellidosDocente(rs.getString("apellido"));
                 horario.setH_nombreDocente(rs.getString("nombre"));*/
                horario.setH_codigoTurno(rs.getString("cod_tur"));
                horario.setH_periodo(rs.getString("cod_per"));
                horario.setH_codigoGrupo(rs.getString("codGru"));
                horario.setH_estado(rs.getString("est_hcd"));
                horario.setH_fecha(rs.getString("fecha"));
                horario.setH_hora(rs.getString("hora"));
                horario.setH_accion(rs.getString("accion"));
                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int cantidaAulaConHistorial(String aula, String periodo) throws Exception {
        int cant = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT count(*) as cant FROM historial_horario WHERE codAula='" + aula + "' AND cod_per='" + periodo + "' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                cant = rs.getInt("cant");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return cant;

    }

    @Override
    public int cantidadHorarioCero(String aula, String periodo) throws Exception {
        int cant = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT count(*) as cant FROM horario_curso_docente WHERE cod_per='" + periodo + "' and codAula='" + aula + "' and est_hcd='0' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                cant = rs.getInt("cant");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return cant;
    }

    @Override
    public Horario consultarDatosHorarioAulaPorPosicionDiaria(String codigoAula, String codigoPeriodo, String dia, String posicion) throws Exception {

        String base = "horario";
        Connection cnx = null;
        Horario horario = new Horario();
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String base2 = "nuevo";
            Connection cnx2 = MySqlDAOFactory.obtenerConexion(base2);
            Statement st2 = cnx2.createStatement();
            String consultaTipoDocente = "SELECT hr.codSec,hr.cod_hcd,hr.codAula,hr.dia,hr.pos_blo,hr.hor_ini,hr.hor_fin,hr.cod_cur,  "
              + "	hr.cod_doc,hr.cod_tur,hr.cod_per,hr.codGru,hr.est_hcd,cur.nom_cur  "
              + "FROM  "
              + "	horario_curso_docente AS hr  "
              + "	INNER JOIN curso AS cur ON cur.cod_cur = hr.cod_cur  "
              + "WHERE  "
              + "		hr.codAula = '" + codigoAula + "'  "
              + "AND hr.cod_per = '" + codigoPeriodo + "'  "
              + "AND hr.pos_blo = '" + posicion + "'  "
              + "AND hr.dia = '" + dia + "' ";

//            System.out.println("CONSULTAR DATOS DEL HORARIO PARTE 1: " + consultaTipoDocente);
            ResultSet rs = st.executeQuery(consultaTipoDocente);
            while (rs.next()) {
                horario.setH_codigoHorarioCursoDocente(rs.getString("cod_hcd"));
                horario.setH_codigoAula(rs.getString("codAula"));
                horario.setH_dia(rs.getString("dia"));
                horario.setH_posicionBloque(rs.getString("pos_blo"));
                horario.setH_horarioInicio(rs.getString("hor_ini"));
                horario.setH_horarioFinal(rs.getString("hor_fin"));
                horario.setH_codigoCurso(rs.getString("cod_cur"));
                horario.setH_codigoDocente(rs.getString("cod_doc"));
                horario.setH_codigoTurno(rs.getString("cod_tur"));
                horario.setH_codigoGrupo(rs.getString("codGru"));
                horario.setH_estado(rs.getString("est_hcd"));
                horario.setH_nombreCurso(rs.getString("nom_cur"));
                horario.setH_clase(rs.getString("codSec"));
            }

            if (horario.getH_codigoHorarioCursoDocente() != null) {
                String codDocente = horario.getH_codigoDocente();
                String primerCaracterDocente = "" + codDocente.charAt(0);

                if (!primerCaracterDocente.equals("P")) {
                    String query = "SELECT hr.codSec,hr.cod_hcd,hr.codAula,hr.dia,hr.pos_blo,hr.hor_ini,hr.hor_fin,hr.cod_cur,hr.cod_doc,hr.cod_tur,hr.cod_per,hr.codGru,hr.est_hcd, "
                      + "cur.nom_cur,pro.apellido,pro.nombre  "
                      + "FROM horario_curso_docente AS hr "
                      + "INNER JOIN curso as cur ON cur.cod_cur=hr.cod_cur "
                      + "INNER JOIN sacoolive3.profesor as pro ON pro.codprofesor=hr.cod_doc "
                      + "WHERE hr.codAula='" + codigoAula + "' and hr.cod_per='" + codigoPeriodo + "'  and hr.pos_blo='" + posicion + "' and hr.dia='" + dia + "'";
                    System.out.println("CONSULTAR DATOS DEL HORARIO PARTE 2: " + query);
                    ResultSet rs2 = st.executeQuery(query);
                    //Horario horario = new Horario();
                    if (rs2.next()) {
                        horario.setH_apellidosDocente(rs2.getString("apellido"));
                        horario.setH_nombreDocente(rs2.getString("nombre"));

                    }
                } else {
                    String codDOcenteP = codDocente.replace("P", "");
                    String query2 = "SELECT apellido,nombre FROM personal WHERE codper = '" + codDOcenteP + "'";
                    ResultSet rs3 = st2.executeQuery(query2);
                    if (rs3.next()) {
                        horario.setH_apellidosDocente(rs3.getString("apellido"));
                        horario.setH_nombreDocente(rs3.getString("nombre"));
                    }
                }

            } else {
//                System.out.println("VACIO");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return horario;
    }

    @Override
    public int registrarAsigCurDoceHorarioMasivo2(String cadenaTotal, String hora_inicio, String hora_termino, String dia, String codigoTurno, String codigoCurso, String codigoDocente, String periodo, String codigoGrupo, int codUsuario, int clase, String grupoAulas) throws Exception {
        int dato = 0;
        int datoCont = 0;
        int codHorario = 0;
        int cantCruce = 0;
        int libre = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            //  CRUCE DE HORARIOS ..... HABILITAR
//            String queryCruceMasivo = "SELECT count(*) as cruce FROM horario_curso_docente  "
//                    + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + hora_inicio + "' and hor_fin>='" + hora_termino + "') or (hor_ini>='" + hora_inicio + "' and hor_fin<='" + hora_termino + "'))  "
//                    + " OR (hor_ini>='" + hora_inicio + "' and hor_ini<='" + hora_termino + "' and hor_fin>='" + hora_termino + "') "
//                    + " OR (hor_ini<='" + hora_inicio + "' and hor_fin>='" + hora_inicio + "' and hor_fin<='" + hora_termino + "'))"
//                    + " and cod_per='" + periodo + "' ";
//            System.out.println("-(masivo)-> " + queryCruceMasivo);
//            ResultSet rsMasivo = st.executeQuery(queryCruceMasivo);
//            if (rsMasivo.next()) {
//                cantCruce = rsMasivo.getInt("cruce");
//            }
            // */
//            if (cantCruce > 0) {
//                dato = 4;
//            } else {
            String[] array = cadenaTotal.split("-");

            for (int i = 0; i < array.length; i++) {
                String[] datos = array[i].split("#");
                String codigoAula = datos[0];
                String Posicionbloque = datos[1];
                String Hini = datos[2];
                String Hfin = datos[3];

                // CRUCE ... HABILITAR
                String queryConsultaCruceMasivo = " SELECT count(*) as cruce FROM horario_curso_docente  "
                  + " WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                  + " and cod_per='" + periodo + "' ";
                System.out.println("555555--->> " + queryConsultaCruceMasivo);
                ResultSet rs2 = st.executeQuery(queryConsultaCruceMasivo);
                if (rs2.next()) {
                    datoCont += rs2.getInt("cruce");
                }
//				datoCont = datoCont + cantCruce;
                // */
            }

            for (int i = 0; i < array.length; i++) {
                String[] datos = array[i].split("#");
                String codigoAula = datos[0];
                String Posicionbloque = datos[1];
                String Hini = datos[2];
                String Hfin = datos[3];

                // CRUCE ... HABILITAR
                String queryConsultaCruceMasivo = " SELECT count(*) as cruce FROM horario_curso_docente  "
                  + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                  + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                  + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                  + " and cod_per='" + periodo + "' ";
                System.out.println("555555--->> " + queryConsultaCruceMasivo);
                ResultSet rs2 = st.executeQuery(queryConsultaCruceMasivo);
                if (rs2.next()) {
                    cantCruce += rs2.getInt("cruce");
                }
//                    datoCont = datoCont + cantCruce;
                // */
            }

            if (datoCont > 0) {
                dato = 5;
            } else if (cantCruce > 0) {
                dato = 4;
            } else {

                for (int i = 0; i < array.length; i++) {
                    String[] datos = array[i].split("#");
                    String codigoAula = datos[0];
                    String Posicionbloque = datos[1];
                    String Hini = datos[2];
                    String Hfin = datos[3];
                    //System.out.println(codigoAula+"---"+Posicionbloque+"---"+Hini+"---"+Hfin);

                    /* VERIFICAR SI ES UN AULA --> "LIBRE"  */
                    String queryLibre = "SELECT count(*) as cant FROM aula WHERE codtipogrado in ('38','40','41') AND codaula='" + codigoAula + "' ";
                    System.out.println("-( LIBRE )-> " + queryLibre);
                    ResultSet libreRS = st.executeQuery(queryLibre);
                    if (libreRS.next()) {
                        libre = libreRS.getInt("cant");
                    }

                    String queryCant = "SELECT cod_hcd FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "' and cod_per='" + periodo + "' ";
                    //System.out.println("-(1)-> "+queryCant);
                    ResultSet rsCant = st.executeQuery(queryCant);
                    if (rsCant.next()) {
                        codHorario = rsCant.getInt("cod_hcd");
                    }

                    if (codHorario == 0) {
                        // CRUCE  ... HABILITAR
                        String queryConsultaCruce = "SELECT count(*) as cruce FROM horario_curso_docente  "
                          + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                          + " OR (hor_ini>'" + Hini + "' and hor_ini<'" + Hfin + "' and hor_fin>'" + Hfin + "') "
                          + " OR (hor_ini<'" + Hini + "' and hor_fin>'" + Hini + "' and hor_fin<'" + Hfin + "'))"
                          + " and cod_per='" + periodo + "'    ";
                        System.out.println("-(CRUCE 1)-> " + queryConsultaCruce);
                        ResultSet rs = st.executeQuery(queryConsultaCruce);
                        if (rs.next()) {
                            cantCruce = rs.getInt("cruce");

                        }
                        // */
                        if (cantCruce > 0) {
                            //si hay cruce dato=3
                            dato = 3;
                        } else {
                            // sino cruce =0
                            String query = "";
                            if (libre == 0) {
                                query = "INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec,cod_gru_aul)  "
                                  + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";

                            } else {
                                query = "INSERT INTO horario_curso_docente (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,codSec,cod_gru_aul)  "
                                  + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','0','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";
                            }
                            System.out.println("INSERT-M-> " + query);
                            dato = st.executeUpdate(query);

                            String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                              + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'REGISTRADO'," + codUsuario + ")";
                            dato = st.executeUpdate(queryHH1);

                        }

                    } else {
                        // ------------------
                        String queryConsultaCruce = " SELECT count(*) as cruce FROM horario_curso_docente  "
                          + " WHERE cod_doc='" + codigoDocente + "' and dia='" + dia + "' and (((hor_ini<='" + Hini + "' and hor_fin>='" + Hfin + "') or (hor_ini>'" + Hini + "' and hor_fin<'" + Hfin + "'))  "
                          + " OR (hor_ini>'" + Hini + "' and hor_ini<='" + Hfin + "' and hor_fin>'" + Hfin + "') "
                          + " OR (hor_ini<'" + Hini + "' and hor_fin>='" + Hini + "' and hor_fin<'" + Hfin + "')) AND cod_hcd!= '" + codHorario + "' "
                          + " and cod_per='" + periodo + "' ";
                        System.out.println("-(CRUCE 2)-> " + queryConsultaCruce);
                        ResultSet rs = st.executeQuery(queryConsultaCruce);
                        if (rs.next()) {
                            cantCruce = rs.getInt("cruce");

                        }
                        // ---------------
                        if (cantCruce > 0) {
                            dato = 3;
                        } else {
                            String queryUpdate = "";
                            if (libre == 0) {
                                queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            } else {
                                queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "', est_hcd='0' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            }

                            dato = st.executeUpdate(queryUpdate);

                            String queryHH1 = "INSERT INTO historial_horario (codAula,dia,pos_blo,hor_ini,hor_fin,cod_tur,cod_cur,cod_doc,est_hcd,cod_per,codGru,fecha,hora,accion,cod_usu)  "
                              + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'ACTUALIZADO'," + codUsuario + ")";
                            dato = st.executeUpdate(queryHH1);
                        }

                    }

                }

            }

//            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return dato;
    }

    @Override
    public int registrarGrupoAula(int codPeriodo, String cadenaAulas, int cant_aula, String codigo) throws Exception {
        String base = "horario";
        int codGrupoAula = 0;
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            int cantidad = 0;
            String querySelect = "SELECT count(*) as cant FROM grupo_aulas WHERE cod_per='" + codPeriodo + "' and cad_aul='" + cadenaAulas + "' ";
            ResultSet rs = st.executeQuery(querySelect);
            if (rs.next()) {
                cantidad = rs.getInt("cant");
            }

            if (cantidad == 0) {//INSERTAR
                String queryInsert = "INSERT INTO grupo_aulas (cod_per, cad_aul, cantidad, est_gru_aul) VALUES ('" + codPeriodo + "', '" + cadenaAulas + "', " + cant_aula + ", '1');";
                st.executeUpdate(queryInsert);
            }

            String querySelect2 = " SELECT cod_gru_aul FROM grupo_aulas WHERE cod_per='" + codPeriodo + "' and cad_aul='" + cadenaAulas + "' ";
            ResultSet rs2 = st.executeQuery(querySelect2);

            if (rs2.next()) {
                codGrupoAula = rs2.getInt("cod_gru_aul");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return codGrupoAula;

    }

    @Override
    public Horario consultarCadenaGH(String codigo) throws Exception {
        String base = "horario";
        Horario horario = new Horario();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT nom_gru,max_gru,cadena FROM grupo_horario WHERE cod_gru='" + codigo + "' and est_gru='1' ";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                horario.setCadena(rs.getString("cadena"));
                horario.setMaxGrupo(rs.getInt("max_gru"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return horario;
    }

    @Override
    public ArrayList<Horario> listaGrupoAulas(String aula, String periodo) throws Exception {
        String base = "horario";
        ArrayList<Horario> lista = new ArrayList<Horario>();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT cod_gru_aul,cad_aul,cantidad FROM grupo_aulas WHERE cod_per='" + periodo + "' "
              + "     AND (cad_aul = '" + aula + "' or cad_aul LIKE '%," + aula + ",%' or cad_aul LIKE '%," + aula + "' or cad_aul LIKE '" + aula + ",%') and est_gru_aul='1' ";
            System.out.println("xxxx>> " + query);
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setGA_codigoGrupoAula(rs.getString("cod_gru_aul"));
                horario.setGA_cadena(rs.getString("cad_aul"));
                horario.setGA_cantidad(rs.getString("cantidad"));
                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public String limbiarGrupoAulasVacias(String aula, String periodo) throws Exception {
        String base = "horario";

        String llenoAula = "0";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            // limpiar (grupo_aula) del aula selecionada que no tienen registro en Horarios
            String vacioAula = "0";

            String queryLimpiar = "SELECT g.cod_gru_aul,IF(IFNULL(h.codAula,'vacio')='vacio','vacio','lleno') as dato, g.cad_aul FROM grupo_aulas as g  "
              + "LEFT JOIN horario_curso_docente as h on h.cod_gru_aul= g.cod_gru_aul  "
              + "WHERE  g.cod_per='" + periodo + "' and g.cad_aul like '%" + aula + "%'  "
              + "GROUP BY g.cod_gru_aul";

            // and IF(IFNULL(h.codAula,'vacio')='vacio','vacio','lleno') = 'vacio' 
            ResultSet rs1 = st.executeQuery(queryLimpiar);
            while (rs1.next()) {
                if (rs1.getString("dato").equals("lleno")) {
                    llenoAula = rs1.getString("cad_aul");
                } else {
                    vacioAula += "," + rs1.getString("cod_gru_aul");
                }
            }

            System.out.println("vacio " + vacioAula);
            System.out.println("lleno " + llenoAula);
            String delete = "DELETE FROM grupo_aulas WHERE cod_gru_aul in (" + vacioAula + ") ";
            System.out.println("--->>> " + delete);
            st.executeUpdate(delete);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return llenoAula;

    }

    @Override
    public int eliminarMasivo(String codAulas, String codCur, String periodo) throws Exception {
        int dato = 1;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            codAulas = codAulas.replace("#", ",");
            String query = "DELETE FROM horario_curso_docente WHERE cod_cur='" + codCur + "' and cod_per='" + periodo + "' and codAula in (" + codAulas + ")";
            System.out.println(query);
            dato = st.executeUpdate(query);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Horario nombreDocente(String codigoDocente) throws Exception {
        String base = "horario";

        String base2 = "nuevo";

        Horario horario = new Horario();
        String primerCaracterDocente = "" + codigoDocente.charAt(0);

        if (!primerCaracterDocente.equals("P")) {

            Connection cnx = null;
            try {
                cnx = MySqlDAOFactory.obtenerConexion(base);
                Statement st = cnx.createStatement();
                String query = "SELECT pro.apellido,pro.nombre  "
                  + "FROM horario_curso_docente AS hr  "
                  + "INNER JOIN sacoolive3.profesor as pro ON pro.codprofesor=hr.cod_doc "
                  + "WHERE  pro.codprofesor='" + codigoDocente + "' ";
                System.out.println("CONSULTAR DATOS DEL HORARIO PARTE 2: " + query);
                ResultSet rs2 = st.executeQuery(query);

                if (rs2.next()) {
                    horario.setH_apellidosDocente(rs2.getString("apellido"));
                    horario.setH_nombreDocente(rs2.getString("nombre"));

                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cnx.close();
            }

        } else {
            String codDOcenteP = codigoDocente.replace("P", "");

            Connection cnx2 = null;
            try {
                cnx2 = MySqlDAOFactory.obtenerConexion(base2);
                Statement st2 = cnx2.createStatement();

                String query2 = "SELECT apellido,nombre FROM personal WHERE codper = '" + codDOcenteP + "'";
                ResultSet rs3 = st2.executeQuery(query2);
                if (rs3.next()) {
                    horario.setH_apellidosDocente(rs3.getString("apellido"));
                    horario.setH_nombreDocente(rs3.getString("nombre"));
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cnx2.close();
            }

        }

        return horario;
    }

    @Override
    public ArrayList<Horario> horarioDocenteReducido(String codDocente, String periodo) throws Exception {
        ArrayList<Horario> lista = new ArrayList<Horario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT curso.cod_pla,hcd.dia,aula.codlocal,sede.des_loc,hcd.cod_cur,curso.nom_cur,nivel.abrnivel,turno.codturno,"
              + "     IF(turno.desturno='MAÑANA','M',IF(turno.desturno='TARDE','T',IF(turno.desturno='NOCHE','N','X'))) AS desturno, "
              + "(  "
              + "   SELECT "
              + "       IF(nivel.abrnivel='SEC' "
              + "           ,GROUP_CONCAT(grado.abrGrado,IF(tipo_grado.abrTipGrado='REG','',tipo_grado.abrTipGrado),seccion.desseccion) "
              + "           ,GROUP_CONCAT(IF(grado.abrGrado='REG','',grado.abrGrado),IF(tipo_grado.abrTipGrado='REG','',CONCAT(tipo_grado.abrTipGrado,'-')),seccion.desseccion) "
              + "       )"
              + "   FROM horario_curso_docente AS h1 "
              + "   INNER JOIN aula as aula1 ON h1.codAula = aula1.codaula "
              + "   INNER JOIN tipo_grado ON tipo_grado.codtipogrado = aula1.codtipogrado "
              + "   INNER JOIN grado ON grado.codgrado = aula1.codgrado "
              + "   INNER JOIN seccion ON seccion.codseccion = aula1.codseccion "
              + "   WHERE   aula1.codlocal=aula.codlocal AND h1.dia=hcd.dia and h1.cod_cur=hcd.cod_cur AND  "
              + "           h1.cod_doc = '" + codDocente + "' AND h1.cod_per = '" + periodo + "' AND h1.est_hcd='1' "
              + ") as GTS "
              + "FROM horario_curso_docente as hcd "
              + "INNER JOIN aula on aula.codaula=hcd.codAula "
              + "INNER JOIN sede ON aula.codlocal = sede.cod_loc "
              + "INNER JOIN nivel ON nivel.codnivel = aula.codnivel "
              + "INNER JOIN turno ON turno.codturno = aula.codturno "
              + "INNER JOIN curso ON curso.cod_cur = hcd.cod_cur "
              + "WHERE hcd.cod_doc = '" + codDocente + "' AND hcd.cod_per = '" + periodo + "' AND hcd.est_hcd='1' "
              + "GROUP BY hcd.dia,aula.codlocal,hcd.cod_cur,nivel.abrnivel,turno.desturno";
            System.out.println("--zx-2-xxzz--->> " + query);
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Horario horario = new Horario();
                horario.setDia_HorarioCursoDoc(rs.getString("dia"));
                horario.setCodidoCurso_HorarioCursoDoc(rs.getString("cod_cur"));
                horario.setNombreCurso(rs.getString("nom_cur"));
                horario.setNombreSede(rs.getString("des_loc"));
                horario.setCodigoSede(rs.getString("codlocal"));
                horario.setNombreNivel(rs.getString("abrnivel"));
                horario.setCodigoPlana(rs.getString("cod_pla"));
                horario.setCodigoTurno(rs.getString("codturno"));
                horario.setNombreTurno(rs.getString("desturno"));
                horario.setGTS(rs.getString("GTS"));
                lista.add(horario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public Horario consultarCadenaGH(String codigoAula, String codigoPeriodoAcademico) throws Exception {
        String base = "horario";
        Connection cnx = MySqlDAOFactory.obtenerConexion(base);
        Statement st = cnx.createStatement();
        String query = "SELECT hcd.codGru,gh.nom_gru,gh.max_gru,gh.cadena FROM horario_curso_docente as hcd "
          + "INNER JOIN grupo_horario as gh ON gh.cod_gru=hcd.codGru "
          + "WHERE hcd.codAula='" + codigoAula + "' and hcd.cod_per='" + codigoPeriodoAcademico + "' "
          + "GROUP BY hcd.codGru";
        System.out.println("consultarCadenaGH==> " + query);
        ResultSet rs = st.executeQuery(query);
        Horario horario = new Horario();
        if (rs.next()) {
            horario.setCadena(rs.getString("cadena"));
            horario.setMaxGrupo(rs.getInt("max_gru"));
        }
        return horario;
    }

}
