package br.com.centralit.citcorpore.negocio; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.AtividadePeriodicaDTO; import br.com.centralit.citcorpore.bean.AtividadesOSDTO; import br.com.centralit.citcorpore.bean.EventoDTO; import br.com.centralit.citcorpore.bean.ExecucaoAtividadePeriodicaDTO; import br.com.centralit.citcorpore.bean.ProgramacaoAtividadeDTO; import br.com.centralit.citcorpore.integracao.AtividadesOSDao; import br.com.centralit.citcorpore.integracao.ExecucaoAtividadePeriodicaDao; import br.com.centralit.citcorpore.integracao.ProgramacaoAtividadeDao; import br.com.centralit.citcorpore.regras.RegraProgramacaoAtividade; import br.com.centralit.citcorpore.util.Util; import br.com.citframework.excecao.ServiceException; import br.com.citframework.service.CrudServiceImpl; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilFormatacao; public class ProgramacaoAtividadeServiceEjb extends CrudServiceImpl implements ProgramacaoAtividadeService { private ProgramacaoAtividadeDao dao; @Override protected ProgramacaoAtividadeDao getDao() { if (dao == null) { dao = new ProgramacaoAtividadeDao(); } return dao; } @Override protected void validaCreate(final Object arg0) throws Exception { final ProgramacaoAtividadeDTO programacaoAtividadeDto = (ProgramacaoAtividadeDTO) arg0; this.validaProgramacao(programacaoAtividadeDto); programacaoAtividadeDto.setHoraInicio(programacaoAtividadeDto.getHoraInicio().replaceAll(":", "")); programacaoAtividadeDto.setHoraFim(programacaoAtividadeDto.getHoraFim().replaceAll(":", "")); } @Override protected void validaUpdate(final Object arg0) throws Exception { this.validaCreate(arg0); } @Override public Collection findByIdAtividadePeriodica(final Integer parm) throws Exception { try { final Collection<ProgramacaoAtividadeDTO> col = this.getDao().findByIdAtividadePeriodica(parm); if (col != null) { for (final ProgramacaoAtividadeDTO programacaoAtividadeDto : col) { if (programacaoAtividadeDto.getIdAtividadesOs() != null) { final AtividadesOSService atividadesOSService = (AtividadesOSService) ServiceLocator.getInstance().getService(AtividadesOSService.class, null); AtividadesOSDTO atividadesOSDTO = new AtividadesOSDTO(); atividadesOSDTO.setIdAtividadesOS(programacaoAtividadeDto.getIdAtividadesOs()); atividadesOSDTO = (AtividadesOSDTO) atividadesOSService.restore(atividadesOSDTO); programacaoAtividadeDto.setNomeAtividadeOs(atividadesOSDTO.getDescricaoAtividade()); } programacaoAtividadeDto.setHoraInicio(UtilFormatacao.formataHoraHHMM(programacaoAtividadeDto.getHoraInicio())); programacaoAtividadeDto.setHoraFim(UtilFormatacao.formataHoraHHMM(programacaoAtividadeDto.getHoraFim())); RegraProgramacaoAtividade.setDescricao(programacaoAtividadeDto); } } return col; } catch (final Exception e) { throw new ServiceException(e); } } @Override public void deleteByIdAtividadePeriodica(final Integer parm) throws Exception { try { this.getDao().deleteByIdAtividadePeriodica(parm); } catch (final Exception e) { throw new ServiceException(e); } } public EventoDTO getEvento(final AtividadePeriodicaDTO atividadePeriodicaDto, final ProgramacaoAtividadeDTO programacaoAtividadeDto, final java.util.Date dataRef, final String hora) throws Exception { final String horaFmt = UtilFormatacao.formataHoraHHMM(hora); final EventoDTO eventoDto = new EventoDTO(); eventoDto.setId("" + programacaoAtividadeDto.getIdProgramacaoAtividade() + "#" + hora); eventoDto.setIdProgramacao(programacaoAtividadeDto.getIdProgramacaoAtividade()); if (atividadePeriodicaDto.getNomeTipoMudanca() != null) { eventoDto.setTitle(atividadePeriodicaDto.getTituloAtividade() + "\n" + "Tipo: " + atividadePeriodicaDto.getNomeTipoMudanca()); } else { eventoDto.setTitle(atividadePeriodicaDto.getTituloAtividade()); } eventoDto.setNomeTipoMudanca(atividadePeriodicaDto.getNomeTipoMudanca()); eventoDto.setStart(Timestamp.valueOf(UtilDatas.dateToSTRWithFormat(dataRef, "yyyy-MM-dd") + " " + horaFmt + ":00")); double aux = Util.getHoraDbl(hora) + programacaoAtividadeDto.getDuracaoEstimada().doubleValue() / 60; java.util.Date dataAux = dataRef; if (aux > 24) { aux = aux - 24; dataAux = UtilDatas.alteraData(dataAux, 1, Calendar.DAY_OF_MONTH); } eventoDto.setEnd(Timestamp.valueOf(UtilDatas.dateToSTRWithFormat(dataAux, "yyyy-MM-dd") + " " + Util.getHoraFmtStr(aux) + ":00")); eventoDto.setAllDay(false); eventoDto.setClassName("agendado"); eventoDto.setHoraInicio(horaFmt); eventoDto.setData(dataRef); this.adicionaAtividadeOs(atividadePeriodicaDto, programacaoAtividadeDto, eventoDto); return eventoDto; } private void adicionaAtividadeOs(final AtividadePeriodicaDTO atividadePeriodicaDto, final ProgramacaoAtividadeDTO programacaoAtividadeDto, final EventoDTO eventoDto) throws Exception { final AtividadesOSDao atividadesOSDao = new AtividadesOSDao(); final AtividadesOSDTO atividadesOSDTO = new AtividadesOSDTO(); if (programacaoAtividadeDto != null) { AtividadesOSDTO beanatividadesOS = new AtividadesOSDTO(); if (programacaoAtividadeDto.getIdAtividadesOs() != null) { atividadesOSDTO.setIdAtividadesOS(programacaoAtividadeDto.getIdAtividadesOs()); } if (atividadesOSDTO.getIdAtividadesOS() != null) { final List<AtividadesOSDTO> listAtividadesOS = (List<AtividadesOSDTO>) atividadesOSDao.listOSNumeroAtividade(atividadesOSDTO.getIdAtividadesOS()); if (listAtividadesOS != null && listAtividadesOS.size() > 0) { beanatividadesOS = listAtividadesOS.get(0); } } if (beanatividadesOS != null) { if (beanatividadesOS.getNumeroOS() != null) { eventoDto.setNumeroOS(beanatividadesOS.getNumeroOS()); } if (beanatividadesOS.getDescricaoAtividade() != null) { eventoDto.setDescricaoAtividadeOS(beanatividadesOS.getDescricaoAtividade()); eventoDto.setTitle("(O.S: " + beanatividadesOS.getNumeroOS() + ")" + beanatividadesOS.getDescricaoAtividade()); } } } } public Collection<EventoDTO> verificaExecucao(final AtividadePeriodicaDTO atividadePeriodicaDto, final ProgramacaoAtividadeDTO programacaoAtividadeDto, final java.util.Date dataRef) throws Exception { final Collection<EventoDTO> colEventos = new ArrayList<>(); final java.util.Date dataExecucao = RegraProgramacaoAtividade.getDataProximaExecucao(programacaoAtividadeDto, dataRef); if (dataExecucao != null && dataExecucao.compareTo(dataRef) >= 0) { programacaoAtividadeDto.setProximaExecucao(new java.sql.Date(dataExecucao.getTime())); } if (dataExecucao != null && dataExecucao.compareTo(dataRef) == 0) { colEventos.add(this.getEvento(atividadePeriodicaDto, programacaoAtividadeDto, dataRef, programacaoAtividadeDto.getHoraInicio())); if (programacaoAtividadeDto.getRepeticao().equals("S")) { double intervalo = programacaoAtividadeDto.getRepeticaoIntervalo().doubleValue(); if (programacaoAtividadeDto.getRepeticaoTipoIntervalo().equals("M")) { intervalo = intervalo / 60; } final double limite = Util.getHoraDbl(programacaoAtividadeDto.getHoraFim()); double proximaHora = Util.getHoraDbl(programacaoAtividadeDto.getHoraInicio()) + intervalo; while (proximaHora <= limite) { colEventos.add(this.getEvento(atividadePeriodicaDto, programacaoAtividadeDto, dataRef, Util.getHoraStr(proximaHora))); proximaHora += intervalo; } } } return colEventos; } @Override public Collection<EventoDTO> findEventosAgenda(final AtividadePeriodicaDTO atividadePeriodicaDto, final java.util.Date dataInicio, final Integer qtdeDias) throws Exception { final Collection<ProgramacaoAtividadeDTO> colProgramacao = new ProgramacaoAtividadeDao().findByIdAtividadePeriodica(atividadePeriodicaDto.getIdAtividadePeriodica()); if (colProgramacao == null) { return null; } final Collection<EventoDTO> colEventos = new ArrayList<>(); for (int i = 0; i <= qtdeDias; i++) { final Calendar calendar = Calendar.getInstance(); final java.util.Date dataRef = UtilDatas.alteraData(dataInicio, i, Calendar.DAY_OF_MONTH); calendar.setTime(dataRef); for (final ProgramacaoAtividadeDTO programacaoAtividadeDto : colProgramacao) { colEventos.addAll(this.verificaExecucao(atividadePeriodicaDto, programacaoAtividadeDto, dataRef)); } } final ExecucaoAtividadePeriodicaDao execucaoAtividadeDao = new ExecucaoAtividadePeriodicaDao(); for (final EventoDTO eventoDto : colEventos) { Integer idExecucaoAtividadePeriodica = new Integer(0); final List lstExec = (List) execucaoAtividadeDao.findByAtvDataHora(atividadePeriodicaDto.getIdAtividadePeriodica(), new java.sql.Date(eventoDto.getData().getTime()), eventoDto.getHoraInicio(), eventoDto.getIdProgramacao()); if (lstExec != null && lstExec.size() > 0) { final ExecucaoAtividadePeriodicaDTO execucaoAtividadePeriodicaDTO = (ExecucaoAtividadePeriodicaDTO) lstExec.get(0); idExecucaoAtividadePeriodica = execucaoAtividadePeriodicaDTO.getIdExecucaoAtividadePeriodica(); if (execucaoAtividadePeriodicaDTO.getSituacao() == null) { execucaoAtividadePeriodicaDTO.setSituacao(""); } if (execucaoAtividadePeriodicaDTO.getSituacao().equalsIgnoreCase("E")) { eventoDto.setClassName("emExecucao"); eventoDto.setTitle(eventoDto.getTitle() + "\n" + "Atualizado em: " + UtilDatas.dateToSTR(execucaoAtividadePeriodicaDTO.getDataExecucao()) + " - " + execucaoAtividadePeriodicaDTO.getHoraExecucao()); } if (execucaoAtividadePeriodicaDTO.getSituacao().equalsIgnoreCase("S")) { eventoDto.setClassName("suspenso"); eventoDto.setTitle(eventoDto.getTitle() + "\n" + "Registro em: " + UtilDatas.dateToSTR(execucaoAtividadePeriodicaDTO.getDataExecucao()) + " - " + execucaoAtividadePeriodicaDTO.getHoraExecucao()); } if (execucaoAtividadePeriodicaDTO.getSituacao().equalsIgnoreCase("F")) { eventoDto.setClassName("executado"); eventoDto.setTitle(eventoDto.getTitle() + "\n" + "Executado em: " + UtilDatas.dateToSTR(execucaoAtividadePeriodicaDTO.getDataExecucao()) + " - " + execucaoAtividadePeriodicaDTO.getHoraExecucao()); } } eventoDto.setIdExecucao(idExecucaoAtividadePeriodica); } return colEventos; } @Override public void validaProgramacao(final ProgramacaoAtividadeDTO programacaoAtividadeDto) throws Exception { RegraProgramacaoAtividade.validaProgramacao(programacaoAtividadeDto); } @Override public Collection findByIdAtividadePeriodicaOrderDataHora(final Integer parm) throws Exception { try { final Collection<ProgramacaoAtividadeDTO> col = this.getDao().findByIdAtividadePeriodicaOrderDataHora(parm); if (col != null) { for (final ProgramacaoAtividadeDTO programacaoAtividadeDto : col) { programacaoAtividadeDto.setHoraInicio(UtilFormatacao.formataHoraHHMM(programacaoAtividadeDto.getHoraInicio())); programacaoAtividadeDto.setHoraFim(UtilFormatacao.formataHoraHHMM(programacaoAtividadeDto.getHoraFim())); RegraProgramacaoAtividade.setDescricao(programacaoAtividadeDto); } } return col; } catch (final Exception e) { throw new ServiceException(e); } } }