package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.FiltroEquipe;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoProgramacao;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
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 ExibirAcompanharRoteiroProgramacaoOrdemServicoAlocaEquipeAction extends GcomAction {
private Set<String> colecaoEquipesDaOrdemServico = null;
public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm,
HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("alocaOrdemServico");
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
colecaoEquipesDaOrdemServico = new HashSet<String>();
// Form
AcompanharRoteiroProgramacaoOrdemServicoActionForm
acompanharActionForm = (AcompanharRoteiroProgramacaoOrdemServicoActionForm) actionForm;
String chaveOs = httpServletRequest.getParameter("chave");
OrdemServico ordemServico =
Fachada.getInstancia().recuperaOSPorId(new Integer(chaveOs));
if(ordemServico.getSituacao() == OrdemServico.SITUACAO_ENCERRADO.shortValue()){
throw new ActionServletException("atencao.ordem_servico_encerrada_para_alocar");
}
Date dataRoteiro =
Util.converteStringParaDate(acompanharActionForm.getDataRoteiro());
// Precisa pegar a unidade do usuario do login que esta na sessao
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
Integer idEquipePrincipal =
this.retornaEquipePrincipalParaOs(dataRoteiro,idUnidadeLotacao,new Integer(chaveOs));
Collection<Equipe> colecaoEquipe = this.pesquisarEquipe(idUnidadeLotacao);
acompanharActionForm.setIdOrdemServico(chaveOs);
acompanharActionForm.setDescricaoOrdemServico(ordemServico.getServicoTipo().getDescricao());
acompanharActionForm.setIdEquipePrincipal(""+idEquipePrincipal);
acompanharActionForm.setEquipes(colecaoEquipe);
String[] array = colecaoEquipesDaOrdemServico.toArray(new String[colecaoEquipesDaOrdemServico.size()]);
acompanharActionForm.setEquipeSelecionada(array);
acompanharActionForm.setEquipeSelecionadaAtual(array);
return retorno;
}
/**
* Retorna a equipe principal da colecao da ordem de Servico Programacao
*
* @author Rafael Pinto
* @date 22/08/2006
*
* @param data do roteiro,unidadeLotacao,
*/
private Integer retornaEquipePrincipalParaOs(Date dataRoteiro,Integer idUnidadeLotacao,Integer idOs){
Integer idPrincipal = null;
Collection<OrdemServicoProgramacao> colecaoOrdemServicoProgramacao =
Fachada.getInstancia().recuperaOSProgramacaoPorDataRoteiroUnidade(dataRoteiro,idUnidadeLotacao);
if(colecaoOrdemServicoProgramacao != null && !colecaoOrdemServicoProgramacao.isEmpty()){
Iterator<OrdemServicoProgramacao> itera = colecaoOrdemServicoProgramacao.iterator();
while (itera.hasNext()) {
OrdemServicoProgramacao ordemServicoProgramacao = itera.next();
OrdemServico os = ordemServicoProgramacao.getOrdemServico();
if(idOs.intValue() == os.getId().intValue() &&
ordemServicoProgramacao.getIndicadorAtivo() == ConstantesSistema.SIM.shortValue()){
if(ordemServicoProgramacao.getIndicadorEquipePrincipal() == ConstantesSistema.SIM.shortValue()){
idPrincipal = ordemServicoProgramacao.getEquipe().getId();
}
colecaoEquipesDaOrdemServico.add(ordemServicoProgramacao.getEquipe().getId().toString());
}
}
}
return idPrincipal;
}
/**
* Pesquisa todas as equipes que est�o ligadas a unidade organizacional do usuario
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param sessao,id da Unidade Organizacional
* @return Collection de Equipe
*/
private Collection<Equipe> pesquisarEquipe(Integer idUnidadeLotacao){
Collection<Equipe> retorno = new ArrayList<Equipe>();
FiltroEquipe filtroEquipe = new FiltroEquipe();
filtroEquipe.adicionarParametro(new ParametroSimples(
FiltroEquipe.ID_UNIDADE_ORGANIZACIONAL,idUnidadeLotacao));
filtroEquipe.adicionarParametro(new ParametroSimples(
FiltroEquipe.INDICADOR_USO,ConstantesSistema.SIM));
filtroEquipe.setCampoOrderBy(FiltroEquipe.NOME);
retorno = Fachada.getInstancia().pesquisar(filtroEquipe, Equipe.class.getName());
return retorno;
}
}