package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.ArquivoTextoAcompanhamentoServico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.FiltroArquivoTextoAcompanhamentoServico;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.SituacaoTransmissaoLeitura;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
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 ExibirAcompanhamentoArquivosRoteiroRemanejarEquipeOSAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm,
HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirRemanejarEquipeOSAction");
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// Form
AcompanharRoteiroProgramacaoOrdemServicoActionForm
acompanharActionForm = (AcompanharRoteiroProgramacaoOrdemServicoActionForm) actionForm;
String chaveArquivo = httpServletRequest.getParameter("chaveArquivo");
ArquivoTextoAcompanhamentoServico arquivoTextoAcompanhamentoServico = null;
if (chaveArquivo != null){
FiltroArquivoTextoAcompanhamentoServico filtroArquivoTextoAcompanhamentoServico = new FiltroArquivoTextoAcompanhamentoServico();
filtroArquivoTextoAcompanhamentoServico.adicionarParametro(new ParametroSimples(FiltroArquivoTextoAcompanhamentoServico.ID, chaveArquivo));
Collection<?> colecaoArquivoTxtAcompanhamentoServico = fachada.pesquisar(
filtroArquivoTextoAcompanhamentoServico,
ArquivoTextoAcompanhamentoServico.class.getName());
arquivoTextoAcompanhamentoServico = (ArquivoTextoAcompanhamentoServico) colecaoArquivoTxtAcompanhamentoServico
.iterator().next();
if (arquivoTextoAcompanhamentoServico.getSituacaoTransmissaoLeitura().getId().equals(SituacaoTransmissaoLeitura.TRANSMITIDO)){
throw new ActionServletException("atencao.nao_possivel.remanejar.situacao_finalizado");
}
}
String chaveOs = httpServletRequest.getParameter("chave");
OrdemServico ordemServico = fachada.recuperaOSPorId(new Integer(chaveOs));
//[FS0007 - Verificar sele��o de ordem de servi�o encerrada]
if(ordemServico.getSituacao() == OrdemServico.SITUACAO_ENCERRADO.shortValue()){
throw new ActionServletException("atencao.situacao.nao_pendente");
}
if (ordemServico.getSituacao() != OrdemServico.SITUACAO_PENDENTE){
throw new ActionServletException("atencao.situacao.diferente_pendente", "remanejar a");
}
// Precisa pegar a unidade do usuario do login que esta na sessao
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
Date dataRoteiro =
Util.converteStringParaDate(acompanharActionForm.getDataProgramacao());
Collection<Equipe> colecao =
fachada.recuperaEquipeDaOSProgramacaoPorDataRoteiro(new Integer(chaveOs),dataRoteiro);
//[FS0006 - Verificar ordem de servi�o programada para mais de uma equipe]
if(colecao != null && colecao.size() > 1){
throw new ActionServletException("atencao.ordem_servico_programada_varias_equipes");
}
Equipe equipeAtual = (Equipe) Util.retonarObjetoDeColecao(colecao);
Collection<Equipe> colecaoEquipe = this.pesquisarEquipes(idUnidadeLotacao,dataRoteiro, equipeAtual.getId());
acompanharActionForm.setIdEquipeAtual(""+equipeAtual.getId());
acompanharActionForm.setNomeEquipeAtual(equipeAtual.getNome());
acompanharActionForm.setIdOrdemServico(chaveOs);
acompanharActionForm.setDescricaoOrdemServico(ordemServico.getServicoTipo().getDescricao());
acompanharActionForm.setEquipes(colecaoEquipe);
acompanharActionForm.setIdAcompanhamentoArquivosRoteiro(chaveArquivo);
return retorno;
}
private Collection<Equipe> pesquisarEquipes(Integer idUnidadeLotacao, Date dataRoteiro, Integer idEquipe){
Collection<Equipe> retorno = new ArrayList();
retorno = Fachada.getInstancia().pesquisarEquipesOSNaoEnviadasProgramadas(idUnidadeLotacao, dataRoteiro, idEquipe);
return retorno;
}
}