com.biosis.biosislite.interpretes.InterpreteTardanzaMensual.java Source code

Java tutorial

Introduction

Here is the source code for com.biosis.biosislite.interpretes.InterpreteTardanzaMensual.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.biosis.biosislite.interpretes;

import com.biosis.biosislite.algoritmo.AnalizadorAsistencia;
import com.biosis.biosislite.algoritmo.Interprete;
import com.personal.utiles.FechaUtil;
import com.biosis.biosislite.entidades.asistencia.Asistencia;
import com.biosis.biosislite.entidades.asistencia.DetalleAsistencia;
import com.biosis.biosislite.entidades.escalafon.Empleado;
import com.biosis.biosislite.entidades.reportes.RptTardanzaMensual;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.beanutils.BeanUtils;

/**
 *
 * @author Francis
 */
public class InterpreteTardanzaMensual implements Interprete<RptTardanzaMensual> {

    @Override
    public List<RptTardanzaMensual> interpretar(List<Asistencia> registroAsistencia) {
        List<RptTardanzaMensual> tardanzas = new ArrayList<>();
        Calendar iterador = Calendar.getInstance();
        if (!registroAsistencia.isEmpty()) {
            double total = 0.0;
            Empleado empleado = registroAsistencia.get(0).getEmpleado();
            RptTardanzaMensual tardanzaMensual = new RptTardanzaMensual();
            tardanzaMensual.setEmpleado(empleado);
            tardanzaMensual.setFecha(registroAsistencia.get(0).getFecha());

            for (Asistencia asistencia : registroAsistencia) {
                if (asistencia.getResultado() == AnalizadorAsistencia.ASISTENCIA) {
                    if (!empleado.equals(asistencia.getEmpleado())) {
                        tardanzaMensual.setTotal(total);
                        tardanzas.add(tardanzaMensual);
                        empleado = asistencia.getEmpleado();
                        tardanzaMensual = new RptTardanzaMensual();
                        tardanzaMensual.setEmpleado(empleado);
                        tardanzaMensual.setFecha(iterador.getTime());
                    }
                    iterador.setTime(asistencia.getFecha());
                    int dia = iterador.get(Calendar.DAY_OF_MONTH);
                    System.out.println("DIA: " + dia);
                    try {
                        double tardanzaDia = this.minutosTardanza(asistencia.getDetalleAsistenciaList());
                        String valor = BeanUtils.getProperty(tardanzaMensual, "dia" + dia);
                        double valorDouble = Double.parseDouble(valor);
                        total += tardanzaDia;
                        valorDouble += tardanzaDia;
                        System.out.println(String.format("TOTAL: %s VALOR: %s", total, valorDouble));
                        BeanUtils.setProperty(tardanzaMensual, "dia" + dia, valorDouble);
                    } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
                        Logger.getLogger(InterpreteTardanzaMensual.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

            }
            tardanzaMensual.setTotal(total);
            tardanzas.add(tardanzaMensual);

        }

        return tardanzas;
    }

    private int tipoAsistencia(int resultado) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private double minutosTardanza(List<DetalleAsistencia> detalleList) {
        Double tardanzaTotal = 0.0;
        tardanzaTotal = detalleList.stream()
                .filter((DetalleAsistencia detalle) -> (detalle.isBandera() && detalle.getHoraEvento() != null))
                .map((detalle) -> tardanzaMin(detalle.getHoraEvento(), detalle.getHoraReferenciaTolerancia()))
                .reduce(tardanzaTotal, (accumulator, _item) -> accumulator + _item);
        return tardanzaTotal;
    }

    private int obtenerTipo(List<DetalleAsistencia> detalleAsistenciaList, int conteo) {

        //        System.out.println("CONTEO: "+conteo.intValue());
        int marcacionesPendientes = 0;
        boolean hayTardanza = false;
        for (int i = 0; i < conteo; i++) {
            DetalleAsistencia detalle = detalleAsistenciaList.get(i);

            if (detalle.getHoraEvento() == null) {
                if (!detalle.isPermiso()) {
                    marcacionesPendientes++;
                }
            } else {
                hayTardanza = hayTardanza
                        || detalle.isBandera() && tardanzaMin(FechaUtil.soloHora(detalle.getHoraEvento()),
                                FechaUtil.soloHora(detalle.getHoraReferenciaTolerancia())) > 1;
            }
        }

        if (marcacionesPendientes == conteo) {
            return AnalizadorAsistencia.INASISTENCIA;
        } else if (hayTardanza) {
            return AnalizadorAsistencia.TARDANZA;
        } else {
            return AnalizadorAsistencia.REGULAR;
        }
    }

    private double tardanzaMin(Date evento, Date tolerancia) {
        System.out.println("HORA EVENTO: " + evento + " TOLERANCIA: " + tolerancia);
        if (tolerancia.before(evento)) {
            double tardanza = (FechaUtil.soloHora(evento).getTime() - FechaUtil.soloHora(tolerancia).getTime())
                    / (60 * 1000);
            if (tardanza >= 1) {
                return tardanza;
            } else {
                return 0.0;
            }

        } else {
            return 0.0;
        }
    }
}