package gcom.gui.operacional.abastecimento;
import gcom.cadastro.geografico.Bairro;
import gcom.cadastro.geografico.BairroArea;
import gcom.cadastro.geografico.FiltroBairro;
import gcom.cadastro.geografico.Municipio;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.operacional.DistritoOperacional;
import gcom.operacional.SetorAbastecimento;
import gcom.operacional.SistemaAbastecimento;
import gcom.operacional.ZonaAbastecimento;
import gcom.operacional.abastecimento.AbastecimentoProgramacao;
import gcom.operacional.abastecimento.ManutencaoProgramacao;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC0414] - Informar Programa��o de Abastecimento e Manuten��o
*
* [SB0001] - Inserir Programa��o de Abastecimento
* [SB0003] - Inserir Programa��o de Manuten��o
*
* @author Rafael Pinto
*
* @date 09/11/2006
*/
public class ExibirInserirProgramacaoAbastecimentoManutencaoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("inserirProgramacaoAbastecimentoManutencao");
InformarProgramacaoAbastecimentoManutencaoActionForm form =
(InformarProgramacaoAbastecimentoManutencaoActionForm) actionForm;
String tipoOperacao = httpServletRequest.getParameter("tipoOperacao");
if(tipoOperacao != null && !tipoOperacao.equals("") && tipoOperacao.equals("I")){
this.verificarExistenciaProgramacao(form);
Municipio municipio = new Municipio();
municipio.setId(new Integer(form.getMunicipio()));
Bairro bairro = new Bairro();
BairroArea bairroArea = new BairroArea();
if (form.getBairro() != null && !form.getBairro().equals("")) {
bairro =
this.consultarBairro(new Integer(form.getBairro()),municipio.getId());
bairroArea.setId(new Integer(form.getAreaBairro()));
}
DistritoOperacional distritoOperacional = null;
SetorAbastecimento setorAbastecimento = null;
SistemaAbastecimento sistemaAbastecimento = null;
ZonaAbastecimento zonaAbastecimento = null;
if(form.getDistritoOperacional() != null && !form.getDistritoOperacional().equals("")){
distritoOperacional = new DistritoOperacional();
distritoOperacional.setId(new Integer(form.getDistritoOperacional()));
}
if(form.getSetorAbastecimento() != null && !form.getSetorAbastecimento().equals("")){
setorAbastecimento = new SetorAbastecimento();
setorAbastecimento.setId(new Integer(form.getSetorAbastecimento()));
}
if(form.getSistemaAbastecimento() != null && !form.getSistemaAbastecimento().equals("")){
sistemaAbastecimento = new SistemaAbastecimento();
sistemaAbastecimento.setId(new Integer(form.getSistemaAbastecimento()));
}
if(form.getZonaAbastecimento() != null && !form.getZonaAbastecimento().equals("")){
zonaAbastecimento = new ZonaAbastecimento();
zonaAbastecimento.setId(new Integer(form.getZonaAbastecimento()));
}
Date dataInicio = Util.converteStringParaDate(form.getDataInicio());
Date dataFim = Util.converteStringParaDate(form.getDataFim());
Date horaInicio = Util.converterStringParaHoraMinuto(form.getHoraInicio());
Date horaFim = Util.converterStringParaHoraMinuto(form.getHoraFim());
String mes = form.getMesAnoReferencia().substring(0, 2);
String ano = form.getMesAnoReferencia().substring(3, 7);
String anoMesReferencia = ano + mes;
Date ultimaAlteracao = (Date) this.getSessao(httpServletRequest).getAttribute("ultimaAlteracao");
if(form.getTipoProgramacao().equals("A")){
AbastecimentoProgramacao abastecimentoProgramacao = new AbastecimentoProgramacao();
abastecimentoProgramacao.setAnoMesReferencia(new Integer(anoMesReferencia));
abastecimentoProgramacao.setBairro(bairro);
abastecimentoProgramacao.setBairroArea(bairroArea);
abastecimentoProgramacao.setDistritoOperacional(distritoOperacional);
abastecimentoProgramacao.setMunicipio(municipio);
abastecimentoProgramacao.setSetorAbastecimento(setorAbastecimento);
abastecimentoProgramacao.setSistemaAbastecimento(sistemaAbastecimento);
abastecimentoProgramacao.setZonaAbastecimento(zonaAbastecimento);
abastecimentoProgramacao.setDataInicio(dataInicio);
abastecimentoProgramacao.setDataFim(dataFim);
abastecimentoProgramacao.setHoraInicio(horaInicio);
abastecimentoProgramacao.setHoraFim(horaFim);
abastecimentoProgramacao.setUltimaAlteracao(ultimaAlteracao);
form.getAbastecimentoProgramacao().add(abastecimentoProgramacao);
}else{
ManutencaoProgramacao manutencaoProgramacao = new ManutencaoProgramacao();
manutencaoProgramacao.setAnoMesReferencia(new Integer(anoMesReferencia));
manutencaoProgramacao.setBairro(bairro);
manutencaoProgramacao.setBairroArea(bairroArea);
manutencaoProgramacao.setDistritoOperacional(distritoOperacional);
manutencaoProgramacao.setMunicipio(municipio);
manutencaoProgramacao.setSetorAbastecimento(setorAbastecimento);
manutencaoProgramacao.setSistemaAbastecimento(sistemaAbastecimento);
manutencaoProgramacao.setZonaAbastecimento(zonaAbastecimento);
manutencaoProgramacao.setDescricao(form.getDescricaoManutencaoProgramacao());
manutencaoProgramacao.setSituacao(new Short(form.getSituacaoManutencaoProgramacao()));
manutencaoProgramacao.setDataInicio(dataInicio);
manutencaoProgramacao.setDataFim(dataFim);
manutencaoProgramacao.setHoraInicio(horaInicio);
manutencaoProgramacao.setHoraFim(horaFim);
manutencaoProgramacao.setUltimaAlteracao(ultimaAlteracao);
form.getManutencaoProgramacao().add(manutencaoProgramacao);
}
httpServletRequest.setAttribute("fechaPopup", "true");
}else{
String tipoProgramacao = httpServletRequest.getParameter("tipoProgramacao");
form.setTipoProgramacao(tipoProgramacao);
this.resetPopup(form);
}
return retorno;
}
/**
* Reseta informa��es vindas do popup
*
* @author Rafael Pinto
* @date 14/11/2006
*
* @param InformarProgramacaoAbastecimentoManutencaoActionForm
*/
private void resetPopup(InformarProgramacaoAbastecimentoManutencaoActionForm form) {
form.setDescricaoManutencaoProgramacao(null);
form.setSituacaoManutencaoProgramacao(null);
form.setDataInicio(null);
form.setDataFim(null);
form.setHoraInicio(null);
form.setHoraFim(null);
}
/**
* [FS0009] - Verificar Exist�ncia de Programa��o de Abastecimento
*
* @author Rafael Pinto
* @date 15/11/2006
*
* @param InformarProgramacaoAbastecimentoManutencaoActionForm
*/
private void verificarExistenciaProgramacao(InformarProgramacaoAbastecimentoManutencaoActionForm form){
Collection colecao = null;
if(form.getTipoProgramacao().equals("A")){
colecao = form.getAbastecimentoProgramacao();
}else{
colecao = form.getManutencaoProgramacao();
}
if(colecao != null && !colecao.isEmpty()){
Iterator itera = colecao.iterator();
while(itera.hasNext()){
Object object = (Object) itera.next();
Date dataInicio = Util.converteStringParaDate(form.getDataInicio());
Date dataFim = Util.converteStringParaDate(form.getDataFim());
Date horaInicio = Util.converterStringParaHoraMinuto(form.getHoraInicio());
Date horaFim = Util.converterStringParaHoraMinuto(form.getHoraFim());
Date dataInicioProgramacao = null;
Date dataFimProgramacao = null;
Date horaInicioProgramacao = null;
Date horaFimProgramacao = null;
if(object instanceof AbastecimentoProgramacao){
AbastecimentoProgramacao abastecimentoProgramacao = (AbastecimentoProgramacao) object;
dataInicioProgramacao = abastecimentoProgramacao.getDataInicio();
dataFimProgramacao = abastecimentoProgramacao.getDataFim();
horaInicioProgramacao = abastecimentoProgramacao.getHoraInicio();
horaFimProgramacao = abastecimentoProgramacao.getHoraFim();
}else{
ManutencaoProgramacao manutencaoProgramacao = (ManutencaoProgramacao) object;
dataInicioProgramacao = manutencaoProgramacao.getDataInicio();
dataFimProgramacao = manutencaoProgramacao.getDataFim();
horaInicioProgramacao = manutencaoProgramacao.getHoraInicio();
horaFimProgramacao = manutencaoProgramacao.getHoraFim();
}
String hora = Util.formatarHoraSemData(horaInicioProgramacao);
horaInicioProgramacao = Util.converterStringParaHoraMinuto(hora);
hora = Util.formatarHoraSemData(horaFimProgramacao);
horaFimProgramacao = Util.converterStringParaHoraMinuto(hora);
Date dataMontandaProgInicio = this.montarDataParaIntervalo(dataInicioProgramacao,horaInicioProgramacao);
Date dataMontandaProgFim = this.montarDataParaIntervalo(dataFimProgramacao,horaFimProgramacao);
Date dataMontandaInicio = this.montarDataParaIntervalo(dataInicio,horaInicio);
Date dataMontandaFim = this.montarDataParaIntervalo(dataFim,horaFim);
if(Util.verifcarIntervaloData(dataMontandaProgInicio,dataMontandaProgFim,dataMontandaInicio) ||
Util.verifcarIntervaloData(dataMontandaProgInicio,dataMontandaProgFim,dataMontandaFim)){
String[] msg = new String[5];
if(form.getTipoProgramacao().equals("A")){
msg[0] = "abastecimento";
}else{
msg[0] = "manuten��o";
}
msg[1] = Util.formatarData(dataInicioProgramacao);
msg[2] = Util.formatarData(dataFimProgramacao);
msg[3] = Util.formatarHoraSemData(horaInicioProgramacao);
msg[4] = Util.formatarHoraSemData(horaFimProgramacao);
throw new ActionServletException("atencao.ja_existe_programacao_no_periodo",
null, msg);
}
}
}
}
/**
* Pesquisar Bairro
*
* @author Rafael Pinto
* @date 16/11/2006
*/
private Bairro consultarBairro(Integer codigoBairro,Integer idMunicipio){
FiltroBairro filtroBairro = new FiltroBairro();
filtroBairro.adicionarParametro(
new ParametroSimples(FiltroBairro.CODIGO, codigoBairro));
filtroBairro.adicionarParametro(
new ParametroSimples(FiltroBairro.MUNICIPIO_ID, idMunicipio));
Collection colecaBairro =
this.getFachada().pesquisar(filtroBairro,Bairro.class.getName());
Bairro bairro = (Bairro) colecaBairro.iterator().next();
return bairro;
}
/**
* Montar a data adcionando a hora e o minuto
*
* @author Rafael Pinto
* @date 30/11/2006
*/
private Date montarDataParaIntervalo(Date data,Date dataHora){
Calendar calendarHora = new GregorianCalendar();
calendarHora.setTime(dataHora);
int hora = calendarHora.get(Calendar.HOUR_OF_DAY);
int minuto = calendarHora.get(Calendar.MINUTE);
Calendar calendarData = new GregorianCalendar();
calendarData.setTime(data);
calendarData.set(Calendar.HOUR_OF_DAY,hora);
calendarData.set(Calendar.MINUTE,minuto);
calendarData.set(Calendar.SECOND,0);
return calendarData.getTime();
}
}