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

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import pe.siso.horario.Beans.Seccion;
import pe.siso.horario.DAO.SeccionDAO;

/**
 *
 * @author fcelestino
 */
public class MySqlSeccionDAO implements SeccionDAO {

    @Override
    public ArrayList<Seccion> listarSeccion(int inicio, int cantidad) throws Exception {
        ArrayList<Seccion> lista = new ArrayList<Seccion>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT seccion.codseccion,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,seccion.codcentro,seccion.codnivel,seccion.codtipogrado,seccion.codgrado,seccion.estado,seccion.orden FROM seccion "
                    + "INNER JOIN grado on grado.codgrado=seccion.codgrado "
                    + "INNER JOIN tipo_grado on tipo_grado.codtipogrado=seccion.codtipogrado "
                    + "INNER JOIN nivel on nivel.codnivel=seccion.codnivel "
                    + "INNER JOIN centro on centro.codcentro=seccion.codcentro "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=centro.codtipocentro "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado,seccion.desseccion LIMIT " + inicio + ", " + cantidad + " ";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Seccion seccion = new Seccion();
                seccion.setCodigoSeccion(rs.getInt("codseccion"));
                seccion.setCodigoGrado(rs.getInt("codtipogrado"));
                seccion.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                seccion.setCodigoNivel(rs.getInt("codtipogrado"));
                seccion.setCodigoCentro(rs.getInt("codtipogrado"));

                seccion.setNombreTipoGrado(rs.getString("destipogrado"));
                seccion.setNombreNivel(rs.getString("desnivel"));
                seccion.setNombreCentro(rs.getString("descentro"));
                seccion.setNombreTipoCentro(rs.getString("destipocentro"));
                seccion.setNombreGrado(rs.getString("desgrado"));
                seccion.setNombreSeccion(rs.getString("desseccion"));

                seccion.setEstadoSeccion(rs.getInt("estado"));
                seccion.setOrdenSeccion(rs.getInt("orden"));
                lista.add(seccion);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public ArrayList<Seccion> listarSeccion(String codigoCentro, String codigoNivel, String codigoTipoGrado, String codigoGrado) throws Exception {
        ArrayList<Seccion> lista = new ArrayList<Seccion>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT seccion.codseccion,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado,seccion.desseccion,seccion.codcentro,seccion.codnivel,seccion.codtipogrado,seccion.codgrado,seccion.estado,seccion.orden FROM seccion "
                    + "INNER JOIN grado on grado.codgrado=seccion.codgrado "
                    + "INNER JOIN tipo_grado on tipo_grado.codtipogrado=seccion.codtipogrado "
                    + "INNER JOIN nivel on nivel.codnivel=seccion.codnivel "
                    + "INNER JOIN centro on centro.codcentro=seccion.codcentro "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=centro.codtipocentro "
                    + "WHERE centro.codcentro='" + codigoCentro + "' AND nivel.codnivel='" + codigoNivel + "' AND  tipo_grado.codtipogrado='" + codigoTipoGrado + "' AND  grado.codgrado='" + codigoGrado + "' "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado,seccion.desseccion";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Seccion seccion = new Seccion();
                seccion.setCodigoSeccion(rs.getInt("codseccion"));
                seccion.setCodigoGrado(rs.getInt("codtipogrado"));
                seccion.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                seccion.setCodigoNivel(rs.getInt("codtipogrado"));
                seccion.setCodigoCentro(rs.getInt("codtipogrado"));

                seccion.setNombreTipoGrado(rs.getString("destipogrado"));
                seccion.setNombreNivel(rs.getString("desnivel"));
                seccion.setNombreCentro(rs.getString("descentro"));
                seccion.setNombreTipoCentro(rs.getString("destipocentro"));
                seccion.setNombreGrado(rs.getString("desgrado"));
                seccion.setNombreSeccion(rs.getString("desseccion"));

                seccion.setEstadoSeccion(rs.getInt("estado"));
                seccion.setOrdenSeccion(rs.getInt("orden"));
                lista.add(seccion);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void registrarSeccion(String nombreSeccion, String codigoCentro, String codigoNivel, String codigoTipoGrado, String codigoGrado) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryInsert = "INSERT INTO seccion (desseccion,codcentro,codnivel,codtipogrado,codgrado,estado,orden) VALUES ('" + nombreSeccion + "','" + codigoCentro + "','" + codigoNivel + "','" + codigoTipoGrado + "','" + codigoGrado + "','1','1');";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public void cambiarEstado(String dato, String codigoSeccion) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
             cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryInsert = "UPDATE seccion SET estado='" + dato + "' WHERE codseccion='" + codigoSeccion + "';";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public ArrayList<Seccion> cargarSeccion(String codigoCentro, String codigoNivel, String codigoTipoGrado, String codigoGrado) throws Exception {
        ArrayList<Seccion> lista = new ArrayList<Seccion>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT codseccion,desseccion  FROM seccion "
                    + "WHERE codcentro='" + codigoCentro + "' and codnivel='" + codigoNivel + "' and codtipogrado='" + codigoTipoGrado + "' and codgrado='" + codigoGrado + "' and estado='1';";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Seccion seccion = new Seccion();
                seccion.setCodigoSeccion(rs.getInt("codseccion"));
                seccion.setNombreSeccion(rs.getString("desseccion"));
                lista.add(seccion);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void actualizar(String dato, String codigoSeccion) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryInsert = "UPDATE seccion SET desseccion='" + dato + "' WHERE codseccion='" + codigoSeccion + "';";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public Seccion nombreSeccion(String codSecc) throws Exception {
        String base = "horario";

        Seccion sec = new Seccion();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT "
                    + "seccion.codseccion, "
                    + "seccion.desseccion, "
                    + "centro.descentro, "
                    + "nivel.desnivel, "
                    + "tipo_grado.destipogrado, "
                    + "grado.desgrado, "
                    + "tipo_centro.destipocentro "
                    + "FROM "
                    + "seccion "
                    + "INNER JOIN centro ON centro.codcentro = seccion.codcentro "
                    + "INNER JOIN nivel ON nivel.codnivel = seccion.codnivel "
                    + "INNER JOIN tipo_grado ON tipo_grado.codtipogrado = seccion.codtipogrado "
                    + "INNER JOIN grado ON grado.codgrado = seccion.codgrado "
                    + "INNER JOIN tipo_centro ON centro.codtipocentro = tipo_centro.codtipocentro "
                    + "WHERE codseccion='" + codSecc + "'";
            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                sec.setCodigoSeccion(rs.getInt("codseccion"));
                sec.setNombreSeccion(rs.getString("desseccion"));
                sec.setNombreTipoCentro(rs.getString("destipocentro"));
                sec.setNombreCentro(rs.getString("descentro"));
                sec.setNombreNivel(rs.getString("desnivel"));
                sec.setNombreTipoGrado(rs.getString("destipogrado"));
                sec.setNombreGrado(rs.getString("desgrado"));

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

    @Override
    public ArrayList<Seccion> cargarSeccion(String codigoSede, String codigoTipoCentro, String codigoCentro, String codigoNivel, String codigoTipoGrado, String codigoGrado) throws Exception {
        ArrayList<Seccion> lista = new ArrayList<Seccion>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT DISTINCT aula.codlocal,seccion.codseccion,seccion.desseccion "
                    + "from aula "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro "
                    + "INNER JOIN centro on centro.codcentro=aula.cocentro "
                    + "INNER JOIN nivel on nivel.codnivel=aula.codnivel "
                    + "INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado "
                    + "INNER JOIN grado on grado.codgrado=aula.codgrado "
                    + "INNER JOIN seccion on seccion.codseccion=aula.codseccion "
                    + "WHERE aula.codlocal='" + codigoSede + "' AND tipo_centro.codtipocentro='" + codigoTipoCentro + "' and centro.codcentro='" + codigoCentro + "'  "
                    + "and nivel.codnivel='" + codigoNivel + "' and tipo_grado.codtipogrado='" + codigoTipoGrado + "' and grado.codgrado='" + codigoGrado + "' and seccion.estado='1'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Seccion seccion = new Seccion();
                seccion.setCodigoSeccion(rs.getInt("codseccion"));
                seccion.setNombreSeccion(rs.getString("desseccion"));
                lista.add(seccion);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int cantidaSeccion() 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 grado";
            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 cantidaSeccion(String codigoSeccion) 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 aula where codseccion='" + codigoSeccion + "' and estado=1";
            ResultSet rs = st.executeQuery(queryConsulta);

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

}
