package gcom.gui.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.Equipe;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.bean.OSProgramacaoHelper;
import gcom.atendimentopublico.ordemservico.bean.ObterDadosEquipe;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.bean.ObterDadosRegistroAtendimentoHelper;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import java.util.ArrayList;
import java.util.Collection;
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 ExibirAcompanharRoteiroProgramacaoOrdemServicoIncluirAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm,
HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("incluirOrdemServico");
HttpSession sessao = httpServletRequest.getSession(false);
// Form
AcompanharRoteiroProgramacaoOrdemServicoActionForm
acompanharActionForm = (AcompanharRoteiroProgramacaoOrdemServicoActionForm) actionForm;
HashMap mapOsProgramacaoHelper =
(HashMap) sessao.getAttribute("mapOsProgramacaoHelper");
if (httpServletRequest.getParameter("tipoConsulta") != null &&
!httpServletRequest.getParameter("tipoConsulta").equals("")) {
String id = httpServletRequest.getParameter("idCampoEnviarDados");
String descricao = httpServletRequest.getParameter("descricaoCampoEnviarDados");
if (httpServletRequest.getParameter("tipoConsulta").equals("registroAtendimento")) {
acompanharActionForm.setNumeroRA(id);
acompanharActionForm.setDescricaoRA(descricao);
}else if (httpServletRequest.getParameter("tipoConsulta").equals("ordemServico")) {
Integer unidadeLotacao = new Integer(acompanharActionForm.getUnidadeLotacao());
acompanharActionForm.setIdOrdemServico(id);
acompanharActionForm.setDescricaoOrdemServico(descricao);
// [FS0008] - Verificar possibilidade da inclus�o da ordem de servi�o
this.pesquisarOrdemServico(acompanharActionForm,unidadeLotacao);
}
String chave = acompanharActionForm.getNomeEquipe();
Collection colecaoHelper = (ArrayList) mapOsProgramacaoHelper.get(chave);
int valor = this.retornaUltimoSequencial(colecaoHelper)+1;
acompanharActionForm.setSequencialProgramacao(""+valor);
} else {
// Flag indicando que o usu�rio fez uma consulta a partir da tecla Enter
String objetoConsulta = httpServletRequest.getParameter("objetoConsulta");
if(objetoConsulta == null){
objetoConsulta = (String) httpServletRequest.getAttribute("objetoConsulta");
if(objetoConsulta != null){
acompanharActionForm.setIdOrdemServico((String)httpServletRequest.getAttribute("idOrdemServico"));
String chave = acompanharActionForm.getNomeEquipe();
Collection colecaoHelper = (ArrayList) mapOsProgramacaoHelper.get(chave);
int valor = this.retornaUltimoSequencial(colecaoHelper)+1;
acompanharActionForm.setSequencialProgramacao(""+valor);
}
}
String chave = httpServletRequest.getParameter("chave");
//[UC0443] - Pesquisar Registro Atendimento
if (objetoConsulta != null && !objetoConsulta.trim().equals("") &&
objetoConsulta.trim().equals("1")) {
// Faz a consulta de Registro Atendimento
this.pesquisarRegistroAtendimento(acompanharActionForm);
//[UC0450] - Pesquisar Ordem de Servico
}else if (objetoConsulta != null && !objetoConsulta.trim().equals("") &&
objetoConsulta.trim().equals("2")) {
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
Integer idUnidadeLotacao = usuario.getUnidadeOrganizacional().getId();
this.pesquisarOrdemServico(acompanharActionForm,idUnidadeLotacao);
}else if(chave != null){
HashMap mapEquipe =
(HashMap) sessao.getAttribute("mapEquipe");
Equipe equipe = (Equipe) mapEquipe.get(chave);
ObterDadosEquipe obterDadosEquipe = Fachada.getInstancia().obterDadosEquipe(equipe.getId());
acompanharActionForm.setIdEquipe(""+equipe.getId());
acompanharActionForm.setNomeEquipe(equipe.getNome());
acompanharActionForm.setPlacaVeiculo(equipe.getPlacaVeiculo());
//Para exibir a carga hor�ria em horas e n�o em minutos - Raphael Rossiter em 13/02/2007
acompanharActionForm.setCargaTrabalhoDia(""+ (equipe.getCargaTrabalho() / 60));
acompanharActionForm.setIdUnidade(""+equipe.getUnidadeOrganizacional().getId());
acompanharActionForm.setDescricaoUnidade(equipe.getUnidadeOrganizacional().getDescricao());
acompanharActionForm.setIdTipoPerfilServico(""+equipe.getServicoPerfilTipo().getId());
acompanharActionForm.setDescricaoTipoPerfilServico(equipe.getServicoPerfilTipo().getDescricao());
acompanharActionForm.setEquipeComponentes(obterDadosEquipe.getColecaoEquipeComponentes());
acompanharActionForm.setIdOrdemServico(null);
Collection colecaoHelper = (ArrayList) mapOsProgramacaoHelper.get(chave);
int valor = this.retornaUltimoSequencial(colecaoHelper)+1;
acompanharActionForm.setSequencialProgramacao(""+valor);
acompanharActionForm.setSequencialProgramacaoPrevisto(""+valor);
}
}
this.setaRequest(httpServletRequest,acompanharActionForm);
return retorno;
}
/**
* Pesquisa Registro Atendimento
*
* @author Rafael Pinto
* @date 15/08/2006
*/
private void pesquisarRegistroAtendimento(AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm) {
ObterDadosRegistroAtendimentoHelper obter =
Fachada.getInstancia().obterDadosRegistroAtendimento(new Integer(
acompanharActionForm.getNumeroRA()));
if (obter.getRegistroAtendimento() != null) {
RegistroAtendimento registroAtendimento = obter.getRegistroAtendimento();
acompanharActionForm.setNumeroRA(registroAtendimento.getId().toString());
acompanharActionForm.setDescricaoRA(registroAtendimento.getSolicitacaoTipoEspecificacao().getDescricao());
} else {
acompanharActionForm.setDescricaoRA("Registro Atendimento inexistente");
acompanharActionForm.setNumeroRA("");
}
}
/**
* Pesquisa Ordem de Servi�o
*
* @author Rafael Pinto
* @date 15/08/2006
*/
private void pesquisarOrdemServico(AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm,
Integer idUnidadeLotacao) {
OrdemServico os =
Fachada.getInstancia().recuperaOSPorId(new Integer(acompanharActionForm.getIdOrdemServico()));
if (os != null) {
// [FS0015] - Verificar registro de atendimento e ordem de servi�o
String numeroRa = acompanharActionForm.getNumeroRA();
if(numeroRa != null && !numeroRa.equals("")){
if(os.getRegistroAtendimento().getId().intValue() != new Integer(numeroRa).intValue()){
String[] parametros = new String[2];
parametros[0] = os.getId().toString();
parametros[1] = numeroRa;
throw new ActionServletException("atencao.registro_nao_pertence_ordem_servico",null,parametros);
}
}
// [FS0008] - Verificar possibilidade da inclus�o da ordem de servi�o
Fachada.getInstancia().validarInclusaoOsNaProgramacao(os,idUnidadeLotacao);
acompanharActionForm.setIdOrdemServico(os.getId().toString());
acompanharActionForm.setDescricaoOrdemServico(os.getServicoTipo().getDescricao());
} else {
acompanharActionForm.setDescricaoOrdemServico("Ordem de Servi�o inexistente");
acompanharActionForm.setIdOrdemServico("");
}
}
/**
* Seta os request com os id encontrados
*
* @author Rafael Pinto
* @date 16/08/2006
*/
private void setaRequest(HttpServletRequest httpServletRequest,
AcompanharRoteiroProgramacaoOrdemServicoActionForm acompanharActionForm){
// Registro Atendimento
if(acompanharActionForm.getNumeroRA() != null &&
!acompanharActionForm.getNumeroRA().equals("") &&
acompanharActionForm.getDescricaoRA() != null &&
!acompanharActionForm.getDescricaoRA().equals("")){
httpServletRequest.setAttribute("numeroRAEncontrada","true");
}
// Ordem de Servi�o
if(acompanharActionForm.getIdOrdemServico() != null &&
!acompanharActionForm.getIdOrdemServico().equals("") &&
acompanharActionForm.getDescricaoOrdemServico() != null &&
!acompanharActionForm.getDescricaoOrdemServico().equals("")){
httpServletRequest.setAttribute("idOsEncontrada","true");
}
}
/**
* Retorna o ultimo sequencial das os�s programadas
*
* @author Rafael Pinto
* @date 17/08/2006
*
* @param colecao de OsProgramacaoHelper
* @return ultimoSequencial
*/
private int retornaUltimoSequencial(Collection colecaoOsProgramacaoHelper){
short valorSequencial = 0;
Iterator iter = colecaoOsProgramacaoHelper.iterator();
while (iter.hasNext()) {
OSProgramacaoHelper helper = (OSProgramacaoHelper) iter.next();
if(valorSequencial < helper.getOrdemServicoProgramacao().getNnSequencialProgramacao()){
valorSequencial = helper.getOrdemServicoProgramacao().getNnSequencialProgramacao();
}
}
return valorSequencial;
}
}