package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.OrdemServicoProgramacao;
import gcom.atendimentopublico.ordemservico.ProgramacaoRoteiro;
import gcom.atendimentopublico.ordemservico.bean.OSProgramacaoHelper;
import gcom.fachada.Fachada;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
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;
public class ConcluirElaborarOrdemServicoRoteiroCriteriosAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno =
actionMapping.findForward("telaSucesso");
ElaborarOrdemServicoRoteiroCriteriosActionForm elaborarActionForm =
(ElaborarOrdemServicoRoteiroCriteriosActionForm) actionForm;
String data = elaborarActionForm.getDataRoteiro();
Date dataRoteiro = Util.converteStringParaDate(data);
HttpSession sessao = httpServletRequest.getSession(false);
HashMap mapOsProgramacaoHelper = (HashMap) sessao.getAttribute("mapOsProgramacaoHelper");
Collection colecao = mapOsProgramacaoHelper.values();
Collection colecaoNova = this.removeOrdemServicoProgramacaoJaExistente(colecao,dataRoteiro);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
Fachada.getInstancia().elaborarRoteiro(colecaoNova, usuario);
//Monta a p�gina de sucesso
montarPaginaSucesso(httpServletRequest,
"Elabora��o do Roteiro de Programa��o de Ordens de Servi�os efetuado com sucesso",
"Efetuar outra Elabora��o do Roteiro",
"exibirElaborarOrdemServicoRoteiroCriteriosAction.do?menu=sim&dataRoteiro="+elaborarActionForm.getDataRoteiro());
return retorno;
}
/**
* Remove as ordem de servico programacao que j� existe no banco de dados
* so existe porque possui id
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param colecao de OS ProgramacaoHelper
* @return Collection<OSProgramacaoHelper>
*/
private Collection<OSProgramacaoHelper> removeOrdemServicoProgramacaoJaExistente(Collection colecao,Date dataRoteiroElaboracao){
Collection<OSProgramacaoHelper> retorno = new ArrayList();
Iterator itera = colecao.iterator();
while (itera.hasNext()) {
Collection colecaoOSProgramacaoHelper = (Collection) itera.next();
Iterator iteraOsProgramacao = colecaoOSProgramacaoHelper.iterator();
short sequencial = 0;
while (iteraOsProgramacao.hasNext()) {
OSProgramacaoHelper osProgramacaoHelper = (OSProgramacaoHelper) iteraOsProgramacao.next();
OrdemServicoProgramacao ordemServicoProgramacao =
osProgramacaoHelper.getOrdemServicoProgramacao();
if(ordemServicoProgramacao.getId() == null ||
ordemServicoProgramacao.getId().intValue() == ConstantesSistema.NUMERO_NAO_INFORMADO){
Date dataRoteiro = ordemServicoProgramacao.getProgramacaoRoteiro().getDataRoteiro();
//Caso tenha data diferentes � necessario incluir 2 programac�es:
if(Util.compararData(dataRoteiroElaboracao,dataRoteiro) != 0){
short sequencialAnterior = ordemServicoProgramacao.getNnSequencialProgramacao();
sequencial++;
// 1.Ordem de servi�o programa��o com a data final da programa��o
ordemServicoProgramacao.setNnSequencialProgramacao(sequencial);
retorno.add(osProgramacaoHelper);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dataRoteiroElaboracao);
//Vai adcionando programa��o at� a data Final de Programacao
//Ex: dataRoteiroElaboracao = 10/01 e dataRoteiro(DataFinalProgramacao) = 12/01
//Ex: 10/01 at� 12/01
while(Util.compararData(calendar.getTime(),dataRoteiro) == -1){
// 2.Ordem de servi�o programa��o com a data do roteiro da elabora��o
ProgramacaoRoteiro programacaoRoteiro =
new ProgramacaoRoteiro(
ordemServicoProgramacao.getProgramacaoRoteiro().getDataRoteiro(),
ordemServicoProgramacao.getProgramacaoRoteiro().getUltimaAlteracao(),
ordemServicoProgramacao.getProgramacaoRoteiro().getUnidadeOrganizacional() );
programacaoRoteiro.setDataRoteiro(calendar.getTime());
OSProgramacaoHelper helper = new OSProgramacaoHelper();
OrdemServicoProgramacao ordemServicoProgramacaoNova =
new OrdemServicoProgramacao(
ordemServicoProgramacao.getId(),
sequencialAnterior,
ordemServicoProgramacao.getIndicadorAtivo(),
ordemServicoProgramacao.getIndicadorEquipePrincipal(),
ordemServicoProgramacao.getUltimaAlteracao(),
ordemServicoProgramacao.getEquipe(),
ordemServicoProgramacao.getUsuarioProgramacao(),
ordemServicoProgramacao.getUsuarioFechamento(),
programacaoRoteiro,
ordemServicoProgramacao.getOsProgramNaoEncerMotivo(),
ordemServicoProgramacao.getOrdemServico() );
helper.setOrdemServicoProgramacao(ordemServicoProgramacaoNova);
retorno.add(helper);
//Adciona um dia a mais na data
calendar.add(Calendar.DAY_OF_MONTH,1);
}
}else{
retorno.add(osProgramacaoHelper);
}
}
}
}
return retorno;
}
}