
/*
 * 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.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import pe.siso.horario.Beans.Aula;
import pe.siso.horario.Beans.Bloque;
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 + "' and est_hcd='1'";
            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;
    }

    // cantidad horario
    @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 + "' and est_hcd=1 ";
            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, String recuperacion) throws Exception {
        int dato = 0;
        int codHorario = 0;
        String codDocReemp = "";
        String codCurReemp = "";
        int cantCruce = 0;
        int contador = 0;
        String codHcd = "";
        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 + "' and est_hcd in(1,4)";
            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 + "'  and est_hcd='1'";
                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 = "";
                    String queryInsertUpdate = "";
//					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 + "')";
//					}

                    query = "SELECT cod_hcd 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 + "'  AND est_hcd=1";
                    System.out.println(">>-(2)cruce-> " + query);

                    ResultSet rset = st.executeQuery(query);
                    if (rset.next()) {
                        codHcd = rset.getString("cod_hcd");
                    }
                    if (codHcd != "") {
                        //update

                        String estadoHcd = codigoCurso == "61" ? "4" : "1";

                        queryInsertUpdate = " UPDATE horario_curso_docente SET est_hcd='" + estadoHcd + "' where cod_hcd = " + codHcd + "";

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

                    } else {

                        String estadoHcd = codigoCurso.equals("61") ? "4" : "1";
                        queryInsertUpdate = " 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 + "','" + estadoHcd + "','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";

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

                    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 + "' and est_hcd='1'";

                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 + "',est_hcd='1' 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,recuperacion)  "
                                    + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + motivoCambio + "','" + observacion + "','" + horaAviso + "','" + codCurReemp + "','" + recuperacion + "')";
                            break;
                        default:
                    }
                    dato = st.executeUpdate(queryHH1);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;

    }

    @Override
    public int registrarAsigCurDoceHorarioPersonalizado(String codigoAula2, String dia, String Posicionbloque2, String Hini2, String Hfin2, 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, String recuperacion, String fechafin, String fechainicio, String cadenaTotal, String avance, String fecha_recuperacion, String curso_recuperacion, String aula_recuperacion, String docente_recuperacion, String fecha_aviso, String horaInicioRecuperacion, String horaFinRecuperacion) throws Exception {
        int dato = 0;
        int datoCont = 0;
        int recibeCodigoHCD = 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();

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

            System.out.println("cantidad de datocont:" + datoCont);
            System.out.println("dia :" + dia);

            for (int i = 0; i < array.length; i++) {

                String[] datos = array[i].split("#");
                String codigoAula = datos[0];
                System.out.println("posicion -- >" + i);
                System.out.println(codigoAula);
                String Posicionbloque = datos[1];
                String Hini = datos[2];
                String Hfin = datos[3];
                String horaInicio = "";
                String HoraFin = "";
                //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,cod_doc,cod_cur,hor_ini,hor_fin FROM horario_curso_docente WHERE codAula='" + codigoAula + "' and dia='" + dia + "' and pos_blo='" + Posicionbloque + "' and cod_per='" + periodo + "' and est_hcd='1' ";

                System.out.println("-(1)-> " + queryCant);

                ResultSet rsCant = st.executeQuery(queryCant);
                if (rsCant.next()) {
                    codHorario = rsCant.getInt("cod_hcd");
                    codDocReemp = rsCant.getString("cod_doc");
                    codCurReemp = rsCant.getString("cod_cur");
                    horaInicio = rsCant.getString("hor_ini");
                    HoraFin = rsCant.getString("hor_fin");
                }

                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<='" + horaInicio + "' and hor_fin>='" + HoraFin + "') or (hor_ini>'" + horaInicio + "' and hor_fin<'" + HoraFin + "'))  "
                            + " OR (hor_ini>'" + horaInicio + "' and hor_ini<'" + HoraFin + "' and hor_fin>'" + HoraFin + "') "
                            + " OR (hor_ini<'" + horaInicio + "' and hor_fin>'" + horaInicio + "' and hor_fin<'" + HoraFin + "'))"
                            + " and cod_per='" + periodo + "' and est_hcd='1' ";
                    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 + "','" + horaInicio + "','" + HoraFin + "','" + 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 + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + 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 + "','" + horaInicio + "','" + HoraFin + "','" + 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 as hor  \n"
                            + " INNER JOIN aula on aula.codaula=hor.codAula    \n"
                            + "  INNER JOIN sede on sede.cod_loc=aula.codlocal  \n"
                            + "  INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro  \n"
                            + "  INNER JOIN centro on centro.codcentro=aula.cocentro  \n"
                            + "  INNER JOIN nivel on nivel.codnivel=aula.codnivel  \n"
                            + "  INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado  \n"
                            + "  INNER JOIN grado on grado.codgrado=aula.codgrado  \n"
                            + "  INNER JOIN seccion on seccion.codseccion=aula.codseccion  \n"
                            + "  INNER JOIN turno on turno.codturno=aula.codturno  \n"
                            + "  INNER JOIN curso on curso.cod_cur=hor.cod_cur  \n"
                            + "  WHERE hor.cod_doc='" + codigoDocente + "' and hor.dia='" + dia + "' and (((hor.hor_ini<='" + horaInicio + "' and hor.hor_fin>='" + HoraFin + "') or (hor.hor_ini>='" + horaInicio + "' and hor.hor_fin<='" + HoraFin + "'))  \n"
                            + "  OR (hor.hor_ini>='" + horaInicio + "' and hor.hor_ini<='" + HoraFin + "' and hor.hor_fin>='" + HoraFin + "')    \n"
                            + "  OR (hor.hor_ini<='" + horaInicio + "' and hor.hor_fin>='" + HoraFin + "'and hor.hor_fin<='" + HoraFin + "'))\n"
                            + "   and hor.cod_per='" + periodo + "' and hor.cod_hcd !='" + recibeCodigoHCD + "' and hor.est_hcd='1'";

                    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 = "";

                        String querySelect = "";
                        String queryInsert = "";

                        if (historial.equals("cambioDia")) {
                            //	queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            queryInsert = " 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 + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','0','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";

                        } else {
                            //	queryUpdate = "UPDATE horario_curso_docente SET cod_cur='" + codigoCurso + "', cod_doc='" + codigoDocente + "', codSec='" + clase + "', est_hcd='1' WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            queryInsert = " 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 + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";

                        }

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

                        if (dato > 0) {
                            querySelect = "SELECT cod_hcd FROM horario_curso_docente  WHERE  cod_doc  = '" + codigoDocente + "' and  codAula ='" + codigoAula + "'";
                        }

                        System.out.println("INSERT -->> " + querySelect);
                        ResultSet rsCodHcd = st.executeQuery(querySelect);

                        while (rsCodHcd.next()) {
                            recibeCodigoHCD = rsCodHcd.getInt("cod_hcd");
                        }

                        System.out.println("codigo hcd :" + recibeCodigoHCD);

                        if (recibeCodigoHCD > 0) {
                            if (historial.equals("cambioDia")) {
                                queryUpdate = "UPDATE horario_curso_docente SET cod_rem='" + recibeCodigoHCD + "', est_hcd='1'  WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            } else {
                                queryUpdate = "UPDATE horario_curso_docente SET cod_rem='" + recibeCodigoHCD + "', est_hcd='0'  WHERE cod_hcd='" + codHorario + "'  and cod_per='" + periodo + "' ";
                            }

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

                        String estado = "";
                        String queryHH11 = "";
                        String valor = "";
                        switch (historial) {
                            case "editar":
                                estado = "ACTUALIZADO";
                                queryHH11 = "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 + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + codCurReemp + "')";
                                break;
                            case "cambioFijo":
                                estado = "CAMBIO FIJO";
                                queryHH11 = "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,fechafin,fechainicio)  "
                                        + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + motivoCambio + "','" + observacion + "','" + condicionTrabajador + "','" + codCurReemp + "','" + fechafin + "','" + fechainicio + "')";
                                break;
                            case "cambioDia":
                                estado = "CAMBIO DIA";

                                if (aula_recuperacion.equals(codigoAula)) {
                                    valor = "SI";
                                } else {
                                    valor = "NO";
                                }

                                queryHH11 = "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,recuperacion,fechafin,fechainicio,avance,fecha_recuperacion,curso_recuperacion,aula_recuperacion,docente_recuperacion,fecha_aviso,horini_recuperacion,horfini_recuperacion)  "
                                        + "VALUES ('" + codigoAula + "','" + dia + "','" + Posicionbloque + "','" + horaInicio + "','" + HoraFin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + periodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'" + estado + "'," + codUsuario + ",'" + codDocReemp + "','" + motivoCambio + "','" + observacion + "','" + horaAviso + "','" + codCurReemp + "','" + recuperacion + "','" + fechafin + "','" + fechainicio + "','" + avance + "','" + fecha_recuperacion + "','" + curso_recuperacion + "','" + valor + "','" + docente_recuperacion + "','" + fecha_aviso + "','" + horaInicioRecuperacion + "','" + horaFinRecuperacion + "')";
                                break;
                            default:
                        }

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

                    }

                }

            }

//            }
        } 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 + "' and hor.est_hcd='1'";

            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 JSONObject consultarHorarioByAula(String dia, String codAula, String periodo, String posicionbloque) throws Exception {
        JSONObject obj = null;

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

            String query = "SELECT hcd.hor_ini,hcd.hor_fin FROM horario_curso_docente hcd WHERE codAula='" + codAula + "' and hcd.dia='" + dia + "' and hcd.cod_per='" + periodo + "' and  pos_blo='" + posicionbloque + "' and est_hcd='1'";
            System.out.println("--cruce-->> " + query);

            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                obj = new JSONObject()
                        .put("hor_ini", rs.getString("hor_ini"))
                        .put("hor_fin", rs.getString("hor_fin"));

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

    @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.est_hcd='1' and 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 + "' and horario_curso_docente.est_hcd='1' "
                    + " 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 "
                    + "	hr.cod_doc,hr.cod_tur,hr.cod_per,hr.codGru,hr.est_hcd,cur.nom_cur,cur.cod_pla,dd.cel_dat_per, IFNULL(hr.cod_rem,0)cod_rem  "
                    + "FROM  "
                    + "	horario_curso_docente AS hr  "
                    //        + "	INNER JOIN curso AS cur ON cur.cod_cur = hr.cod_cur    "
                    + "	INNER JOIN curso AS cur ON cur.cod_cur = hr.cod_cur    "
                    + " LEFT JOIN datos_docente dd ON dd.cod_doc=hr.cod_doc "
                    + "WHERE  "
                    + "		hr.codAula = '" + codigoAula + "'  "
                    + "AND hr.cod_per = '" + codigoPeriodo + "'  "
                    + "AND hr.pos_blo = '" + posicion + "'  "
                    + "AND hr.dia = '" + dia + "' "
                    + " AND hr.est_hcd in(1,4)";

            System.out.println("CONSULTAR DATOS DEL HORARIO PARTE 1: " + consultaTipoDocente);
            ResultSet rs = st.executeQuery(consultaTipoDocente);
            while (rs.next()) {
//				String sql = " SELECT \n"
//					+ " te.exa,\n"
//					+ " te.not_enc "
//					+ " FROM tabla_evaluacion te INNER JOIN sacoolive3.profesor pr ON te.cod_doc=pr.codprofesor \n"
//					+ " WHERE pr.codprofesor='" + rs.getString("cod_doc") + "' AND te.cod_pla='" + rs.getString("cod_pla") + "' GROUP BY te.cod_pla ";
//				rs=st.executeQuery(sql);
//				String examen = "";
//				String notaEncuesta = "";
//				if (rs.next()) {
//					examen = rs.getString(1);
//					notaEncuesta = rs.getString(2);
//				}
//				
                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"));
                horario.setCodigoPlana(rs.getString("cod_pla"));
                horario.setCelularDocente(rs.getString("cel_dat_per"));
//				horario.setEstadoCambio(rs.getString("est_cambio"));
                horario.setCodigoReemplazo(rs.getInt("cod_rem"));
            }

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

                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 + "' and hr.est_hcd='1'";
                    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;

        System.out.println("cadenaTotal" + cadenaTotal);
        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 + "' and est_hcd='1' ";
                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 + "' and est_hcd='1' ";
                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 + "' and est_hcd='1'";
                    //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 + "'  and est_hcd='1'";
                        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 (codigoCurso.equals("61")) {

                                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 + "','4','" + periodo + "','" + codigoGrupo + "','" + clase + "','" + grupoAulas + "')";

                            } else {
                                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 + "','1','" + 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='1' 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 + "' ";
            System.out.println("Imprimiento el grupo de aulas---->" + querySelect);
            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;
        ResultSet rs0 = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String codAulas2 = codAulas.replace("#", ",");
            String[] array = codAulas2.split(",");
            for (String array1 : array) {
                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='" + array1 + "' and cod_cur='" + codCur + "' and cod_per='" + periodo + "'";
                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 periodo2 = 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','" + periodo2 + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'ELIMINADO',9)";
                    st.executeUpdate(queryHH1);
                }
            }

            String query = "DELETE FROM horario_curso_docente WHERE cod_cur='" + codCur + "' and cod_per='" + periodo + "' and codAula in (" + codAulas2 + ")";
            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 \n"
                    + "				  c.cod_pla,hcd.dia, s.cod_loc,hcd.cod_tur,\n"
                    + "				  s.des_loc,c.cod_cur,c.nom_cur,n.abrnivel,\n"
                    + "				  if(hcd.hor_ini < '14:30',1,2) turno, \n"
                    + "\n"
                    + "           IF(hcd.cod_tur=1,'M',IF(hcd.cod_tur=2,'T',IF(hcd.cod_tur=3,'N','X'))) AS desturno,\n"
                    + "\n"
                    + "				  GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) GTS \n"
                    + "				  from horario_curso_docente hcd \n"
                    + "				  inner join aula a on a.codaula = hcd.codAula \n"
                    + "				  inner join seccion se on se.codseccion = a.codseccion \n"
                    + "				  inner join grado g on g.codgrado = a.codgrado \n"
                    + "				  inner join sede s on s.cod_loc = a.codlocal \n"
                    + "           INNER JOIN curso c on c.cod_cur=hcd.cod_cur\n"
                    + "           INNER JOIN nivel n on n.codnivel=a.codnivel\n"
                    + "				  where hcd.est_hcd = 1 \n"
                    + "				  and hcd.cod_per = '" + periodo + "' \n"
                    + "				  and hcd.cod_doc = '" + codDocente + "' and hcd.est_hcd=1\n"
                    + "				  group by \n"
                    + "				  hcd.cod_doc, \n"
                    + "				  hcd.dia, \n"
                    + "				  s.des_loc,hcd.cod_cur, \n"
                    + "				  turno \n"
                    + "				  order by \n"
                    + "				  hcd.dia, \n"
                    + "				  turno";

            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("cod_loc"));
                horario.setNombreNivel(rs.getString("abrnivel"));
                horario.setCodigoPlana(rs.getString("cod_pla"));
                horario.setCodigoTurno(rs.getString("cod_tur"));
                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;
    }

    @Override
    public JSONObject listarVistaDobleDisponibilidad(JSONObject json) {
        JSONObject jReturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        String sql = "";

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String codigoZona = json.getString("codigoZona");

            if (codigoZona.equals("T")) {
                sql = "SELECT \n"
                        + "			   pr.codprofesor, \n"
                        + "			   CONCAT(pr.apellido, ', ', pr.nombre) nombreDoc, \n"
                        + "			    IFNULL(dat.cel_dat_per,'No registrado') as cel_dat_per,  \n"
                        + "			    IFNULL(dat.nom_dir,'No registrado') as nom_dir,  \n"
                        + "			    IFNULL(dat.cor_dat_per,'No registrado') as cor_dat_per,  \n"
                        + "			    IFNULL(u.nom_dis_ubi,'No registrado')as nom_dis_ubi,    \n"
                        + "				\n"
                        + "			   	dd.diaDis,dd.estDis, \n"
                        + "			   	te.pro_pla, \n"
                        + "			   	te.exa, \n"
                        + "			   	te.not_enc, \n"
                        + "			   	te.prom,dd.bloqueo,dd.diasSin,IF(te.puesto = \"\"  ,'No registrado',IFNULL(te.puesto,'No Registrado')) as puesto,IFNULL(te.observacion,'') as observacion,IFNULL(zona.nom_zon,'No registrado') as nom_zon \n"
                        + "			   FROM \n"
                        + "			   	plana_docente pd \n"
                        + "			   INNER JOIN sacoolive3.profesor pr ON pr.codprofesor = pd.cod_doc \n"
                        + "			   LEFT JOIN ( \n"
                        + "			   	SELECT \n"
                        + "			   		codDoc, \n"
                        + "			   		diaDis,bloqueo,diasSin,estDis \n"
                        + "			   	FROM \n"
                        + "			   		disponibilidad_docente \n"
                        + "			   	WHERE \n"
                        + "			   		estDis = 1 \n"
                        + "			   	AND cod_per = ? \n"
                        + "			   ) dd ON dd.codDoc = pd.cod_doc \n"
                        + "			   LEFT JOIN datos_docente dat ON dat.cod_doc = pr.codprofesor  \n"
                        + "			   LEFT JOIN ubigeo u ON u.cod_dep_ubi = dat.cod_dep \n"
                        + "			   AND u.cod_pro_ubi = dat.cod_prov \n"
                        + "			   AND u.cod_dis_ubi = dat.cod_dis LEFT JOIN zona_docente ON dat.cod_doc=zona_docente.cod_doc AND zona_docente.est_zon_doc = '1' LEFT JOIN zona ON zona_docente.cod_zon = zona.cod_zon\n"
                        + "			   LEFT JOIN ( \n"
                        + "			   SELECT \n"
                        + "			   te.cod_doc , \n"
                        + "			   te.pro_pla, \n"
                        + "			   	te.exa, \n"
                        + "			   	te.not_enc, \n"
                        + "			   	te.prom,te.puesto,te.observacion \n"
                        + "			   FROM tabla_evaluacion te \n"
                        + "			   INNER JOIN  encuesta_docente.encuesta enc \n"
                        + "			   ON enc.cod_enc = te.cod_enc \n"
                        + "			   where te.cod_enc  = (SELECT cod_enc FROM migracion LIMIT 1) and te.cod_pla = ? \n"
                        + "			     ) te ON te.cod_doc = pr.codprofesor \n"
                        + "			   WHERE \n"
                        + "			   	pr.estadoprofe = 'Y' \n"
                        + "			   AND pd.cod_pla = ? AND pd.cod_per=? and zona.cod_zon  IN (SELECT cod_zon FROM zona WHERE est_zon=1) and dd.estDis=1 \n"
                        + "			   GROUP BY \n"
                        + "			   	pr.codprofesor, \n"
                        + "			   	CONCAT(pr.apellido, ', ', pr.nombre), \n"
                        + "			   	dd.diaDis, \n"
                        + "			   	dat.cel_dat_per, \n"
                        + "			   	dat.nom_dir, \n"
                        + "			   	dat.cor_dat_per, \n"
                        + "			   	u.nom_dis_ubi, \n"
                        + "			   	te.pro_pla, \n"
                        + "			   	te.exa, \n"
                        + "			   	te.not_enc, \n"
                        + "			   	te.prom \n"
                        + "			   ORDER BY \n"
                        + "			   	nombreDoc ASC";

                pst = cn.prepareStatement(sql);
                System.out.println(pst);

                pst.setString(1, json.getString("codigoPeriodo"));
//			pst.setString(2, json.getString("codigoPeriodo"));
                pst.setString(2, json.getString("codigoPlana"));
                pst.setString(3, json.getString("codigoPlana"));
                pst.setString(4, json.getString("codigoPeriodo"));

            } else {

                sql = "SELECT \n"
                        + "			   pr.codprofesor, \n"
                        + "			   CONCAT(pr.apellido, ', ', pr.nombre) nombreDoc, \n"
                        + "			    IFNULL(dat.cel_dat_per,'No registrado') as cel_dat_per,  \n"
                        + "			    IFNULL(dat.nom_dir,'No registrado') as nom_dir,  \n"
                        + "			    IFNULL(dat.cor_dat_per,'No registrado') as cor_dat_per,  \n"
                        + "			    IFNULL(u.nom_dis_ubi,'No registrado')as nom_dis_ubi,    \n"
                        + "				\n"
                        + "			   	dd.diaDis, dd.estDis, \n"
                        + "			   	IFNULL(te.pro_pla,'No registrado')pro_pla, \n"
                        + "			   	IFNULL(te.exa,'No registrado')exa, \n"
                        + "			   	IFNULL(te.not_enc,'No registrado')not_enc, \n"
                        + "			   	te.prom,dd.bloqueo,dd.diasSin,IF(te.puesto = \"\"  ,'No registrado',IFNULL(te.puesto,'No Registrado')) as puesto,IFNULL(te.observacion,'') as observacion,IFNULL(zona.nom_zon,'No registrado') as nom_zon \n"
                        + "			   FROM \n"
                        + "			   	plana_docente pd \n"
                        + "			   INNER JOIN sacoolive3.profesor pr ON pr.codprofesor = pd.cod_doc \n"
                        + "			   LEFT JOIN ( \n"
                        + "			   	SELECT \n"
                        + "			   		codDoc, \n"
                        + "			   		diaDis,bloqueo,diasSin,estDis \n"
                        + "			   	FROM \n"
                        + "			   		disponibilidad_docente \n"
                        + "			   	WHERE \n"
                        + "			   		estDis = 1 \n"
                        + "			   	AND cod_per = ? \n"
                        + "			   ) dd ON dd.codDoc = pd.cod_doc \n"
                        + "			   LEFT JOIN datos_docente dat ON dat.cod_doc = pr.codprofesor  \n"
                        + "			   LEFT JOIN ubigeo u ON u.cod_dep_ubi = dat.cod_dep \n"
                        + "			   AND u.cod_pro_ubi = dat.cod_prov \n"
                        + "			   AND u.cod_dis_ubi = dat.cod_dis LEFT JOIN zona_docente ON dat.cod_doc=zona_docente.cod_doc AND zona_docente.est_zon_doc = '1' LEFT JOIN zona ON zona_docente.cod_zon = zona.cod_zon\n"
                        + "			   LEFT JOIN ( \n"
                        + "			   SELECT \n"
                        + "			   te.cod_doc , \n"
                        + "			   te.pro_pla, \n"
                        + "			   	te.exa, \n"
                        + "			   	te.not_enc, \n"
                        + "			   	te.prom,te.puesto,te.observacion \n"
                        + "			   FROM tabla_evaluacion te \n"
                        + "			   INNER JOIN  encuesta_docente.encuesta enc \n"
                        + "			   ON enc.cod_enc = te.cod_enc \n"
                        + "			   where te.cod_enc  = (SELECT cod_enc FROM migracion LIMIT 1) and te.cod_pla = ? \n"
                        + "			     ) te ON te.cod_doc = pr.codprofesor \n"
                        + "			   WHERE \n"
                        + "			   	pr.estadoprofe = 'Y' \n"
                        + "			   AND pd.cod_pla = ? AND pd.cod_per=? and zona.cod_zon=? and dd.estDis=1\n"
                        + "			   GROUP BY \n"
                        + "			   	pr.codprofesor, \n"
                        + "			   	CONCAT(pr.apellido, ', ', pr.nombre), \n"
                        + "			   	dd.diaDis, \n"
                        + "			   	dat.cel_dat_per, \n"
                        + "			   	dat.nom_dir, \n"
                        + "			   	dat.cor_dat_per, \n"
                        + "			   	u.nom_dis_ubi, \n"
                        + "			   	te.pro_pla, \n"
                        + "			   	te.exa, \n"
                        + "			   	te.not_enc, \n"
                        + "			   	te.prom \n"
                        + "			   ORDER BY \n"
                        + "			   	nombreDoc ASC";

                pst = cn.prepareStatement(sql);
                System.out.println(pst);

//		pst.setString(1, json.getString("codigoPeriodo"));
                pst.setString(1, json.getString("codigoPeriodo"));
                pst.setString(2, json.getString("codigoPlana"));
                pst.setString(3, json.getString("codigoPlana"));
                pst.setString(4, json.getString("codigoPeriodo"));
                pst.setString(5, json.getString("codigoZona"));

            }

            rs = pst.executeQuery();

            JSONArray arrayDocente = new JSONArray();
            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj
                        .put("codDocente", rs.getInt("codprofesor"))
                        .put("nombre", rs.getString("nombreDoc"))
                        .put("disponibilidad", rs.getString("diaDis"))
                        .put("celular", rs.getString("cel_dat_per"))
                        .put("direccion", rs.getString("nom_dir"))
                        .put("correo", rs.getString("cor_dat_per"))
                        
                        .put("promedioPlana", rs.getString("pro_pla"))
                        .put("examen", rs.getString("exa"))
                        .put("notaEncuesta", rs.getString("not_enc"))
                        
                        .put("promedio", rs.getString("prom"))
                        .put("distrito", rs.getString("nom_dis_ubi"))
                        .put("bloqueo", rs.getString("bloqueo"))
                        .put("diasin", rs.getString("diasSin"))
                        .put("puesto", rs.getString("puesto"))
                        .put("observacion", rs.getString("observacion"))
                        .put("zona", rs.getString("nom_zon"));
                
                    

                arrayDocente.put(obj);
            }

            for (Object objDocente : arrayDocente) {

                JSONObject docente = (JSONObject) objDocente;
                sql = "select tbl.dia,tbl.des_loc,tbl.turno,CONCAT(tbl.nom_cur,'-',tbl.aulas) aulas from  (\n"
                        + "                       select \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       if(hcd.hor_ini < '14:30',1,2) turno, c.nom_cur,\n"
                        + "                       GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) aulas \n"
                        + "                       from horario_curso_docente hcd \n"
                        + "                        inner join curso c on hcd.cod_cur=c.cod_cur\n"
                        + "                       inner join aula a on a.codaula = hcd.codAula \n"
                        + "                       inner join seccion se on se.codseccion = a.codseccion \n"
                        + "                       inner join grado g on g.codgrado = a.codgrado \n"
                        + "                       inner join sede s on s.cod_loc = a.codlocal\n"
                        + "                       where hcd.est_hcd = 1 \n"
                        + "                       and hcd.cod_per =  ?\n"
                        + "                       and hcd.cod_doc = ?\n"
                        + "                      \n"
                        + "                       group by \n"
                        + "                       hcd.cod_doc, \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       turno \n"
                        + "                       order by \n"
                        + "                       hcd.dia, \n"
                        + "                       turno \n"
                        + "                       ) tbl";
                pst = cn.prepareStatement(sql);

                pst.setString(1, json.getString("codigoPeriodo"));
                pst.setInt(2, docente.getInt("codDocente"));
//				pst.setString(3, String.join(",", arrayDias));

                rs = pst.executeQuery();
                JSONArray arrayAulas = new JSONArray();

                while (rs.next()) {
                    JSONObject jObj = new JSONObject();
                    jObj.put("dia", rs.getString("dia"));
                    jObj.put("sede", rs.getString("des_loc"));
                    jObj.put("turno", rs.getString("turno"));
                    jObj.put("aulas", rs.getString("aulas"));

                    arrayAulas.put(jObj);
                }
                docente.put("arrayAulas", arrayAulas);
            }

            jReturn
                    .put("data", arrayDocente)
                    .put("status", true);

        } catch (Exception e) {
            jReturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return jReturn;
    }

//	public static void main(String[] args) throws Exception {
////		List<String> prueba = new ArrayList<String>();
////		prueba.add("hola");
////		prueba.add("chau");
//
//
//		JSONObject json = new JSONObject();
//		json.put("codigoPeriodo", "20");
//		json.put("codigoProfesor", "1663");
//		JSONObject resp = new MySqlHorarioDAO().listarVistaHorarioDisponibilidad(json);
//		System.out.println("" + resp.toString());
//
//	}
    @Override
    public JSONObject listarVistaHorarioDisponibilidad(JSONObject json) throws Exception {
        JSONObject jReturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = ""
                    + "select "
                    + "pr.codprofesor, "
                    + "CONCAT(pr.apellido,', ',pr.nombre) nombreDoc, "
                    + "dat.cel_dat_per, "
                    + "dat.nom_dir, "
                    + "dat.cor_dat_per, "
                    + "u.nom_dis_ubi, "
                    + "dd.diaDis "
                    + "from sacoolive3.profesor pr "
                    + "left join ( "
                    + "	select codDoc,diaDis from disponibilidad_docente "
                    + "	where estDis = 1 "
                    + "	and cod_per = ? "
                    + ") dd on dd.codDoc = pr.codprofesor "
                    + "left join datos_docente dat on dat.cod_doc = pr.codprofesor "
                    + "left join ubigeo u on u.cod_dep_ubi = dat.cod_dep and u.cod_pro_ubi = dat.cod_prov and u.cod_dis_ubi = dat.cod_dis "
                    + "where pr.estadoprofe = 'Y' "
                    + "and pr.codprofesor = ? "
                    + "group by "
                    + "pr.codprofesor, "
                    + "CONCAT(pr.apellido,', ',pr.nombre), "
                    + "dd.diaDis, "
                    + "dat.cel_dat_per, "
                    + "dat.nom_dir, "
                    + "dat.cor_dat_per, "
                    + "u.nom_dis_ubi "
                    + "order by nombreDoc ASC ";
            pst = cn.prepareStatement(sql);

            System.out.println("" + sql);

            pst.setString(1, json.getString("codigoPeriodo"));
            pst.setString(2, json.getString("codigoProfesor"));

            rs = pst.executeQuery();

            JSONArray arrayDocente = new JSONArray();
            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj
                        .put("codDocente", rs.getInt("codprofesor"))
                        .put("nombre", rs.getString("nombreDoc"))
                        .put("disponibilidad", rs.getString("diaDis"))
                        .put("celular", rs.getString("cel_dat_per"))
                        .put("direccion", rs.getString("nom_dir"))
                        .put("correo", rs.getString("cor_dat_per"))
                        .put("distrito", rs.getString("nom_dis_ubi"));
                arrayDocente.put(obj);
            }

            for (Object objDocente : arrayDocente) {

                JSONObject docente = (JSONObject) objDocente;
                sql = "select tbl.dia,tbl.des_loc,tbl.turno,CONCAT(tbl.nom_cur,'-',tbl.aulas) aulas from  (   \n" +
"                                          select  \n" +
"                                          hcd.dia,  \n" +
"                                          s.des_loc,  \n" +
"                                          if(hcd.hor_ini < '14:30',1,2) turno, c.nom_cur,   \n" +
"                                          GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) aulas  \n" +
"                                          from horario_curso_docente hcd  \n" +
"                                           inner join curso c on hcd.cod_cur=c.cod_cur   \n" +
"                                          inner join aula a on a.codaula = hcd.codAula  \n" +
"                                          inner join seccion se on se.codseccion = a.codseccion  \n" +
"                                          inner join grado g on g.codgrado = a.codgrado  \n" +
"                                          inner join sede s on s.cod_loc = a.codlocal   \n" +
"                                          where hcd.est_hcd = 1  \n" +
"                                          and hcd.cod_per = ?\n" +
"                                          and hcd.cod_doc =   ?\n" +
"                                          \n" +
"                                          group by  \n" +
"                                          hcd.cod_doc,  \n" +
"                                          hcd.dia,  \n" +
"                                          s.des_loc,  \n" +
"                                          turno  \n" +
"                                          order by  \n" +
"                                          hcd.dia,  \n" +
"                                          turno  \n" +
"                                          ) tbl";
                       
                pst = cn.prepareStatement(sql);

                pst.setString(1, json.getString("codigoPeriodo"));
                pst.setInt(2, docente.getInt("codDocente"));
//				pst.setString(3, String.join(",", arrayDias));

                rs = pst.executeQuery();
                JSONArray arrayAulas = new JSONArray();

                while (rs.next()) {
                    JSONObject jObj = new JSONObject();
                    jObj.put("dia", rs.getString("dia"));
                    jObj.put("sede", rs.getString("des_loc"));
                    jObj.put("turno", rs.getString("turno"));
                    jObj.put("aulas", rs.getString("aulas"));

                    arrayAulas.put(jObj);
                }
                docente.put("arrayAulas", arrayAulas);
            }

            jReturn
                    .put("data", arrayDocente)
                    .put("status", true);

        } catch (Exception e) {
            jReturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return jReturn;
    }

    @Override
    public JSONObject listarVistaHorarioConformidad(JSONObject json) throws Exception {
        JSONObject jReturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = "select \n"
                    + "				 pr.codprofesor,  \n"
                    + "				 CONCAT(pr.apellido,', ',pr.nombre) nombreDoc,  \n"
                    + "				 dat.cel_dat_per,  \n"
                    + "				 dat.nom_dir,  \n"
                    + "				 dat.cor_dat_per,  \n"
                    + "				 u.nom_dis_ubi,  \n"
                    + "				 dd.diasConf\n"
                    + "				 from sacoolive3.profesor pr  \n"
                    + "				 left join (  \n"
                    + "				 	select cod_doc,diasConf from conformidad  \n"
                    + "				 	 where   \n"
                    + "				 	 cod_per = ?  \n"
                    + "				 ) dd on dd.cod_doc = pr.codprofesor  \n"
                    + "				 left join datos_docente dat on dat.cod_doc = pr.codprofesor  \n"
                    + "				 left join ubigeo u on u.cod_dep_ubi = dat.cod_dep and u.cod_pro_ubi = dat.cod_prov and u.cod_dis_ubi = dat.cod_dis  \n"
                    + "				 where pr.estadoprofe = 'Y'  \n"
                    + "				 and pr.codprofesor = ?  \n"
                    + "				 group by  \n"
                    + "				 pr.codprofesor,  \n"
                    + "				 CONCAT(pr.apellido,', ',pr.nombre),  \n"
                    + "				 dd.diasConf,  \n"
                    + "				 dat.cel_dat_per,  \n"
                    + "				 dat.nom_dir,  \n"
                    + "				 dat.cor_dat_per,  \n"
                    + "				 u.nom_dis_ubi  \n"
                    + "				 order by nombreDoc ASC";
            pst = cn.prepareStatement(sql);

            System.out.println("" + sql);

            pst.setString(1, json.getString("codigoPeriodo"));
            pst.setString(2, json.getString("codigoProfesor"));

            rs = pst.executeQuery();

            JSONArray arrayDocente = new JSONArray();
            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj
                        .put("codDocente", rs.getInt("codprofesor"))
                        .put("nombre", rs.getString("nombreDoc"))
                        .put("disponibilidad", rs.getString("diasConf"))
                        .put("celular", rs.getString("cel_dat_per"))
                        .put("direccion", rs.getString("nom_dir"))
                        .put("correo", rs.getString("cor_dat_per"))
                        .put("distrito", rs.getString("nom_dis_ubi"));
                arrayDocente.put(obj);
            }

            for (Object objDocente : arrayDocente) {

                JSONObject docente = (JSONObject) objDocente;
                sql = ""
                        + "select "
                        + "hcd.dia, "
                        + "s.des_loc, "
                        + "if(hcd.hor_ini < '14:30',1,2) turno, "
                        + "GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) aulas "
                        + "from horario_curso_docente hcd "
                        + "inner join aula a on a.codaula = hcd.codAula "
                        + "inner join seccion se on se.codseccion = a.codseccion "
                        + "inner join grado g on g.codgrado = a.codgrado "
                        + "inner join sede s on s.cod_loc = a.codlocal "
                        + "where hcd.est_hcd = 1 "
                        + "and hcd.cod_per = ? "
                        + "and hcd.cod_doc = ? "
                        //					+ "and hcd.dia in (?) "
                        + "group by "
                        + "hcd.cod_doc, "
                        + "hcd.dia, "
                        + "s.des_loc, "
                        + "turno "
                        + "order by "
                        + "hcd.dia, "
                        + "turno";
                pst = cn.prepareStatement(sql);

                pst.setString(1, json.getString("codigoPeriodo"));
                pst.setInt(2, docente.getInt("codDocente"));
//				pst.setString(3, String.join(",", arrayDias));

                rs = pst.executeQuery();
                JSONArray arrayAulas = new JSONArray();

                while (rs.next()) {
                    JSONObject jObj = new JSONObject();
                    jObj.put("dia", rs.getString("dia"));
                    jObj.put("sede", rs.getString("des_loc"));
                    jObj.put("turno", rs.getString("turno"));
                    jObj.put("aulas", rs.getString("aulas"));

                    arrayAulas.put(jObj);
                }
                docente.put("arrayAulas", arrayAulas);
            }

            jReturn
                    .put("data", arrayDocente)
                    .put("status", true);

        } catch (Exception e) {
            jReturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return jReturn;
    }

    @Override
    public JSONObject listarVistaHorarioDocenteDni(JSONObject json) throws Exception {
        JSONObject jreturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = "select codprofesor from sacoolive3.profesor where dni = ?";
            pst = cn.prepareStatement(sql);
            pst.setString(1, json.getString("dniDocente"));
            rs = pst.executeQuery();
            String codigoDocente = "";
            while (rs.next()) {
                codigoDocente = rs.getString(1);
            }
            JSONArray arrayPeriodo = new JSONArray();
            sql = ""
                    + "SELECT hc.cod_per,pa.nom_per FROM horario_curso_docente hc "
                    + "INNER JOIN sacoolive3.profesor p ON hc.cod_doc=p.codprofesor "
                    + "INNER JOIN periodo_academico pa ON hc.cod_per=pa.cod_per "
                    + "WHERE p.codprofesor=? and hc.est_hcd=1 "
                    + "AND pa.nom_per != 'REGULAR 2020 I' OR hc.cod_per != 24 "
                    + "GROUP BY hc.cod_per,pa.nom_per ORDER BY hc.cod_per DESC ";

            pst = cn.prepareStatement(sql);
            pst.setString(1, codigoDocente);
            rs = pst.executeQuery();

            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj.put("codigoPeriodo", rs.getString("cod_per"));
                obj.put("nombrePeriodo", rs.getString("nom_per"));
                arrayPeriodo.put(obj);
            }

            jreturn
                    .put("data", arrayPeriodo)
                    .put("codigoDocente", codigoDocente)
                    .put("status", true);

        } catch (Exception e) {
            jreturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return jreturn;
    }

    @Override
    public JSONObject listarVistaHorarioDocenteDni2(JSONObject json) throws Exception {
        JSONObject jreturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = "select codprofesor from sacoolive3.profesor where dni = ?";
            pst = cn.prepareStatement(sql);

            System.out.println("" + sql);

            pst.setString(1, json.getString("dniDocente"));

            rs = pst.executeQuery();

            String codigoDocente = "";
            while (rs.next()) {
                codigoDocente = rs.getString(1);
            }
            JSONArray arrayPeriodo = new JSONArray();
            sql = ""
                    + "SELECT hc.cod_per,pa.nom_per FROM horario_curso_docente hc "
                    + "INNER JOIN sacoolive3.profesor p ON hc.cod_doc=p.codprofesor "
                    + "INNER JOIN periodo_academico pa ON hc.cod_per=pa.cod_per "
                    + "WHERE p.codprofesor=? and hc.est_hcd=1 "
                    + "GROUP BY hc.cod_per,pa.nom_per ORDER BY hc.cod_per DESC LIMIT 1";

            pst = cn.prepareStatement(sql);
            pst.setString(1, codigoDocente);
            rs = pst.executeQuery();

            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj.put("codigoPeriodo", rs.getString("cod_per"));
                obj.put("nombrePeriodo", rs.getString("nom_per"));
                arrayPeriodo.put(obj);
            }

            jreturn
                    .put("data", arrayPeriodo)
                    .put("codigoDocente", codigoDocente)
                    .put("status", true);

        } catch (Exception e) {
            jreturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return jreturn;
    }

    @Override
    public Horario verDocenteExamenEncuesta(String codigoDocente, String codigoPlana) throws Exception {
        String base = "horario";
        Connection cnx = null;
        ResultSet rs = null;
        PreparedStatement pst = null;
        Horario horario = new Horario();
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            String query = "SELECT \n"
                    + "	te.not_enc,\n"
                    + "	dd.cel_dat_per\n"
                    + "FROM\n"
                    + "	tabla_evaluacion te\n"
                    + "INNER JOIN sacoolive3.profesor pr ON te.cod_doc = pr.codprofesor\n"
                    + "LEFT JOIN datos_docente dd ON pr.codprofesor = dd.cod_doc\n"
                    + "WHERE\n"
                    + "	pr.codprofesor = ?\n"
                    + "AND te.cod_pla = ?\n"
                    + "\n"
                    + "ORDER BY\n"
                    + "	te.cod_enc DESC\n"
                    + "LIMIT 1";

            pst = cnx.prepareStatement(query);
            pst.setString(1, codigoDocente);
            pst.setString(2, codigoPlana);

//           
            rs = pst.executeQuery();

            while (rs.next()) {
                horario.setExamen(rs.getString(1));
                horario.setCelularDocente(rs.getString(2));
//				
            }

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

        return horario;
    }

    @Override
    public Horario verDocenteCelular(String codigoDocente) throws Exception {
        String base = "horario";
        Connection cnx = null;
        ResultSet rs = null;
        PreparedStatement pst = null;
        Horario horario = new Horario();
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            String query = "SELECT\n"
                    + "		\n"
                    + "			 	dd.cel_dat_per  \n"
                    + "			 FROM  \n"
                    + "			 	datos_docente dd  \n"
                    + "			 INNER JOIN sacoolive3.profesor pr ON dd.cod_doc = pr.codprofesor  \n"
                    + "\n"
                    + "			 WHERE  \n"
                    + "			 	dd.cod_doc  = " + codigoDocente + " ";

            pst = cnx.prepareStatement(query);
//			pst.setString(1, codigoDocente);

//           
            rs = pst.executeQuery();

            if (rs.next()) {

                horario.setCelularDocente(rs.getString(1));
//				
            }

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

        return horario;
    }

    public static void main(String[] args) {

    }

    @Override
    public int updateCambioCurso(String codigoAula, String periodo, String dia, String posBloque, String nombreCursoNuevo) throws Exception {
        int retorno = 0;
        String base = "horario";
        Connection cnx = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        String codigoCursoNuevo = "";
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            String query = "select cod_cur from curso where nom_cur='" + nombreCursoNuevo + "'";
            System.out.println("query --> 1 " + query);
            pst = cnx.prepareStatement(query);
            rs = pst.executeQuery();

            while (rs.next()) {
                codigoCursoNuevo = rs.getString("cod_cur");
            }

            String query2 = "update horario_curso_docente set cod_cur='" + codigoCursoNuevo + "'\n"
                    + "WHERE \n"
                    + "codAula='" + codigoAula + "' and\n"
                    + "cod_per='" + periodo + "' and \n"
                    + "dia='" + dia + "' and\n"
                    + "pos_blo='" + posBloque + "' AND\n"
                    + "est_hcd=1";
            System.out.println("query --> 2 " + query2);
            retorno = pst.executeUpdate(query2);

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

        return retorno;
    }

    @Override
    public int updateDisponibilidad(String codDocente, String periodo, String turno, String dia) throws Exception {
        int retorno = 0;
        String base = "horario";
        Connection cnx = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            String querySelect = "SELECT codDis FROM disponibilidad_docente where codDoc='" + codDocente + "'\n"
                    + " and cod_per='" + periodo + "' and diaDis like '%" + turno + "#" + dia + "%'";
            pst = cnx.prepareStatement(querySelect);
            rs = pst.executeQuery();

            if (rs.next()) {
                String queryUpdate = "update disponibilidad_docente set diaDis = REPLACE(diaDis,'" + turno + "#" + dia + "','') \n"
                        + "where codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                pst = cnx.prepareStatement(queryUpdate);
                retorno = pst.executeUpdate();

                String query = "update disponibilidad_docente set bloqueo=CONCAT(bloqueo,'-" + turno + "#" + dia + "') WHERE codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                System.out.println("query update bloqueo -->  " + query);
                pst = cnx.prepareStatement(query);

                retorno = pst.executeUpdate();
                System.out.println("devolucion-->" + retorno);

            } else {

                String query = "update disponibilidad_docente set diasSin=CONCAT(diasSin,'-" + turno + "#" + dia + "') WHERE codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                System.out.println("query update diasSin -->  " + query);
                pst = cnx.prepareStatement(query);

                retorno = pst.executeUpdate();
                System.out.println("devolucion-->" + retorno);

            }

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

        return retorno;
    }

    @Override
    public int rollbackDisponibilidad(String codDocente, String periodo, String turno, String dia) throws Exception {
        int retorno = 0;
        String base = "horario";
        Connection cnx = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);

            String querySelect = "SELECT codDis FROM disponibilidad_docente where codDoc='" + codDocente + "'\n"
                    + " and cod_per='" + periodo + "' and bloqueo like '%" + turno + "#" + dia + "%'";
            pst = cnx.prepareStatement(querySelect);
            rs = pst.executeQuery();

            if (rs.next()) {

                String queryUpdate = "update disponibilidad_docente set bloqueo = REPLACE(bloqueo,'" + turno + "#" + dia + "','') \n"
                        + "where codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                pst = cnx.prepareStatement(queryUpdate);
                retorno = pst.executeUpdate();

                String query = "update disponibilidad_docente set diaDis=CONCAT(diaDis,'-" + turno + "#" + dia + "') WHERE codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                System.out.println("query update diaDis -->  " + query);
                pst = cnx.prepareStatement(query);

                retorno = pst.executeUpdate();
                System.out.println("devolucion-->" + retorno);
                int verde = 3;
                retorno = verde;

            } else {

                String querySelect2 = "SELECT codDis FROM disponibilidad_docente where codDoc='" + codDocente + "'\n"
                        + " and cod_per='" + periodo + "' and diasSin like '%" + turno + "#" + dia + "%'";
                pst = cnx.prepareStatement(querySelect2);
                rs = pst.executeQuery();

                if (rs.next()) {

                    String queryTwo = "update disponibilidad_docente set diasSin=REPLACE(diasSin,'" + turno + "#" + dia + "','') WHERE codDoc='" + codDocente + "' and cod_per='" + periodo + "'";
                    System.out.println("query update bloqueo -->  " + queryTwo);
                    pst = cnx.prepareStatement(queryTwo);

                    retorno = pst.executeUpdate();
                    System.out.println("devolucion-->" + retorno);
                    int rojo = 2;
                    retorno = rojo;
                }
            }

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

    }

    @Override
    public int registroInforme(String argumento, String motivo, String codigoDocente, String nombreDocente, String nombreSede, String codigoSede) throws Exception {
        int retorno = 0;
        String base = "horario";
        Connection cnx = null;
        PreparedStatement pst = null;

        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            String queryTwo = "INSERT INTO informe (cod_doc,nom_doc,mot_int,arg_inf,cod_sed,nom_sed,fec_inf,res_inf,est_int)"
                    + "VALUES ('" + codigoDocente + "','" + nombreDocente + "','" + motivo + "','" + argumento + "'," + codigoSede + ",'" + nombreSede + "',NOW(),'0','1')";
            System.out.println("query insert informe -->  " + queryTwo);
            pst = cnx.prepareStatement(queryTwo);

            retorno = pst.executeUpdate();
            System.out.println("devolucion-->" + retorno);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return retorno;
    }

    @Override
    public JSONObject registrarConformidad(JSONObject object, String codDocente, String codPeriodo) throws Exception {
        JSONObject obj = new JSONObject();
        Connection cnx = null;
        String base = "horario";
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
//		 JSONArray jsonArray = new JSONArray(object);
            for (int i = 0; i < object.length(); i++) {
                String query = "INSERT INTO conformidad (cod_doc,cod_per,turno,sede,dia,aulas) VALUES('" + codDocente + "'," + codPeriodo + ")";
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return obj;
    }

    @Override
    public JSONObject listarVistaDobleDisponibilidad2(JSONObject json) {
        JSONObject jReturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = ""
                    + "SELECT "
                    + "	pr.codprofesor, "
                    + "	CONCAT(pr.apellido, ', ', pr.nombre) nombreDoc, "
                    + "	if(dat.cel_dat_per = '0','No registrado',COALESCE(dat.cel_dat_per, '')) cel_dat_per, "
                    + "	COALESCE(dat.nom_dir,'') nom_dir, "
                    + " COALESCE(dat.cor_dat_per,'')cor_dat_per, "
                    + "	COALESCE(u.nom_dis_ubi,'')nom_dis_ubi, "
                    + " COALESCE(dd.diaDis,'' ) diaDis, "
                    + "	te.pro_pla, "
                    + "	te.exa, "
                    + "	te.not_enc, "
                    + "	te.prom "
                    + "FROM "
                    + "	plana_docente pd "
                    + "INNER JOIN sacoolive3.profesor pr ON pr.codprofesor = pd.cod_doc "
                    + "LEFT JOIN ( "
                    + "	SELECT "
                    + "		codDoc, "
                    + "		diaDis "
                    + "	FROM "
                    + "		disponibilidad_docente "
                    + "	WHERE "
                    + "		estDis = 1 "
                    + "	AND cod_per = ? "
                    + ") dd ON dd.codDoc = pd.cod_doc "
                    + "INNER JOIN datos_docente dat ON dat.cod_doc = pr.codprofesor "
                    + "INNER JOIN ubigeo u ON u.cod_dep_ubi = dat.cod_dep "
                    + "AND u.cod_pro_ubi = dat.cod_prov "
                    + "AND u.cod_dis_ubi = dat.cod_dis "
                    + "LEFT JOIN ( "
                    + "SELECT "
                    + "te.cod_doc , "
                    + "te.pro_pla, "
                    + "	te.exa, "
                    + "	te.not_enc, "
                    + "	te.prom "
                    + "FROM tabla_evaluacion te "
                    + "INNER JOIN  encuesta_docente.encuesta enc "
                    + "ON enc.cod_enc = te.cod_enc "
                    + "where enc.cod_per = ? and te.cod_pla = ? "
                    + "  ) te ON te.cod_doc = pr.codprofesor "
                    + "WHERE "
                    + "	pr.estadoprofe = 'Y' "
                    + "AND pd.cod_pla = ? "
                    + "GROUP BY "
                    + "	pr.codprofesor, "
                    + "	CONCAT(pr.apellido, ', ', pr.nombre), "
                    + "	dd.diaDis, "
                    + "	dat.cel_dat_per, "
                    + "	dat.nom_dir, "
                    + "	dat.cor_dat_per, "
                    + "	u.nom_dis_ubi, "
                    + "	te.pro_pla, "
                    + "	te.exa, "
                    + "	te.not_enc, "
                    + "	te.prom "
                    + "ORDER BY "
                    + "	nombreDoc ASC ";

            pst = cn.prepareStatement(sql);
            System.out.println(sql);

            pst.setString(1, json.getString("codigoPeriodo2"));
            pst.setString(2, json.getString("codigoPeriodo2"));
            pst.setString(3, json.getString("codigoPlana"));
            pst.setString(4, json.getString("codigoPlana"));

            rs = pst.executeQuery();

            JSONArray arrayDocente = new JSONArray();
            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj
                        .put("codDocente", rs.getInt("codprofesor"))
                        .put("nombre", rs.getString("nombreDoc"))
                        .put("disponibilidad", rs.getString("diaDis"))
                        .put("celular", rs.getString("cel_dat_per"))
                        .put("direccion", rs.getString("nom_dir"))
                        .put("correo", rs.getString("cor_dat_per"))
                        .put("promedioPlana", rs.getString("pro_pla"))
                        .put("examen", rs.getString("exa"))
                        .put("notaEncuesta", rs.getString("not_enc"))
                        .put("promedio", rs.getString("prom"))
                        .put("distrito", rs.getString("nom_dis_ubi"));

                arrayDocente.put(obj);
            }

            for (Object objDocente : arrayDocente) {

                JSONObject docente = (JSONObject) objDocente;
                sql = "select tbl.dia,tbl.des_loc,tbl.turno,CONCAT(tbl.nom_cur,'-',tbl.aulas) aulas from  (\n"
                        + "                       select \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       if(hcd.hor_ini < '14:30',1,2) turno, c.nom_cur,\n"
                        + "                       GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) aulas \n"
                        + "                       from horario_curso_docente hcd \n"
                        + "                        inner join curso c on hcd.cod_cur=c.cod_cur\n"
                        + "                       inner join aula a on a.codaula = hcd.codAula \n"
                        + "                       inner join seccion se on se.codseccion = a.codseccion \n"
                        + "                       inner join grado g on g.codgrado = a.codgrado \n"
                        + "                       inner join sede s on s.cod_loc = a.codlocal\n"
                        + "                       where hcd.est_hcd = 1 \n"
                        + "                       and hcd.cod_per =  ?\n"
                        + "                       and hcd.cod_doc = ?\n"
                        + "                      \n"
                        + "                       group by \n"
                        + "                       hcd.cod_doc, \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       turno \n"
                        + "                       order by \n"
                        + "                       hcd.dia, \n"
                        + "                       turno \n"
                        + "                       ) tbl";
                pst = cn.prepareStatement(sql);

                pst.setString(1, json.getString("codigoPeriodo2"));
                pst.setInt(2, docente.getInt("codDocente"));
//				pst.setString(3, String.join(",", arrayDias));

                rs = pst.executeQuery();
                JSONArray arrayAulas = new JSONArray();

                while (rs.next()) {
                    JSONObject jObj = new JSONObject();
                    jObj.put("dia", Objects.toString(rs.getString("dia"), ""));
                    jObj.put("sede", rs.getString("des_loc"));
                    jObj.put("turno", rs.getString("turno"));
                    jObj.put("aulas", rs.getString("aulas"));

                    arrayAulas.put(jObj);
                }
                docente.put("arrayAulas", arrayAulas);
            }

            jReturn
                    .put("data", arrayDocente)
                    .put("status", true);

        } catch (Exception e) {
            jReturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return jReturn;
    }

    @Override
    public JSONObject listarVistaDobleDisponibilidadSinZona(JSONObject json) {
        JSONObject jReturn = new JSONObject();
        Connection cn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cn = MySqlDAOFactory.obtenerConexion("horario");
            String sql = "select tbl.codprofesor,tbl.nombreDoc,tbl.cel_dat_per,tbl.nom_dir,tbl.cor_dat_per,tbl.nom_dis_ubi,\n"
                    + "      tbl.diaDis,tbl.bloqueo,tbl.diasSin,tbl.puesto,tbl.observacion,tbl.promedioPlana,tbl.examenNota,tbl.notaEncuesta,tbl.promedio from (SELECT  \n"
                    + "  	   pr.codprofesor,  \n"
                    + "  	   CONCAT(pr.apellido, ', ', pr.nombre) nombreDoc,  \n"
                    + "  	    IFNULL(dat.cel_dat_per,'No registrado') as cel_dat_per,   \n"
                    + "  	    IFNULL(dat.nom_dir,'No registrado') as nom_dir,   \n"
                    + "  	    IFNULL(dat.cor_dat_per,'No registrado') as cor_dat_per,   \n"
                    + "  	    IFNULL(u.nom_dis_ubi,'No registrado')as nom_dis_ubi,     \n"
                    + "  		 \n"
                    + "  	   	if(dd.diaDis like '%---','',dd.diaDis) diaDis,  \n"
                    + "  	    IF(dd.bloqueo = \"\",'vacio',dd.bloqueo)bloqueo,\n"
                    + "        IF(dd.diasSin = \"\",'vacio',dd.diasSin)diasSin,\n"
                    + "        IF(te.puesto = \"\"  ,'No registrado',IFNULL(te.puesto,'No Registrado')) as puesto,\n"
                    + "        IFNULL(te.observacion,'') as observacion,dd.estDis,IF(pd.cod_pla in (1,2,3,4,5,7,8,9,11) and pr.codprofesor in (3007,1605,2046,2860,2288,3048,2965,2986,3005,2862,3070,1845,3057,1397,2969,2719,3200,2909,"
                    + "2984,3083,3047,2992,1265,2998,2803,2830,309,1566,1275,2610,1526,2864,2920,3165,2997,1604,2527,2983,1146,1855,1526,2946,2824,3128,3066,641,842,2217,2624,3128,2994,1418,83,2766,1526,2809,1452),1,0) excepcion,\n"
                    
                    + "   IFNULL(te.pro_pla,'No registrado') as promedioPlana,  \n"
                    + "   IFNULL(te.exa,'No registrado') as examenNota,  \n"
                    + "   IFNULL(te.not_enc,'No registrado')as notaEncuesta,  \n" 
                    + "   IFNULL(te.prom,'No registrado') as promedio  \n"
                    + "  	   FROM  \n"
                    + "  	   	plana_docente pd  \n"
                    + "  	   INNER JOIN sacoolive3.profesor pr ON pr.codprofesor = pd.cod_doc  \n"
                    + "  	   LEFT JOIN (  \n"
                    + "  	   	SELECT  \n"
                    + "  	   		codDoc,  \n"
                    + "  	   		diaDis,bloqueo,diasSin,estDis  \n"
                    + "  	   	FROM  \n"
                    + "  	   		disponibilidad_docente  \n"
                    + "  	   	WHERE  \n"
                    + "  	   		estDis = 1  \n"
                    + "  	   	AND cod_per = ?  \n"
                    + "  	   ) dd ON dd.codDoc = pd.cod_doc  \n"
                    + "  	   LEFT JOIN datos_docente dat ON dat.cod_doc = pr.codprofesor   \n"
                    + "  	   LEFT JOIN ubigeo u ON u.cod_dep_ubi = dat.cod_dep  \n"
                    + "  	   AND u.cod_pro_ubi = dat.cod_prov  \n"
                    + "  	   AND u.cod_dis_ubi = dat.cod_dis \n"
                    + "\n"
                    + "  	   LEFT JOIN (  \n"
                    + "  	   SELECT  \n"
                    + "  	   te.cod_doc ,  \n"
                    + "  	   te.pro_pla,  \n"
                    + "  	   	te.exa,  \n"
                    + "  	   	te.not_enc,  \n"
                    + "  	   	te.prom,te.puesto,te.observacion  \n"
                    + "  	   FROM tabla_evaluacion te  \n"
                    + "  	   INNER JOIN  encuesta_docente.encuesta enc  \n"
                    + "  	   ON enc.cod_enc = te.cod_enc  \n"
                    + "  	   where te.cod_enc  = (SELECT cod_enc FROM migracion LIMIT 1) and te.cod_pla = ?\n"
                    + "  	     ) te ON te.cod_doc = pr.codprofesor  \n"
                    + "  	   WHERE  \n"
                    + "  	   	pr.estadoprofe = 'Y'  \n"
                    + "  	   AND pd.cod_pla = ? AND pd.cod_per=? \n"
                    + "  	   GROUP BY  \n"
                    + "  	   	pr.codprofesor,  \n"
                    + "  	   	CONCAT(pr.apellido, ', ', pr.nombre),  \n"
                    + "  	   	dd.diaDis,  \n"
                    + "  	   	dat.cel_dat_per,  \n"
                    + "  	   	dat.nom_dir,  \n"
                    + "  	   	dat.cor_dat_per,  \n"
                    + "  	   	u.nom_dis_ubi,  \n"
                    + "  	   	te.pro_pla,  \n"
                    + "  	   	te.exa,  \n"
                    + "  	   	te.not_enc,  \n"
                    + "  	   	te.prom  \n"
                    + "  	   ORDER BY  \n"
                    + "  	   	nombreDoc ASC ) tbl where tbl.excepcion = 0 and tbl.estDis = 1";

            pst = cn.prepareStatement(sql);
            System.out.println(sql);

            pst.setString(1, json.getString("codigoPeriodo2"));
            pst.setString(2, json.getString("codigoPlana"));
            pst.setString(3, json.getString("codigoPlana"));
            pst.setString(4, json.getString("codigoPeriodo2"));

            rs = pst.executeQuery();
          
            JSONArray arrayDocente = new JSONArray();
            while (rs.next()) {
                JSONObject obj = new JSONObject();
                obj
                        .put("codDocente", rs.getInt("codprofesor"))
                        .put("nombre", rs.getString("nombreDoc"))
                        .put("disponibilidad", rs.getString("diaDis"))
                        .put("celular", rs.getString("cel_dat_per"))
                        .put("direccion", rs.getString("nom_dir"))
                        .put("correo", rs.getString("cor_dat_per"))
                        .put("observacion", rs.getString("observacion"))
                        .put("diasin", rs.getString("diasSin"))
                        .put("diaDis", rs.getString("diaDis"))
                        .put("bloqueo", rs.getString("bloqueo"))
                        .put("puesto", rs.getString("puesto"))
                        .put("distrito", rs.getString("nom_dis_ubi"))
                        .put("promedioPlana", rs.getString("promedioPlana"))
                        .put("examenNota", rs.getString("examenNota"))
                        .put("notaEncuesta", rs.getString("notaEncuesta"))
                        .put("promedio", rs.getString("promedio"));
             
                        

                arrayDocente.put(obj);
            }
        

            for (Object objDocente : arrayDocente) {

                JSONObject docente = (JSONObject) objDocente;
                sql = "select tbl.dia,tbl.des_loc,tbl.turno,CONCAT(tbl.nom_cur,'-',tbl.aulas) aulas from  (\n"
                        + "                       select \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       if(hcd.hor_ini < '14:30',1,2) turno, c.nom_cur,\n"
                        + "                       GROUP_CONCAT(CONCAT(g.abrGrado,'-',a.nombre)) aulas \n"
                        + "                       from horario_curso_docente hcd \n"
                        + "                        inner join curso c on hcd.cod_cur=c.cod_cur\n"
                        + "                       inner join aula a on a.codaula = hcd.codAula \n"
                        + "                       inner join seccion se on se.codseccion = a.codseccion \n"
                        + "                       inner join grado g on g.codgrado = a.codgrado \n"
                        + "                       inner join sede s on s.cod_loc = a.codlocal\n"
                        + "                       where hcd.est_hcd = 1 \n"
                        + "                       and hcd.cod_per =  ?\n"
                        + "                       and hcd.cod_doc = ?\n"
                        + "                      \n"
                        + "                       group by \n"
                        + "                       hcd.cod_doc, \n"
                        + "                       hcd.dia, \n"
                        + "                       s.des_loc, \n"
                        + "                       turno \n"
                        + "                       order by \n"
                        + "                       hcd.dia, \n"
                        + "                       turno \n"
                        + "                       ) tbl";
                pst = cn.prepareStatement(sql);

                pst.setString(1, json.getString("codigoPeriodo2"));
                pst.setInt(2, docente.getInt("codDocente"));
//				pst.setString(3, String.join(",", arrayDias));

                rs = pst.executeQuery();
                JSONArray arrayAulas = new JSONArray();

                while (rs.next()) {
                    JSONObject jObj = new JSONObject();
                    jObj.put("dia", Objects.toString(rs.getString("dia"), ""));
                    jObj.put("sede", rs.getString("des_loc"));
                    jObj.put("turno", rs.getString("turno"));
                    jObj.put("aulas", rs.getString("aulas"));

                    arrayAulas.put(jObj);
                }
                docente.put("arrayAulas", arrayAulas);
            }

            jReturn
                    .put("data", arrayDocente)
                    .put("status", true);

        } catch (Exception e) {
            jReturn
                    .put("status", false)
                    .put("message", e.getMessage());
        } finally {
            try {
                if (cn != null) {
                    cn.close();
                }
                if (pst != null) {
                    pst.close();
                }
            } catch (SQLException ex) {
                Logger.getLogger(MySqlHorarioDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return jReturn;
    }

    @Override
    public int insertarNuevaHoras(JSONObject json) throws Exception {
        int dato = 0;
        Connection cnx = null;
        String base = "horario";
        Statement pst = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            pst = cnx.createStatement();

            String query = "update horario_curso_docente set hor_ini='" + json.getString("horaInicio") + "', hor_fin='" + json.getString("horaFin") + "',est_cambio='2' where codAula='" + json.getInt("codaula") + "' and cod_per='" + json.getInt("periodo") + "' and pos_blo='" + json.getInt("posicion") + "'"
                    + " and dia ='" + json.getInt("dia") + "'";
            System.out.println("query update horas " + query);
            dato = pst.executeUpdate(query);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cnx != null) {
                cnx.close();
            }
        }

        return dato;
    }

    @Override
    public JSONObject mostrarNuevaHoras(JSONObject json) throws Exception {
        JSONObject jReturn = new JSONObject();
        Connection cnx = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            cnx = MySqlDAOFactory.obtenerConexion("horario");
            String query = "SELECT hor_ini,hor_fin FROM horario_curso_docente WHERE codAula='" + json.getInt("codAula") + "' "
                    + "and dia='" + json.getInt("dia") + "' and pos_blo='" + json.getInt("posicion") + "' and cod_per='" + json.getInt("periodo") + "'";
            pst = cnx.prepareStatement(query);

            rs = pst.executeQuery();

            JSONArray arrayHora = new JSONArray();
            while (rs.next()) {
                JSONObject jObj = new JSONObject();
                jObj.put("hor_ini", rs.getString("hor_ini"));
                jObj.put("hor_fin", rs.getString("hor_fin"));
                arrayHora.put(jObj);
            }
            jReturn
                    .put("data", arrayHora)
                    .put("status", true);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cnx != null) {
                cnx.close();
            }
        }
        return jReturn;
    }

    @Override
    public JSONObject deshabilitarHorario(JSONObject object) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}
