package br.com.centralit.citcorpore.regras;
import java.util.Calendar;
import br.com.centralit.citcorpore.bean.ProgramacaoAtividadeDTO;
import br.com.centralit.citcorpore.util.Util;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.util.UtilDatas;
public class RegraProgramacaoAtividade_S extends RegraProgramacaoAtividade {
public java.util.Date calculaProximaExecucao(ProgramacaoAtividadeDTO programacaoAtividadeDto, java.util.Date dataRef) throws Exception {
if (programacaoAtividadeDto.getDataFim() != null && programacaoAtividadeDto.getDataFim().compareTo(dataRef) < 0)
return null;
java.util.Date proximaExecucao = null;
java.util.Date dataExecucao = programacaoAtividadeDto.getProximaExecucao();
if (dataExecucao == null)
dataExecucao = programacaoAtividadeDto.getDataInicio();
if (dataExecucao.compareTo(dataRef) <= 0) {
String[] dias = new String[] {"", programacaoAtividadeDto.getDom(), programacaoAtividadeDto.getSeg(), programacaoAtividadeDto.getTer()
, programacaoAtividadeDto.getQua(), programacaoAtividadeDto.getQui(), programacaoAtividadeDto.getSex(), programacaoAtividadeDto.getSab()};
int primeiroDia = 0;
int ultimoDia = 0;
for (int i = 1; i < dias.length; i++) {
if (dias[i].equals("S")) {
ultimoDia = i;
if (primeiroDia == 0)
primeiroDia = i;
}
}
while (dataExecucao.compareTo(dataRef) < 0) {
int diaSemana = Util.getDiaSemana(dataExecucao);
if (diaSemana == ultimoDia) {
java.util.Date primeiraExecucaoSemana = dataExecucao;
while (Util.getDiaSemana(primeiraExecucaoSemana) != primeiroDia)
primeiraExecucaoSemana = UtilDatas.alteraData(primeiraExecucaoSemana, -1, Calendar.DAY_OF_MONTH);
dataExecucao = UtilDatas.alteraData(primeiraExecucaoSemana, programacaoAtividadeDto.getPeriodicidadeSemanal()*7, Calendar.DAY_OF_MONTH);
}else
dataExecucao = UtilDatas.alteraData(dataExecucao, 1, Calendar.DAY_OF_MONTH);
while (!dias[Util.getDiaSemana(dataExecucao)].equals("S"))
dataExecucao = UtilDatas.alteraData(dataExecucao, 1, Calendar.DAY_OF_MONTH);
}
proximaExecucao = dataExecucao;
}else
proximaExecucao = programacaoAtividadeDto.getProximaExecucao();
return proximaExecucao;
}
public void valida(ProgramacaoAtividadeDTO programacaoAtividadeDto) throws Exception {
if (programacaoAtividadeDto.getPeriodicidadeSemanal() == null)
throw new LogicException("Periodicidade da programa��o semanal n�o foi informada");
if (programacaoAtividadeDto.getSeg() == null)
programacaoAtividadeDto.setSeg("N");
if (programacaoAtividadeDto.getTer() == null)
programacaoAtividadeDto.setTer("N");
if (programacaoAtividadeDto.getQua() == null)
programacaoAtividadeDto.setQua("N");
if (programacaoAtividadeDto.getQui() == null)
programacaoAtividadeDto.setQui("N");
if (programacaoAtividadeDto.getSex() == null)
programacaoAtividadeDto.setSex("N");
if (programacaoAtividadeDto.getSab() == null)
programacaoAtividadeDto.setSab("N");
if (programacaoAtividadeDto.getDom() == null)
programacaoAtividadeDto.setDom("N");
if (programacaoAtividadeDto.getSeg().equals("N") && programacaoAtividadeDto.getTer().equals("N") &&
programacaoAtividadeDto.getQua().equals("N") && programacaoAtividadeDto.getQui().equals("N") &&
programacaoAtividadeDto.getSex().equals("N") && programacaoAtividadeDto.getSab().equals("N") && programacaoAtividadeDto.getDom().equals("N"))
throw new LogicException("N�o foi informado nenhum dia da semana");
String[] dias = new String[] {"", programacaoAtividadeDto.getDom(), programacaoAtividadeDto.getSeg(), programacaoAtividadeDto.getTer()
, programacaoAtividadeDto.getQua(), programacaoAtividadeDto.getQui(), programacaoAtividadeDto.getSex(), programacaoAtividadeDto.getSab()};
int diaSemana = Util.getDiaSemana(programacaoAtividadeDto.getDataInicio());
if (dias[diaSemana].equals("N"))
throw new LogicException("Data de in�cio n�o coincide com nenhum dia da semana informado");
}
public String getDetalhamento(ProgramacaoAtividadeDTO programacaoAtividadeDto) throws Exception {
String descricao = "";
descricao = "�s "+programacaoAtividadeDto.getHoraInicio()+" todo(a)";
String dias = "";
if (programacaoAtividadeDto.getSeg().equals("S"))
dias += " segunda";
if (programacaoAtividadeDto.getTer().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " ter�a";
}
if (programacaoAtividadeDto.getQua().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " quarta";
}
if (programacaoAtividadeDto.getQui().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " quinta";
}
if (programacaoAtividadeDto.getSex().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " sexta";
}
if (programacaoAtividadeDto.getSab().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " s�bado";
}
if (programacaoAtividadeDto.getDom().equals("S")) {
if (dias.length() > 0)
dias += ",";
dias += " domingo";
}
descricao += dias;
if (programacaoAtividadeDto.getPeriodicidadeSemanal().intValue() > 1)
descricao += " a cada "+programacaoAtividadeDto.getPeriodicidadeSemanal().intValue()+" semanas";
return descricao;
}
}