package gcom.gui.atendimentopublico.registroatendimento;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServicoPavimento;
import gcom.atendimentopublico.registroatendimento.Tramite;
import gcom.cadastro.unidade.UnidadeTipo;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
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;
/**
* [UC0503]Tramitar Conjunto de Registro de Atendimento
*
* @author Ana Maria, Pedro Alexandre
* @date 16/01/2007, 08/01/2008
*/
public class RegistroAtendimentoTramitacaoAction extends GcomAction {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta a a��o de retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
// Obt�m a sess�o
HttpSession sessao = httpServletRequest.getSession(false);
sessao.setAttribute("tramitarConjunto","sim");
Fachada fachada = Fachada.getInstancia();
Collection<Tramite> tramites = (Collection)sessao.getAttribute("tramites");
/* alterado por pedro alexandre */
//Verifica se o usu�rio apertou o bot�o na p�gian de tramitar
String primeiraVez = httpServletRequest.getParameter("primeiraVez");
//Caso seja a primeira vez tramita o RA, caso contr�rio o RA n�o
//vai ser mais tramitado
if(primeiraVez != null && primeiraVez.equals("ok")){
if(tramites == null || tramites.isEmpty()){
throw new ActionServletException(
"atencao.registros_tramitacao.nao_selecionados");
}
}
//Recupera a cole��o de ordem de servi�o que j� foram processadas
Collection colecaoOrdemServicoJaTratada = (Collection)sessao.getAttribute("colecaoOrdemServicoJaTratada");
Tramite tramite = (Tramite) Util.retonarObjetoDeColecao(tramites);
//Cria os indicadores de centralizadora e terceira
boolean flagCentralizadora = false;
boolean flagTerceira = false;
//Caso a unidade organizacional origem seja uma centralizadora
if(tramite.getUnidadeOrganizacionalOrigem().getUnidadeTipo().getId().equals(UnidadeTipo.UNIDADE_TIPO_CENTRALIZADORA_ID)){
flagCentralizadora = true;
}
//Caso a unidade organizacional destino seja uma terceira
if(tramite.getUnidadeOrganizacionalDestino().getUnidadeTipo().getId().equals(UnidadeTipo.UNIDADE_TIPO_TERCERIZADO_ID)){
flagTerceira = true;
}
Collection colecaoOrdemServicoMovimento = new ArrayList();
Collection colecaoOrdemServicoPavimento = new ArrayList();
//Exportar as ordems de servi�o
if(flagCentralizadora && flagTerceira){
Collection<OrdemServico> colecaoOrdemServicoPrestadora = new ArrayList();
if(primeiraVez != null && primeiraVez.equals("ok")){
//[UC0720 - Exportar Ordem Servi�o Prestadoras]
// colecaoOrdemServicoPrestadora = fachada.exportarOrdemServicoPrestadoras(tramites);
// sessao.setAttribute("colecaoOrdemServicoPrestadora",colecaoOrdemServicoPrestadora);
Map dadosExportar = fachada.exportarOrdemServicoPrestadoras(tramites);
colecaoOrdemServicoPrestadora = (Collection)dadosExportar.get("colecaoOrdemServico");
colecaoOrdemServicoMovimento = (Collection)dadosExportar.get("colecaoOrdemServicoMovimento");
sessao.setAttribute("colecaoOrdemServicoMovimento", colecaoOrdemServicoMovimento);
sessao.setAttribute("colecaoOrdemServicoPrestadora",colecaoOrdemServicoPrestadora);
}else{
colecaoOrdemServicoPrestadora = (Collection)sessao.getAttribute("colecaoOrdemServicoPrestadora");
colecaoOrdemServicoMovimento = (Collection)sessao.getAttribute("colecaoOrdemServicoMovimento");
}
if(colecaoOrdemServicoJaTratada!= null && !colecaoOrdemServicoJaTratada.isEmpty()){
colecaoOrdemServicoPrestadora.removeAll(colecaoOrdemServicoJaTratada);
}
//Caso ainda tenha ordem de servi�o de prestadora para ser processada.
if(colecaoOrdemServicoPrestadora!= null && !colecaoOrdemServicoPrestadora.isEmpty()){
for(OrdemServico ordemServico : colecaoOrdemServicoPrestadora){
//Caso a ordem de servi�o tenha im�vel, exibir o popup para
//inserir os dados do paviemnto
//Caso contr�rio inserir a ordem de servi�o pavimento
//com os dados de pavimento nulos.
if(ordemServico.getImovel() != null){
sessao.setAttribute("ordemServico",ordemServico);
sessao.setAttribute("imovel",ordemServico.getImovel());
httpServletRequest.setAttribute("indicadorPavimento","sim");
retorno = actionMapping.findForward("tramitacaoRegistroAtendimento");
return retorno;
}else{
//Inseri a OrdemServicoPavimento com os dados de pavimento
OrdemServicoPavimento ordemServicoPavimento = new OrdemServicoPavimento();
ordemServicoPavimento.setOrdemServico(ordemServico);
ordemServicoPavimento.setPavimentoRua(null);
ordemServicoPavimento.setAreaPavimentoRua(null);
ordemServicoPavimento.setPavimentoCalcada(null);
ordemServicoPavimento.setAreaPavimentoCalcada(null);
ordemServicoPavimento.setPavimentoRuaRetorno(null);
ordemServicoPavimento.setAreaPavimentoRuaRetorno(null);
ordemServicoPavimento.setPavimentoCalcadaRetorno(null);
ordemServicoPavimento.setAreaPavimentoCalcadaRetorno(null);
ordemServicoPavimento.setDataGeracao(new Date());
// fachada.inserirOrdemServicoPavimento(ordemServicoPavimento);
if(sessao.getAttribute("colecaoOrdemServicoPavimento") != null){
colecaoOrdemServicoPavimento = (Collection)sessao.getAttribute("colecaoOrdemServicoPavimento");
}
colecaoOrdemServicoPavimento.add(ordemServicoPavimento);
sessao.setAttribute("colecaoOrdemServicoPavimento", colecaoOrdemServicoPavimento);
}
}
}
}
//s� vai tramitar depois de exibir o popup de dados do pavimento
//[SB0003]Incluir o Tramite
// fachada.tramitarConjuntoRA(tramites);
fachada.tramitarConjuntoRAExportandoOSPrestadoras(
tramites, colecaoOrdemServicoPavimento, colecaoOrdemServicoMovimento);
//[SB0001] � Verificar RA de urg�ncia
if(tramites != null){
//[SB0034] � Verificar RA de urg�ncia
for(Tramite t : tramites){
//Caso o STEP_ID da RA correspondente possua SOLICITACAO_TIPO_ESPECIFICACAO.ICURGENCIA=1
if(this.getFachada().verificarRegistroAtendimentoUrgencia(t.getRegistroAtendimento().getId()) > 0){
this.getFachada().atualizarUsuarioVisualizacaoRaUrgencia(t.getRegistroAtendimento().getId(), t.getUnidadeOrganizacionalOrigem().getId(), null, 1, null);
//caso j� exista relacionamento entre a RA e Unidade, atualizar usuarios da Unidade com tramitacao e visualizacao = 2.
if(this.getFachada().verificarUsuariosRegistroAtendimentoUrgencia(t.getRegistroAtendimento().getId(), t.getUnidadeOrganizacionalDestino().getId()) > 0){
this.getFachada().atualizarUsuarioVisualizacaoRaUrgencia(t.getRegistroAtendimento().getId(), t.getUnidadeOrganizacionalDestino().getId(), null, 2, 2);
//caso n�o exista relacionamento entre a RA e Unidade, insere nova RA.
}else{
getFachada().inserirUsuarioVisualizacaoRaUrgencia(
t.getRegistroAtendimento().getId(), ConstantesSistema.NAO);
}
}
}
}
sessao.removeAttribute("tramites");
sessao.removeAttribute("colecaoRAHelper");
if(retorno.getName().equalsIgnoreCase("telaSucesso")){
//Monta a p�gina de sucesso
montarPaginaSucesso(httpServletRequest, "Tramita��o do Conjunto de Registro de Atendimento efetuada com sucesso.",
"Tramitar outro Conjunto de Registro de Atendimento",
"exibirFiltrarRegistroAtendimentoTramitacaoAction.do?menu=sim");
}
return retorno;
}
}