com.dmrr.asistenciasx.VentanaDeAsistenciaDeProfesor.java Source code

Java tutorial

Introduction

Here is the source code for com.dmrr.asistenciasx.VentanaDeAsistenciaDeProfesor.java

Source

/*
 * 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 com.dmrr.asistenciasx;

import bareMysqlTables.Profesor;
import bareMysqlTables.ProfesorAcceso;
import bareMysqlTables.Registro;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import static javax.swing.JTable.AUTO_RESIZE_OFF;
import static javax.swing.JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import org.eclipse.persistence.config.QueryHints;
import org.eclipse.persistence.config.ResultType;
import org.jdesktop.beansbinding.AutoBinding;
import org.jdesktop.beansbinding.ELProperty;
import org.jdesktop.swingbinding.JTableBinding;
import org.jdesktop.swingbinding.JTableBinding.ColumnBinding;
import org.jdesktop.swingbinding.SwingBindings;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

/**
 *
 * @author diego
 */
public final class VentanaDeAsistenciaDeProfesor extends javax.swing.JFrame {
    /*
     Variables de configuracion de comportamiento
     */

    Integer MinutosAntesDeLaHora = 15;
    Integer MinutosDespuesDeLaHora = 15;
    Boolean permitirDobleRegistro = true;

    /**
     * Creates new form VentanaDeAsistenciaDeProfesor
     *
     * @param profesor
     */
    EntityManager em;
    DefaultTableModel modelTablaHorarios;
    private List<Map> results;
    DateTime dateTime;
    Profesor profesor;

    /*
     Imagenes
     */
    ImageIcon okImage;
    ImageIcon clockImage;
    ImageIcon infoImage;

    public VentanaDeAsistenciaDeProfesor() {
        constructorCalls();
    }

    private void constructorCalls() {
        initComponents();
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        loadImages();
        jLabelResultadoDeRegistro.setVerticalTextPosition(AbstractButton.BOTTOM);
        jLabelResultadoDeRegistro.setHorizontalTextPosition(AbstractButton.CENTER);
    }

    void loadImages() {
        okImage = new ImageIcon(getClass().getResource("/ok_128.png"));
        clockImage = new ImageIcon(getClass().getResource("/clock_128.png"));
        infoImage = new ImageIcon(getClass().getResource("/info_128.png"));
        jLabelResultadoDeRegistro.setIcon(infoImage);
    }

    void llenaVentanaDeDatos(Profesor profesor) {
        this.profesor = profesor;
        dateTime = new DateTime();
        em = javax.persistence.Persistence
                .createEntityManagerFactory("asistenciasx?zeroDateTimeBehavior=convertToNullPU")
                .createEntityManager();

        jPanelDatosProfesor.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
                "Bienvenido " + profesor.getNombres() + " " + profesor.getApellidos(),
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 18),
                new java.awt.Color(102, 0, 0)));

        jLabelHoraDeEntrada.setText("");
        jLabelNombreDeMateria.setText("");
        jLabelSalon.setText("");

        loadFoto(profesor);
        cargaHorariosEnJTable();
        checaHoraDeEntrada();
        registraAccesoDeProfesor(profesor.getIdprofesor());
    }

    public VentanaDeAsistenciaDeProfesor(Profesor profesor) {
        this.constructorCalls();
        this.llenaVentanaDeDatos(profesor);
    }

    private void convertHorariosFromBooleanToHours(Map row, String dia) {
        if (row.get(dia) == null) {
            return;
        }
        if (row.get(dia).equals(true)) {
            row.replace(dia, row.get("horaEntrada") + "-" + row.get("horaSalida"));
        }
        if (row.get(dia).equals(false)) {
            row.replace(dia, "");
        }
    }

    private void cargaHorariosEnJTable() {
        Query queryHorariosPorProfesor = em
                .createNativeQuery("Select * from horariosporprofesor WHERE idprofesor=" + profesor.getIdprofesor()
                        + " order by " + MyUtils.getTodayString3Char() + " desc, horaEntrada asc");
        queryHorariosPorProfesor.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
        System.out.println(queryHorariosPorProfesor);
        results = queryHorariosPorProfesor.getResultList();

        for (Map row : results) {
            convertHourFromH55toH00Ejemplo855to900(row);
            convertHorariosFromBooleanToHours(row, "lun");
            convertHorariosFromBooleanToHours(row, "mar");
            convertHorariosFromBooleanToHours(row, "mie");
            convertHorariosFromBooleanToHours(row, "jue");
            convertHorariosFromBooleanToHours(row, "vie");
            convertHorariosFromBooleanToHours(row, "sab");
        }

        JTableBinding jTableBinding;
        jTableBinding = SwingBindings.createJTableBinding(AutoBinding.UpdateStrategy.READ, results, jTable3);

        ColumnBinding columnBinding;

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${idcurso}"));
        columnBinding.setColumnName("NRC");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${nombre}"));
        columnBinding.setColumnName("Materia");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${lun}"));
        columnBinding.setColumnName("Lunes");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${mar}"));
        columnBinding.setColumnName("Martes");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${mie}"));
        columnBinding.setColumnName("Miercoles");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${jue}"));
        columnBinding.setColumnName("Jueves");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${vie}"));
        columnBinding.setColumnName("Viernes");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${sab}"));
        columnBinding.setColumnName("Sabado");
        columnBinding.setColumnClass(String.class);

        columnBinding = jTableBinding.addColumnBinding(ELProperty.create("${edif} ${aula}"));
        columnBinding.setColumnName("Salon");
        columnBinding.setColumnClass(String.class);

        jTableBinding.bind();

        jTable3.setAutoResizeMode(AUTO_RESIZE_OFF);
        for (int i = 0; i < 7; i++) {
            if (i == 0) {
                jTable3.getColumnModel().getColumn(i).setPreferredWidth(60);
            }
            if (i == 1) {
                jTable3.getColumnModel().getColumn(i).setPreferredWidth(250);
            }
        }
        jTable3.setAutoResizeMode(AUTO_RESIZE_SUBSEQUENT_COLUMNS);

        DefaultTableCellRenderer centerRendererForCells = new DefaultTableCellRenderer();
        sun.swing.table.DefaultTableCellHeaderRenderer centerRendererForHeaders = new sun.swing.table.DefaultTableCellHeaderRenderer();
        centerRendererForCells.setHorizontalAlignment(JLabel.CENTER);
        centerRendererForHeaders.setHorizontalAlignment(JLabel.CENTER);

        DefaultTableCellRenderer cellRendererForToday = new DefaultTableCellRenderer();
        cellRendererForToday.setBorder(BorderFactory.createLineBorder(Color.yellow, 5));
        cellRendererForToday.setForeground(Color.black);
        cellRendererForToday.setHorizontalAlignment(JLabel.CENTER);
        cellRendererForToday.setBackground(Color.gray);

        cellRendererForToday = new CustomRenderer();
        cellRendererForToday.setHorizontalAlignment(JLabel.CENTER);

        for (int i = 2; i < 8; i++) {
            jTable3.getColumnModel().getColumn(i).setCellRenderer(centerRendererForCells);
            jTable3.getColumnModel().getColumn(i).setHeaderRenderer(centerRendererForHeaders);
            if (i + 2 == MyUtils.getDayOfWeek() + 2) {
                jTable3.getColumnModel().getColumn(i).setCellRenderer(cellRendererForToday);
            }
        }
    }

    class CustomRenderer extends DefaultTableCellRenderer {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                boolean hasFocus, int row, int column) {
            Component cellComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
                    column);

            if (row % 2 == 0) {
                cellComponent.setBackground(new Color(255, 255, 255));
            } else if (row % 2 == 1) {
                cellComponent.setBackground(new Color(245, 245, 245));

            }
            cellComponent.setFont(new Font("VERDANA", Font.BOLD, 14));
            return cellComponent;
        }
    }

    private void loadFoto(Profesor profesor) {
        try {
            if (profesor.getFoto() == null) {
                ImageIcon icon = new ImageIcon(this.getClass().getResource("/face-smile_120.png"));
                jLabelFotoDeProfesor.setIcon(icon);
                return;
            }
            final BufferedImage image = ImageIO.read(new ByteArrayInputStream(profesor.getFoto()));
            ImageIcon icon = new ImageIcon(image.getScaledInstance(160, 120, BufferedImage.SCALE_SMOOTH));
            jLabelFotoDeProfesor.setIcon(icon);
        } catch (IOException ex) {
            Logger.getLogger(VentanaDeAsistenciaDeProfesor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelDatosProfesor = new javax.swing.JPanel();
        jLabelResultadoDeRegistro = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabelFotoDeProfesor = new javax.swing.JLabel();
        jLabelNombreDeMateria = new javax.swing.JLabel();
        jLabelSalon = new javax.swing.JLabel();
        jLabelHoraDeEntrada = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTable3 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanelDatosProfesor.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Bienvenido Walter Wynter",
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
                javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 18),
                new java.awt.Color(102, 0, 0))); // NOI18N

        jLabelResultadoDeRegistro.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
        jLabelResultadoDeRegistro.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabelResultadoDeRegistro
                .setText("Tiene que registrar su asistencia 15 minutos antes o despues de la hora");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel2.setText("Materia:");

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel3.setText("Hora:");

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel4.setText("Salon:");

        jLabelNombreDeMateria.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabelNombreDeMateria.setText("          ");

        jLabelSalon.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabelSalon.setText("          ");

        jLabelHoraDeEntrada.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabelHoraDeEntrada.setText("          ");

        javax.swing.GroupLayout jPanelDatosProfesorLayout = new javax.swing.GroupLayout(jPanelDatosProfesor);
        jPanelDatosProfesor.setLayout(jPanelDatosProfesorLayout);
        jPanelDatosProfesorLayout.setHorizontalGroup(
                jPanelDatosProfesorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                        javax.swing.GroupLayout.Alignment.TRAILING,
                        jPanelDatosProfesorLayout.createSequentialGroup().addGroup(jPanelDatosProfesorLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jLabelResultadoDeRegistro, javax.swing.GroupLayout.DEFAULT_SIZE, 1118,
                                        Short.MAX_VALUE)
                                .addGroup(jPanelDatosProfesorLayout.createSequentialGroup().addContainerGap()
                                        .addGroup(jPanelDatosProfesorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addGroup(jPanelDatosProfesorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(jLabelNombreDeMateria).addComponent(jLabelSalon)
                                                .addComponent(jLabelHoraDeEntrada))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(jLabelFotoDeProfesor, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                160, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addContainerGap()));
        jPanelDatosProfesorLayout.setVerticalGroup(
                jPanelDatosProfesorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                        javax.swing.GroupLayout.Alignment.TRAILING,
                        jPanelDatosProfesorLayout.createSequentialGroup().addGroup(jPanelDatosProfesorLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(jPanelDatosProfesorLayout.createSequentialGroup().addGap(27, 27, 27)
                                        .addGroup(jPanelDatosProfesorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                                .addComponent(jLabel2).addComponent(jLabelNombreDeMateria))
                                        .addGap(18, 18, 18)
                                        .addGroup(jPanelDatosProfesorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                                .addComponent(jLabel3).addComponent(jLabelHoraDeEntrada))
                                        .addGap(18, 18, 18)
                                        .addGroup(jPanelDatosProfesorLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                                .addComponent(jLabel4).addComponent(jLabelSalon)))
                                .addComponent(jLabelFotoDeProfesor, javax.swing.GroupLayout.PREFERRED_SIZE, 120,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18).addComponent(jLabelResultadoDeRegistro,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
                                .addContainerGap()));

        jTable3.setFont(new java.awt.Font("Verdana", 0, 14)); // NOI18N
        jTable3.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] {

        }));
        jTable3.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
        jTable3.setRowHeight(22);
        jScrollPane3.setViewportView(jTable3);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jPanelDatosProfesor, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jScrollPane3))
                        .addContainerGap()));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup().addContainerGap()
                        .addComponent(jPanelDatosProfesor, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)
                        .addContainerGap()));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(VentanaDeAsistenciaDeProfesor.class.getName())
                    .log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(VentanaDeAsistenciaDeProfesor.class.getName())
                    .log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(VentanaDeAsistenciaDeProfesor.class.getName())
                    .log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(VentanaDeAsistenciaDeProfesor.class.getName())
                    .log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //TODO Code for testing porpouses.
                EntityManager em;
                em = javax.persistence.Persistence
                        .createEntityManagerFactory("asistenciasx?zeroDateTimeBehavior=convertToNullPU")
                        .createEntityManager();
                Profesor profesor = em.find(Profesor.class, 1111111);
                new VentanaDeAsistenciaDeProfesor(profesor).setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabelFotoDeProfesor;
    private javax.swing.JLabel jLabelHoraDeEntrada;
    private javax.swing.JLabel jLabelNombreDeMateria;
    private javax.swing.JLabel jLabelResultadoDeRegistro;
    private javax.swing.JLabel jLabelSalon;
    private javax.swing.JPanel jPanelDatosProfesor;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTable jTable3;
    // End of variables declaration//GEN-END:variables

    private void convertHourFromH55toH00Ejemplo855to900(Map row) {
        if (row.get("horaSalida") != null) {
            String salida = row.get("horaSalida").toString();
            if (salida.charAt(salida.length() - 1) == '5') {
                String hora = "";
                if (salida.length() == 3) {
                    hora = Character.getNumericValue(salida.charAt(0)) + "";
                }
                if (salida.length() == 4) {
                    hora = Character.getNumericValue(salida.charAt(0)) + ""
                            + Character.getNumericValue(salida.charAt(1));
                }
                hora = (Integer.parseInt(hora) + 1) + "";
                row.replace("horaSalida", hora + "00");
            }
        }
    }

    private void checaHoraDeEntrada() {
        jLabelResultadoDeRegistro.setOpaque(true);

        if (dateTime.getMinuteOfHour() <= MinutosDespuesDeLaHora
                || dateTime.getMinuteOfHour() >= 60 - MinutosAntesDeLaHora) {
            if (yaSeRegistroAsistencia()) {
                jLabelResultadoDeRegistro.setIcon(infoImage);
                jLabelResultadoDeRegistro.setText("Ya ha registrado su asistencia!");
                return;
            }
            checaMateriasQueCoincidadConLaHoraDeEntrada();
        } else {
            jLabelResultadoDeRegistro.setIcon(clockImage);
            jLabelResultadoDeRegistro.setText("Solo puede registrarse 15 minutos antes o despues de la hora!");
        }
    }

    private void checaMateriasQueCoincidadConLaHoraDeEntrada() {
        Integer hora = dateTime.getHourOfDay();
        if (dateTime.getMinuteOfHour() >= 45) {
            hora++;
        }
        String horaString = hora + "00";

        boolean checaHoraConsecutiva = false;
        boolean horaChecada = false;
        for (Map row : results) {
            switch (MyUtils.getDayOfWeek()) {
            case 2:
                if (row.get("lun") == null) {
                    continue;
                }
                break;
            case 3:
                if (row.get("mar") == null) {
                    continue;
                }
                break;
            case 4:
                if (row.get("mie") == null) {
                    continue;
                }
                break;
            case 5:
                if (row.get("jue") == null) {
                    continue;
                }
                break;
            case 6:
                if (row.get("vie") == null) {
                    continue;
                }
                break;
            case 7:
                if (null == row.get("sab")) {
                    continue;
                }
                break;
            }
            String horaEntrada = "" + row.get("horaEntrada");
            if (checaHoraConsecutiva && permitirDobleRegistro) {
                System.out.println("Checando hora consecutiva");
                System.out.println("horaEntrada" + horaEntrada + " horaString:" + horaString);
                horaString = (hora + 1) + "00";
                if (horaEntrada.equals(horaString)) {
                    generaAsistencia(row);
                    horaChecada = true;
                } else {
                    horaString = (hora + 2) + "00";
                    if (horaEntrada.equals(horaString)) {
                        generaAsistencia(row);
                        horaChecada = true;
                    }
                }
            } else if (horaEntrada.equals(horaString)) {
                jLabelNombreDeMateria.setText(row.get("nombre") + "");
                jLabelHoraDeEntrada.setText(row.get("horaEntrada") + "-" + row.get("horaSalida"));
                jLabelSalon.setText(row.get("edif") + " " + row.get("aula"));
                jLabelResultadoDeRegistro.setIcon(okImage);
                jLabelResultadoDeRegistro.setText("Se ha registrado su asistencia!");

                generaAsistencia(row);
                horaChecada = true;
                checaHoraConsecutiva = true;
            }
        }
        if (!horaChecada) {
            jLabelResultadoDeRegistro.setIcon(infoImage);
            jLabelResultadoDeRegistro.setText("No tiene materia a esta hora!");
        }
    }

    private void registraAccesoDeProfesor(Integer idProfesor) {
        ProfesorAcceso profesorAcceso = new ProfesorAcceso();
        profesorAcceso.setIdprofesor(idProfesor);
        profesorAcceso.setFechayhora(dateTime.toDate());

        em.getTransaction().begin();
        em.persist(profesorAcceso);
        em.getTransaction().commit();
    }

    private void generaAsistencia(Map row) {
        String fecha = dateTime.getYear() + "-" + dateTime.getMonthOfYear() + "-" + dateTime.getDayOfMonth();
        Query checkIfAsistenciaExiste = em
                .createNativeQuery("SELECT * FROM asistenciasx.registro WHERE idhorario = '" + row.get("idhorario")
                        + "' AND fechayhora BETWEEN '" + fecha + " 00:00:00' AND '" + fecha + " 23:55:55'");
        try {
            Object x = checkIfAsistenciaExiste.getSingleResult();
            // Do nada
        } catch (javax.persistence.NoResultException e) {
            Registro registro = new Registro();
            registro.setFechayhora(dateTime.toDate());
            registro.setIdhorario(Integer.parseInt(row.get("idhorario") + ""));

            em.getTransaction().begin();
            em.persist(registro);
            em.getTransaction().commit();

        } catch (javax.persistence.NonUniqueResultException ex) {
            // Do nada
        }
    }

    private boolean yaSeRegistroAsistencia() {
        dateTime = new DateTime();
        Integer minuto = Integer.parseInt(dateTime.toString(DateTimeFormat.forPattern("m")));
        String fechayhora;
        if (minuto >= 45) {
            dateTime = dateTime.plusHours(1);
            fechayhora = dateTime.toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00"));
            dateTime = dateTime.minusHours(1);
        } else {
            fechayhora = dateTime.toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:00:00"));
        }

        Query yaSeRegistro = em.createNativeQuery("SELECT * FROM registrodeasistencias WHERE idprofesor = "
                + profesor.getIdprofesor() + " AND fechayhora BETWEEN '" + fechayhora
                + "' - INTERVAL 15 MINUTE AND '" + fechayhora + "' + INTERVAL 15 MINUTE");

        try {
            Object x = yaSeRegistro.getSingleResult();
            return true;
        } catch (javax.persistence.NoResultException e) {
            return false;
        } catch (javax.persistence.NonUniqueResultException ex) {
            return true;
        }
    }
}