public ActionResult ConsultarInformacoes(int id)
        {
            try
            {
                ListarTramitacaoFiltro filtro = new ListarTramitacaoFiltro();
                filtro.Protocolo.Id  = id;
                filtro.ProtocoloTipo = (int)eTipoProtocolo.Processo;

                ConsultarInformacaoVM vm = new ConsultarInformacaoVM();
                vm.Id = id;
                vm.MostrarInformacao(0, (_busTramitacao.FiltrarHistorico(filtro).Itens.Count > 0) || (_busProtocolo.FiltrarHistoricoAssociados(new ListarProtocoloFiltro()
                {
                    Id = id
                }).Itens.Count > 0));
                vm.MostrarInformacao(1, Convert.ToBoolean(new PdfAnalise().Existe(id)));
                vm.MostrarInformacao(2, new PdfProtocoloAssociado().Existe(id) > 0);
                vm.MostrarInformacao(3, new PdfTramitacaoArquivamento().Existe(id) > 0);

                int valor = new RelatorioEntregaDa().ExisteEntregaProtocolo(id);
                vm.MostrarInformacao(4, valor > 0, valor);
                vm.MostrarInformacao(5, true, id);

                Processo processo = _bus.ObterSimplificado(id);
                vm.ProcessoNumero = processo.Numero;
                vm.ProcessoTipo   = processo.Tipo.Texto;

                ProtocoloLocalizacao loc = _bus.ObterLocalizacao(id);
                if (loc.Localizacao == eLocalizacaoProtocolo.OrgaoExterno)
                {
                    vm.ProcessoLocalizacao = loc.OrgaoExternoNome;
                }
                else if (loc.Localizacao == eLocalizacaoProtocolo.Arquivado)
                {
                    vm.ProcessoLocalizacao = loc.ArquivoNome;
                }
                else if (loc.Localizacao == eLocalizacaoProtocolo.EnviadoParaSetor || loc.Localizacao == eLocalizacaoProtocolo.EnviadoParaFuncionario)
                {
                    vm.ProcessoLocalizacao = "Em tramitação";
                }
                else if (loc.ProcessoPaiId > 0 || loc.Localizacao == eLocalizacaoProtocolo.PosseFuncionario)
                {
                    vm.ProcessoLocalizacao = loc.SetorDestinatarioNome;
                    vm.ProcessoEnviadoPor  = loc.FuncionarioDestinatarioNome;
                    vm.LabelEnviadoPor     = "Em posse de";
                }
                if (Request.IsAjaxRequest())
                {
                    return(PartialView("ConsultarInformacoes", vm));
                }
                else
                {
                    return(View("ConsultarInformacoes", vm));
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
                return(RedirectToAction("Index", Validacao.QueryParamSerializer()));
            }
        }
        public ProtocoloLocalizacao ObterLocalizacao(Documento doc, ProtocoloLocalizacao localizacao = null)
        {
            ProtocoloLocalizacao loc = localizacao == null ? new ProtocoloLocalizacao() : localizacao;

            if (loc.ProcessoPaiId <= 0)
            {
                ProtocoloNumero processoPai = ProtocoloAssociado(doc.Id.GetValueOrDefault()) ?? new ProtocoloNumero();
                if (processoPai.Id > 0)
                {
                    loc.ProcessoPaiId     = processoPai.Id;
                    loc.ProcessoPaiNumero = processoPai.NumeroTexto;
                    ProcessoBus _busProcesso = new ProcessoBus();
                    return(_busProcesso.ObterLocalizacao(loc.ProcessoPaiId, loc));
                }
            }

            TramitacaoBus _busTramitacao = new TramitacaoBus(new TramitacaoValidar());

            loc.Tramitacao.Id = _busTramitacao.ObterTramitacaoProtocolo(doc.Id.GetValueOrDefault());

            if (loc.Tramitacao.Id > 0)
            {
                loc.Tramitacao = _busTramitacao.Obter(loc.Tramitacao.Id);
                if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.Arquivado)
                {
                    loc.Localizacao = eLocalizacaoProtocolo.Arquivado;
                    ArquivarBus _arquivarBus = new ArquivarBus();
                    Arquivar    arquivamento = _arquivarBus.ObterArquivamento(loc.Tramitacao.Id);
                    loc.ArquivoNome = arquivamento.ArquivoNome;
                }
                else if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.ParaOrgaoExterno)
                {
                    loc.Localizacao      = eLocalizacaoProtocolo.OrgaoExterno;
                    loc.OrgaoExternoNome = loc.Tramitacao.OrgaoExterno.Texto;
                }
                else if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.Tramitando)
                {
                    if (loc.Tramitacao.Destinatario.Id == 0)
                    {
                        loc.Localizacao = eLocalizacaoProtocolo.EnviadoParaSetor;
                    }
                    else
                    {
                        loc.Localizacao = eLocalizacaoProtocolo.EnviadoParaFuncionario;
                        loc.FuncionarioDestinatarioNome = loc.Tramitacao.Destinatario.Nome;
                    }
                }
            }
            else             // se não existir tramitação, ele está na posse de algum funcionário
            {
                loc.Localizacao = eLocalizacaoProtocolo.PosseFuncionario;
                TramitacaoPosse posse = _busTramitacao.ObterProtocoloPosse(doc.Id.GetValueOrDefault());
                loc.FuncionarioDestinatarioNome = posse.FuncionarioNome;
                loc.SetorDestinatarioNome       = posse.SetorNome;
            }
            return(loc);
        }
        // orgao externo
        // OU setor x
        // OU arquivo y
        // OU tramitando para setor j
        // OU tramitando para funcionario k no setor i
        // OU em posse do funcionario w no setor z
        // OU apensado/juntado a um processo
        public ProtocoloLocalizacao ObterLocalizacao(int processoId, ProtocoloLocalizacao localizacao = null)
        {
            ProtocoloLocalizacao loc  = localizacao == null ? new ProtocoloLocalizacao() : localizacao;
            Processo             proc = ObterSimplificado(processoId);

            if (loc.ProcessoPaiId <= 0)
            {
                int ApensadoEmProcessoId = ProcessoApensado(processoId);
                if (ApensadoEmProcessoId > 0)
                {
                    loc.ProcessoPaiId     = ApensadoEmProcessoId;
                    loc.ProcessoPaiNumero = ObterSimplificado(loc.ProcessoPaiId).Numero;
                    return(ObterLocalizacao(loc.ProcessoPaiId, loc));
                }
            }

            TramitacaoBus _busTramitacao = new TramitacaoBus();

            loc.Tramitacao.Id = _busTramitacao.ObterTramitacaoProtocolo(processoId);

            if (loc.Tramitacao.Id > 0)
            {
                loc.Tramitacao = _busTramitacao.Obter(loc.Tramitacao.Id);
                if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.Arquivado)
                {
                    loc.Localizacao = eLocalizacaoProtocolo.Arquivado;
                    ArquivarBus _arquivarBus = new ArquivarBus();
                    Arquivar    arquivamento = _arquivarBus.ObterArquivamento(loc.Tramitacao.Id);
                    loc.ArquivoNome = arquivamento.ArquivoNome;
                }
                else if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.ParaOrgaoExterno)
                {
                    loc.Localizacao      = eLocalizacaoProtocolo.OrgaoExterno;
                    loc.OrgaoExternoNome = loc.Tramitacao.OrgaoExterno.Texto;
                }
                else if (loc.Tramitacao.SituacaoId == (int)eTramitacaoSituacao.Tramitando)
                {
                    if (loc.Tramitacao.Destinatario.Id == 0)
                    {
                        loc.Localizacao = eLocalizacaoProtocolo.EnviadoParaSetor;
                    }
                    else
                    {
                        loc.Localizacao = eLocalizacaoProtocolo.EnviadoParaFuncionario;
                        loc.FuncionarioDestinatarioNome = loc.Tramitacao.Destinatario.Nome;
                    }
                }
            }
            else             // se não existir tramitação, ele está na posse de algum funcionário
            {
                loc.Localizacao = eLocalizacaoProtocolo.PosseFuncionario;
                TramitacaoPosse posse = _busTramitacao.ObterProtocoloPosse(processoId);
                loc.FuncionarioDestinatarioNome = posse.FuncionarioNome;
                loc.SetorDestinatarioNome       = posse.SetorNome;
            }
            return(loc);
        }
        public ProtocoloLocalizacao ObterLocalizacao(int protocoloId, ProtocoloLocalizacao localizacao = null)
        {
            ProtocoloLocalizacao loc = null;

            try
            {
                loc = _busInterno.ObterLocalizacao(protocoloId, localizacao);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(loc);
        }
        public ActionResult Historico(int id, int tipo)
        {
            HistoricoVM vm = new HistoricoVM();

            ListarTramitacaoFiltro filtro = new ListarTramitacaoFiltro();

            filtro.Protocolo.Id         = id;
            filtro.Protocolo.IsProcesso = (tipo == (int)eTipoProtocolo.Processo);

            Resultados <Tramitacao>         hstTramitacao = _bus.FiltrarHistorico(filtro);
            Resultados <HistoricoProtocolo> hstProtocolo;
            IProtocolo protocolo = new Protocolo();

            hstProtocolo = _busProtocolo.FiltrarHistoricoAssociados(new ListarProtocoloFiltro()
            {
                Id          = id,
                ProtocoloId = filtro.Protocolo.IsProcesso ? (int)eTipoProtocolo.Processo : (int)eTipoProtocolo.Documento
            });

            protocolo                  = _busProtocolo.ObterSimplificado(id);
            vm.TipoHistorico           = filtro.Protocolo.IsProcesso ? "Processo" : "documento";
            vm.TipoHistoricoId         = tipo;
            vm.AcaoHistoricoMostrarPdf = _bus.ObterHistoricoAcoesMostrarPdf();
            vm.CarregarHistorico(hstTramitacao.Itens, hstProtocolo, protocolo.Numero, protocolo.Tipo.Texto);

            ProtocoloLocalizacao loc = _busProtocolo.ObterLocalizacao(id);

            if (loc.Localizacao == eLocalizacaoProtocolo.OrgaoExterno)
            {
                vm.Localizacao = loc.OrgaoExternoNome;
            }
            else if (loc.Localizacao == eLocalizacaoProtocolo.Arquivado)
            {
                vm.Localizacao = loc.ArquivoNome;
            }
            else if (loc.Localizacao == eLocalizacaoProtocolo.EnviadoParaSetor || loc.Localizacao == eLocalizacaoProtocolo.EnviadoParaFuncionario)
            {
                vm.Localizacao = "Em tramitação";
            }
            else if (loc.ProcessoPaiId > 0 || loc.Localizacao == eLocalizacaoProtocolo.PosseFuncionario)
            {
                vm.Localizacao = loc.SetorDestinatarioNome;
            }

            return(PartialView("HistoricoPartial", vm));
        }