package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.OSProgramacaoAcompanhamentoServico;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
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;
/**
* [UC1199] - Acompanhamento Arquivos Roteiro Reordenar Sequencial Ordem de Servi�o
*
* @author Th�lio Ara�jo
*
* @date 31/08/2011
*/
public class AcompanhamentoArqRoteiroReordenarSequencialAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("reordenarSequencialOS");
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// Form
AcompanharRoteiroProgramacaoOrdemServicoActionForm
acompanharActionForm = (AcompanharRoteiroProgramacaoOrdemServicoActionForm) actionForm;
// Precisa pegar a unidade do usuario do login que esta na sessao
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
Date dataRoteiro = Util.converteStringParaDate(acompanharActionForm.getDataProgramacao());
acompanharActionForm.setDataRoteiro(Util.formatarData(dataRoteiro));
acompanharActionForm.setUnidadeLotacao(""+idUnidadeLotacao);
this.reordenaSequencialNaProgramacaoNovaOrdem(acompanharActionForm,sessao);
httpServletRequest.setAttribute("fecharPopup", "true");
return retorno;
}
private void reordenaSequencialNaProgramacaoNovaOrdem(
AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm,HttpSession sessao){
Date dataRoteiro = Util.converteStringParaDate(acompanharActionForm.getDataProgramacao());
short sequencialAtual = new Short(acompanharActionForm.getSequencialProgramacao());
short sequencialInformado = new Short(acompanharActionForm.getSequencialProgramacaoPrevisto());
String chaveArquivo = acompanharActionForm.getChaveArquivo();
Collection<OSProgramacaoAcompanhamentoServico> colecaoOsProgramacaoAcompanhamentoServico =
Fachada.getInstancia().pesquisarOSProgramacaoAcompArquivoComDataRoteiroIdEquipe(dataRoteiro,
Util.converterStringParaInteger(chaveArquivo));
int valor = this.retornaUltimoSequencial(colecaoOsProgramacaoAcompanhamentoServico);
if(sequencialInformado > valor){
throw new ActionServletException("atencao.sequencial_programacao_maior_limite",null,""+valor);
}
Collection<Equipe> colecaoEquipe = Fachada.getInstancia().recuperaEquipeDaOSProgramacaoPorDataRoteiro(Util.converterStringParaInteger(acompanharActionForm.getIdOrdemServico()),
dataRoteiro);
Iterator<Equipe> itera = colecaoEquipe.iterator();
Equipe equipe = (Equipe) itera.next();
Fachada.getInstancia().reordenaSequencialOSProgramacaoAcompServico(dataRoteiro,sequencialInformado,equipe.getId(),sequencialAtual);
}
private int retornaUltimoSequencial(Collection<OSProgramacaoAcompanhamentoServico> colecaoOsProgramacaoAcompanhamentoServico){
int valorSequencial = 0;
if (colecaoOsProgramacaoAcompanhamentoServico != null && !colecaoOsProgramacaoAcompanhamentoServico.isEmpty()) {
Iterator<OSProgramacaoAcompanhamentoServico> itera = colecaoOsProgramacaoAcompanhamentoServico.iterator();
while (itera.hasNext()) {
OSProgramacaoAcompanhamentoServico osProgramacaoAcompServico = (OSProgramacaoAcompanhamentoServico) itera.next();
if(valorSequencial < osProgramacaoAcompServico.getSequencialProgramacao()){
valorSequencial = osProgramacaoAcompServico.getSequencialProgramacao();
}
}
}
return valorSequencial;
}
}