
/*
 * 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\n"
					+ "FROM horario_curso_docente\n"
					+ "INNER JOIN (\n"
					+ "	SELECT\n"
					+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
					+ "	tb_profesor_in.codprofesor\n"
					+ "	FROM nuevo.personal tb_personal_in\n"
					+ "	LEFT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
					+ "	UNION\n"
					+ "	SELECT\n"
					+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
					+ "	tb_profesor_in.codprofesor\n"
					+ "	FROM nuevo.personal tb_personal_in\n"
					+ "	RIGHT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
					+ ") tb_profesor ON (tb_profesor.codprofesor = horario_curso_docente.cod_doc OR tb_profesor.codpersonal = horario_curso_docente.cod_doc)\n"
					+ "WHERE ('" + codigoDocente + "' = tb_profesor.codprofesor OR '" + codigoDocente + "' = tb_profesor.codpersonal)\n"
					+ "AND dia='" + dia + "'\n"
					+ "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 + "'\n"
					+ "AND est_hcd='1'";
//				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.equals("61") || codigoCurso.equals("62") ? "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") || codigoCurso.equals("62") ? "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\n"
				+ " hor.codAula,\n"
				+ " sede.des_loc,\n"
				+ " tipo_centro.destipocentro,\n"
				+ " centro.descentro,nivel.desnivel,\n"
				+ " tipo_grado.destipogrado,\n"
				+ " grado.desgrado,\n"
				+ " seccion.desseccion,\n"
				+ " aula.nombre,\n"
				+ " turno.desturno,\n"
				+ " hor.hor_ini,\n"
				+ " hor.hor_fin,\n"
				+ " hor.cod_cur,\n"
				+ " curso.nom_cur\n"
				+ " FROM horario_curso_docente as hor\n"
				+ " INNER JOIN (\n"
				+ "	SELECT\n"
				+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "	tb_profesor_in.codprofesor\n"
				+ "	FROM nuevo.personal tb_personal_in\n"
				+ "	LEFT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ "	UNION\n"
				+ "	SELECT\n"
				+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "	tb_profesor_in.codprofesor\n"
				+ "	FROM nuevo.personal tb_personal_in\n"
				+ "	RIGHT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ ") tb_profesor ON (tb_profesor.codprofesor = hor.cod_doc OR tb_profesor.codpersonal = hor.cod_doc)\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 ('" + codDocente + "' = tb_profesor.codprofesor OR '" + codDocente + "' = tb_profesor.codpersonal)\n"
				+ " AND hor.dia='" + dia + "'\n"
				+ " AND (((hor.hor_ini<='" + Hini + "' AND hor.hor_fin>='" + Hini + "') OR (hor.hor_ini>'" + Hini + "' AND hor.hor_fin<'" + Hfin + "'))\n"
				+ " 		OR (hor.hor_ini>'" + Hini + "' AND hor.hor_ini<'" + Hini + "' AND hor.hor_fin>'" + Hfin + "')\n"
				+ " 		OR (hor.hor_ini<'" + Hini + "' AND hor.hor_fin>'" + Hfin + "' AND hor.hor_fin<'" + Hfin + "'))\n"
				+ " AND hor.cod_per='" + periodo + "'\n"
				+ " AND hor.est_hcd='1';";

//			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";
			String query = "SELECT DISTINCT\n"
				+ "tb_curso.cod_pla,\n"
				+ "tb_detalle.cod_tur,\n"
				+ "tb_detalle.codAula,\n"
				+ "tb_detalle.hor_ini,\n"
				+ "tb_detalle.hor_fin,\n"
				+ "tb_curso.nom_cur,\n"
				+ "tb_detalle.cod_cur,\n"
				+ "tb_sede.des_loc,\n"
				+ "tb_detalle.dia,\n"
				+ "tb_detalle.cod_doc,\n"
				+ "tb_nivel.desnivel,\n"
				+ "tb_tipo_grado.destipogrado,\n"
				+ "tb_grado.desgrado,\n"
				+ "tb_seccion.desseccion,\n"
				+ "tb_turno.desturno\n"
				+ "FROM horarios_docente.curso tb_curso\n"
				+ "INNER JOIN horarios_docente.horario_curso_docente tb_detalle ON tb_detalle.cod_cur = tb_curso.cod_cur\n"
				+ "INNER JOIN (\n"
				+ "	SELECT\n"
				+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "	tb_profesor_in.codprofesor\n"
				+ "	FROM nuevo.personal tb_personal_in\n"
				+ "	LEFT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ "	UNION\n"
				+ "	SELECT\n"
				+ "	CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "	tb_profesor_in.codprofesor\n"
				+ "	FROM nuevo.personal tb_personal_in\n"
				+ "	RIGHT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ ")tb_profesor ON (tb_profesor.codprofesor = tb_detalle.cod_doc OR tb_profesor.codpersonal = tb_detalle.cod_doc)\n"
				+ "INNER JOIN horarios_docente.aula tb_aula ON tb_detalle.codAula = tb_aula.codaula\n"
				+ "INNER JOIN horarios_docente.sede tb_sede ON tb_aula.codlocal = tb_sede.cod_loc\n"
				+ "INNER JOIN horarios_docente.nivel tb_nivel on tb_nivel.codnivel = tb_aula.codnivel\n"
				+ "INNER JOIN horarios_docente.tipo_grado tb_tipo_grado on tb_tipo_grado.codtipogrado = tb_aula.codtipogrado\n"
				+ "INNER JOIN horarios_docente.grado tb_grado on tb_grado.codgrado = tb_aula.codgrado\n"
				+ "INNER JOIN horarios_docente.seccion tb_seccion on tb_seccion.codseccion = tb_aula.codseccion\n"
				+ "INNER JOIN horarios_docente.turno tb_turno on tb_turno.codturno = tb_aula.codturno\n"
				+ "-- WHERE tb_detalle.cod_doc IN ( )\n"
				+ "-- AND\n"
				+ "-- '934'\n"
				+ "WHERE\n"
				+ "('" + codDocente + "' = tb_profesor.codprofesor OR '" + codDocente + "' = tb_profesor.codpersonal)\n"
				+ "AND tb_detalle.cod_per='" + periodo + "'\n"
				+ "AND tb_detalle.est_hcd='1'\n"
				+ "ORDER BY tb_detalle.dia, tb_detalle.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\n"
				+ "	FROM horario_curso_docente tb_horario_curso_docente\n"
				+ "	INNER JOIN (\n"
				+ "		SELECT\n"
				+ "		CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "		tb_profesor_in.codprofesor\n"
				+ "		FROM nuevo.personal tb_personal_in\n"
				+ "		LEFT JOIN sacoolive3.profesor tb_profesor_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ "		UNION\n"
				+ "		SELECT\n"
				+ "		CONCAT('P', tb_personal_in.codper) as codpersonal,\n"
				+ "		tb_profesor_in.codprofesor\n"
				+ "		FROM sacoolive3.profesor tb_profesor_in\n"
				+ "		LEFT JOIN nuevo.personal tb_personal_in ON tb_personal_in.dni = tb_profesor_in.dni\n"
				+ "	) tb_profesor ON (tb_profesor.codprofesor = tb_horario_curso_docente.cod_doc OR tb_profesor.codpersonal = tb_horario_curso_docente.cod_doc)\n"
				+ "	WHERE ('" + codDocente + "' = tb_profesor.codprofesor OR '" + codDocente + "' = tb_profesor.codpersonal)\n"
				+ "	AND cod_per=" + periodo + " ";
//			String query = "SELECT count(*) as cant FROM horario_curso_docente WHERE cod_doc='" + codDocente + "' and cod_per='" + periodo + "' ";
			System.out.println("QUERY CANTIDAD DE CURSOS ASIGNADOS ---->> \n" + 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 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") || codigoCurso.equals("62")) {

								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));
				System.out.println(pst);
				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,\n"
				+ " CONCAT(pr.apellido,', ',pr.nombre) nombreDoc,\n"
				+ " COALESCE(dat.cel_dat_per, 'No registrado') AS cel_dat_per,\n"
				+ " COALESCE(dat.nom_dir, 'No registrado') AS nom_dir,\n"
				+ " COALESCE(dat.cor_dat_per, 'No registrado') AS cor_dat_per,\n"
				+ " COALESCE(u.nom_dis_ubi, 'No registrado') AS nom_dis_ubi,\n"
				+ " dd.diaDis\n"
				+ " from sacoolive3.profesor pr\n"
				+ " INNER join (select codDoc,diaDis from disponibilidad_docente where estDis = 1 	and cod_per = ? ) dd on dd.codDoc = 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 pr.codprofesor, CONCAT(pr.apellido,', ',pr.nombre), dd.diaDis, dat.cel_dat_per, dat.nom_dir, dat.cor_dat_per, u.nom_dis_ubi\n"
				+ " order by nombreDoc ASC;";
			pst = cn.prepareStatement(sql);

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

			System.out.println("QUERY DATOS DEL DOCENTE ---->> \n" + pst);

			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);
			}
		}
		System.out.println("RESPUESTAAA -->> \n" + jReturn);
		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 ";
			System.out.println("QUERY DE LISTA DE PERIODOOO -->> \n" + sql);
			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";
			String query = "SELECT \n"
				+ "-- te.not_enc,\n"
				+ "COALESCE(dd.cel_dat_per, '-') AS cel_dat_per,\n"
				+ "COALESCE(AVG(te.not_enc), '-') AS not_enc\n"
				+ "FROM\n"
				+ "	sacoolive3.profesor pr\n"
				+ "LEFT JOIN datos_docente dd ON pr.codprofesor = dd.cod_doc\n"
				+ "LEFT JOIN tabla_evaluacion te ON te.cod_doc = pr.codprofesor\n"
				+ "															AND te.cod_pla = ?\n"
				+ "WHERE\n"
				+ "	pr.codprofesor = ?\n"
				+ "GROUP BY 1";

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

			System.out.println("QUERY PARA OBTENER EL RESULTADO DE LA ENCUESTA DE UN DOCENTE --->> \n" + pst);

//           
			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 verDocenteExamenEncuesta(String codigoDocente, String codigoPlana, int periodoId) throws Exception {
		String base = "horario";
//    System.out.println(" PERIODOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  --->>> \n" + periodo);
		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"
				+ "COALESCE(dd.cel_dat_per, '-') AS cel_dat_per,\n"
				+ "COALESCE(TRUNCATE(AVG(te.not_enc),2), '-') AS not_enc\n"
				+ "FROM\n"
				+ "	sacoolive3.profesor pr\n"
				+ "LEFT JOIN datos_docente dd ON pr.codprofesor = dd.cod_doc\n"
				+ "LEFT JOIN (\n"
				+ "						SELECT tb_evaluacion.cod_doc, tb_evaluacion.cod_pla, tb_evaluacion.not_enc\n"
				+ "						FROM tabla_evaluacion tb_evaluacion\n"
				+ "						INNER JOIN (SELECT YEAR(fec_fin_per)-1 anio_anterior FROM periodo_academico WHERE cod_per = ?) tb_periodo\n"
				+ "												ON YEAR(tb_evaluacion.fec) = tb_periodo.anio_anterior\n"
				+ "					) te ON te.cod_doc = pr.codprofesor AND te.cod_pla = ?\n"
				+ "WHERE\n"
				+ "	pr.codprofesor = ?\n"
				+ "GROUP BY 1";

			pst = cnx.prepareStatement(query);
			pst.setInt(1, periodoId);
			pst.setString(2, codigoPlana);
			pst.setString(3, codigoDocente);
			System.out.println("QUERY PARA OBTENER EL RESULTADO DE LA ENCUESTA DE UN DOCENTE --->> \n" + pst);
			rs = pst.executeQuery();
			while (rs.next()) {
				horario.setCelularDocente(rs.getString(1));
				horario.setExamen(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.
	}

	@Override
	public void eliminarBloqueGrupoAula(String codAula, String periodo, int codUsuario) throws Exception {
		String base = "horario";
		Connection cnx = null;
		String varFinal = "";

		PreparedStatement pst = null;
		ResultSet rs = null;
		int codGrupoAula = 0;
		int cantidad = 0;
		int dato = 0;

		String cadenaAulas = "";
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String grupoAula = "SELECT cod_gru_aul,cad_aul,cantidad FROM grupo_aulas WHERE cod_per='" + periodo + "' and cad_aul LIKE '%" + codAula + "%' and est_gru_aul=1";
			pst = cnx.prepareStatement(grupoAula);

			rs = pst.executeQuery();
			while (rs.next()) {
				codGrupoAula = rs.getInt("cod_gru_aul");
				cadenaAulas = rs.getString("cad_aul");
				cantidad = rs.getInt("cantidad");
			}

			String s1 = cadenaAulas;
			String aulaEncontrada = "";
			boolean iContain = s1.contains(",");
			if (iContain) {
				String separado[] = cadenaAulas.split(",");

				for (int i = 0; i < separado.length; i++) {
					System.out.println(separado[i]);

					if (codAula.equals(separado[i])) {
						System.out.println("ENCONTRADO");
						aulaEncontrada = separado[i];
						separado[i] = "";

					} else {
						System.out.println("NO TE ENCONTRE");
					}
				}
				System.out.println("RESULTADO");
				System.out.println(separado.length);
				System.out.println("posicion 0 -->" + separado[0]);
				System.out.println("posicion 1 -->" + separado[1]);

				String query = "";
				// actualizar grupo aulas
				for (int j = 0; j < separado.length; j++) {
					if (query == "") {
						query = separado[j];
					} else {
						query += "," + separado[j];
					}
				}

				System.out.println("query->" + query.endsWith(","));
				if (query.endsWith(",")) {
					varFinal = query.substring(0, query.length() - 1);
					System.out.println("varFinal->" + varFinal);
				}

			}
			//-----------ACTUALIZANDO EL GRUPO DE AULAS------------------
			if (cantidad > 1) {
				dato = cantidad - 1;
			}
			String update = "UPDATE grupo_aulas SET cad_aul='" + varFinal + "',cantidad=" + dato + " where cod_gru_aul='" + codGrupoAula + "' and cod_per='" + periodo + "'";
			System.out.println("query update grupo aulas-->" + update);
			pst.executeUpdate(update);

			//-----------BORRANDO TODO LO DE HORARIO CURSO DOCENTE------------------
			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 {
			try {
				if (cnx != null) {
					cnx.close();
				}

				if (pst != null) {
					pst.close();
				}
			} catch (Exception e) {
			}

		}
	}

	@Override
	public int updateGrupoAula(String codAulas, String cantidad, String periodo, String codAulasAntiguo) throws Exception {
		int dato = 0;
		Connection cnx = null;
		String base = "horario";
		PreparedStatement pst = null;
		ResultSet rs = null;
		int codGrupoAulas = 0;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String replaceCodigo = codAulasAntiguo.replace("#", ",");
			String query = "SELECT cod_gru_aul FROM grupo_aulas WHERE cod_per='" + periodo + "' and cad_aul LIKE '%" + replaceCodigo + "%' and est_gru_aul=1";
			pst = cnx.prepareStatement(query);
			System.out.println("obtenerGrupoAula" + query);
			rs = pst.executeQuery();
			while (rs.next()) {
				codGrupoAulas = rs.getInt("cod_gru_aul");
			}
			if (codGrupoAulas > 0) {
				String replaceCodAulas = codAulas.replace("#", ",");
				String update = "UPDATE grupo_aulas SET cad_aul='" + replaceCodAulas + "',cantidad=" + cantidad + " where cod_gru_aul='" + codGrupoAulas + "' and cod_per='" + periodo + "'";
				dato = pst.executeUpdate(update);
			}

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

		return dato;
	}

}
