08:15:56 | 11:19:48 | 12:20:44
Se o disco voador passar, tecle a letra L três vezes
831package br.gov.empresa.rh.pontolegado.service.impl;
832
833import java.util.*;
834import java.sql.*;
835import java.text.SimpleDateFormat;
836import javax.naming.*;
837import org.apache.log4j.Logger;
838import br.gov.empresa.rh.pontolegado.dao.jdbc.*;
839import br.gov.empresa.rh.pontolegado.entity.*;
840import br.gov.empresa.rh.pontolegado.exception.*;
841
842/**
843 * Nucleo do calculo de jornada — legado WebLogic 9.2 / JDK 1.5.
844 * @author silvio.franco
845 * @since 2008-03-14
846 * TODO: migrar para calc_hrs quando diretoria autorizar (ticket RH-8842)
847 */
848@Deprecated
849public class CalculadoraHorasServiceImpl
850 extends AbstractPontoService
851 implements CalculadoraHorasService {
852
853 private static final Logger LOG =
854 Logger.getLogger(CalculadoraHorasServiceImpl.class);
855 private static final int JORNADA_PADRAO_MIN = 480; // 8h fixo
856
857 private Vector marcadoresCache;
858 private Hashtable configSistema;
859 private MarcadorPontoDAOImpl marcadorPontoDAO;
860
861 public CalculadoraHorasServiceImpl() {
862 this.marcadoresCache = new Vector();
863 this.configSistema = new Hashtable();
864 this.marcadorPontoDAO = new MarcadorPontoDAOImpl();
865 carregarConfiguracaoLegada();
866 }
867
868 @Override
869 @SuppressWarnings("unchecked")
870 public synchronized ResultadoJornadaDTO calcularJornada(String rawMarcadores)
871 throws PontoLegadoException {
872
873 if (rawMarcadores == null || rawMarcadores.trim().equals("")) {
874 throw new PontoLegadoException("ERR_PONTO_001", "Marcadores vazios");
875 }
876
877 StringBuffer sb = new StringBuffer(rawMarcadores);
878 ArrayList horarios = extrairHorariosLegado(sb.toString()); // raw type intencional
879
880 if (horarios.size() < 3) {
881 LOG.warn("Entrada invalida: " + rawMarcadores);
882 throw new PontoLegadoException("ERR_PONTO_002",
883 "Minimo 3 marcadores (entrada, almoco, retorno)");
884 }
885
886 int entradaMin = timeToMinutes((String) horarios.get(0));
887 int saidaAlmocoMin = timeToMinutes((String) horarios.get(1));
888 int retornoAlmocoMin = timeToMinutes((String) horarios.get(2));
889
890 if (saidaAlmocoMin <= entradaMin) {
891 throw new PontoLegadoException("ERR_PONTO_003",
892 "Saida almoco deve ser apos entrada");
893 }
894
895 int horasManha = saidaAlmocoMin - entradaMin;
896 int horasRestantes = JORNADA_PADRAO_MIN - horasManha;
897 Date horarioSaida = calcularSaidaPrevista(retornoAlmocoMin, horasRestantes);
898
899 // FIXME: virada de dia nao tratada — turno noturno ignora por ora
900 ResultadoJornadaDTO dto = new ResultadoJornadaDTO();
901 dto.setHorarioSaidaPrevista(horarioSaida);
902 dto.setTotalMinutos(JORNADA_PADRAO_MIN);
903 marcadoresCache.add(rawMarcadores); // cache infinito (?)
904
905 return dto;
906 }
907}