package gcom.gui.atendimentopublico.registroatendimento;
import gcom.fachada.Fachada;
import gcom.gui.GcomAction;
import gcom.operacional.abastecimento.AbastecimentoProgramacao;
import gcom.operacional.abastecimento.ManutencaoProgramacao;
import gcom.util.Util;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Descri��o da classe
*
* @author R�mulo Aur�lio
* @date 05/09/2006
*/
public class ExibirResultadoDetalhadoProgramacaoAbastecimentoManutencaoAction
extends GcomAction {
/**
* Este caso de uso permite a programa�ao de abastecimento e manutencao de
* uma determinada �rea de bairro
*
* [UC0440] Consultar Programa��o de Abastecimento e Manuten��o
*
*
* @author R�mulo Aur�lio
* @date 05/09/2006
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("resultadoDetalhado");
HttpSession sessao = httpServletRequest.getSession(false);
ResultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm = (ResultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
/*
* Setando os dados do sistema de abastecimento no form, dados vindo da
* sessao
*/
String sistemaAbastecimento = (String) sessao
.getAttribute("sistemaAbastecimento");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setSistemaAbastecimento(sistemaAbastecimento);
String zonaAbastecimento = (String) sessao
.getAttribute("zonaAbastecimento");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setZonaAbastecimento(zonaAbastecimento);
String municipio = (String) sessao.getAttribute("municipio");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setMunicipio(municipio);
String bairro = (String) sessao.getAttribute("bairro");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setBairro(bairro);
String bairroArea = (String) sessao.getAttribute("bairroArea");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setAreaBairro(bairroArea);
String codigoBairro = (String) sessao.getAttribute("idBairro");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setCodigoBairro(codigoBairro);
String codigoMunicipio = (String) sessao.getAttribute("idMunicipio");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setCodigoMunicipio(codigoMunicipio);
String codigoSistemaAbastecimento = (String) sessao
.getAttribute("codigoSistemaAbastecimento");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setCodigoSistemaAbastecimento(codigoSistemaAbastecimento);
String codigoZonaAbastecimento = (String) sessao
.getAttribute("codigoZonaAbastecimento");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setCodigoZonaAbastecimento(codigoZonaAbastecimento);
String codigoAreaBairro = (String) sessao.getAttribute("areaBairro");
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setCodigoAreaBairro(codigoAreaBairro);
// Recebe a colecao de Abastecimento Programacao pela sessao
Collection colecaoProgramacaoAbastecimento = null;
Collection colecaoProgramacaoManutencao = null;
/*
* Recebe o parametro pesquisa caso o usuario tenha voltado sem ter
* clicado no bot�o voltar e executa uma nova pesquisa, caso contrario,
* recebe a colecao que vem da action
* exibirResultadoConsultarProgramacaoAbastecimentoManutencaoAction
*/
if (sessao.getAttribute("pesquisa") != null) {
sessao.removeAttribute("pesquisa");
colecaoProgramacaoAbastecimento = (Collection) sessao
.getAttribute("colecaoProgramacaoAbastecimento");
colecaoProgramacaoManutencao = (Collection) sessao
.getAttribute("colecaoProgramacaoManutencao");
} else {
String mesAnoReferencia = (String) sessao
.getAttribute("mesAnoReferencia");
colecaoProgramacaoAbastecimento = fachada
.consultarProgramacaoAbastecimento(codigoMunicipio,
codigoBairro, codigoAreaBairro, mesAnoReferencia);
colecaoProgramacaoManutencao = fachada
.consultarProgramacaoManutencao(codigoMunicipio,
codigoBairro, codigoAreaBairro, mesAnoReferencia);
}
// Dados do calendario
String diaCalendario = httpServletRequest.getParameter("dia");
// vem mes anterior ao atual
String mesCalendario = httpServletRequest.getParameter("mes");
String anoCalendario = httpServletRequest.getParameter("ano");
Integer dia = new Integer(diaCalendario);
// Colocando o mes para o atual
Integer mes = new Integer(mesCalendario) + 1;
String dataReferencia = null;
// String dataReferenciaBusca = null;
Date dataReferenciaFormatada = null;
// Acrescenta 0 antes do dia se menor que 10
if (dia < 10) {
diaCalendario = "0" + dia.toString();
}
// acrescenta 0 antes do mes se a data do calend�rio for menor que 10
if (mes < 10) {
dataReferencia = diaCalendario + "/0" + mes.toString() + "/"
+ anoCalendario;
String teste = anoCalendario + "0" + mes.toString() + diaCalendario;
dataReferenciaFormatada = Util
.converteStringInvertidaSemBarraParaDate(teste);
} else {
dataReferencia = diaCalendario + "/" + mes.toString() + "/"
+ anoCalendario;
dataReferenciaFormatada = Util
.converteStringParaDate(dataReferencia);
}
resultadoDetalhadoProgramacaoAbastecimentoManutencaoActionForm
.setDataReferencia(dataReferencia);
if (colecaoProgramacaoAbastecimento != null
&& !colecaoProgramacaoAbastecimento.isEmpty()) {
Iterator colecaoProgramacaoAbastecimentoIterator = colecaoProgramacaoAbastecimento
.iterator();
AbastecimentoProgramacao abastecimentoProgramacao = null;
Date dataInicioAbastecimento = null;
Date dataFimAbastecimento = null;
/*
* Roda a cole�ao para pegar o abastecimento programacao
* correto(cuja a data selecinada no formulario corresponda a ao
* intervalo datainicio e dataFim da cole��o), caso nenhum seka o
* correto, assume nulo
*/
while (colecaoProgramacaoAbastecimentoIterator.hasNext()) {
abastecimentoProgramacao = (AbastecimentoProgramacao) colecaoProgramacaoAbastecimentoIterator
.next();
dataInicioAbastecimento = abastecimentoProgramacao
.getDataInicio();
dataFimAbastecimento = abastecimentoProgramacao.getDataFim();
if (dataReferenciaFormatada.compareTo(dataInicioAbastecimento) >= 0
&& dataReferenciaFormatada
.compareTo(dataFimAbastecimento) <= 0) {
break;
} else {
abastecimentoProgramacao = null;
}
}
/*
* Caso a data informada esteja no intervalo entre a data de In�cio
* e a data do Fim do abastecimento
*
*/
if (abastecimentoProgramacao != null) {
if ((dataInicioAbastecimento.compareTo(dataReferenciaFormatada) < 0)
&& ((dataFimAbastecimento
.compareTo(dataReferenciaFormatada) > 0))) {
/*
* Adiciona na colecaoProgramacaoAbastecimento o intervalo
* de horas 00:00 ate 23:59 para os dia no intervalo entre o
* dia de inicio e do fim Abastecimento
*
*/
abastecimentoProgramacao
.setDataInicio(dataReferenciaFormatada);
abastecimentoProgramacao
.setDataFim(dataReferenciaFormatada);
Calendar horaInicio = Calendar.getInstance();
horaInicio.setTime(dataReferenciaFormatada);
horaInicio.set(Calendar.HOUR_OF_DAY, 00);
horaInicio.set(Calendar.MINUTE, 0);
horaInicio.set(Calendar.SECOND, 00);
horaInicio.set(Calendar.MILLISECOND, 01);
abastecimentoProgramacao
.setHoraInicio(horaInicio.getTime());
Calendar horaFim = Calendar.getInstance();
horaFim.setTime(dataReferenciaFormatada);
horaFim.set(Calendar.HOUR_OF_DAY, 23);
horaFim.set(Calendar.MINUTE, 59);
horaFim.set(Calendar.SECOND, 59);
horaFim.set(Calendar.MILLISECOND, 59);
abastecimentoProgramacao.setHoraFim(horaFim.getTime());
colecaoProgramacaoAbastecimento
.removeAll(colecaoProgramacaoAbastecimento);
colecaoProgramacaoAbastecimento
.add(abastecimentoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
}
/*
* Se o dia do in�cio do abastecimento for igual ao dia do fim
* do abastecimento
*/
if ((dataInicioAbastecimento.compareTo(dataFimAbastecimento) == 0)
&& (dataInicioAbastecimento
.compareTo(dataReferenciaFormatada) == 0)
&& (dataInicioAbastecimento == dataFimAbastecimento)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
sessao.removeAttribute("colecaoProgramacaoAbastecimento");
}
/*
* Caso o dia de In�cio seja diferente do fim, verifica as
* seguintes condicoes: 1- Caso o dia informado seja o dia de
* in�cio, altera a hora do fim para 23:59:59. 2- Caso o dia
* informado seja o dia do fim, altera a hora de in�cio para
* 24:00:00
*/
if (dataInicioAbastecimento.compareTo(dataFimAbastecimento) != 0) {
if ((dataInicioAbastecimento
.compareTo(dataReferenciaFormatada) == 0)) {
Calendar horaFim = Calendar.getInstance();
horaFim.setTime(dataReferenciaFormatada);
horaFim.set(Calendar.HOUR_OF_DAY, 23);
horaFim.set(Calendar.MINUTE, 59);
horaFim.set(Calendar.SECOND, 59);
horaFim.set(Calendar.MILLISECOND, 59);
abastecimentoProgramacao.setHoraFim(horaFim.getTime());
colecaoProgramacaoAbastecimento
.removeAll(colecaoProgramacaoAbastecimento);
colecaoProgramacaoAbastecimento
.add(abastecimentoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
sessao
.removeAttribute("colecaoProgramacaoAbastecimento");
} else if (dataFimAbastecimento
.compareTo(dataReferenciaFormatada) == 0) {
Calendar horaInicio = Calendar.getInstance();
horaInicio.setTime(dataReferenciaFormatada);
horaInicio.set(Calendar.HOUR_OF_DAY, 00);
horaInicio.set(Calendar.MINUTE, 0);
horaInicio.set(Calendar.SECOND, 00);
horaInicio.set(Calendar.MILLISECOND, 01);
abastecimentoProgramacao.setHoraInicio(horaInicio
.getTime());
colecaoProgramacaoAbastecimento
.removeAll(colecaoProgramacaoAbastecimento);
colecaoProgramacaoAbastecimento
.add(abastecimentoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
sessao
.removeAttribute("colecaoProgramacaoAbastecimento");
}
}
if ((dataInicioAbastecimento.compareTo(dataReferenciaFormatada) > 0)
&& (dataFimAbastecimento
.compareTo(dataReferenciaFormatada) > 0)
&& (dataInicioAbastecimento != dataFimAbastecimento)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
}
if ((dataInicioAbastecimento.compareTo(dataReferenciaFormatada) < 0)
&& (dataFimAbastecimento
.compareTo(dataReferenciaFormatada) < 0)
&& (dataInicioAbastecimento != dataFimAbastecimento)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
}
} else {
colecaoProgramacaoAbastecimento = new ArrayList();
httpServletRequest.setAttribute(
"colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
}
} else {
colecaoProgramacaoAbastecimento = new ArrayList();
httpServletRequest.setAttribute("colecaoProgramacaoAbastecimento",
colecaoProgramacaoAbastecimento);
}
if (colecaoProgramacaoManutencao != null
&& !colecaoProgramacaoManutencao.isEmpty()) {
// Manuten��o
Iterator colecaoProgramacaoManutencaoIterator = colecaoProgramacaoManutencao
.iterator();
ManutencaoProgramacao manutencaoProgramacao = null;
Date dataInicioManutencao = null;
Date dataFimManutencao = null;
/*
* Roda a cole�ao para pegar o manuten��o programacao correto(cuja a
* data selecinada no formulario corresponda a ao intervalo
* datainicio e dataFim da cole��o), caso nenhum seka o correto,
* assume nulo
*/
while (colecaoProgramacaoManutencaoIterator.hasNext()) {
manutencaoProgramacao = (ManutencaoProgramacao) colecaoProgramacaoManutencaoIterator
.next();
dataInicioManutencao = manutencaoProgramacao.getDataInicio();
dataFimManutencao = manutencaoProgramacao.getDataFim();
if (dataReferenciaFormatada.compareTo(dataInicioManutencao) >= 0
&& dataReferenciaFormatada.compareTo(dataFimManutencao) <= 0) {
break;
} else {
manutencaoProgramacao = null;
}
}
if (manutencaoProgramacao != null) {
if ((dataInicioManutencao.compareTo(dataReferenciaFormatada) < 0)
&& ((dataFimManutencao
.compareTo(dataReferenciaFormatada) > 0))) {
/*
* Adiciona na colecaoProgramacaoAbastecimento o intervalo
* de horas 00:00 ate 23:59 para os dia no intervalo entre o
* dia de inicio e do fim Abastecimento
*
*/
manutencaoProgramacao
.setDataInicio(dataReferenciaFormatada);
manutencaoProgramacao.setDataFim(dataReferenciaFormatada);
Calendar horaInicio = Calendar.getInstance();
horaInicio.setTime(dataReferenciaFormatada);
horaInicio.set(Calendar.HOUR_OF_DAY, 00);
horaInicio.set(Calendar.MINUTE, 0);
horaInicio.set(Calendar.SECOND, 00);
horaInicio.set(Calendar.MILLISECOND, 01);
manutencaoProgramacao.setHoraInicio(horaInicio.getTime());
Calendar horaFim = Calendar.getInstance();
horaFim.setTime(dataReferenciaFormatada);
horaFim.set(Calendar.HOUR_OF_DAY, 23);
horaFim.set(Calendar.MINUTE, 59);
horaFim.set(Calendar.SECOND, 59);
horaFim.set(Calendar.MILLISECOND, 59);
manutencaoProgramacao.setHoraFim(horaFim.getTime());
colecaoProgramacaoManutencao
.removeAll(colecaoProgramacaoManutencao);
colecaoProgramacaoManutencao.add(manutencaoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
}
/*
* Se o dia do in�cio da manutencao for igual ao dia do fim do
* manutencao
*/
if ((dataInicioManutencao.compareTo(dataFimManutencao) == 0)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
sessao.removeAttribute("colecaoProgramacaoManutencao");
}
/*
* Caso o dia de In�cio seja diferente do fim, verifica as
* seguintes condicoes: 1- Caso o dia informado seja o dia de
* in�cio, altera a hora do fim para 23:59:59. 2- Caso o dia
* informado seja o dia do fim, altera a hora de in�cio para
* 24:00:00
*/
if (dataInicioManutencao.compareTo(dataFimManutencao) != 0) {
if ((dataInicioManutencao
.compareTo(dataReferenciaFormatada) == 0)) {
Calendar horaFim = Calendar.getInstance();
horaFim.setTime(dataReferenciaFormatada);
horaFim.set(Calendar.HOUR_OF_DAY, 23);
horaFim.set(Calendar.MINUTE, 59);
horaFim.set(Calendar.SECOND, 59);
horaFim.set(Calendar.MILLISECOND, 59);
manutencaoProgramacao.setHoraFim(horaFim.getTime());
colecaoProgramacaoManutencao
.removeAll(colecaoProgramacaoManutencao);
colecaoProgramacaoManutencao.add(manutencaoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
sessao.removeAttribute("colecaoProgramacaoManutencao");
}
if (dataFimManutencao.compareTo(dataReferenciaFormatada) == 0) {
Calendar horaInicio = Calendar.getInstance();
horaInicio.setTime(dataReferenciaFormatada);
horaInicio.set(Calendar.HOUR_OF_DAY, 00);
horaInicio.set(Calendar.MINUTE, 0);
horaInicio.set(Calendar.SECOND, 00);
horaInicio.set(Calendar.MILLISECOND, 01);
manutencaoProgramacao.setHoraInicio(horaInicio
.getTime());
colecaoProgramacaoManutencao
.removeAll(colecaoProgramacaoManutencao);
colecaoProgramacaoManutencao.add(manutencaoProgramacao);
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
sessao.removeAttribute("colecaoProgramacaoManutencao");
}
if ((dataInicioManutencao
.compareTo(dataReferenciaFormatada) < 0)
&& (dataFimManutencao
.compareTo(dataReferenciaFormatada) < 0)
&& (dataInicioManutencao != dataFimManutencao)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
}
if ((dataInicioManutencao
.compareTo(dataReferenciaFormatada) > 0)
&& (dataFimManutencao
.compareTo(dataReferenciaFormatada) > 0)
&& (dataInicioManutencao != dataFimManutencao)) {
httpServletRequest.setAttribute(
"colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
}
}
} else {
colecaoProgramacaoManutencao = new ArrayList();
httpServletRequest.setAttribute("colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
}
} else {
colecaoProgramacaoManutencao = new ArrayList();
httpServletRequest.setAttribute("colecaoProgramacaoManutencao",
colecaoProgramacaoManutencao);
}
return retorno;
}
}