package gcom.gui.operacional.abastecimento;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.operacional.abastecimento.AbastecimentoProgramacao;
import gcom.operacional.abastecimento.ManutencaoProgramacao;
import gcom.util.Util;
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
*
* [SB0003] - Atualizar Programa��o de Abastecimento
* [SB0004] - Atualizar Programa��o de Manuten��o
*
* @author Rafael Pinto
*
* @date 09/11/2006
*/
public class ExibirAtualizarProgramacaoAbastecimentoManutencaoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("atualizarProgramacaoAbastecimentoManutencao");
InformarProgramacaoAbastecimentoManutencaoActionForm form =
(InformarProgramacaoAbastecimentoManutencaoActionForm) actionForm;
String tipoOperacao = httpServletRequest.getParameter("tipoOperacao");
if(tipoOperacao != null && !tipoOperacao.equals("") && tipoOperacao.equals("A")){
this.verificarExistenciaProgramacao(form);
Date dataInicio = Util.converteStringParaDate(form.getDataInicio());
Date dataFim = Util.converteStringParaDate(form.getDataFim());
Date horaInicio = Util.converterStringParaHoraMinuto(form.getHoraInicio());
Date horaFim = Util.converterStringParaHoraMinuto(form.getHoraFim());
int indice = form.getIndice();
Date ultimaAlteracao = (Date) this.getSessao(httpServletRequest).getAttribute("ultimaAlteracao");
if(form.getTipoProgramacao().equals("A")){
AbastecimentoProgramacao abastecimentoProgramacao =
this.retornaAbastecimentoProgramacao(indice,form);
abastecimentoProgramacao.setDataInicio(dataInicio);
abastecimentoProgramacao.setDataFim(dataFim);
abastecimentoProgramacao.setHoraInicio(horaInicio);
abastecimentoProgramacao.setHoraFim(horaFim);
abastecimentoProgramacao.setUltimaAlteracao(ultimaAlteracao);
}else{
ManutencaoProgramacao manutencaoProgramacao =
this.retornaManutencaoProgramacao(indice,form);
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);
}
httpServletRequest.setAttribute("fechaPopup", "true");
}else{
this.resetPopup(form);
String tipoProgramacao = httpServletRequest.getParameter("tipoProgramacao");
String indice = httpServletRequest.getParameter("indice");
form.setTipoProgramacao(tipoProgramacao);
form.setIndice(new Integer(indice));
String descricao = null;
String situacao = null;
Date dataInicio = null;
Date dataFim = null;
Date horaInicio = null;
Date horaFim = null;
if(form.getTipoProgramacao().equals("A")){
AbastecimentoProgramacao abastecimentoProgramacao =
this.retornaAbastecimentoProgramacao(form.getIndice(),form);
dataInicio = abastecimentoProgramacao.getDataInicio();
dataFim = abastecimentoProgramacao.getDataFim();
horaInicio = abastecimentoProgramacao.getHoraInicio();
horaFim = abastecimentoProgramacao.getHoraFim();
}else{
ManutencaoProgramacao manutencaoProgramacao =
this.retornaManutencaoProgramacao(form.getIndice(),form);
descricao = manutencaoProgramacao.getDescricao();
situacao = ""+manutencaoProgramacao.getSituacao();
dataInicio = manutencaoProgramacao.getDataInicio();
dataFim = manutencaoProgramacao.getDataFim();
horaInicio = manutencaoProgramacao.getHoraInicio();
horaFim = manutencaoProgramacao.getHoraFim();
}
form.setDescricaoManutencaoProgramacao(descricao);
form.setSituacaoManutencaoProgramacao(situacao);
form.setDataInicio(Util.formatarData(dataInicio));
form.setDataFim(Util.formatarData(dataFim));
form.setHoraInicio(Util.formatarHoraSemSegundos(horaInicio));
form.setHoraFim(Util.formatarHoraSemSegundos(horaFim));
}
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()){
int index = 0;
for (Iterator iter = colecao.iterator(); iter.hasNext();) {
Object object = (Object) iter.next();
index++;
if(form.getIndice() != index){
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);
}
}//fim do if indice
}//fim do while
}//fim da colecao != null
}
/**
* Retorno o objeto AbastecimentoProgramacao
*
* @author Rafael Pinto
* @date 15/11/2006
*
* @param InformarProgramacaoAbastecimentoManutencaoActionForm
*/
private AbastecimentoProgramacao retornaAbastecimentoProgramacao(int indice,
InformarProgramacaoAbastecimentoManutencaoActionForm form){
int index = 0;
AbastecimentoProgramacao abastecimentoProgramacao = null;
for (Iterator iter = form.getAbastecimentoProgramacao().iterator(); iter.hasNext();) {
index++;
AbastecimentoProgramacao element = (AbastecimentoProgramacao) iter.next();
if (index == indice) {
abastecimentoProgramacao = element;
break;
}
}
return abastecimentoProgramacao;
}
/**
* Retorno o objeto AbastecimentoProgramacao
*
* @author Rafael Pinto
* @date 15/11/2006
*
* @param InformarProgramacaoAbastecimentoManutencaoActionForm
*/
private ManutencaoProgramacao retornaManutencaoProgramacao(int indice,
InformarProgramacaoAbastecimentoManutencaoActionForm form){
int index = 0;
ManutencaoProgramacao manutencaoProgramacao = null;
for (Iterator iter = form.getManutencaoProgramacao().iterator(); iter.hasNext();) {
index++;
ManutencaoProgramacao element = (ManutencaoProgramacao) iter.next();
if (index == indice) {
manutencaoProgramacao = element;
break;
}
}
return manutencaoProgramacao;
}
/**
* 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();
}
}