/*
 * 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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.stream.Collectors;
import pe.siso.horario.Beans.Docente;
import pe.siso.horario.Beans.Horario;
import pe.siso.horario.Beans.HorarioCF;
import pe.siso.horario.DAO.DocenteDAO;

/**
 *
 * @author sistem16user
 */
public class MySqlDocenteDAO implements DocenteDAO {

	@Override
	public ArrayList<Docente> listaDocentes() throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT profesor.estadoprofe, profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE estadoprofe='Y' ORDER BY profesor.apellido";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("profesor.codprofesor"));
				docente.setEst_pro(rs.getString("profesor.estadoprofe"));
				docente.setNom_pro(rs.getString("profesor.nombre"));
				docente.setApe_pro(rs.getString("profesor.apellido"));
				docente.setDni(rs.getString("profesor.dni"));

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

	@Override
	public ArrayList<Docente> listaDocentes(String apellido) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE profesor.apellido LIKE '" + apellido + "%'  AND estadoprofe='Y'  ORDER BY profesor.apellido";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();

					docente.setNom_pro(rs.getString("profesor.nombre"));
					docente.setApe_pro(rs.getString("profesor.apellido"));
					docente.setCod_pro(rs.getString("profesor.codprofesor"));
					docente.setDni(rs.getString("profesor.dni"));

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

	@Override
	public ArrayList<Docente> listarDocenteScundaria() throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT codprofesor,apellido,nombre FROM profesor WHERE estadoprofe='Y' ORDER BY apellido,nombre";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setApe_pro(rs.getString("apellido"));
				lista.add(docente);
			}
                        
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
                
		return lista;
	}

	@Override
	public Docente NombreDocente(String cod) throws Exception {

		String base2 = "nuevo";

		Docente docente = new Docente();

		String primerCaracterDocente = "" + cod.charAt(0);
		if (!primerCaracterDocente.equals("P")) {

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

				String query = "SELECT  codprofesor, nombre, apellido, dni from profesor WHERE codprofesor='" + cod + "';";
				System.out.println("(5)-- NombreDocente ->" + query);
                                
				ResultSet rs = st.executeQuery(query);

				if (rs.next()) {
					docente.setNom_pro(rs.getString("nombre"));
					docente.setApe_pro(rs.getString("apellido"));
					docente.setDni(rs.getString("dni"));
				}

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

		} else {

			String codDOcenteP = cod.replace("P", "");

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

				String query2 = "SELECT apellido,nombre,dni,telefono FROM personal WHERE codper = '" + codDOcenteP + "'";
				ResultSet rs3 = st2.executeQuery(query2);
				if (rs3.next()) {
					docente.setApe_pro(rs3.getString("apellido"));
					docente.setNom_pro(rs3.getString("nombre"));
					docente.setDni("dni");

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

		}

		return docente;
	}

	@Override
	public ArrayList<Docente> listarDocenteScundaria(String apellido) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT codprofesor,apellido,nombre FROM profesor WHERE estadoprofe='Y' and apellido LIKE '" + apellido + "%' ORDER BY apellido,nombre";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setApe_pro(rs.getString("apellido"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> buscarUsuarioDocente(String apellido, int inicio, int cantidad) throws Exception { //checkpoint
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "";
			if (apellido.equals("")) {
				query = "SELECT profesor.idprofesor,profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE estadoprofe='Y'  ORDER BY profesor.apellido LIMIT " + inicio + ", " + cantidad + " ";
			} else {
				query = "SELECT profesor.idprofesor,profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE profesor.apellido LIKE '" + apellido + "%'  AND estadoprofe='Y'  ORDER BY profesor.apellido LIMIT " + inicio + ", " + cantidad + " ";
			}

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId(rs.getString("idprofesor"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setApe_pro(rs.getString("apellido"));
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setDni(rs.getString("dni"));

				lista.add(docente);
			}
			System.out.println(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> listarTodoUsuDocente() throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT profesor.idprofesor,profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE  estadoprofe='Y'  ORDER BY profesor.apellido";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId(rs.getString("idprofesor"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setApe_pro(rs.getString("apellido"));
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setDni(rs.getString("dni"));

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

	/*@Override
     public Docente datosDocente(String codigoDocente) throws Exception {
     Docente docente = new Docente();
     String base = "horario";
     Connection cnx = MySqlDAOFactory.obtenerConexion(base);
     Statement st = cnx.createStatement();

     String query = "SELECT tel_dat_per,cor_dat_per,zon_dat_per FROM datos_docente WHERE cod_doc='"+codigoDocente+"'";
     System.out.println(query);
     ResultSet rs = st.executeQuery(query);

     while(rs.next()){
     docente.setTelefono(rs.getString("tel_dat_per"));
     docente.setCorreo(rs.getString("cor_dat_per"));
     docente.setZona(rs.getString("zon_dat_per"));
     }
     return docente;
     }*/

 /*@Override
     public Docente datosDocente(String codDocente) throws Exception {
     String base = "horario";
     Connection cnx = MySqlDAOFactory.obtenerConexion(base);
     Statement st = cnx.createStatement();
     String query = "SELECT DISTINCT datos_docente.cod_dat_per, " +
     "datos_docente.cod_doc, " +
     "datos_docente.tel_dat_per, " +
     "datos_docente.cor_dat_per, " +
     "datos_docente.cod_prov,  " +
     "datos_docente.cod_dep, " +
     "datos_docente.cod_dis,  " +
     "ubigeo.nom_dis_ubi " +
     "FROM " +
     "datos_docente " +
     "INNER JOIN ubigeo ON datos_docente.cod_dis = ubigeo.cod_dis_ubi AND datos_docente.cod_dep = ubigeo.cod_dep_ubi AND datos_docente.cod_prov = ubigeo.cod_pro_ubi " +
     "WHERE cod_doc='"+codDocente+"'";

     ResultSet rs = st.executeQuery(query);
     System.out.println("consulta----"+query);
     Docente docente = new Docente();
     while(rs.next()){
     docente.setCodDocenteId(rs.getString("cod_doc"));
     docente.setCorreo(rs.getString("cor_dat_per"));
     docente.setTelefono(rs.getString("tel_dat_per"));
     //docente.setZona(rs.getString("zon_dat_per"));
     docente.setCodDato(rs.getString("cod_dat_per"));
     docente.setCodigoDep(rs.getInt("cod_dep"));
     docente.setCodigoDis(rs.getInt("cod_dis"));
     docente.setCodigoPro(rs.getInt("cod_prov"));
     docente.setNombreDDis(rs.getString("nom_dis_ubi"));


     }
     return docente;

     }*/
	@Override
	public Docente datosDocente(String codDocente) throws Exception {
		String base = "horario";

		Docente docente = new Docente();
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = " SELECT DISTINCT datos_docente.cant_hijos,datos_docente.cod_dat_per, "
				+ "datos_docente.cod_doc, datos_docente.tel_dat_per, "
				+ "datos_docente.cor_dat_per, datos_docente.cod_prov, "
				+ "datos_docente.cod_dep, datos_docente.cod_dis, "
				+ "datos_docente.cel_dat_per, datos_docente.nom_dir, "
				+ "ubigeo.nom_dis_ubi, ubigeo.nom_dep_ubi, "
				+ "ubigeo.nom_pro_ubi FROM datos_docente INNER JOIN ubigeo "
				+ "ON datos_docente.cod_dis = ubigeo.cod_dis_ubi  "
				+ "AND datos_docente.cod_dep = ubigeo.cod_dep_ubi "
				+ "AND datos_docente.cod_prov = ubigeo.cod_pro_ubi "
				+ "WHERE cod_doc='" + codDocente + "'";

			ResultSet rs = st.executeQuery(query);
			System.out.println("consulta---->>" + query);
			while (rs.next()) {
				docente.setCodDocenteId(rs.getString("cod_doc"));
				docente.setCorreo(rs.getString("cor_dat_per"));
				docente.setTelefono(rs.getString("tel_dat_per"));
				docente.setCodDato(rs.getString("cod_dat_per"));
				docente.setCodigoDep(rs.getInt("cod_dep"));
				docente.setCodigoDis(rs.getInt("cod_dis"));
				docente.setCodigoPro(rs.getInt("cod_prov"));
				docente.setNombreDDis(rs.getString("nom_dis_ubi"));
				docente.setNombreDep(rs.getString("nom_dep_ubi"));
				docente.setNombrePro(rs.getString("nom_pro_ubi"));
				docente.setDireccion(rs.getString("nom_dir"));
				docente.setCell(rs.getString("cel_dat_per"));
				docente.setCantHijos(rs.getInt("cant_hijos"));
			}
                        
                  
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return docente;
	}

	@Override
	public int registroDatos(String codDocente, String telefono, String mail, int cod_dep, int cod_pro, int cod_dis) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT COUNT(cod_doc) as cant from datos_docente  where cod_doc='" + codDocente + "'";
			ResultSet rs = st.executeQuery(queryConsulta);
			while (rs.next()) {
				dato = rs.getInt("cant");
			}
			if (dato == 0) {
				String queryInsert = "insert into datos_docente (cod_doc, tel_dat_per, cor_dat_per,cod_prov,cod_dep,cod_dis) VALUES  ('" + codDocente + "','" + telefono + "','" + mail + "','" + cod_pro + "','" + cod_dep + "','" + cod_dis + "')";
				st.executeUpdate(queryInsert);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public ArrayList<Docente> consultarDatos(String codDocente,String codPeriodo) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT DISTINCT IFNULL(p.nom_pla,'-')nom_pla,datos_docente.cant_hijos,datos_docente.cod_dat_per,  \n" +
"				 datos_docente.cod_doc, datos_docente.tel_dat_per,  \n" +
"				 datos_docente.cor_dat_per, datos_docente.cod_prov,  \n" +
"				 datos_docente.cod_dep, datos_docente.cod_dis,  \n" +
"				 datos_docente.cel_dat_per, datos_docente.nom_dir,  \n" +
"				 ubigeo.nom_dis_ubi, ubigeo.nom_dep_ubi,  \n" +
"				 ubigeo.nom_pro_ubi FROM datos_docente \n" +
"                                INNER JOIN ubigeo  \n" +
"				 ON datos_docente.cod_dis = ubigeo.cod_dis_ubi   \n" +
"				 AND datos_docente.cod_dep = ubigeo.cod_dep_ubi  \n" +
"				 AND datos_docente.cod_prov = ubigeo.cod_pro_ubi\n" +
"                                LEFT JOIN(\n" +
"                                SELECT ad.cod_doc, p.nom_pla FROM area_docente ad\n" +
"								INNER JOIN plana_docente pd ON ad.cod_doc=pd.cod_doc\n" +
"								INNER JOIN plana p ON p.cod_pla=pd.cod_pla\n" +
"								 WHERE ad.cod_doc='"+codDocente+"' and pd.cod_per='"+codPeriodo+"' AND pd.est_plana='1'\n" +
"                                   ) p\n" +
"                                          \n" +
"                                ON p.cod_doc=datos_docente.cod_doc\n" +
"                                \n" +
"				 WHERE datos_docente.cod_doc='"+codDocente+"'";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId(rs.getString("cod_doc"));
                                docente.setCantHijos(rs.getInt("cant_hijos"));
				docente.setCorreo(rs.getString("cor_dat_per"));
				docente.setTelefono(rs.getString("tel_dat_per"));
				docente.setNombreDDis(rs.getString("nom_dis_ubi"));
				docente.setNombreDep(rs.getString("nom_dep_ubi"));
				docente.setNombrePro(rs.getString("nom_pro_ubi"));
				docente.setCodDato(rs.getString("cod_dat_per"));
				docente.setCell(rs.getString("cel_dat_per"));
				docente.setDireccion(rs.getString("nom_dir"));
				docente.setNombrePlanaAsiste(rs.getString("nom_pla"));

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

	@Override
	public void actualizarDatos(String codDocente, String telefono, String zona, String email) throws Exception {
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryInsert = "update datos_docente set tel_dat_per='" + telefono + "',zon_dat_per='" + zona + "',cor_dat_per='" + email + "' WHERE cod_doc='" + codDocente + "'";
			st.executeUpdate(queryInsert);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
	}

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

	@Override
	public int registrarDatosEdit(String codDocente, String telefono, String mail, int cod_dep, int cod_pro, int cod_dis) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT COUNT(cod_doc) as cant from datos_docente  where cod_doc='" + codDocente + "'";
			ResultSet rs = st.executeQuery(queryConsulta);
			while (rs.next()) {
				dato = rs.getInt("cant");
			}
			if (dato > 0) {
				String queryInsert = "UPDATE datos_docente SET tel_dat_per='" + telefono + "', cor_dat_per='" + mail + "',cod_prov='" + cod_pro + "',cod_dep='" + cod_dep + "',cod_dis='" + cod_dis + "' WHERE cod_doc='" + codDocente + "'";

				st.executeUpdate(queryInsert);
				System.out.println("consulta-->" + queryInsert);
			}
                        
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

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

			String query = "SELECT DISTINCT cod_doc FROM horario_curso_docente";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("cod_doc"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public int verificarCruces(String codDocente, String codigoArea) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT count(h.cod_doc) as cant FROM horario_curso_docente as h  "
				+ "INNER JOIN curso on curso.cod_cur=h.cod_cur "
				+ "INNER JOIN plana on plana.cod_pla=curso.cod_pla "
				+ "INNER JOIN area on area.cod_are=plana.cod_are "
				+ "WHERE h.cod_doc='" + codDocente + "' and area.cod_are='" + codigoArea + "'";
			ResultSet rs = st.executeQuery(queryConsulta);
			if (rs.next()) {
				dato = rs.getInt("cant");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public int cantListaDocente(String apellidoDocente) throws Exception {
		int dato = 0;
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "";
			if (apellidoDocente.equals("")) {
				queryConsulta = "SELECT count(*) as cant FROM profesor WHERE estadoprofe='Y' ";

			} else {
				queryConsulta = "SELECT count(*) as cant FROM profesor WHERE profesor.apellido LIKE '" + apellidoDocente + "%'  AND estadoprofe='Y' ";

			}
			ResultSet rs = st.executeQuery(queryConsulta);

			if (rs.next()) {
				dato = rs.getInt("cant");
			}
			System.out.println("cant");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public ArrayList<Docente> listaDocentes(String apellido, int inicio, int cantidad) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			//String query = "SELECT profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE  estadoprofe='Y'  ORDER BY profesor.apellido LIMIT " + inicio + ", " + cantidad + "  ";
     	String query = "SELECT profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE profesor.apellido LIKE '" + apellido + "%'  AND estadoprofe='Y'  ORDER BY profesor.apellido LIMIT " + inicio + ", " + cantidad + "  ";
			System.out.println(query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();

				docente.setNom_pro(rs.getString("profesor.nombre"));
				docente.setApe_pro(rs.getString("profesor.apellido"));
				docente.setCod_pro(rs.getString("profesor.codprofesor"));
				docente.setDni(rs.getString("profesor.dni"));

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

	@Override
	public ArrayList<Docente> buscarUsuarioDocente(String apellido) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT profesor.idprofesor,profesor.codprofesor,profesor.nombre, profesor.apellido, profesor.dni FROM profesor WHERE profesor.apellido LIKE '" + apellido + "%'  AND estadoprofe='Y'  ORDER BY profesor.apellido  ";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId(rs.getString("idprofesor"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setApe_pro(rs.getString("apellido"));
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setDni(rs.getString("dni"));

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

	@Override
	public int registroDatos(String codDocente, String telefono, String mail, int cod_dep, int cod_pro, int cod_dis, String cel, String dir,int numhijos,int codarea,int codplana,int codperiodo) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT COUNT(cod_doc) as cant from datos_docente  where cod_doc='" + codDocente + "'";
			ResultSet rs = st.executeQuery(queryConsulta);
			while (rs.next()) {
				dato = rs.getInt("cant");
			}
			if (dato == 0) {
				String queryInsert = "insert into datos_docente (cod_doc, tel_dat_per, cor_dat_per,cod_prov,cod_dep, cod_dis, cel_dat_per, nom_dir,cant_hijos) VALUES  ('" + codDocente + "','" + telefono + "','" + mail + "','" + cod_pro + "','" + cod_dep + "','" + cod_dis + "','" + cel + "','" + dir + "','"+numhijos+"')";
				String insertarArea="insert into area_docente(cod_doc,cod_are,est_are_doc) VALUES ('"+codDocente+"','"+codarea+"',1)";
				String insertarPlana="insert into plana_docente(cod_pla,cod_doc,cod_per,est_plana) VALUES('"+codplana+"','"+codDocente+"','"+codperiodo+"',1)";
                                
                                
                                st.executeUpdate(queryInsert);
                                st.executeUpdate(insertarArea);
                                st.executeUpdate(insertarPlana);
			}
                        
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public int registrarDatosEdit(String codDocente, String telefono, String mail, int cod_dep, int cod_pro, int cod_dis, String cel, String dir,int cantHijos,int codArea,int codPlana,int periodo) throws Exception {
		int dato = 0;
                int datoPlana = 0; 
		String base = "horario";
		Connection cnx = null;
                 String consultaPlanaDocente="";
                
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
              
			String queryConsulta = "SELECT COUNT(cod_doc) as cant from datos_docente  where cod_doc='" + codDocente + "'";
                        
                         consultaPlanaDocente = "SELECT COUNT(cod_doc) as cantidad from plana_docente where cod_doc='" + codDocente + "' and cod_per='"+periodo+"'";
                        
			 ResultSet rs = st.executeQuery(queryConsulta);
			
                        
			while (rs.next()) {
				dato = rs.getInt("cant");
				
			}
			if (dato > 0) {
				String queryInsert = "UPDATE datos_docente SET tel_dat_per='" + telefono + "', cor_dat_per='" + mail + "',cod_prov='" + cod_pro + "',cod_dep='" + cod_dep + "',cod_dis='" + cod_dis + "',cel_dat_per='" + cel + "',nom_dir='" + dir + "',cant_hijos='" + cantHijos + "' WHERE cod_doc='" + codDocente + "'";

				st.executeUpdate(queryInsert);
                                
                                 ResultSet rsDos = st.executeQuery(consultaPlanaDocente);
                                
                                 while (rsDos.next()) {
                          
                                    datoPlana = rsDos.getInt("cantidad");
			        }
                                 
                                if(datoPlana > 0){
                                    String updateArea = "UPDATE area_docente SET cod_are="+codArea+" where cod_doc="+codDocente+"";
                                    String updatePlan = "UPDATE plana_docente SET cod_pla="+codPlana+" where cod_doc="+codDocente+" and cod_per='"+periodo+"' and est_plana=1";
                                    
                                    st.executeUpdate(updateArea);
                                    st.executeUpdate(updatePlan);
                                    
                                } else {
                                    
                                    String insertArea = "INSERT INTO area_docente (cod_doc,cod_are,est_are_doc) VALUES('"+codDocente+"','"+codArea+"',1)";
                                    String insertPlan = "INSERT INTO plana_docente (cod_pla,cod_doc,cod_per,est_plana) VALUES('"+codPlana+"','"+codDocente+"','"+periodo+"',1)";
                                    
                                    st.executeUpdate(insertArea);
                                    st.executeUpdate(insertPlan);
                                
                                }
                                
                                
				System.out.println("consulta-->" + queryInsert);
			}

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

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

			String query = "SELECT DISTINCT cod_doc FROM horario_curso_docente WHERE cod_per='" + periodo + "' ";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("cod_doc"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

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

			String query = " SELECT DISTINCT doc.cod_doc FROM horario_curso_docente AS doc "
				+ "INNER JOIN curso as cur on cur.cod_cur=doc.cod_cur "
				+ "WHERE cur.cod_pla='" + plana + "' and doc.cod_per='" + periodo + "' ";

			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("cod_doc"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> cargarDocentePrimaria(String codcurso) throws Exception { //checkpoint
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "nuevo";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "";
			if (codcurso.equals("30")) {
				query = "SELECT codper,apellido,nombre,codcargo FROM personal WHERE codcargo in (" + codcurso + ") AND retirado= '0' AND codlocal='L067' ORDER BY apellido,nombre ";
			} else {
				query = "SELECT codper,apellido,nombre,codcargo FROM personal WHERE codcargo in (" + codcurso + ") AND retirado= '0' ORDER BY apellido,nombre ";
			}

			ResultSet rs = st.executeQuery(query);
			System.out.println("cargarDocentePrimaria " + query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodigoDocentePrimaria(rs.getString("codper"));
				docente.setApellidosDocentePrimaria(rs.getString("apellido"));
				docente.setNombreDocentePrimaria(rs.getString("nombre"));
				docente.setCodigoCargo(rs.getString("codcargo"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> cargarDocentePrimaria2(String codcurso, String apellido, int inicio, int cantidad) throws Exception { //checkpoint
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "nuevo";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "";
			if (codcurso.equals("30")) {
				query = "SELECT codper,apellido,nombre,codcargo,dni FROM personal WHERE codcargo in (" + codcurso + ") AND retirado= '0' AND codlocal='L067' ORDER BY apellido,nombre LIMIT " + inicio + ", " + cantidad + " ";
			} else {
				query = "SELECT codper,apellido,nombre,codcargo,dni FROM personal WHERE codcargo in (" + codcurso + ") AND retirado= '0' and apellido LIKE '" + apellido + "%' ORDER BY apellido,nombre LIMIT " + inicio + ", " + cantidad + " ";
			}

			ResultSet rs = st.executeQuery(query);
			System.out.println("cargarDocentePrimaria " + query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId("P" + rs.getString("codper"));
				docente.setApe_pro(rs.getString("apellido"));
				docente.setNom_pro(rs.getString("nombre"));
				docente.setCodigoCargo(rs.getString("codcargo"));
				docente.setDni(rs.getString("codcargo"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public Docente listarDocenteSede(String local) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		Docente doc = new Docente();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT hcd.cod_doc FROM horario_curso_docente as hcd  "
				+ "INNER JOIN aula ON aula.codaula=hcd.codAula  "
				+ "WHERE aula.codlocal='" + local + "' and hcd.est_hcd='1' "
				+ "GROUP BY hcd.cod_doc";
			ResultSet rs = st.executeQuery(query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodDocenteId(rs.getString("cod_doc"));
				lista.add(docente);
			}

			String codSec = "0";
			String codPri = "0";
			for (int i = 0; i < lista.size(); i++) {
				String codDocente = lista.get(i).getCodDocenteId();
				String primerCaracterDocente = "" + codDocente.charAt(0);
				if (primerCaracterDocente.equals("P")) {
					String codDocenteP = codDocente.replace("P", "");
					codPri += "," + codDocenteP;
				} else {
					codSec += "," + codDocente;
				}
			}

			doc.setCadenaCodigoDocentePri(codPri);
			doc.setCadenaCodigoDocenteSec(codSec);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return doc;
	}

	@Override
	public ArrayList<Docente> listarDocSecPri(String codPri, String codSec) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "sacoolive3";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT codprofesor,apellido,nombre FROM profesor WHERE codprofesor in (" + codSec + ")";
			ResultSet rs = st.executeQuery(query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCod_pro(rs.getString("codprofesor"));
				docente.setApe_pro(rs.getString("apellido"));
				docente.setNom_pro(rs.getString("nombre"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}

		String base2 = "nuevo";
		Connection cnx2 = null;
		try {
			cnx2 = MySqlDAOFactory.obtenerConexion(base2);
			Statement st2 = cnx2.createStatement();
			String query2 = "SELECT codper,apellido,nombre FROM nuevo.personal WHERE codper in (" + codPri + ")";
			ResultSet rs2 = st2.executeQuery(query2);
			while (rs2.next()) {
				Docente docente = new Docente();
				docente.setCod_pro("P" + rs2.getString("codper"));
				docente.setApe_pro(rs2.getString("apellido"));
				docente.setNom_pro(rs2.getString("nombre"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public int registrarInforme(String cod_doc, String nom_doc, String mot, String arg, String cod_sed, String nom_sed) throws Exception {
		int dato = 0;
		int existe = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String consultar = "SELECT count(*) AS cantidad FROM informe WHERE cod_doc='" + cod_doc + "' AND cod_sed='" + cod_sed + "'";
			ResultSet rs = st.executeQuery(consultar);
			if (rs.next()) {
				existe = rs.getInt("cantidad");
			}
			String queryInsert = "";
			if (existe > 0) {
				queryInsert = "UPDATE informe SET mot_int = '" + mot + "', "
					+ "arg_inf = '" + arg + "', res_inf='0', est_int='1', fec_inf=CURRENT_TIMESTAMP(), "
					+ "cod_sed = '" + cod_sed + "', nom_sed='" + nom_sed + "'";
			} else {
				queryInsert = " INSERT INTO informe (cod_doc, nom_doc, mot_int, arg_inf, res_inf, est_int, fec_inf, cod_sed, nom_sed) "
					+ " VALUES ('" + cod_doc + "', '" + nom_doc + "', '" + mot + "', '" + arg + "', '0', '1',CURRENT_TIMESTAMP(),'" + cod_sed + "', '" + nom_sed + "') ;";
			}

//        String queryInsert=" INSERT INTO informe (cod_doc, nom_doc, mot_int, arg_inf, res_inf, est_int, fec_inf, cod_sed, nom_sed) " +
//                           " VALUES ('"+cod_doc+"', '"+nom_doc+"', '"+mot+"', '"+arg+"', '0', '1',CURRENT_TIMESTAMP(),'"+cod_sed+"', '"+nom_sed+"') ;";
			dato = st.executeUpdate(queryInsert);
			System.out.println("consulta-->" + queryInsert);

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

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

			String query = "SELECT cod_inf,cod_doc,nom_doc,mot_int,arg_inf,cod_sed,nom_sed,fec_inf,res_inf,est_int FROM informe ORDER BY fec_inf DESC";
			ResultSet rs = st.executeQuery(query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodigoInforme(rs.getString("cod_inf"));
				docente.setCodigoDocente(rs.getString("cod_doc"));
				docente.setNombreDocente(rs.getString("nom_doc"));
				docente.setMotivo(rs.getString("mot_int"));
				docente.setArgumento(rs.getString("arg_inf"));
				docente.setCodigoSede(rs.getString("cod_sed"));
				docente.setNombreSede(rs.getString("nom_sed"));
				docente.setFechaInforme(rs.getString("fec_inf"));
				docente.setRespuestaInforme(rs.getString("res_inf"));
				docente.setEstadoInforme(rs.getString("est_int"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public int registrarRespuesta(String codInforme, String accion) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "UPDATE informe SET res_inf = '" + accion + "' WHERE cod_inf = '" + codInforme + "';";
			dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public String verEstado(String codDocente, String local) throws Exception {
		String estado = "";
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT res_inf FROM informe WHERE cod_doc='" + codDocente + "' AND cod_sed='" + local + "' ORDER BY cod_inf DESC;";
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				estado = rs.getString("res_inf");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return estado;

	}

	@Override
	public ArrayList<Docente> listarEncuestas() throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "encuentas";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = " SELECT cod_enc,nom_enc FROM encuesta ORDER BY cod_enc DESC";
			ResultSet rs = st.executeQuery(query);
			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodigoEncuesta(rs.getString("cod_enc"));
				docente.setNombreEncuesta(rs.getString("nom_enc"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}

		return lista;
	}

	@Override
	public ArrayList<Docente> migrarPuntaje(String codEnc) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryDelete = "TRUNCATE TABLE migracion";
			st.executeUpdate(queryDelete);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}

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

//            String queryConsulta = "SELECT " + codEnc + " as cod_enc,cod_pro,nom_pro,GROUP_CONCAT(DISTINCT cod_cur) as curso, FORMAT(((AVG(tot_res))/5),2) as promedio, 1 as estado "
//                    + "FROM encuesta_resultado WHERE cod_enc=" + codEnc + " and est_res=1 GROUP BY cod_pro";
			String queryConsulta = "SELECT\n"
				+ "11 AS cod_enc,\n"
				+ "encuesta_docente.encuesta_resultado.cod_pro,\n"
				+ "encuesta_docente.encuesta_resultado.nom_pro,\n"
				+ "GROUP_CONCAT( DISTINCT encuesta_docente.encuesta_resultado.cod_cur) AS curso,\n"
				+ "FORMAT(((AVG(tot_res)) / 5), 2) AS promedio,\n"
				+ "1 AS estado,\n"
				+ "horarios_docente.curso.cod_pla\n"
				+ "FROM\n"
				+ "encuesta_docente.encuesta_resultado\n"
				+ "INNER JOIN horarios_docente.curso ON horarios_docente.curso.cod_cur = encuesta_docente.encuesta_resultado.cod_cur\n"
				+ "WHERE\n"
				+ "encuesta_docente.encuesta_resultado.cod_enc = " + codEnc + " AND\n"
				+ "encuesta_docente.encuesta_resultado.est_res = 1\n"
				+ "GROUP BY\n"
				+ "encuesta_docente.encuesta_resultado.cod_pro,\n"
				+ "horarios_docente.curso.cod_pla";
			System.out.println("--> " + queryConsulta);
			ResultSet rs = st2.executeQuery(queryConsulta);
			while (rs.next()) {
				Docente doc = new Docente();
				doc.setCodigoEncuesta(rs.getString("cod_enc"));
				doc.setCodigoDocente(rs.getString("cod_pro"));
				doc.setNombreDocente(rs.getString("nom_pro"));
				doc.setPuntaje(rs.getString("promedio"));
				doc.setNombreCurso(rs.getString("curso"));
				doc.setEstado(rs.getString("estado"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx2.close();
		}
		return lista;

	}

	@Override
	public int insertar(String codEnc, String codDoc, String nomDoc, String puntaje, String cadenaCurso) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "INSERT INTO migracion (cod_enc, cod_pro, cod_cur,nom_pro, pun_mig, est_mig) "
				+ "VALUES ('" + codEnc + "', '" + codDoc + "','" + cadenaCurso + "', '" + nomDoc + "', '" + puntaje + "', '1') ;";
			dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

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

			String queryConsulta = "SELECT cod_pro,nom_pro,pun_mig FROM migracion ORDER BY pun_mig DESC, nom_pro ";
			ResultSet rs = st.executeQuery(queryConsulta);
			while (rs.next()) {
				Docente doc = new Docente();
				doc.setCodigoDocente(rs.getString("cod_pro"));
				doc.setNombreDocente(rs.getString("nom_pro"));
				doc.setPuntaje(rs.getString("pun_mig"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> listaDocentesSec(String cod_per) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";

		String cadenaCodDoc = "0";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT ad.cod_doc FROM area_docente  AS ad "
				+ "INNER JOIN disponibilidad_docente as dd ON dd.codDoc = ad.cod_doc "
				+ "WHERE dd.cod_per='" + cod_per + "' GROUP BY ad.cod_doc";
			System.out.println("-x-> " + query);
			ResultSet rs1 = st.executeQuery(query);
			while (rs1.next()) {
				cadenaCodDoc += "," + rs1.getString("cod_doc");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}

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

			String queryDocente = "SELECT codprofesor,apellido,nombre FROM profesor WHERE codprofesor IN (" + cadenaCodDoc + ") AND estadoprofe='Y' ORDER BY apellido, nombre";
			System.out.println("-xx-> " + queryDocente);
			ResultSet rs2 = st2.executeQuery(queryDocente);
			while (rs2.next()) {
				Docente doc = new Docente();
				doc.setCodigoDocente(rs2.getString("codprofesor"));
				doc.setApe_pro(rs2.getString("apellido"));
				doc.setNom_pro(rs2.getString("nombre"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx2.close();
		}
		return lista;
	}

	@Override
	public String puntajeDocente(String codDoc) throws Exception {
		String puntaje = "";
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT pun_mig FROM migracion WHERE cod_pro='" + codDoc + "'";
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				puntaje = rs.getString("pun_mig");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return puntaje;
	}

	@Override
	public String consultarCodigoEncuesta() throws Exception {
		String codigoEncuesta = "";
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT cod_enc FROM migracion ";
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				codigoEncuesta = rs.getString("cod_enc");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return codigoEncuesta;

	}

	@Override
	public int registrarFichaEvaluacion(String codigoDocente, String nombreDocente, String codigoPeriodoAcademico, String anio, String codigoPeriodo, String puntajeEncuesta, String puntajeAsistencia, String puntajeExamen, String puntajeMateriales, String promedio) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "INSERT INTO ficha_evaluacion "
				+ "(cod_per, cod_per_acad, anio, cod_prof, nom_prof, cal_enc, cal_asi, cal_exa, cal_mat,cal_prom, fec_registro, est_fic_eva) "
				+ "VALUES ('" + codigoPeriodo + "', '" + codigoPeriodoAcademico + "', "
				+ "'" + anio + "', '" + codigoDocente + "', '" + nombreDocente + "', "
				+ "'" + puntajeEncuesta + "', '" + puntajeAsistencia + "', '" + puntajeExamen + "', '" + puntajeMateriales + "','" + promedio + "', CURDATE(), '1')";

			dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public int actualizarFichaEvaluacion(String codigoDocente, String nombreDocente, String codigoPeriodoAcademico, String anio, String codigoPeriodo, String puntajeEncuesta, String puntajeAsistencia, String puntajeExamen, String puntajeMateriales, String promedio) throws Exception {
		int existe = 0;
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT  "
				+ "COUNT(*) AS existe "
				+ "FROM ficha_evaluacion "
				+ "WHERE cod_per='" + codigoPeriodo + "' AND cod_per_acad='" + codigoPeriodoAcademico + "' AND cod_prof='" + codigoDocente + "'";
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				existe = rs.getInt("existe");
			}

			if (existe > 0) {
				String update = "UPDATE ficha_evaluacion SET cal_asi='" + puntajeAsistencia + "', "
					+ "cal_exa='" + puntajeExamen + "',"
					+ "cal_mat='" + puntajeMateriales + "',"
					+ "cal_prom='" + promedio + "',"
					+ "fec_registro = CURDATE() "
					+ "WHERE cod_per='" + codigoPeriodo + "' AND cod_per_acad='" + codigoPeriodoAcademico + "' AND cod_prof='" + codigoDocente + "'";
				System.out.println("update actualizarFichaEvaluacion =>" + update);
				dato = st.executeUpdate(update);
			} else {
				String insert = "INSERT INTO ficha_evaluacion "
					+ "(cod_per, cod_per_acad, anio, cod_prof, nom_prof, cal_enc, cal_asi, cal_exa, cal_mat,cal_prom, fec_registro, est_fic_eva) "
					+ "VALUES ('" + codigoPeriodo + "', '" + codigoPeriodoAcademico + "', "
					+ "'" + anio + "', '" + codigoDocente + "', '" + nombreDocente + "', "
					+ "'" + puntajeEncuesta + "', '" + puntajeAsistencia + "', '" + puntajeExamen + "', '" + puntajeMateriales + "','" + promedio + "', CURDATE(), '1')";
				System.out.println("insert actualizarFichaEvaluacion =>" + insert);
				dato = st.executeUpdate(insert);
			}

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

		return dato;
	}

	@Override
	public int insertarTemporal(String cadena) throws Exception {
		int dato_ = 0;
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query1 = "TRUNCATE TABLE docente_temporal";
			dato_ = st.executeUpdate(query1);

//        String query2 = ""+cadena+"";
//        dato = st.executeUpdate(cadena);
			if (!cadena.equals("")) {
				String[] A = cadena.split(";");
				String registro = "";
				for (int i = 0; i < A.length; i++) {
					registro = A[i];
					dato = st.executeUpdate(registro);
				}
				System.out.println("insertarTemporal " + registro);
			}

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

	}

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

			String query = "SELECT  "
				+ "doc_tem.cod_doc,  "
				+ "doc_tem.apellido_doc,  "
				+ "doc_tem.nombre_doc,  "
				+ "zd.cod_zon, "
				+ "IF(zona.nom_zon IS NULL,'',zona.nom_zon) as nom_zon, "
				+ "IF(ORDZONA.ordenZona IS NULL,3,ORDZONA.ordenZona) AS ordenZona,  "
				+ "inf.res_inf , IF(inf.res_inf IS NULL,1,IF(inf.res_inf= 0,1,2)) AS ordInfor, "
				+ "IF(ROUND((SUM(IF(fic_eva.cal_exa='Sin puntaje',NULL,fic_eva.cal_exa))+SUM(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc)))/(COUNT(IF(fic_eva.cal_exa='vacio',NULL,fic_eva.cal_exa))+COUNT(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc))),2) IS NULL,'-',ROUND((SUM(IF(fic_eva.cal_exa='Sin puntaje',NULL,fic_eva.cal_exa))+SUM(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc)))/(COUNT(IF(fic_eva.cal_exa='vacio',NULL,fic_eva.cal_exa))+COUNT(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc))),2)) AS promedio, "
				+ "IF(doc_tem.cod_doc LIKE 'P%',2,1) AS tipoDoc "
				+ "FROM docente_temporal AS doc_tem "
				+ "LEFT JOIN zona_docente AS zd ON zd.cod_doc = doc_tem.cod_doc  "
				+ "LEFT JOIN zona ON zona.cod_zon = zd.cod_zon "
				+ "LEFT JOIN (SELECT cod_zon, IF(cod_zon=1,1,IF(cod_zon=2,1,IF(cod_zon=3,1,IF(cod_zon=4,1,IF(cod_zon=5,1,IF(cod_zon=6,1,2)))))) AS ordenZona "
				+ "FROM zona) AS ORDZONA ON ORDZONA.cod_zon = zd.cod_zon "
				+ "LEFT JOIN informe AS inf ON inf.cod_doc = doc_tem.cod_doc "
				+ "LEFT JOIN ficha_evaluacion AS fic_eva ON fic_eva.cod_prof = doc_tem.cod_doc AND fic_eva.cod_per_acad = '" + periodo + "' "
				+ "GROUP BY doc_tem.cod_doc  "
				+ "ORDER BY ordenZona, ordInfor,promedio DESC;";
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente doc = new Docente();
				doc.setCodigoDocente(rs.getString("cod_doc"));
				doc.setApe_pro(rs.getString("apellido_doc"));
				doc.setNom_pro(rs.getString("nombre_doc"));
				doc.setZona(rs.getString("nom_zon"));
				doc.setRespuestaInforme(rs.getString("res_inf"));
				doc.setPuntaje(rs.getString("promedio"));
				doc.setCod_tip(rs.getInt("tipoDoc"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public ArrayList<Docente> filtroDocentesPrimSec(String periodo, String filtro) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			if (filtro.equals("")) {
				filtro = "";
			} else {
				filtro = "WHERE doc_tem.apellido_doc LIKE '%" + filtro + "%' ";
			}

			String query = "SELECT  "
				+ "doc_tem.cod_doc,  "
				+ "doc_tem.apellido_doc,  "
				+ "doc_tem.nombre_doc,  "
				+ "zd.cod_zon, "
				+ "IF(zona.nom_zon IS NULL,'',zona.nom_zon) as nom_zon, "
				+ "IF(ORDZONA.ordenZona IS NULL,3,ORDZONA.ordenZona) AS ordenZona,  "
				+ "inf.res_inf , IF(inf.res_inf IS NULL,1,IF(inf.res_inf= 0,1,2)) AS ordInfor, "
				+ "IF(ROUND((SUM(IF(fic_eva.cal_exa='Sin puntaje',NULL,fic_eva.cal_exa))+SUM(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc)))/(COUNT(IF(fic_eva.cal_exa='vacio',NULL,fic_eva.cal_exa))+COUNT(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc))),2) IS NULL,'-',ROUND((SUM(IF(fic_eva.cal_exa='Sin puntaje',NULL,fic_eva.cal_exa))+SUM(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc)))/(COUNT(IF(fic_eva.cal_exa='vacio',NULL,fic_eva.cal_exa))+COUNT(IF(fic_eva.cal_enc='Sin puntaje',NULL,fic_eva.cal_enc))),2)) AS promedio, "
				+ "IF(doc_tem.cod_doc LIKE 'P%',2,1) AS tipoDoc "
				+ "FROM docente_temporal AS doc_tem "
				+ "LEFT JOIN zona_docente AS zd ON zd.cod_doc = doc_tem.cod_doc  "
				+ "LEFT JOIN zona ON zona.cod_zon = zd.cod_zon "
				+ "LEFT JOIN (SELECT cod_zon, IF(cod_zon=1,1,IF(cod_zon=2,1,IF(cod_zon=3,1,IF(cod_zon=4,1,IF(cod_zon=5,1,IF(cod_zon=6,1,2)))))) AS ordenZona "
				+ "FROM zona) AS ORDZONA ON ORDZONA.cod_zon = zd.cod_zon "
				+ "LEFT JOIN informe AS inf ON inf.cod_doc = doc_tem.cod_doc "
				+ "LEFT JOIN ficha_evaluacion AS fic_eva ON fic_eva.cod_prof = doc_tem.cod_doc AND fic_eva.cod_per_acad = '" + periodo + "' "
				+ " " + filtro + " GROUP BY doc_tem.cod_doc  "
				+ "ORDER BY ordenZona, ordInfor,promedio DESC;";
			System.out.println("filtroDocentesPrimSec => " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente doc = new Docente();
				doc.setCodigoDocente(rs.getString("cod_doc"));
				doc.setApe_pro(rs.getString("apellido_doc"));
				doc.setNom_pro(rs.getString("nombre_doc"));
				doc.setZona(rs.getString("nom_zon"));
				doc.setRespuestaInforme(rs.getString("res_inf"));
				doc.setPuntaje(rs.getString("promedio"));
				doc.setCod_tip(rs.getInt("tipoDoc"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public Docente consultarInforme(String codigoDocente,String codSede) throws Exception {
		String base = "horario";

		Docente docente = new Docente();
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT  \n" +
				"			 i.nom_doc,  \n" +
				"			 i.mot_int,  \n" +
				"			 i.arg_inf,  \n" +
				"			 i.nom_sed,  \n" +
				"			 DATE(i.fec_inf) AS fec_inf,  \n" +
				"			 i.res_inf  \n" +
				"			 FROM  \n" +
				"			 informe i \n" +
				"INNER JOIN sede s ON s.cod_loc=i.cod_sed\n" +
				"			 WHERE  \n" +
				"			 i.cod_doc = '"+codigoDocente+"' and i.cod_sed='"+codSede+"'";
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				docente.setRespuestaInforme(rs.getString("res_inf"));
				docente.setFechaInforme(rs.getString("fec_inf"));
				docente.setNombreSede(rs.getString("nom_sed"));
				docente.setMotivo(rs.getString("mot_int"));
				docente.setArgumento(rs.getString("arg_inf"));
				docente.setNombreDocente(rs.getString("nom_doc"));

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

	@Override
	public ArrayList<Docente> listaDocentesPorArea(String codigoArea, String apellidoDocente, int inicio, int cantidad) throws Exception {

		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		String base2 = "sacoolive3";
		Connection cnx = null;
		Connection cnx2 = null;
		String cadena = "";
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			cnx2 = MySqlDAOFactory.obtenerConexion(base2);
			Statement st = cnx.createStatement();
			Statement st2 = cnx2.createStatement();
			String query = "SELECT\n"
				+ "cod_doc AS cadena\n"
				+ "FROM\n"
				+ "horarios_docente.area_docente AS ad\n"
				+ "WHERE\n"
				+ "ad.cod_are = '" + codigoArea + "'\n"
				+ "GROUP BY cod_doc\n"
				+ " ORDER BY cod_doc ";
//            String query = "SELECT\n"
//                    + "CONVERT(GROUP_CONCAT(cod_doc) USING 'utf8') AS cadena\n"
//                    + "\n"
//                    + "FROM\n"
//                    + "horarios_docente.area_docente AS ad\n"
//                    + "WHERE\n"
//                    + "ad.cod_are = '" + codigoArea + "'";
//            System.out.println("listaDocentesPorArea (1) ======> " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				if (cadena.equals("")) {
					cadena = rs.getString("cadena");
				} else {
					cadena += "," + rs.getString("cadena");
				}

			}
//            System.out.println("cadena = >" + cadena);
			String where = "";
			if (apellidoDocente.equals("")) {
				where = "";
			} else {
				where = "AND profesor.apellido LIKE '%" + apellidoDocente + "%' ";
			}

			String query2 = "SELECT\n"
				+ "profesor.codprofesor,\n"
				+ "profesor.apellido,\n"
				+ "profesor.nombre\n"
				+ "FROM\n"
				+ "profesor\n"
				+ "WHERE profesor.estadoprofe='Y' AND \n"
				+ "codprofesor IN (" + cadena + ") " + where + " ORDER BY apellido,nombre LIMIT " + inicio + ", " + cantidad + ";";

//            System.out.println("listaDocentesPorArea ======> " + query2);
			ResultSet rs2 = st2.executeQuery(query2);
			while (rs2.next()) {
				Docente docente = new Docente();
				docente.setCodigoDocente(rs2.getString("codprofesor"));
				docente.setNom_pro(rs2.getString("nombre"));
				docente.setApe_pro(rs2.getString("apellido"));
				lista.add(docente);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
			cnx2.close();
		}
		return lista;
	}

	@Override
	public int cantListaDocentePorArea(String codigoArea, String apellidoDocente) throws Exception {
		String base = "horario";
		String base2 = "sacoolive3";
		Connection cnx = null;
		Connection cnx2 = null;
		int cantidad = 0;
		String cadena = "";
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			cnx2 = MySqlDAOFactory.obtenerConexion(base2);
			Statement st = cnx.createStatement();
			Statement st2 = cnx2.createStatement();
			String query = "SELECT\n"
				+ "cod_doc AS cadena\n"
				+ "FROM\n"
				+ "horarios_docente.area_docente AS ad\n"
				+ "WHERE\n"
				+ "ad.cod_are = '" + codigoArea + "'\n"
				+ "GROUP BY cod_doc\n"
				+ " ORDER BY cod_doc ";
//            System.out.println("listaDocentesPorArea (1) ======> " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				if (cadena.equals("")) {
					cadena = rs.getString("cadena");
				} else {
					cadena += "," + rs.getString("cadena");
				}

			}

			String where = "";
			if (!apellidoDocente.equals("")) {
				where = "AND profesor.apellido LIKE '%" + apellidoDocente + "%' ";
			} else {
				where = "";
			}

			String query2 = "SELECT\n"
				+ "COUNT(profesor.codprofesor) AS cantidad \n"
				+ "FROM\n"
				+ "profesor\n"
				+ "WHERE profesor.estadoprofe='Y' AND \n"
				+ "codprofesor IN (" + cadena + ") " + where + " ;";
			ResultSet rs2 = st2.executeQuery(query2);
			if (rs2.next()) {
				cantidad = rs2.getInt("cantidad");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
			cnx2.close();
		}
		return cantidad;
	}

	@Override
	public int verificarCrucesPorPeriodo(String codDocente, String codigoArea, String codigoPeriodo) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT count(h.cod_doc) as cant FROM horario_curso_docente as h  "
				+ "INNER JOIN curso on curso.cod_cur=h.cod_cur "
				+ "INNER JOIN plana on plana.cod_pla=curso.cod_pla "
				+ "INNER JOIN area on area.cod_are=plana.cod_are "
				+ "WHERE h.cod_doc='" + codDocente + "' and area.cod_are='" + codigoArea + "' and h.cod_per='" + codigoPeriodo + "' and h.est_hcd='1' ";
			System.out.println("verificarCrucesPorPeriodo==> " + queryConsulta);
			ResultSet rs = st.executeQuery(queryConsulta);
			if (rs.next()) {
				dato = rs.getInt("cant");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public Docente consultarDatosDocenteConArea(String codigoDocente, String codigoPeriodo) throws Exception {
		Docente docente = new Docente();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT\n"
				+ "dd.codDoc,\n"
				+ "GROUP_CONCAT(a.nom_are) AS areas,\n"
				+ "dd2.cel_dat_per,\n"
				+ "dd2.tel_dat_per,\n"
				+ "u.nom_dep_ubi,\n"
				+ "u.nom_pro_ubi,\n"
				+ "u.nom_dis_ubi,\n"
				+ "dd2.cor_dat_per,\n"
				+ "dd2.nom_dir\n"
				+ "FROM\n"
				+ "disponibilidad_docente AS dd\n"
				+ "INNER JOIN area_docente AS ar ON dd.codDoc = ar.cod_doc\n"
				+ "INNER JOIN area AS a ON ar.cod_are = a.cod_are\n"
				+ "LEFT JOIN datos_docente dd2 ON dd2.cod_doc = dd.codDoc\n"
				+ "LEFT JOIN ubigeo u ON u.cod_dep_ubi = dd2.cod_dep AND u.cod_pro_ubi = dd2.cod_prov AND u.cod_dis_ubi = dd2.cod_dis\n"
				+ "WHERE\n"
				+ "dd.cod_per = '" + codigoPeriodo + "'\n"
				+ "AND dd.estDis = '1' AND dd.codDoc = '" + codigoDocente + "'\n"
				+ "GROUP BY dd.codDoc\n"
				+ "ORDER BY codDoc";
//            System.out.println("consultarDatosDocenteConArea==> " + queryConsulta);
			ResultSet rs = st.executeQuery(queryConsulta);
			if (rs.next()) {
				docente.setCodigoDocente(rs.getString("codDoc"));
				docente.setNombreArea(rs.getString("areas"));
				docente.setNombreDDis(rs.getString("nom_dis_ubi"));
				docente.setTelefono(rs.getString("tel_dat_per"));
				docente.setCell(rs.getString("cel_dat_per"));
				docente.setCorreo(rs.getString("cor_dat_per"));

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

	@Override
	public Docente consultarDatosDocenteConPlana(String codigoDocente, String codigoPeriodo, String codigoArea) throws Exception {
		Docente docente = new Docente();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String queryConsulta = "SELECT\n"
				+ "dd.codDoc,\n"
				+ "GROUP_CONCAT(p.nom_pla) AS planas,\n"
				+ "dd2.cel_dat_per,\n"
				+ "dd2.tel_dat_per,\n"
				+ "u.nom_dep_ubi,\n"
				+ "u.nom_pro_ubi,\n"
				+ "u.nom_dis_ubi,\n"
				+ "dd2.cor_dat_per,\n"
				+ "dd2.nom_dir\n"
				+ "FROM\n"
				+ "disponibilidad_docente AS dd\n"
				+ "INNER JOIN area_docente AS ar ON dd.codDoc = ar.cod_doc\n"
				+ "INNER JOIN area AS a ON ar.cod_are = a.cod_are\n"
				+ "LEFT JOIN plana_docente pd ON pd.cod_doc = dd.codDoc\n"
				+ "LEFT JOIN plana p ON p.cod_pla = pd.cod_pla\n"
				+ "LEFT JOIN datos_docente dd2 ON dd2.cod_doc = dd.codDoc\n"
				+ "LEFT JOIN ubigeo u ON u.cod_dep_ubi = dd2.cod_dep AND u.cod_pro_ubi = dd2.cod_prov AND u.cod_dis_ubi = dd2.cod_dis\n"
				+ "WHERE\n"
				+ "dd.cod_per = '" + codigoPeriodo + "' AND a.cod_are='" + codigoArea + "' AND dd.codDoc='" + codigoDocente + "' \n"
				+ "AND dd.estDis = '1'\n"
				+ "GROUP BY dd.codDoc\n";
			System.out.println("consultarDatosDocenteConPlana==> " + queryConsulta);
			ResultSet rs = st.executeQuery(queryConsulta);
			if (rs.next()) {
				docente.setCodigoDocente(rs.getString("codDoc"));
				docente.setNombrePlana(rs.getString("planas"));
				docente.setNombreDDis(rs.getString("nom_dis_ubi"));
				docente.setTelefono(rs.getString("tel_dat_per"));
				docente.setCell(rs.getString("cel_dat_per"));
				docente.setCorreo(rs.getString("cor_dat_per"));

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

	@Override
	public ArrayList<Docente> listaDocentesTablaMerito(String codigoPlana, String codigoPeriodoAcademico) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT\n"
				+ "hcd.cod_doc\n"
				+ "FROM\n"
				+ "horario_curso_docente AS hcd\n"
				+ "WHERE\n"
				+ "hcd.est_hcd = 1 AND\n"
				+ "hcd.cod_per = '" + codigoPeriodoAcademico + "' AND\n"
				+ "hcd.cod_cur IN (SELECT c.cod_cur FROM curso AS c WHERE c.cod_pla = '" + codigoPlana + "' AND c.est_cur = '1')\n"
				+ "GROUP BY hcd.cod_doc";
			System.out.println("listaDocentesTablaMerito => " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente docente = new Docente();
				docente.setCodigoDocente(rs.getString("cod_doc"));

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

	@Override
	public ArrayList<Docente> listaDocentesPorArea(String codigoArea, String apellidoDocente) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		String base2 = "sacoolive3";
		Connection cnx = null;
		Connection cnx2 = null;
		String cadena = "";
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			cnx2 = MySqlDAOFactory.obtenerConexion(base2);
			Statement st = cnx.createStatement();
			Statement st2 = cnx2.createStatement();
			String query = "SELECT\n"
				+ "cod_doc AS cadena\n"
				+ "FROM\n"
				+ "horarios_docente.area_docente AS ad\n"
				+ "WHERE\n"
				+ "ad.cod_are = '" + codigoArea + "'\n"
				+ "GROUP BY cod_doc\n"
				+ " ORDER BY cod_doc ";
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				if (cadena.equals("")) {
					cadena = rs.getString("cadena");
				} else {
					cadena += "," + rs.getString("cadena");
				}

			}
//            System.out.println("cadena = >" + cadena);
			String where = "";
			if (apellidoDocente.equals("")) {
				where = "";
			} else {
				where = "AND profesor.apellido LIKE '%" + apellidoDocente + "%' ";
			}

			String query2 = "SELECT\n"
				+ "profesor.codprofesor,\n"
				+ "profesor.apellido,\n"
				+ "profesor.nombre\n"
				+ "FROM\n"
				+ "profesor\n"
				+ "WHERE profesor.estadoprofe='Y' AND \n"
				+ "codprofesor IN (" + cadena + ") " + where + " ORDER BY apellido,nombre ;";

//            System.out.println("listaDocentesPorArea ======> " + query2);
			ResultSet rs2 = st2.executeQuery(query2);
			while (rs2.next()) {
				Docente docente = new Docente();
				docente.setCodigoDocente(rs2.getString("codprofesor"));
				docente.setNom_pro(rs2.getString("nombre"));
				docente.setApe_pro(rs2.getString("apellido"));
				lista.add(docente);
			}

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

		return lista;
	}

	@Override
	public int cantidadCoordinadorAsignado(String codigoArea, String codigoPeriodoAcademico) throws Exception {
		int cantidad = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT COUNT(cod_coordinador_area) as cantidad\n"
				+ "FROM coordinador_area WHERE cod_per = '" + codigoPeriodoAcademico + "' AND cod_are = '" + codigoArea + "' ";
//            System.out.println("cantidadCoordinadorAsignado=> "+query);
			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				cantidad = rs.getInt("cantidad");
			}

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

	@Override
	public int consultarCoordinadorArea(String codigoDocente, String codigoPeriodoAcademico, String codigoArea) throws Exception {
		int coor = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT COUNT(cod_coordinador_area) as cantidad\n"
				+ "FROM coordinador_area WHERE cod_doc = '" + codigoDocente + "' AND cod_per = '" + codigoPeriodoAcademico + "' AND cod_are = '" + codigoArea + "' ";
//            System.out.println("consultarCoordinadorPlana=> "+query);
			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				coor = rs.getInt("cantidad");
			}

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

	@Override
	public int quitarAsignacionCoordinador(String codigoDocente, String codigoPeriodoAcademico, String codigoArea) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "DELETE FROM coordinador_area WHERE (cod_doc='" + codigoDocente + "' AND cod_per='" + codigoPeriodoAcademico + "' AND cod_are = '" + codigoArea + "')";

//            System.out.println("quitarAsignacionCoordinador=> "+query);
			dato = st.executeUpdate(query);

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

	@Override
	public int asignarCoordinador(String codigoDocente, String codigoPeriodoAcademico, String codigoArea) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "INSERT INTO coordinador_area (\n"
				+ "	cod_doc,\n"
				+ "	cod_per,\n"
				+ "	cod_are\n"
				+ ")\n"
				+ "VALUES\n"
				+ "	('" + codigoDocente + "', '" + codigoPeriodoAcademico + "', '" + codigoArea + "');";

//            System.out.println("asignarCoordinador=> "+query);
			dato = st.executeUpdate(query);

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

	@Override
	public ArrayList<Docente> listaDocentesPorPlana(String codigoPlana, String codigoPeriodoAcademico, String apellidoDocente) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		String base2 = "sacoolive3";
		Connection cnx = null;
		Connection cnx2 = null;
		String cadena = "";
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			cnx2 = MySqlDAOFactory.obtenerConexion(base2);
			Statement st = cnx.createStatement();
			Statement st2 = cnx2.createStatement();
			String query = "SELECT\n"
				+ "plana_docente.cod_doc\n"
				+ "FROM\n"
				+ "plana_docente\n"
				+ "WHERE\n"
				+ "plana_docente.cod_pla = '" + codigoPlana + "' AND\n"
				+ "plana_docente.cod_per = '" + codigoPeriodoAcademico + "'";
//            System.out.println("listaDocentesPorArea1 ======> " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				if (cadena.equals("")) {
					cadena = rs.getString("cod_doc");
				} else {
					cadena += "," + rs.getString("cod_doc");
				}

			}
//            System.out.println("cadena = >" + cadena);
			String where = "";
			if (apellidoDocente.equals("")) {
				where = "";
			} else {
				where = "AND profesor.apellido LIKE '%" + apellidoDocente + "%' ";
			}

			String query2 = "SELECT\n"
				+ "profesor.codprofesor,\n"
				+ "profesor.apellido,\n"
				+ "profesor.nombre\n"
				+ "FROM\n"
				+ "profesor\n"
				+ "WHERE profesor.estadoprofe='Y' AND \n"
				+ "codprofesor IN (" + cadena + ") " + where + " ORDER BY apellido,nombre ;";

//            System.out.println("listaDocentesPorArea ======> " + query2);
			ResultSet rs2 = st2.executeQuery(query2);
			while (rs2.next()) {
				Docente docente = new Docente();
				docente.setCodigoDocente(rs2.getString("codprofesor"));
				docente.setNom_pro(rs2.getString("nombre"));
				docente.setApe_pro(rs2.getString("apellido"));
				lista.add(docente);
			}

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

		return lista;
	}

	@Override
	public int cantidadCoordinadorAsignadoPlana(String codigoPlana, String codigoPeriodoAcademico) throws Exception {
		int cantidad = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT COUNT(cod_coordinador_plana) as cantidad\n"
				+ "FROM coordinador_plana WHERE cod_per = '" + codigoPeriodoAcademico + "' AND cod_pla = '" + codigoPlana + "' ";
//            System.out.println("cantidadCoordinadorAsignado=> "+query);
			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				cantidad = rs.getInt("cantidad");
			}

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

	@Override
	public int consultarCoordinadorPlana(String codigoDocente, String codigoPeriodoAcademico, String codigoPlana) throws Exception {
		int coor = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "SELECT COUNT(cod_coordinador_plana) as cantidad\n"
				+ "FROM coordinador_plana WHERE cod_doc = '" + codigoDocente + "' AND cod_per = '" + codigoPeriodoAcademico + "' AND cod_pla = '" + codigoPlana + "' ";
//            System.out.println("consultarCoordinadorPlana=> "+query);
			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				coor = rs.getInt("cantidad");
			}

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

	@Override
	public int quitarAsignacionCoordinadorPlana(String codigoDocente, String codigoPeriodoAcademico, String codigoPlana) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "DELETE FROM coordinador_plana WHERE (cod_doc='" + codigoDocente + "' AND cod_per='" + codigoPeriodoAcademico + "' AND cod_pla = '" + codigoPlana + "')";
			System.out.println("quitarAsignacionCoordinadorPlana=> " + query);
			dato = st.executeUpdate(query);

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

	@Override
	public int asignarCoordinadorPlana(String codigoDocente, String codigoPeriodoAcademico, String codigoPlana) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "INSERT INTO coordinador_plana (\n"
				+ "	cod_doc,\n"
				+ "	cod_per,\n"
				+ "	cod_pla\n"
				+ ")\n"
				+ "VALUES\n"
				+ "	('" + codigoDocente + "', '" + codigoPeriodoAcademico + "', '" + codigoPlana + "');";

//            System.out.println("asignarCoordinadorPlana=> "+query);
			dato = st.executeUpdate(query);

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

	@Override
	public ArrayList<Docente> filtroDocentesPrimSec(String periodo, String filtro, String codigoAula) throws Exception {
		ArrayList<Docente> lista = new ArrayList<Docente>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			if (filtro.equals("")) {
				filtro = "";
			} else {
				filtro = "WHERE TABLA2.apellido_doc LIKE '%" + filtro + "%' ";
			}

			String query = "SELECT \n"
				+ "TABLA2.cod_doc,\n"
				+ "TABLA2.apellido_doc,\n"
				+ "TABLA2.nombre_doc,\n"
				+ "TABLA2.nom_zon,\n"
				+ "TABLA2.cantidad,\n"
				+ "TABLA2.proPla,\n"
				+ "TABLA2.exa,\n"
				+ "TABLA2.not_enc,\n"
				+ "TABLA2.promedio,\n"
				+ "TABLA2.tipoDoc,\n"
				+ "IF(TABLA2.cantidad = 3,4,IF(TABLA2.cantidad = 2,3,IF(TABLA2.cantidad = 1,2,0))) ordenCantidad,\n"
				+ "IF(TABLA2.orden2 = 3,IF(TABLA2.exa >=9.00 AND TABLA2.not_enc >=9.00,2,1),IF(TABLA2.orden2 = 2,IF(TABLA2.exa >=9.00 AND TABLA2.not_enc >=9.00,2,1),TABLA2.orden2)) as orden3\n"
				+ "FROM (\n"
				+ "		SELECT \n"
				+ "		TABLA.cod_doc,\n"
				+ "		TABLA.apellido_doc,\n"
				+ "		TABLA.nombre_doc,\n"
				+ "		TABLA.nom_zon,\n"
				+ "		IF(TABLA.cod_doc LIKE 'P%',2,1) AS tipoDoc,\n"
				+ "		COUNT(tab_eva.cod_tabla_evaluacion) as cantidad,\n"
				+ "		IF(IFNULL(tab_eva.pro_pla,'') = '','',ROUND(AVG(tab_eva.pro_pla),2)) AS proPla, \n"
				+ "		IF(IFNULL(tab_eva.exa,'') = '','',ROUND(AVG(tab_eva.exa),2)) AS exa,\n"
				+ "		IF(IFNULL(tab_eva.not_enc,'') = '','',ROUND(AVG(tab_eva.not_enc),2)) AS not_enc,\n"
				+ "		IF(IFNULL(tab_eva.prom,'') = '','',ROUND(AVG(tab_eva.prom),2)) AS promedio,\n"
				+ "		IF(CAST(IF(IFNULL(tab_eva.exa,'') = '',0,1)+IF(IFNULL(tab_eva.not_enc,'') = '',0,1)+IF(IFNULL(TABLA.nom_zon,'') = '',0,1) AS UNSIGNED) = 3,3,\n"
				+ "		IF(IF(IFNULL(tab_eva.exa,'') = '',0,1)+IF(IFNULL(tab_eva.not_enc,'') = '',0,1)=2,2,IF(IFNULL(tab_eva.exa,'') <> '' OR IFNULL(tab_eva.not_enc,'') <> '' OR IFNULL(TABLA.nom_zon,'') <> '',1,0))) AS orden2\n"
				+ "		FROM (\n"
				+ "				SELECT\n"
				+ "				dt.cod_doc,\n"
				+ "				dt.apellido_doc,\n"
				+ "				dt.nombre_doc,\n"
				+ "				IF(z.nom_zon IS NULL,0,1) as orderZona,\n"
				+ "				IF(z.nom_zon IS NULL,'',z.nom_zon) as nom_zon \n"
				+ "				FROM\n"
				+ "				docente_temporal AS dt\n"
				+ "				LEFT JOIN zona_docente AS zd ON zd.cod_doc = dt.cod_doc\n"
				+ "				LEFT JOIN zona_sede AS zs ON zs.cod_zon = zd.cod_zon AND zs.cod_loc IN (SELECT aula.codlocal FROM aula WHERE codaula IN ('" + codigoAula + "'))\n"
				+ "				LEFT JOIN zona AS z ON z.cod_zon = zs.cod_zon\n"
				+ "			) TABLA\n"
				+ "		LEFT JOIN tabla_evaluacion AS tab_eva ON tab_eva.cod_doc = TABLA.cod_doc AND tab_eva.cod_per_gen = (SELECT cod_per_gen FROM periodo_academico WHERE cod_per = '" + periodo + "') \n"
				+ "		GROUP BY TABLA.cod_doc \n"
				+ "		ORDER BY orden2 DESC\n"
				+ "	) TABLA2\n"
				+ "	" + filtro + " GROUP BY TABLA2.cod_doc		\n"
				+ "ORDER BY promedio desc,ordenCantidad DESC, orden3 DESC";
			System.out.println("filtroDocentesPrimSec(3) => " + query);
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				Docente doc = new Docente();
				doc.setCodigoDocente(rs.getString("cod_doc"));
				doc.setApe_pro(rs.getString("apellido_doc"));
				doc.setNom_pro(rs.getString("nombre_doc"));
				doc.setZona(rs.getString("nom_zon"));
				doc.setNotaExamen(rs.getString("exa"));
				doc.setNotaEncuesta(rs.getString("not_enc"));
				doc.setNotaPlana(rs.getString("proPla"));
				doc.setNotaPromedio(rs.getString("promedio"));
				doc.setCantidad(rs.getInt("cantidad"));
				doc.setCod_tip(rs.getInt("tipoDoc"));
				lista.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public String darDeBaja(String codigo, String periodo, int usuario, String ultimoDia) throws Exception {
		String respuesta = "";
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		ResultSet rs = null;
		PreparedStatement pst = null;
		Statement st = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			cnx.setAutoCommit(false);
			st = cnx.createStatement();
			String query = "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_doc = ? and cod_per= ? ";
                        
                        String deshabilitarDisponibilidad = "UPDATE disponibilidad_docente SET estDis='0' WHERE codDoc = '"+codigo+"'  and cod_per= '"+periodo+"' ";
                        
                        
			pst = cnx.prepareStatement(query);
                        
                        st.executeUpdate(deshabilitarDisponibilidad);
                        
                        
			pst.setString(1, codigo);
			pst.setString(2, periodo);
			rs = pst.executeQuery();

			while (rs.next()) {
				String codHorarioDoc = rs.getString("cod_hcd");
				String codAula = rs.getString("codAula");
				String dia = rs.getString("dia");
				String Posicionbloque = rs.getString("pos_blo");
				String Hini = rs.getString("hor_ini");
				String Hfin = rs.getString("hor_fin");
				String codigoTurno = rs.getString("cod_tur");
				String codigoCurso = rs.getString("cod_cur");
				String codigoDocente = rs.getString("cod_doc");
				String codPeriodo = rs.getString("cod_per");
				String codigoGrupo = rs.getString("codGru");

				String queryHistorial = "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,ultimoDia)  "
					+ "VALUES ('" + codAula + "','" + dia + "','" + Posicionbloque + "','" + Hini + "','" + Hfin + "','" + codigoTurno + "','" + codigoCurso + "','" + codigoDocente + "','1','" + codPeriodo + "','" + codigoGrupo + "',CURDATE(),CURTIME(),'DADO DE BAJA'," + usuario + ",'" + ultimoDia + "')";
				st.executeUpdate(queryHistorial);

				String queryDelete = "DELETE FROM horario_curso_docente WHERE cod_hcd='" + codHorarioDoc + "' ";
				st.executeUpdate(queryDelete);
			}

			cnx.commit();
			respuesta = "exito";

//            System.out.println("asignarCoordinadorPlana=> "+query);
//            dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
			respuesta = e.getMessage();
			cnx.rollback();
		} finally {
			cnx.close();
		}
		return respuesta;
	}

	@Override
	public ArrayList<HorarioCF> listarCambiosFijo(String fechaDesde, String fechaHasta) throws Exception {
		ArrayList<HorarioCF> lista = new ArrayList<HorarioCF>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

			String query = "SELECT tbl1.fecha,tbl1.des_loc,tbl1.dia,tbl1.turno,CONCAT(tbl1.ingreso,\" - \",tbl1.salida)as horario,tbl1.grupoAcademico,tbl1.aulas,\n" +
													"\n" +
													"IF(tbl1.cantLib=0,tbl1.cantAulas*tbl1.computable,(tbl1.computable*3)-(tbl1.cantLib*tbl1.computable)) cantMin,\n" +
													"\n" +
													"tbl1.doc_saliente,tbl1.nom_cur,tbl1.fechafin,tbl1.motivoCambio,tbl1.doc_entrante,tbl1.curso_entrante,\n" +
													"\n" +
													"tbl1.fechainicio,tbl1.condicionTrabajador,tbl1.observacion\n" +
													"FROM (\n" +
													"SELECT tbl.fecha,tbl.dia,tbl.des_loc,MIN(tbl.ingreso) ingreso,MAX(tbl.salida) salida,SUM(tbl.cantLib) cantLib,\n" +
													"tbl.turno,REPLACE(GROUP_CONCAT(tbl.aula ORDER BY ingreso ),',','-') aulas,SUM(tbl.cantAulas) cantAulas,tbl.grupoAcademico,\n" +
													"tbl.computable,tbl.doc_saliente,tbl.nom_cur,tbl.fechafin,tbl.motivoCambio,tbl.doc_entrante,tbl.curso_entrante,tbl.cod_cur,\n" +
													"tbl.fechainicio,tbl.condicionTrabajador,tbl.observacion\n" +
													"FROM (\n" +
													"SELECT hcd.cod_hcd,hcd.fecha,hcd.dia numdia,ELT(hcd.dia, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS dia,\n" +
													"s.des_loc,TIME_FORMAT(hcd.hor_ini,'%H:%i') ingreso,TIME_FORMAT(hcd.hor_fin,'%H:%i') salida,IF(tg.destipogrado ='LIBRE',1,0) cantLib,\n" +
													"IF (hcd.hor_ini>='07:00' AND hcd.hor_fin<'14:20','M','T') turno,\n" +
													"TRIM(IF(tg.destipogrado ='LIBRE',tg.abrTipGrado,REPLACE(REPLACE(REPLACE(REPLACE(a.nombre,'TO ',''),'DO ',''),'RO ',''),'Y ','y'))) aula,\n" +
													"1 cantAulas,IF(g.abrGrado LIKE '%1' OR g.abrGrado LIKE '%2','A',IF(a.codtipocentro = 2,'C','B')) grupoAcademico,\n" +
													"IF(a.codtipocentro = 2,120,80) computable,CONCAT(pf1.apellido,\" \",pf1.nombre) as doc_saliente ,c2.nom_cur,IF(hcd.fechafin = '','-',hcd.fechafin) fechafin,\n" +
													"hcd.motivoCambio,CONCAT(pf2.apellido,\" \",pf2.nombre)as doc_entrante ,c.nom_cur as curso_entrante,hcd.cod_cur,\n" +
													"IF(hcd.fechainicio = '','-',hcd.fechainicio) fechainicio,hcd.condicionTrabajador,hcd.observacion\n" +
													"FROM  historial_horario  hcd\n" +
													"INNER JOIN curso c ON c.cod_cur=hcd.cod_cur\n" +
													"INNER JOIN curso c2 ON c2.cod_cur=hcd.cod_cur_reemp\n" +
													"INNER JOIN sacoolive3.profesor pf1 ON pf1.codprofesor=hcd.cod_doc_reemp\n" +
													"INNER JOIN sacoolive3.profesor pf2 ON pf2.codprofesor=hcd.cod_doc\n" +
													"INNER JOIN aula a ON a.codaula=hcd.codAula\n" +
													"INNER JOIN grado g on g.codgrado = a.codgrado  \n" +
													"INNER JOIN tipo_grado tg ON g.codtipogrado=tg.codtipogrado\n" +
													"INNER JOIN sede s ON s.cod_loc=a.codlocal\n" +
													"WHERE  \n" +
													"hcd.fecha  BETWEEN ? AND ? AND accion='CAMBIO FIJO'\n" +
													"\n" +
													") tbl\n" +
													"GROUP BY tbl.fecha,tbl.dia,tbl.des_loc,tbl.turno,tbl.grupoAcademico,tbl.cantAulas,tbl.doc_saliente,\n" +
													"tbl.nom_cur,tbl.fechafin,tbl.motivoCambio,tbl.doc_entrante,tbl.curso_entrante,tbl.cod_cur,\n" +
													"tbl.fechainicio,tbl.condicionTrabajador \n" +
                           ") tbl1";

//            String query = ""
//              + "SELECT "
//              + "		s.des_loc, "
//              + "		GROUP_CONCAT(CONCAT(grado.abrGrado,seccion.desseccion)) aulas, "
//              + "		dia, "
//              + "		MIN(hor_ini) hora_ini, "
//              + "		MAX(hor_fin) hora_fin, "
//              + "               ar.nom_are, "
//              + "		c1.nom_cur curso, "
//              + "		c2.nom_cur curso_reemp, "
//              + "		cod_doc, "
//              + "		date_format(fecha, '%d/%m/%Y') fecha, "
//              + "		date_format( "
//              + "			adddate(fecha, 7), "
//              + "			'%d/%m/%Y' "
//              + "		) fechaIngreso, "
//              + "		cod_doc_reemp, "
//              + "		motivoCambio, "
//              + "		observacion, "
//              + "		condicionTrabajador, "
//              + "               z.nom_zon "
//              + "	FROM "
//              + "		historial_horario hh "
//              + "	inner join aula a on a.codaula = hh.codAula "
//              + "	inner JOIN sede s on s.cod_loc = a.codlocal "
//              + "	inner join seccion on seccion.codseccion = a.codseccion "
//              + "	inner join grado on grado.codgrado = a.codgrado "
//              + "	INNER JOIN curso c1 ON c1.cod_cur = hh.cod_cur "
//              + "	INNER JOIN curso c2 ON c2.cod_cur = hh.cod_cur_reemp "
//              + "       inner join plana p on p.cod_pla = c1.cod_pla "
//              + "	inner join area ar on ar.cod_are = p.cod_pla "
//              + "       left join zona_sede zs on zs.cod_loc = s.cod_loc "
//              + "	left join zona z on z.cod_zon = zs.cod_zon "
//              + "	WHERE "
//              + "		accion = 'CAMBIO FIJO' "
//              + "	AND est_hcd = 1 "
//              + "	AND fecha BETWEEN ? "
//              + "	AND ? "
//              + "	GROUP BY "
//              + "		s.des_loc, "
//              + "		dia, "
//              + "		hh.cod_doc ";
			PreparedStatement st = cnx.prepareStatement(query);
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaInicio = dateFormat.parse(fechaDesde);
			Date fechaFin = dateFormat.parse(fechaHasta);

			st.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
			st.setTimestamp(2, new Timestamp(fechaFin.getTime()));
			System.out.println("QUERYY --->" + st);
			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				HorarioCF h = new HorarioCF();

				h.setFechaRegistro(rs.getDate("fecha"));
				h.setNombreSede(rs.getString("des_loc"));
				h.setDia(rs.getString("dia"));
				h.setHorario(rs.getString("horario"));
				h.setGrupoAcademico(rs.getString("grupoAcademico"));
				h.setCodigoAula(rs.getString("aulas"));
				h.setCantidadHoras(rs.getString("cantMin"));
				h.setDocenteSaliente(rs.getString("doc_saliente"));
				h.setCursoSaliente(rs.getString("nom_cur"));
				h.setFechaFin(rs.getString("fechafin"));
				h.setMotivoCambio(rs.getString("motivoCambio"));
				h.setDocenteEntrante(rs.getString("doc_entrante"));
				h.setCursoEntrante(rs.getString("curso_entrante"));
				h.setFechaInicio(rs.getString("fechainicio"));
				h.setCondicionTrabajador(rs.getString("condicionTrabajador"));
				h.setObservacion(rs.getString("observacion"));

				lista.add(h);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}
	
	@Override
	public ArrayList<HorarioCF> listarRegistrosNuevosYEliminados(String fechaDesde, String fechaHasta) throws Exception {
			ArrayList<HorarioCF> lista = new ArrayList<HorarioCF>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

			String query = "SELECT  \n" +
"             \n" +
"          tbl1.fecha,tbl1.des_loc,tbl1.dia,tbl1.turno,CONCAT(tbl1.ingreso,\" -\",tbl1.salida)as horario,tbl1.grupoAcademico,tbl1.aulas,\n" +
"\n" +
"            tbl1.hora,tbl1.docente,tbl1.nom_cur,\n" +
"if(tbl1.accion = 'REGISTRADO',tbl1.accion,'') as sincurso,if(tbl1.accion = 'ELIMINADO',tbl1.accion,'') as eliminado\n" +
"    				FROM (  \n" +
"              	SELECT tbl.cod_doc,tbl.fecha,tbl.dia,tbl.des_loc,MIN(tbl.ingreso) ingreso,MAX(tbl.salida) salida,SUM(tbl.cantLib) cantLib,  \n" +
"   \n" +
"    											tbl.turno, \n" +
"                          REPLACE(GROUP_CONCAT(DISTINCT tbl.aula ORDER BY ingreso ),',','-') aulas, \n" +
"                             SUM(tbl.cantAulas) cantAulas,tbl.grupoAcademico,  \n" +
"    											tbl.computable,tbl.hora,tbl.docente,tbl.accion,tbl.nom_cur \n" +
"    																FROM (  \n" +
"    																SELECT hcd.cod_doc,hcd.hora,hcd.cod_hcd,hcd.fecha,hcd.dia numdia,ELT(hcd.dia, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS dia,  \n" +
"    																s.des_loc, \n" +
"                                    TIME_FORMAT(hcd.hor_ini,'%H:%i') ingreso, \n" +
"                                    TIME_FORMAT(hcd.hor_fin,'%H:%i') salida, \n" +
"                                    IF(tg.destipogrado ='LIBRE',1,0) cantLib,  \n" +
"    																IF (hcd.hor_ini>='07:00' AND hcd.hor_fin<='14:30','M','T') turno,  \n" +
"   \n" +
"    																TRIM(IF(tg.destipogrado ='LIBRE',tg.abrTipGrado,REPLACE(REPLACE(REPLACE(REPLACE(a.nombre,'TO ',''),'DO ',''),'RO ',''),'Y ','y'))) aula,  \n" +
"   \n" +
"    																1 cantAulas,IF(g.abrGrado LIKE '%1%' OR g.abrGrado LIKE '%2%','A',IF(a.codtipocentro = 2,'C','B')) grupoAcademico,  \n" +
"    																				IF(a.codtipocentro = 2,240,360) computable, \n" +
"                                            CONCAT(pf1.apellido,',',pf1.nombre)as docente, \n" +
"                                    IF(hcd.accion = 'REGISTRADO','REGISTRADO','ELIMINADO') as accion,c.nom_cur \n" +
"   \n" +
"                               			FROM  historial_horario  hcd  \n" +
"    																INNER JOIN curso c ON c.cod_cur=hcd.cod_cur 	 \n" +
"    																INNER JOIN sacoolive3.profesor pf1 ON pf1.codprofesor=hcd.cod_doc 									 \n" +
"    																INNER JOIN aula a ON a.codaula=hcd.codAula  \n" +
"    																INNER JOIN grado g on g.codgrado = a.codgrado    \n" +
"    																INNER JOIN tipo_grado tg ON g.codtipogrado=tg.codtipogrado  \n" +
"    																INNER JOIN sede s ON s.cod_loc=a.codlocal  \n" +
"    														WHERE    \n" +
"    																	hcd.fecha  BETWEEN ?  AND ? and hcd.est_hcd=1 \n" +
"                                      AND (accion ='ELIMINADO' or accion='REGISTRADO') \n" +
"                                    \n" +
"    																					  \n" +
"    																	) tbl  \n" +
"    												GROUP BY tbl.fecha,tbl.dia,tbl.des_loc,tbl.turno,tbl.grupoAcademico,tbl.nom_cur,tbl.cantAulas \n" +
"                            ORDER BY tbl.hora DESC \n" +
"    									 \n" +
"    						) tbl1 ";


			PreparedStatement st = cnx.prepareStatement(query);
			
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaInicio = dateFormat.parse(fechaDesde);
			Date fechaFin = dateFormat.parse(fechaHasta);

			st.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
			st.setTimestamp(2, new Timestamp(fechaFin.getTime()));
			System.out.println("QUERYY --->" + st);
			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				HorarioCF h = new HorarioCF();

				h.setFechaRegistro(rs.getDate("fecha"));
				h.setNombreSede(rs.getString("des_loc"));
				h.setDia(rs.getString("dia"));
				h.setHorario(rs.getString("horario"));
				h.setGrupoAcademico(rs.getString("grupoAcademico"));
				h.setCodigoAula(rs.getString("aulas"));
				h.setHora(rs.getTime("hora"));
				
			  h.setDocenteEntrante(rs.getString("docente"));
				h.setCursoEntrante(rs.getString("nom_cur"));
				h.setMotivoCambio(rs.getString("sincurso"));
				h.setEstadoEliminado(rs.getString("eliminado"));

				lista.add(h);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
		
	}
	
	
	@Override
	public ArrayList<HorarioCF> listarEliminados(String fechaDesde, String fechaHasta) throws Exception {
			ArrayList<HorarioCF> lista = new ArrayList<HorarioCF>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

			String query = "SELECT \n" +
"            tbl1.fecha,tbl1.des_loc,tbl1.dia,tbl1.turno,CONCAT(tbl1.ingreso,\" - \",tbl1.salida)as horario,tbl1.grupoAcademico,tbl1.aulas,\n" +
"\n" +
"            tbl1.hora,tbl1.docente,tbl1.nom_cur,tbl1.accion\n" +
"						FROM ( \n" +
"													SELECT tbl.fecha,tbl.dia,tbl.des_loc,MIN(tbl.ingreso) ingreso,MAX(tbl.salida) salida,SUM(tbl.cantLib) cantLib, \n" +
"\n" +
"													tbl.turno,\n" +
"                          REPLACE(GROUP_CONCAT(DISTINCT tbl.aula ORDER BY ingreso ),',','-') aulas,\n" +
"                             SUM(tbl.cantAulas) cantAulas,tbl.grupoAcademico, \n" +
"													tbl.computable,tbl.hora,tbl.docente,tbl.accion,tbl.nom_cur\n" +
"																		FROM ( \n" +
"																		SELECT hcd.hora,hcd.cod_hcd,hcd.fecha,hcd.dia numdia,ELT(hcd.dia, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS dia, \n" +
"																		s.des_loc,\n" +
"                                    TIME_FORMAT(hcd.hor_ini,'%H:%i') ingreso,\n" +
"                                    TIME_FORMAT(hcd.hor_fin,'%H:%i') salida,\n" +
"                                    IF(tg.destipogrado ='LIBRE',1,0) cantLib, \n" +
"																		IF (hcd.hor_ini>='07:00' AND hcd.hor_fin<='14:30','M','T') turno, \n" +
"\n" +
"                                 \n" +
"\n" +
"																		TRIM(IF(tg.destipogrado ='LIBRE',tg.abrTipGrado,REPLACE(REPLACE(REPLACE(REPLACE(a.nombre,'TO ',''),'DO ',''),'RO ',''),'Y ','y'))) aula, \n" +
"\n" +
"																		1 cantAulas,IF(g.abrGrado LIKE '%1%' OR g.abrGrado LIKE '%2%','A',IF(a.codtipocentro = 2,'C','B')) grupoAcademico, \n" +
"																						IF(a.codtipocentro = 2,240,360) computable,\n" +
"                                            CONCAT(pf1.apellido,',',pf1.nombre)as docente,\n" +
"                                    IF(hcd.accion = 'REGISTRADO','SIN CURSO','ELIMINADO') as accion,c.nom_cur\n" +
"\n" +
"                               			FROM  historial_horario  hcd \n" +
"																		INNER JOIN curso c ON c.cod_cur=hcd.cod_cur 	\n" +
"																		INNER JOIN sacoolive3.profesor pf1 ON pf1.codprofesor=hcd.cod_doc 									\n" +
"																		INNER JOIN aula a ON a.codaula=hcd.codAula \n" +
"																		INNER JOIN grado g on g.codgrado = a.codgrado   \n" +
"																		INNER JOIN tipo_grado tg ON g.codtipogrado=tg.codtipogrado \n" +
"																		INNER JOIN sede s ON s.cod_loc=a.codlocal \n" +
"																WHERE   \n" +
"																			hcd.fecha  BETWEEN ?  AND ? and hcd.est_hcd=1\n" +
"                                     AND accion ='ELIMINADO'\n" +
"                                   \n" +
"																							 \n" +
"																			) tbl \n" +
"														GROUP BY tbl.fecha,tbl.dia,tbl.des_loc,tbl.turno,tbl.grupoAcademico,tbl.nom_cur,tbl.cantAulas\n" +
"                            ORDER BY tbl.hora DESC\n" +
"											\n" +
"								) tbl1";


			PreparedStatement st = cnx.prepareStatement(query);
			
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaInicio = dateFormat.parse(fechaDesde);
			Date fechaFin = dateFormat.parse(fechaHasta);

			st.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
			st.setTimestamp(2, new Timestamp(fechaFin.getTime()));
			System.out.println("QUERYY --->" + st);
			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				HorarioCF h = new HorarioCF();

//				h.setFechaRegistro(rs.getDate("fecha"));
//				h.setNombreSede(rs.getString("des_loc"));
//				h.setDia(rs.getString("dia"));
//				h.setHorario(rs.getString("horario"));
//				h.setGrupoAcademico(rs.getString("grupoAcademico"));
//				h.setCodigoAula(rs.getString("aulas"));
//				h.setHora(rs.getTime("hora"));
				
			  h.setDocenteEntrante(rs.getString("docente"));
				h.setCursoEntrante(rs.getString("nom_cur"));
				h.setMotivoCambio(rs.getString("accion"));

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

	@Override
	public ArrayList<Horario> listarCambiosDia(String fechaDesde, String fechaHasta) throws Exception {
		ArrayList<Horario> lista = new ArrayList<Horario>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

			String query = "SELECT tbl1.fecha,tbl1.des_loc,tbl1.fechafin,CONCAT(tbl1.ingreso,\"- \",tbl1.salida)as horario,tbl1.grupoAcademico,tbl1.aulas,tbl1.nom_cur, \n" +
"							   \n" +
"							  IF(tbl1.cantLib=0,tbl1.cantAulas*tbl1.computable,(tbl1.computable*3)-(tbl1.cantLib*tbl1.computable)) cantMin, \n" +
"\n" +
"\n" +
"							  tbl1.doc_saliente,tbl1.motivoCambio,tbl1.observacion,tbl1.horaAviso,tbl1.doc_entrante,tbl1.curso_entrante, \n" +
"							   \n" +
"							  tbl1.fechainicio,tbl1.avance,tbl1.recuperacion,tbl1.fecha_aviso,tbl1.docente_recuperacion,tbl1.curso_recuperacion,tbl1.fecha_recuperacion,tbl1.horini_recuperacion,tbl1.horfini_recuperacion \n" +
"							   \n" +
"							  FROM ( \n" +
"							  SELECT tbl.fecha,tbl.dia,tbl.des_loc,MIN(tbl.ingreso) ingreso,MAX(tbl.salida) salida,SUM(tbl.cantLib) cantLib, \n" +
"							   \n" +
"							  tbl.turno,REPLACE(GROUP_CONCAT(tbl.aula ORDER BY ingreso ),',','-') aulas,SUM(tbl.cantAulas) cantAulas,tbl.grupoAcademico, \n" +
"							   \n" +
"							  tbl.computable,tbl.doc_saliente,tbl.nom_cur,tbl.fechafin,tbl.motivoCambio,tbl.doc_entrante,tbl.curso_entrante,tbl.cod_cur, \n" +
"							  tbl.fechainicio,tbl.observacion,tbl.avance,tbl.recuperacion,tbl.horaAviso,tbl.fecha_aviso,tbl.docente_recuperacion,tbl.curso_recuperacion,tbl.fecha_recuperacion,tbl.horini_recuperacion,tbl.horfini_recuperacion\n" +
"							  FROM ( \n" +
"							  SELECT hcd.cod_hcd,hcd.fecha,hcd.dia numdia,ELT(hcd.dia, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS dia,\n" +
" \n" +
"							  s.des_loc,TIME_FORMAT(hcd.hor_ini,'%H:%i') ingreso,TIME_FORMAT(hcd.hor_fin,'%H:%i') salida,IF(tg.destipogrado ='LIBRE',1,0) cantLib, \n" +
"							  IF (hcd.hor_ini>='07:00' AND hcd.hor_fin<'14:20','M','T') turno, \n" +
"							   \n" +
"							  TRIM(IF(tg.destipogrado ='LIBRE',tg.abrTipGrado,REPLACE(REPLACE(REPLACE(REPLACE(a.nombre,'TO ',''),'DO ',''),'RO ',''),'Y ','y'))) aula, \n" +
"							  1 cantAulas,IF(g.abrGrado LIKE '%1' OR g.abrGrado LIKE '%2','A',IF(a.codtipocentro = 2,'C','B')) grupoAcademico, \n" +
"\n" +
"							  IF(a.codtipocentro = 2,120,80) computable,CONCAT(pf1.apellido,\" \",pf1.nombre) as doc_saliente ,c2.nom_cur,hcd.fechafin, \n" +
"\n" +
"							  hcd.motivoCambio,CONCAT(pf2.apellido,\" \",pf2.nombre)as doc_entrante ,c.nom_cur as curso_entrante,hcd.cod_cur, \n" +
"							   \n" +
"							  hcd.fechainicio,hcd.observacion,hcd.avance,hcd.recuperacion,hcd.horaAviso,hcd.fecha_aviso,hcd.docente_recuperacion ,hcd.curso_recuperacion,hcd.fecha_recuperacion,hcd.horini_recuperacion,hcd.horfini_recuperacion\n" +
"							  FROM  historial_horario  hcd \n" +
"							  INNER JOIN curso c ON c.cod_cur=hcd.cod_cur \n" +
"							  INNER JOIN curso c2 ON c2.cod_cur=hcd.cod_cur_reemp \n" +
"							  INNER JOIN sacoolive3.profesor pf1 ON pf1.codprofesor=hcd.cod_doc_reemp \n" +
"							  INNER JOIN sacoolive3.profesor pf2 ON pf2.codprofesor=hcd.cod_doc \n" +
"							  INNER JOIN aula a ON a.codaula=hcd.codAula \n" +
"							  INNER JOIN grado g on g.codgrado = a.codgrado   \n" +
"							  INNER JOIN tipo_grado tg ON g.codtipogrado=tg.codtipogrado \n" +
"							  INNER JOIN sede s ON s.cod_loc=a.codlocal \n" +
"							  WHERE   \n" +
"							  accion = 'CAMBIO DIA' AND est_hcd = 1 and \n" +
"							  hcd.fecha  BETWEEN ? AND ?\n" +
"							  ) tbl \n" +
"							  GROUP BY tbl.fecha,tbl.dia,tbl.des_loc,tbl.turno,tbl.grupoAcademico,tbl.cantAulas,tbl.doc_saliente, \n" +
"							  tbl.nom_cur,tbl.fechafin,tbl.motivoCambio,tbl.doc_entrante,tbl.curso_entrante,tbl.cod_cur, \n" +
"							  tbl.fechainicio  \n" +
"							  ) tbl1";

			
//				+ "SELECT "
//				+ "		s.des_loc, "
//				+ "		GROUP_CONCAT(CONCAT(a.nombre)) aulas, "
////				+ "		GROUP_CONCAT(CONCAT(grado.abrGrado,seccion.desseccion)) aulas, "
//				+ "		dia, "
//				+ "		MIN(hor_ini) hora_ini, "
//				+ "		MAX(hor_fin) hora_fin, "
//				+ "		c1.nom_cur curso, "
//				+ "		c2.nom_cur curso_reemp, "
//				+ "		cod_doc, "
//				+ "		date_format(fecha, '%d/%m/%Y') fecha, "
//				+ "		date_format( "
//				+ "			adddate(fecha, 7), "
//				+ "			'%d/%m/%Y' "
//				+ "		) fechaIngreso, "
//				+ "		cod_doc_reemp, "
//				+ "		motivoCambio, "
//				+ "		observacion, "
//				+ "		horaAviso, "
//				+ "   avance,"
//				+ "   recuperacion "
//				+ "	FROM "
//				+ "		historial_horario hh "
//				+ "	inner join aula a on a.codaula = hh.codAula "
//				+ "	inner JOIN sede s on s.cod_loc = a.codlocal "
//				+ "	inner join seccion on seccion.codseccion = a.codseccion "
//				+ "	inner join grado on grado.codgrado = a.codgrado "
//				+ "	INNER JOIN curso c1 ON c1.cod_cur = hh.cod_cur "
//				+ "	INNER JOIN curso c2 ON c2.cod_cur = hh.cod_cur_reemp "
//				+ "	WHERE "
//				+ "		accion = 'CAMBIO DIA' "
//				+ "	AND est_hcd = 1 "
//				+ "	AND fecha BETWEEN ? "
//				+ "	AND ? "
//				+ "	GROUP BY "
//				+ "		s.des_loc, "
//				+ "		dia, "
//				+ "		hh.cod_doc ";

			PreparedStatement st = cnx.prepareStatement(query);
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaInicio = dateFormat.parse(fechaDesde);
			Date fechaFin = dateFormat.parse(fechaHasta);
      System.out.println("QUERY CAMBIO DIA --->" + st);
			st.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
			st.setTimestamp(2, new Timestamp(fechaFin.getTime()));

			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				Horario h = new Horario();
				h.setH_fecha(rs.getString("fecha"));
				h.setNombreSede(rs.getString("des_loc"));
				h.setFechaFalta(rs.getString("fechafin"));
				h.setH_horarioFinal(rs.getString("horario"));
				h.setCantidadMinutos(rs.getString("cantMin"));
				h.setNombreGrado(rs.getString("aulas"));
				h.setH_codigoDocente(rs.getString("doc_saliente"));
				h.setGrupoAcademico(rs.getString("grupoAcademico"));
				
				
				
				h.setH_nombreCurso(rs.getString("nom_cur"));
				h.setH_motivoCambio(rs.getString("motivoCambio"));
				h.setH_observacion(rs.getString("observacion"));
				h.setH_horaAviso(rs.getString("horaAviso"));
				h.setFechaAvisoFalta(rs.getString("fecha_aviso"));
				
				
				h.setH_codigo_doc_reemp(rs.getString("doc_entrante"));
				h.setH_nombre_cur_reemp(rs.getString("curso_entrante"));
				h.setAvance(rs.getString("avance"));
				h.setRecuperacion(rs.getString("recuperacion"));
				
				h.setDocenteRecuperacion(rs.getString("docente_recuperacion"));
				h.setCursoRecuperacion(rs.getString("curso_recuperacion"));
				h.setFechaRecuperacion(rs.getString("fecha_recuperacion"));
				h.setHoraInicioRecuperacion(rs.getString("horini_recuperacion"));
				h.setHoraFinRecuperacion(rs.getString("horfini_recuperacion"));
				
				
				
				

				

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

	@Override
	public ArrayList<Horario> listarBajasDocente(String fechaDesde, String fechaHasta) throws Exception {
		ArrayList<Horario> lista = new ArrayList<Horario>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

//			String query = ""
//				+ "select "
//				+ "cod_doc, "
//				+ "s.des_loc, "
//				+ "GROUP_CONCAT(DISTINCT p.nom_pla) curso, "
//				+ "date_format(fecha, '%d/%m/%Y') fecha, "
//				+ "ultimoDia "
//				+ "from historial_horario hh "
//				+ "inner join aula a "
//				+ "on hh.codAula = a.codaula "
//				+ "inner join sede s "
//				+ "on s.cod_loc = a.codlocal "
//				+ "inner join curso c "
//				+ "on c.cod_cur = hh.cod_cur "
//				+ "inner join plana p "
//				+ "on p.cod_pla = c.cod_pla "
//				+ "where accion = 'DADO DE BAJA' "
//				+ "and est_hcd = 1 "
//				+ "and fecha between ? and ? "
//				+ "GROUP BY "
//				+ "cod_doc, "
//				+ "s.cod_loc ";

                          String query=
                                "select   ELT(hh.dia, 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo') AS dia,cod_doc,  \n" +
                                "          a.codaula,a.nombre nombreAula,\n" +
                                "			   s.des_loc,  IF (hh.hor_ini>='07:00' AND hh.hor_fin<'14:20','MAÑANA','TARDE') turno,\n" +
                                "          TIME_FORMAT(hh.hor_ini,'%H:%i') ingreso,TIME_FORMAT(hh.hor_fin,'%H:%i') salida,\n" +
                                "\n" +
                                "			    p.nom_pla curso, \n" +
                                " \n" +
                                "			   date_format(fecha, '%d/%m/%Y') fecha,  \n" +
                                "			   ultimoDia  \n" +
                                "			   from historial_horario hh  \n" +
                                "			   inner join aula a  on hh.codAula = a.codaula  \n" +
                                "			   inner join sede s  on s.cod_loc = a.codlocal  \n" +
                                "			   inner join curso c on c.cod_cur = hh.cod_cur  \n" +
                                "			   inner join plana p  on p.cod_pla = c.cod_pla  \n" +
                                "			   where accion = 'DADO DE BAJA'  \n" +
                                "			   and est_hcd = 1  \n" +
                                "			   and fecha between ? and ?\n" +
                                "           ORDER BY s.cod_loc";

			PreparedStatement st = cnx.prepareStatement(query);
			SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaInicio = dateFormat.parse(fechaDesde);
			Date fechaFin = dateFormat.parse(fechaHasta);

			st.setTimestamp(1, new Timestamp(fechaInicio.getTime()));
			st.setTimestamp(2, new Timestamp(fechaFin.getTime()));

			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				Horario h = new Horario();
                                h.setDia_HorarioCursoDoc(rs.getString("dia"));
				h.setH_codigoDocente(rs.getString("cod_doc"));
                                h.setNombreAula(rs.getString("nombreAula"));
                                h.setCodigoTurno(rs.getString("turno"));
                                h.setHoraIngreso(rs.getString("ingreso"));
                                h.setHoraSalida(rs.getString("salida"));
				h.setNombreSede(rs.getString("des_loc"));
				h.setNombreCurso(rs.getString("curso"));
				h.setH_fecha(rs.getString("fecha"));
				h.setH_ultimoDia(rs.getString("ultimoDia"));

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

//		public static void main(String[] args) {
//			 String query = "SELECT \n"
//              + "TABLA2.cod_doc,\n"
//              + "TABLA2.apellido_doc,\n"
//              + "TABLA2.nombre_doc,\n"
//              + "TABLA2.nom_zon,\n"
//              + "TABLA2.cantidad,\n"
//              + "TABLA2.proPla,\n"
//              + "TABLA2.exa,\n"
//              + "TABLA2.not_enc,\n"
//              + "TABLA2.promedio,\n"
//              + "TABLA2.tipoDoc,\n"
//              + "IF(TABLA2.cantidad = 3,4,IF(TABLA2.cantidad = 2,3,IF(TABLA2.cantidad = 1,2,0))) ordenCantidad,\n"
//              + "IF(TABLA2.orden2 = 3,IF(TABLA2.exa >=9.00 AND TABLA2.not_enc >=9.00,2,1),IF(TABLA2.orden2 = 2,IF(TABLA2.exa >=9.00 AND TABLA2.not_enc >=9.00,2,1),TABLA2.orden2)) as orden3\n"
//              + "FROM (\n"
//              + "		SELECT \n"
//              + "		TABLA.cod_doc,\n"
//              + "		TABLA.apellido_doc,\n"
//              + "		TABLA.nombre_doc,\n"
//              + "		TABLA.nom_zon,\n"
//              + "		IF(TABLA.cod_doc LIKE 'P%',2,1) AS tipoDoc,\n"
//              + "		COUNT(tab_eva.cod_tabla_evaluacion) as cantidad,\n"
//              + "		IF(IFNULL(tab_eva.pro_pla,'') = '','',ROUND(AVG(tab_eva.pro_pla),2)) AS proPla, \n"
//              + "		IF(IFNULL(tab_eva.exa,'') = '','',ROUND(AVG(tab_eva.exa),2)) AS exa,\n"
//              + "		IF(IFNULL(tab_eva.not_enc,'') = '','',ROUND(AVG(tab_eva.not_enc),2)) AS not_enc,\n"
//              + "		IF(IFNULL(tab_eva.prom,'') = '','',ROUND(AVG(tab_eva.prom),2)) AS promedio,\n"
//              + "		IF(CAST(IF(IFNULL(tab_eva.exa,'') = '',0,1)+IF(IFNULL(tab_eva.not_enc,'') = '',0,1)+IF(IFNULL(TABLA.nom_zon,'') = '',0,1) AS UNSIGNED) = 3,3,\n"
//              + "		IF(IF(IFNULL(tab_eva.exa,'') = '',0,1)+IF(IFNULL(tab_eva.not_enc,'') = '',0,1)=2,2,IF(IFNULL(tab_eva.exa,'') <> '' OR IFNULL(tab_eva.not_enc,'') <> '' OR IFNULL(TABLA.nom_zon,'') <> '',1,0))) AS orden2\n"
//              + "		FROM (\n"
//              + "				SELECT\n"
//              + "				dt.cod_doc,\n"
//              + "				dt.apellido_doc,\n"
//              + "				dt.nombre_doc,\n"
//              + "				IF(z.nom_zon IS NULL,0,1) as orderZona,\n"
//              + "				IF(z.nom_zon IS NULL,'',z.nom_zon) as nom_zon \n"
//              + "				FROM\n"
//              + "				docente_temporal AS dt\n"
//              + "				LEFT JOIN zona_docente AS zd ON zd.cod_doc = dt.cod_doc\n"
//              + "				LEFT JOIN zona_sede AS zs ON zs.cod_zon = zd.cod_zon AND zs.cod_loc IN (SELECT aula.codlocal FROM aula WHERE codaula IN (25))\n"
//              + "				LEFT JOIN zona AS z ON z.cod_zon = zs.cod_zon\n"
//              + "			) TABLA\n"
//              + "		LEFT JOIN tabla_evaluacion AS tab_eva ON tab_eva.cod_doc = TABLA.cod_doc AND tab_eva.cod_per_gen = (SELECT cod_per_gen FROM periodo_academico WHERE cod_per = '21') \n"
//              + "		GROUP BY TABLA.cod_doc \n"
//              + "		ORDER BY orden2 DESC\n"
//              + "	) TABLA2\n"
//              + " mez GROUP BY TABLA2.cod_doc		\n"
//              + "ORDER BY promedio desc,ordenCantidad DESC, orden3 DESC";
//			 System.out.println(query);
//		
//	}

	@Override
	public ArrayList<Horario> listarCambiosDiaDocente(String cadenaAulas, String dia, String codigoDocente) throws Exception {
		ArrayList<Horario> lista = new ArrayList<Horario>();
		
		Object[] arrayCadenas=cadenaAulas.split(",");
		
		String aula1="";
		for(int i=0;i < arrayCadenas.length;i++){
			
			   aula1 +="'"+arrayCadenas[i].toString()+"'";
				 
				 if(i<arrayCadenas.length-1){
					 
					 aula1 +=",";
				 }
			
		}
		
		String base = "horario";
		Connection cnx = null;
//		String [] aula=cadenaAulas.split(",");
//		String aula1="";
//		String aula2="";
//		String aula3="";
//		for(int i=0;i<aula.length;i++){
//		    aula1=aula[i];
//		    aula2=aula[i+1];
//		    aula3=aula[i+1];
//		}
		
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);

			String query = ""
				+ "SELECT "
				+ "		s.des_loc, "
				+ "		GROUP_CONCAT(CONCAT(a.nombre)) aulas, "
//				+ "		GROUP_CONCAT(CONCAT(grado.abrGrado,seccion.desseccion)) aulas, "
				+ "		dia, "
				+ "		TIME_FORMAT(MIN(hor_ini),'%H:%i') hora_ini, "
				+ "		TIME_FORMAT(MAX(hor_fin),'%H:%i') hora_fin, "
				+ "		c1.nom_cur curso, "
				+ "		c2.nom_cur curso_reemp, "
				+ "		cod_doc, "
				+ "		date_format(fecha, '%d/%m/%Y') fecha, "
				+ "   hh.hora,"
				+ "		cod_doc_reemp, "
				+ "		motivoCambio, "
				+ "		observacion, "
				+ "		horaAviso, "
				+ "   avance,"
				+ "   recuperacion, "
				+ "   usu.usu_usu"
				+ "	FROM "
				+ "		historial_horario hh "
				+ "	inner join aula a on a.codaula = hh.codAula "
				+ "	inner JOIN sede s on s.cod_loc = a.codlocal "
				+ "	inner join seccion on seccion.codseccion = a.codseccion "
				+ "	inner join grado on grado.codgrado = a.codgrado "
				+ "	INNER JOIN curso c1 ON c1.cod_cur = hh.cod_cur "
				+ "	INNER JOIN curso c2 ON c2.cod_cur = hh.cod_cur_reemp "
				+ " INNER JOIN usuario usu ON usu.cod_usu = hh.cod_usu"
				+ "	WHERE  \n" +
"				 		accion = 'CAMBIO DIA'  \n" +
"				 	AND est_hcd = 1  and hh.codAula IN ("+aula1+") AND dia='"+dia+"' and hh.cod_doc_reemp = '"+codigoDocente+"'  \n" +
"				 	GROUP BY  \n" +
"				 		s.des_loc,  \n" +
"				 		dia,  \n" +
"				 		hh.cod_doc ORDER BY hh.hora,hh.fecha DESC ";
			
			System.out.println("CONSULTA HISTORIAL CAMBIO DIA:"+query);

			PreparedStatement st = cnx.prepareStatement(query);
			ResultSet rs = st.executeQuery();

			while (rs.next()) {
				Horario h = new Horario();
				h.setNombreSede(rs.getString("des_loc"));
				h.setNombreGrado(rs.getString("aulas"));
				h.setH_dia(rs.getString("dia"));
				h.setH_horarioInicio(rs.getString("hora_ini"));
				h.setH_horarioFinal(rs.getString("hora_fin"));
				h.setH_nombreCurso(rs.getString("curso"));
				h.setH_nombre_cur_reemp(rs.getString("curso_reemp"));
				h.setH_codigoDocente(rs.getString("cod_doc"));
				h.setH_fecha(rs.getString("fecha"));
				h.setH_hora(rs.getString("hora"));
				h.setH_codigo_doc_reemp(rs.getString("cod_doc_reemp"));
				h.setH_observacion(rs.getString("observacion"));
				h.setH_motivoCambio(rs.getString("motivoCambio"));
				h.setH_horaAviso(rs.getString("horaAviso"));
				h.setAvance(rs.getString("avance"));
				h.setH_codigoUsuario(rs.getString("usu_usu"));

				h.setRecuperacion(rs.getString("recuperacion"));

				lista.add(h);
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR "+e.getMessage());
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public int validarDni(String dni) throws Exception {
		int codDocente=0;
		String base="horario";
		ResultSet rs=null;
		
	
		Connection cnx=null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query="select codprofesor from sacoolive3.profesor where dni="+dni+"";
			rs=st.executeQuery(query);
	
			System.out.println("queryy->>"+query);
			
			if(rs.next()){
				
				codDocente = rs.getInt("codprofesor");
			}
			
			
			System.out.println("codDocnete->"+codDocente);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
		  if(cnx != null){
				cnx.close();
			}
			
		}
		return codDocente;
			
	}



}
