Exemple #1
0
        internal AnaliseItem ObterAnaliseTitulo(int tituloId, BancoDeDados banco = null)
        {
            AnaliseItem analise = new AnaliseItem();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"select n.analise_id, n.analise_tid
				from {0}esp_oficio_notificacao n, {0}tab_protocolo p where p.id = n.protocolo and n.titulo = :tituloId"                , EsquemaBanco);

                comando.AdicionarParametroEntrada("tituloId", tituloId);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        analise.Id  = Convert.ToInt32(reader["analise_id"]);
                        analise.Tid = reader["analise_tid"].ToString();
                    }

                    reader.Close();
                }
            }

            return(analise);
        }
Exemple #2
0
        internal void AlterarSituacao(AnaliseItem analise, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Análise de itens de processo/documento

                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"update {0}tab_analise a set a.situacao = :situacao, a.tid = :tid where a.id = :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("id", analise.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("situacao", analise.Situacao, DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                bancoDeDados.ExecutarNonQuery(comando);

                #endregion

                #region Histórico

                Historico.Gerar(analise.Id, eHistoricoArtefato.analiseitens, eHistoricoAcao.alterarsituacao, bancoDeDados);

                #endregion

                bancoDeDados.Commit();
            }
        }
Exemple #3
0
        public void Salvar(AnaliseItem analise, bool atualizarRoteiro = false)
        {
            try
            {
                //Validação proposta pela analista
                if (!atualizarRoteiro)
                {
                    VerificarProtocolo(analise.ProtocoloPai);
                }

                if (Validacao.EhValido && _validar.Salvar(analise, atualizarRoteiro))
                {
                    int         setorId = _daProtocolo.ObterSetor(analise.Protocolo.Id ?? 0);
                    Funcionario func    = _busFuncionario.Obter(_busFuncionario.User.FuncionarioId);

                    // para cada item que foi alterado da análise, atualiza sua DataAnalise para NOW
                    foreach (Item item in analise.Itens)
                    {
                        if (item.Editado || item.IsAtualizado)
                        {
                            item.Analista    = func.Nome;
                            item.DataAnalise = DateTime.Now.ToString();
                            item.SetorId     = setorId;
                        }

                        if (item.Situacao != (int)eAnaliseItemSituacao.Reprovado &&
                            item.Situacao != (int)eAnaliseItemSituacao.Dispensado)
                        {
                            item.Motivo = String.Empty;
                        }

                        if (!item.Avulso && item.Tipo != (int)eRoteiroItemTipo.ProjetoDigital && (item.IdRelacionamento < 1 || item.IsAtualizado))
                        {
                            item.Motivo = "Atualização de versão do roteiro orientativo.";
                        }

                        item.IsAtualizado = false;
                        item.Editado      = false;
                    }

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        _da.Salvar(analise, bancoDeDados);

                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
Exemple #4
0
        public void CriarAnalise(AnaliseItem analise)
        {
            try
            {
                List <Roteiro> roteirosChecagem = _busChecagem.ObterRoteirosChecagem(analise.Checagem.Id);
                analise.Roteiros = roteirosChecagem;
                List <Situacao> situacoes = _busLista.SituacoesItemAnalise;
                int             setorId   = _daProtocolo.ObterSetor(analise.Protocolo.Id ?? 0);

                foreach (Roteiro roteiroAtual in roteirosChecagem)
                {
                    foreach (Item itemAtual in roteiroAtual.Itens)
                    {
                        switch ((eChecagemItemSituacao)itemAtual.Situacao)
                        {
                        case eChecagemItemSituacao.Pendente:
                            itemAtual.Situacao = (int)eAnaliseItemSituacao.Pendente;
                            break;

                        case eChecagemItemSituacao.Conferido:
                            itemAtual.Situacao = (int)eAnaliseItemSituacao.Recebido;
                            break;

                        case eChecagemItemSituacao.Dispensado:
                            itemAtual.Situacao = (int)eAnaliseItemSituacao.Dispensado;
                            break;
                        }

                        if (itemAtual.Situacao != (int)eAnaliseItemSituacao.Reprovado &&
                            itemAtual.Situacao != (int)eAnaliseItemSituacao.Dispensado)
                        {
                            itemAtual.Motivo = String.Empty;
                        }

                        itemAtual.SetorId       = setorId;
                        itemAtual.Recebido      = itemAtual.Situacao == (int)eAnaliseItemSituacao.Recebido;
                        itemAtual.SituacaoTexto = situacoes.SingleOrDefault(x => x.Id == itemAtual.Situacao).Texto;
                        analise.Itens.Add(itemAtual);
                    }
                }

                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                {
                    GerenciadorTransacao.ObterIDAtual();
                    bancoDeDados.IniciarTransacao();
                    _da.Salvar(analise, bancoDeDados);

                    bancoDeDados.Commit();
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
Exemple #5
0
        public ActionResult Analisar(int protocoloId = 0, int requerimentoId = 0)
        {
            AnaliseItemVM vm = new AnaliseItemVM();

            if (protocoloId == 0 || requerimentoId == 0)
            {
                return(View(vm));
            }

            IProtocolo  protocolo = _protocoloBus.Obter(protocoloId);
            AnaliseItem analise   = _bus.VerificarProtocolo(protocolo.Numero);

            if (!Validacao.EhValido)
            {
                return(RedirectToAction("Analisar", "AnaliseItens", Validacao.QueryParamSerializer()));
            }

            vm.Requerimentos           = analise.Requerimentos;
            vm.RequerimentoSelecionado = requerimentoId;
            vm.ProjetoDigitalId        = _busProjetoDigitalCredenciado.ObterProjetoDigitalId(requerimentoId);
            vm.ProtocoloId             = protocoloId;
            vm.ProtocoloNumero         = protocolo.Numero;

            Requerimento req = vm.Requerimentos.FirstOrDefault(x => x.Id == requerimentoId);

            AnaliseItem analiseAux = _bus.ObterPorChecagem(req.Checagem);

            if (analiseAux != null && analiseAux.Id > 0)
            {
                analise.Id       = analiseAux.Id;
                analise.Situacao = analiseAux.Situacao;
            }

            if (_validar.ValidarProtocoloAnalisar(req.Checagem, req.Id, protocolo.IsProcesso))
            {
                if (_validar.Analise(analise))
                {
                    // Caso não exista a analise na entrada no metodo abaixo a mesma vai ser criada
                    analise      = _bus.ObterAnaliseProtocolo(req, protocolo.Id.GetValueOrDefault(), false);
                    vm.AnaliseId = analise.Id;

                    vm.CheckListId = req.Checagem;
                    vm.Atualizado  = false;
                    vm.Roteiros    = analise.Roteiros;

                    analise.Itens.ForEach(x => x.Analista = string.Empty);
                    vm.ListarItens = analise.Itens;
                }
            }

            vm.Situacao            = analise.Situacao;
            vm.UrlsCaracterizacoes = ObterUrlsCaracterizacoes(_busCaracterizacao.ObterCaracterizacoes(vm.ProjetoDigitalId));

            return(View(vm));
        }
        public List <Roteiro> ObterRoteirosAtuais(AnaliseItem analise)
        {
            List <Roteiro> roteirosAtuais = new List <Roteiro>();

            for (int i = 0; i < analise.Roteiros.Count; i++)
            {
                Roteiro roteiro = ObterSimplificado(analise.Roteiros[i].Id);

                roteirosAtuais.Add(roteiro);
            }

            return(roteirosAtuais);
        }
Exemple #7
0
        public bool ImportarProjetoDigital(int analiseId, int projetoDigitalId)
        {
            try
            {
                GerenciadorTransacao.ObterIDAtual();

                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                {
                    bancoDeDados.IniciarTransacao();

                    using (BancoDeDados bancoCredenciado = BancoDeDados.ObterInstancia(EsquemaBancoCredenciado))
                    {
                        bancoCredenciado.IniciarTransacao();
                        AnaliseItem analise = Obter(analiseId);
                        analise.Situacao = (int)eAnaliseSituacao.Finalizado;

                        if (_validar.Analise(analise))
                        {
                            CaracterizacaoBus caracterizacaoBus = new CaracterizacaoBus();

                            caracterizacaoBus.CopiarDadosCredenciado(projetoDigitalId, bancoDeDados, bancoCredenciado);

                            _da.AlterarSituacao(analise, bancoDeDados);

                            ProjetoDigitalCredenciadoBus projetoDigitalCredenciadoBus = new ProjetoDigitalCredenciadoBus();
                            projetoDigitalCredenciadoBus.AlterarEtapaTemporario(projetoDigitalId, eProjetoDigitalEtapaImportacao.Finalizado, bancoDeDados);

                            if (!Validacao.EhValido)
                            {
                                bancoDeDados.Rollback();
                                bancoCredenciado.Rollback();
                                return(false);
                            }
                        }

                        bancoCredenciado.Commit();
                    }

                    bancoDeDados.Commit();
                }

                return(true);
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(false);
        }
Exemple #8
0
 public virtual void AtualizarEspecificacaoItem(int especificacaoItemId, string descricao, AnaliseItem analiseItem,
                                                AnaliseTipo analiseTipo, bool teorAtivo, bool teorNaCl, decimal analiseInicialIhara, decimal analiseFinalIhara,
                                                decimal analiseInicialAbnt, decimal analiseFinalAbnt)
 {
     Descricao           = descricao;
     AnaliseItem         = analiseItem;
     AnaliseTipo         = analiseTipo;
     TeorAtivo           = teorAtivo;
     TeorNaCl            = teorNaCl;
     AnaliseInicialIhara = analiseInicialIhara;
     AnaliseFinalIhara   = analiseFinalIhara;
     AnaliseInicialAbnt  = analiseInicialAbnt;
     AnaliseFinalAbnt    = analiseFinalAbnt;
 }
Exemple #9
0
        public ActionResult ObterAnalisePartial(RequerimentoAnaliseVME objeto)
        {
            AnaliseItemVM vm      = new AnaliseItemVM();
            AnaliseItem   analise = new AnaliseItem();

            if (_validar.ValidarProtocoloAnalisar(objeto.ChecagemId, objeto.NumeroRequerimento, objeto.IsProcesso))
            {
                analise = _bus.ObterPorChecagem(objeto.ChecagemId) ?? new AnaliseItem();
                analise.Protocolo.Id = objeto.ProtocoloId;

                if (_validar.Analise(analise))
                {
                    Requerimento req = _busRequerimento.Obter(objeto.NumeroRequerimento);
                    req.Checagem = objeto.ChecagemId;
                    vm.RequerimentoSelecionado = req.Id;
                    vm.Requerimentos.Add(req);

                    // Caso não exista a analise na entrada no metodo abaixo a mesma vai ser criada
                    analise = _bus.ObterAnaliseProtocolo(req, objeto.ProtocoloId, objeto.Atualizar);
                    analise.Requerimentos = vm.Requerimentos;

                    vm.CheckListId = objeto.ChecagemId;
                    vm.Atualizado  = objeto.Atualizar;
                    vm.Roteiros    = analise.Roteiros;

                    analise.Itens.ForEach(x => x.Analista = string.Empty);

                    vm.ListarItens      = analise.Itens;
                    vm.Situacao         = analise.Situacao;
                    vm.ProjetoDigitalId = _busProjetoDigitalCredenciado.ObterProjetoDigitalId(req.Id);

                    vm.ProtocoloId = objeto.ProtocoloId;
                }
                else
                {
                    vm.Situacao = analise.Situacao;
                }
            }

            if (vm.ProjetoDigitalId > 0)
            {
                vm.UrlsCaracterizacoes = ObterUrlsCaracterizacoes(_busCaracterizacao.ObterCaracterizacoes(vm.ProjetoDigitalId));
            }

            List <Mensagem> info = Validacao.Erros.FindAll(x => x.Tipo == eTipoMensagem.Informacao);
            List <Mensagem> erro = Validacao.Erros.FindAll(x => x.Tipo != eTipoMensagem.Informacao);

            return(Json(new { @Msg = erro, @MsgInfo = info, @Html = ((Validacao.EhValido) ? ViewModelHelper.RenderPartialViewToString(ControllerContext, "AnalisarPartial", vm) : ""), analiseId = analise.Id, projetoDigitalId = vm.ProjetoDigitalId }, JsonRequestBehavior.AllowGet));
        }
Exemple #10
0
        public AnaliseItem ObterSimplificado(Protocolo protocolo)
        {
            AnaliseItem resultado = null;

            try
            {
                resultado = _da.Obter(protocolo, true);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(resultado);
        }
Exemple #11
0
        public AnaliseItem Obter(Protocolo protocolo)
        {
            AnaliseItem analise = null;

            try
            {
                analise = _da.Obter(protocolo);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(analise);
        }
Exemple #12
0
        public AnaliseItem ObterPorChecagem(int checagem, bool simplificado = false, BancoDeDados banco = null)
        {
            AnaliseItem analise = null;

            try
            {
                analise = _da.ObterPorChecagem(checagem, simplificado: simplificado, banco: banco);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(analise);
        }
Exemple #13
0
        public AnaliseItem Obter(int id, BancoDeDados banco = null)
        {
            AnaliseItem analise = null;

            try
            {
                analise = _da.Obter(id, banco: banco);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(analise);
        }
Exemple #14
0
 public EspecificacaoItem(string descricao, AnaliseItem analiseItem, AnaliseTipo analiseTipo,
                          bool teorAtivo, bool teorNaCl, decimal analiseInicialIhara, decimal analiseFinalIhara,
                          decimal analiseInicialAbnt, decimal analiseFinalAbnt, Especificacao especificacao)
 {
     Descricao           = descricao;
     AnaliseItem         = analiseItem;
     AnaliseTipo         = analiseTipo;
     TeorAtivo           = teorAtivo;
     TeorNaCl            = teorNaCl;
     AnaliseInicialIhara = analiseInicialIhara;
     AnaliseFinalIhara   = analiseFinalIhara;
     AnaliseInicialAbnt  = analiseInicialAbnt;
     AnaliseFinalAbnt    = analiseFinalAbnt;
     Especificacao       = especificacao;
 }
Exemple #15
0
        public AnaliseItem ObterHistorico(int id, string tid = null, bool simplificado = false, BancoDeDados banco = null)
        {
            AnaliseItem analise = null;

            try
            {
                analise = _da.ObterHistorico(id, tid, simplificado, banco);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(analise);
        }
        public bool Analise(AnaliseItem analise)
        {
            if (analise != null && analise.Situacao == (int)eAnaliseItemSituacao.Pendente)
            {
                Validacao.Add(Mensagem.AnaliseItem.AnaliseSituacaoComPendencia);
            }

            if (!_busProtocolo.EmPosse(analise.Protocolo.Id.GetValueOrDefault()))
            {
                Validacao.Add(Mensagem.AnaliseItem.ProtocoloSemPosse);
                return(false);
            }

            return(Validacao.EhValido);
        }
Exemple #17
0
        public AnaliseItem ObterAnaliseProtocolo(Requerimento req, int protocoloId, bool atualizar)
        {
            AnaliseItem analise = null;

            try
            {
                int analiseId = _da.ExisteAnalise(req.Checagem);

                if (analiseId != 0)
                {
                    analise = _da.Obter(analiseId);
                    if (atualizar)
                    {
                        analise.Atualizado = atualizar;
                        AtualizarAnalise(analise);
                    }
                }
                else
                {
                    analise              = new AnaliseItem();
                    analise.Checagem.Id  = req.Checagem;
                    analise.Protocolo.Id = protocoloId;
                    CriarAnalise(analise);
                }

                if (req.IsRequerimentoDigital && !analise.Itens.Exists(x => x.Tipo == (int)eRoteiroItemTipo.ProjetoDigital))
                {
                    analise.Itens.AddRange(ObterItensRequerimentoDigital(req));
                }

                int projetoDigitalId = new ProjetoDigitalCredenciadoBus().ObterProjetoDigitalId(req.Id);

                List <Caracterizacao> caracterizacoes = _busCaracterizacaoCredenciado.ObterCaracterizacoesAssociadasProjetoDigital(projetoDigitalId);

                analise.Itens.Where(x => x.Tipo == (int)eRoteiroItemTipo.ProjetoDigital).ToList().ForEach(x => {
                    caracterizacoes.Where(c => c.Tipo == (eCaracterizacao)x.CaracterizacaoTipoId).ToList().ForEach(c => {
                        x.TemProjetoGeografico = c.ProjetoId > 0;
                    });
                });

                ValidarSituacaoRoteiros(analise);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
            return(analise);
        }
Exemple #18
0
        public void AtualizarAnalise(AnaliseItem analise)
        {
            try
            {
                List <Roteiro> roteirosAtuais = _busRoteiro.ObterRoteirosAtuais(analise);

                //Atualiza o TID do roteiro da análise com o TID do roteiro atual
                roteirosAtuais.ForEach(atual =>
                {
                    analise.Roteiros.SingleOrDefault(rot => rot.Id == atual.Id).Tid = atual.Tid;
                });

                //Atualiza o TID do item da análise com o TID do item atual
                List <Item> itens = roteirosAtuais.SelectMany(item => item.Itens).ToList();
                Item        aux   = null;
                itens.ForEach(atual =>
                {
                    aux = analise.Itens.SingleOrDefault(x => x.Id == atual.Id);
                    if (aux != null)
                    {
                        if (aux.Tid != atual.Tid && aux.Situacao != (int)eAnaliseItemSituacao.Dispensado)
                        {
                            aux.Editado       = true;
                            aux.Situacao      = (int)eAnaliseItemSituacao.Recebido;
                            aux.Recebido      = true;
                            aux.SituacaoTexto = _busLista.SituacoesItemAnalise.Find(x => x.Id == (int)eAnaliseItemSituacao.Recebido).Texto;
                            aux.Motivo        = String.Empty;
                        }

                        aux.Nome          = atual.Nome;
                        aux.Condicionante = atual.Condicionante;
                        aux.Tid           = atual.Tid;
                    }
                    else
                    {
                        atual.Motivo        = string.Empty;
                        atual.Editado       = true;
                        atual.Situacao      = (int)eAnaliseItemSituacao.Pendente;
                        atual.SituacaoTexto = _busLista.SituacoesItemAnalise.Find(x => x.Id == (int)eAnaliseItemSituacao.Pendente).Texto;
                        analise.Itens.Add(atual);
                    }
                });
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
Exemple #19
0
        public ActionResult ObterRequerimentos(string numero)
        {
            AnaliseItemVM vm = new AnaliseItemVM();

            AnaliseItem analise = _bus.VerificarProtocolo(numero);

            vm.Requerimentos = analise.Requerimentos;

            return(Json(new
            {
                @IsProcesso = analise.IsProcesso,
                @ProtocoloId = analise.Protocolo.Id,
                @Html = ViewModelHelper.RenderPartialViewToString(ControllerContext, "Requerimentos", vm),
                Msg = Validacao.Erros
            }, JsonRequestBehavior.AllowGet));
        }
Exemple #20
0
        public void Salvar(AnaliseItem analise, BancoDeDados banco = null)
        {
            if (analise == null)
            {
                throw new Exception("Análise de itens é nula.");
            }

            if (analise.Id == 0)
            {
                Criar(analise, banco);
            }
            else
            {
                Editar(analise, banco);
            }
        }
Exemple #21
0
        public ActionResult GerarPdf(int id)
        {
            try
            {
                AnaliseItem analise = _bus.Obter(id);
                if (!_validar.Salvar(analise))
                {
                    return(RedirectToAction("Analisar", "AnaliseItens", Validacao.QueryParamSerializer()));
                }

                return(ViewModelHelper.GerarArquivoPdf(new PdfAnalise().GerarPDFAnalise(id), "Analise de Itens"));
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
                return(RedirectToAction("Index", Validacao.QueryParamSerializer()));
            }
        }
        public void ValidarVersaoRoteiro(int checagemId)
        {
            int analiseId = _daAnalise.ExisteAnalise(checagemId);

            if (analiseId <= 0)
            {
                return;
            }

            AnaliseItem analise = _daAnalise.Obter(analiseId);

            for (int i = 0; i < analise.Roteiros.Count; i++)
            {
                if (analise.Roteiros[i].Versao != analise.Roteiros[i].VersaoAtual)
                {
                    Validacao.Add(Mensagem.AnaliseItem.VersaoAtualizada(analise.Roteiros[i].Numero, analise.Roteiros[i].VersaoAtual, analise.Roteiros[i].Versao, analise.Roteiros[i].DataAtualizacao));
                }
            }
        }
Exemple #23
0
        public void AlterarSituacao(AnaliseItem analise, BancoDeDados banco = null)
        {
            try
            {
                GerenciadorTransacao.ObterIDAtual();

                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                {
                    bancoDeDados.IniciarTransacao();

                    _da.AlterarSituacao(analise, bancoDeDados);

                    bancoDeDados.Commit();
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
Exemple #24
0
        internal AnaliseItem Obter(Protocolo protocolo, bool simplificado = false)
        {
            AnaliseItem analise = null;

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
            {
                #region Análise de itens de processo/documento

                Comando comando = bancoDeDados.CriarComando(@"select c.id from {0}tab_analise c where c.protocolo = :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("id", protocolo.Id, DbType.Int32);

                object valor = bancoDeDados.ExecutarScalar(comando);

                if (!Convert.IsDBNull(valor) && Convert.ToInt32(valor) > 0)
                {
                    analise = Obter(Convert.ToInt32(valor), simplificado);
                }
                #endregion
            }
            return(analise);
        }
Exemple #25
0
        public AnaliseItem VerificarProtocolo(string numero)
        {
            AnaliseItem analiseItem = new AnaliseItem();

            ProtocoloNumero protocolo = _daProtocolo.ObterProtocolo(numero);

            analiseItem.IsProcesso = protocolo.IsProcesso;

            try
            {
                if (_validar.VerificarProtocolo(protocolo))
                {
                    analiseItem.Requerimentos = _daProtocolo.ObterProtocoloRequerimentos(protocolo.Id);
                    analiseItem.Protocolo.Id  = protocolo.Id;
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(analiseItem);
        }
Exemple #26
0
        public ActionResult Salvar(AnaliseVM vm, bool atualizarRoteiro = false)
        {
            AnaliseItem analise = new AnaliseItem();

            analise.Id = vm.Id;

            analise.Checagem.Id = vm.ChecagemId;

            if (vm.ProtocoloId > 0)
            {
                analise.Protocolo.Id = vm.ProtocoloId;
            }

            analise.Itens        = vm.Itens;
            analise.Roteiros     = vm.Roteiros;
            analise.ProtocoloPai = vm.ProtocoloPai;

            _bus.Salvar(analise, atualizarRoteiro);

            analise.Itens.ForEach(x => x.Analista = string.Empty);

            return(Json(new { @Itens = analise.Itens, @Msg = Validacao.Erros, AnaliseId = analise.Id }, JsonRequestBehavior.AllowGet));
        }
        public void AlterarSituacao(Titulo titulo, int acao, BancoDeDados banco, bool gerouPdf = true)
        {
            Titulo atualTitulo = _da.ObterSimplificado(titulo.Id);

            if (titulo.Modelo.Regras == null || titulo.Modelo.Regras.Count == 0)
            {
                titulo.Modelo = _busModelo.Obter(titulo.Modelo.Id);
            }

            titulo.Situacao = ObterNovaSituacao(titulo, acao);

            bool isLimparPdfENumero        = false;
            bool isGerarNumero             = false;
            bool isGerarPdf                = false;
            int  novaSituacaoCondicionante = 0;

            if (titulo.Modelo.Codigo == (int)eTituloModeloCodigo.CertificadoRegistroAtividadeFlorestal)
            {
                if (titulo.Atividades.Any(x => x.Codigo == (int)eAtividadeCodigo.FabricanteMotosserra) || titulo.Atividades.Any(x => x.Codigo == (int)eAtividadeCodigo.ComercianteMotosserra))
                {
                    titulo.Prazo = 365;
                }
                else
                {
                    titulo.Prazo = new DateTime(DateTime.Now.Year, 12, 31).DayOfYear - titulo.DataEmissao.Data.Value.DayOfYear;
                }
            }

            if (!_validar.AlterarSituacao(titulo, acao, gerouPdf))
            {
                return;
            }

            #region Configurar Nova Situacao

            //Situação Nova
            switch ((eTituloSituacao)titulo.Situacao.Id)
            {
                #region 1 - Cadastrado

            case eTituloSituacao.Cadastrado:

                if (atualTitulo.Situacao.Id == (int)eTituloSituacao.Emitido)
                {
                    if (titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                    {
                        titulo.Numero.Inteiro = null;
                        titulo.Numero.Ano     = null;
                    }
                }

                titulo.DataEmissao.Data      = null;
                titulo.DataInicioPrazo.Data  = null;
                titulo.DataAssinatura.Data   = null;
                titulo.DataVencimento.Data   = null;
                titulo.DataEncerramento.Data = null;
                titulo.Prazo = null;

                isLimparPdfENumero = true;
                break;

                #endregion

                #region 2 - Emitido

            case eTituloSituacao.Emitido:
                isGerarNumero = true;
                isGerarPdf    = true;
                //titulo.DataEmissao info na tela

                if (titulo.Modelo.Regra(eRegra.Prazo))
                {
                    int prazoId = Convert.ToInt32(titulo.Modelo.Resposta(eRegra.Prazo, eResposta.TipoPrazo).Valor);
                    titulo.PrazoUnidade = _busLista.TituloModeloTiposPrazos.Single(x => x.Id == prazoId).Texto;
                }
                break;

                #endregion

                #region 3 - Concluído

            case eTituloSituacao.Concluido:
                if (titulo.Modelo.Regra(eRegra.Condicionantes))
                {
                    novaSituacaoCondicionante = 2;
                }

                if (atualTitulo.Situacao.Id == (int)eTituloSituacao.Cadastrado)
                {
                    isGerarNumero = true;
                    isGerarPdf    = true;
                }
                //titulo.DataAssinatura info na tela

                if (titulo.Modelo.Regra(eRegra.Prazo))
                {
                    int prazoId = Convert.ToInt32(titulo.Modelo.Resposta(eRegra.Prazo, eResposta.TipoPrazo).Valor);

                    titulo.PrazoUnidade = _busLista.TituloModeloTiposPrazos.Single(x => x.Id == prazoId).Texto;

                    switch ((eAlterarSituacaoAcao)acao)
                    {
                    case eAlterarSituacaoAcao.EmitirParaAssinatura:
                        titulo.DataInicioPrazo.Data = titulo.DataEmissao.Data.GetValueOrDefault();
                        break;

                    case eAlterarSituacaoAcao.Assinar:
                        titulo.DataInicioPrazo.Data = titulo.DataAssinatura.Data.GetValueOrDefault();
                        break;

                    case eAlterarSituacaoAcao.Entregar:
                    case eAlterarSituacaoAcao.Concluir:
                        if (titulo.Modelo.Resposta(eRegra.Prazo, eResposta.InicioPrazo).Valor.ToString() == "2")                                        //data da assinatura
                        {
                            titulo.DataInicioPrazo.Data = titulo.DataAssinatura.Data.GetValueOrDefault();
                        }
                        else
                        {
                            titulo.DataInicioPrazo.Data = titulo.DataEmissao.Data.GetValueOrDefault();
                        }
                        break;

                    default:
                        titulo.DataInicioPrazo.Data = DateTime.Now;
                        break;
                    }

                    if (prazoId == 1)                            //Dias
                    {
                        titulo.DataVencimento.Data = titulo.DataInicioPrazo.Data.Value.AddDays(titulo.Prazo.GetValueOrDefault());
                    }
                    else
                    {
                        titulo.DataVencimento.Data = titulo.DataInicioPrazo.Data.Value.AddYears(titulo.Prazo.GetValueOrDefault());
                    }
                }
                break;

                #endregion

                #region 4 - Assinado

            case eTituloSituacao.Assinado:
                //titulo.DataAssinatura info na tela
                break;

                #endregion

                #region 5 - Encerrado

            case eTituloSituacao.Encerrado:
                if (titulo.Modelo.Regra(eRegra.Condicionantes))
                {
                    novaSituacaoCondicionante = 5;
                }
                break;

                #endregion

                #region 6 - Prorrogado

            case eTituloSituacao.Prorrogado:
                if (titulo.Modelo.Regra(eRegra.Prazo))
                {
                    titulo.DataVencimento.Data = titulo.DataVencimento.Data.Value.AddDays(titulo.DiasProrrogados.GetValueOrDefault());
                }
                break;

                #endregion
            }

            #endregion

            #region Numero de Titulo

            if (isGerarNumero)
            {
                titulo.Numero.ReiniciaPorAno = titulo.Modelo.Regra(eRegra.NumeracaoReiniciada);

                if (titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                {
                    titulo.Numero.Automatico = true;
                    TituloModeloResposta iniciarEm = titulo.Modelo.Resposta(eRegra.NumeracaoAutomatica, eResposta.InicioNumeracao);
                    titulo.Numero.IniciaEm    = null;
                    titulo.Numero.IniciaEmAno = null;

                    if (iniciarEm != null)
                    {
                        if (iniciarEm.Valor == null || !ValidacoesGenericasBus.ValidarMaskNumeroBarraAno(iniciarEm.Valor.ToString()))
                        {
                            Validacao.Add(Mensagem.Titulo.IniciarEmInvalido);
                            return;
                        }

                        string[] iniciar = iniciarEm.Valor.ToString().Split('/');
                        titulo.Numero.IniciaEm    = Convert.ToInt32(iniciar[0]);
                        titulo.Numero.IniciaEmAno = Convert.ToInt32(iniciar[1]);

                        if (titulo.Numero.IniciaEmAno.GetValueOrDefault() != DateTime.Now.Year)
                        {
                            titulo.Numero.IniciaEm    = null;
                            titulo.Numero.IniciaEmAno = null;
                        }
                    }
                }

                if (titulo.DataEmissao.IsValido)
                {
                    titulo.Numero.Ano = titulo.DataEmissao.Data.Value.Year;
                }
            }

            //Limpar numero
            if (isLimparPdfENumero)
            {
                if (titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                {
                    titulo.Numero = null;
                }
            }

            #endregion

            if (isLimparPdfENumero)
            {
                titulo.ArquivoPdf.Id = null;
            }

            GerenciadorTransacao.ObterIDAtual();
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();
                #region Condicionante

                if (novaSituacaoCondicionante > 0)
                {
                    foreach (var item in titulo.Condicionantes)
                    {
                        TituloCondicionante condicionanteAtual = _daCondicionante.Obter(item.Id, bancoDeDados);

                        //Filtro para não alterar as 4 - atendida
                        if (novaSituacaoCondicionante == 5 && condicionanteAtual.Situacao.Id == 4)                        //5 - encerrada | 4 - atendida
                        {
                            continue;
                        }

                        //Ativa a condicionante
                        if (novaSituacaoCondicionante == 2 && condicionanteAtual.Situacao.Id != 2)
                        {
                            if (condicionanteAtual.PossuiPrazo)
                            {
                                //Regras do Modelo Sem Prazo em Condicionantes com Prazo
                                if (!titulo.Modelo.Regra(eRegra.Prazo))
                                {
                                    condicionanteAtual.DataInicioPrazo.Data = titulo.DataEmissao.Data;
                                    condicionanteAtual.DataVencimento.Data  = titulo.DataEmissao.Data.Value.AddDays(condicionanteAtual.Prazo.GetValueOrDefault());
                                }
                                else
                                {
                                    condicionanteAtual.DataInicioPrazo     = titulo.DataInicioPrazo;
                                    condicionanteAtual.DataVencimento.Data = titulo.DataInicioPrazo.Data.Value.AddDays(condicionanteAtual.Prazo.GetValueOrDefault());
                                }
                            }

                            //Periodicidade
                            if (!item.PossuiPeriodicidade && item.Periodicidades != null)
                            {
                                item.Periodicidades.Clear();
                            }

                            TituloCondicionantePeriodicidade periodicidade = null;

                            if (item.PossuiPeriodicidade)
                            {
                                int diasTotais = item.PeriodicidadeValor.GetValueOrDefault();

                                switch (item.PeriodicidadeTipo.Id)
                                {
                                case 1:                                        //dia
                                    break;

                                case 2:                                        //Mes
                                    diasTotais *= 30;
                                    break;

                                case 3:                                        //Ano
                                    diasTotais *= 365;
                                    break;

                                default:
                                    break;
                                }

                                if (item.Prazo.GetValueOrDefault() > 0 && item.Prazo.GetValueOrDefault() <= diasTotais)
                                {
                                    int qtdPeriodo = Math.Abs((diasTotais / (item.Prazo.GetValueOrDefault())));
                                    for (int i = 0; i < qtdPeriodo; i++)
                                    {
                                        periodicidade             = new TituloCondicionantePeriodicidade();
                                        periodicidade.Situacao.Id = 2;                                        //Ativa

                                        //Regras do Modelo Sem Prazo em Condicionantes com Prazo
                                        if (!titulo.Modelo.Regra(eRegra.Prazo))
                                        {
                                            periodicidade.DataInicioPrazo.Data = titulo.DataEmissao.Data.Value.AddDays(i * item.Prazo.GetValueOrDefault());
                                            periodicidade.DataVencimento.Data  = titulo.DataEmissao.Data.Value.AddDays((i + 1) * item.Prazo.GetValueOrDefault());
                                        }
                                        else
                                        {
                                            periodicidade.DataInicioPrazo.Data = titulo.DataInicioPrazo.Data.Value.AddDays(i * item.Prazo.GetValueOrDefault());
                                            periodicidade.DataVencimento.Data  = titulo.DataInicioPrazo.Data.Value.AddDays((i + 1) * item.Prazo.GetValueOrDefault());
                                        }

                                        item.Periodicidades.Add(periodicidade);
                                    }
                                }
                            }

                            condicionanteAtual.Periodicidades = item.Periodicidades;
                            condicionanteAtual.Situacao.Id    = novaSituacaoCondicionante;
                            _daCondicionante.Ativar(condicionanteAtual, bancoDeDados);
                        }
                        else
                        {
                            condicionanteAtual.Situacao.Id = novaSituacaoCondicionante;
                            _daCondicionante.AlterarSituacao(condicionanteAtual, banco: bancoDeDados);
                        }
                    }
                }

                #endregion

                _da.AlterarSituacao(titulo, bancoDeDados);

                #region Atividades

                TituloBus        tituloBus           = new TituloBus();
                AtividadeBus     atividadeBus        = new AtividadeBus();
                List <Atividade> lstTituloAtividades = null;

                #region Título Concluido

                if (titulo.Situacao.Id == (int)eTituloSituacao.Concluido)                //3 - Concluido
                {
                    lstTituloAtividades = tituloBus.ObterAtividades(titulo.Id);

                    if (lstTituloAtividades != null && lstTituloAtividades.Count > 0)
                    {
                        int?situacao = null;
                        if (EspecificiadadeBusFactory.Possui(titulo.Modelo.Codigo.GetValueOrDefault()))
                        {
                            IEspecificidadeBus busEsp = EspecificiadadeBusFactory.Criar(titulo.Modelo.Codigo.GetValueOrDefault());
                            situacao = busEsp.ObterSituacaoAtividade(titulo.Id);
                        }

                        if (situacao != null ||
                            LstModeloCodigoPendencia.Any(x => x == titulo.Modelo.Codigo.GetValueOrDefault()) ||
                            LstModeloCodigoIndeferido.Any(x => x == titulo.Modelo.Codigo.GetValueOrDefault()))
                        {
                            eAtividadeSituacao atividadeSituacao =
                                (LstModeloCodigoPendencia.Any(x => x == titulo.Modelo.Codigo.GetValueOrDefault())) ? eAtividadeSituacao.ComPendencia : eAtividadeSituacao.Indeferida;

                            if (situacao != null)
                            {
                                atividadeSituacao = (eAtividadeSituacao)situacao;
                            }

                            atividadeBus.AlterarSituacao(lstTituloAtividades, atividadeSituacao, bancoDeDados);
                        }
                        else
                        {
                            foreach (Atividade atividade in lstTituloAtividades)
                            {
                                if (atividadeBus.VerificarDeferir(atividade, bancoDeDados))
                                {
                                    atividade.SituacaoId = (int)eAtividadeSituacao.Deferida;
                                    atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                                }
                            }
                        }
                    }
                }

                #endregion

                #region Título Encerrado

                if (titulo.Situacao.Id == (int)eTituloSituacao.Encerrado)                //Encerrado
                {
                    lstTituloAtividades = tituloBus.ObterAtividades(titulo.Id);
                    eAtividadeSituacao situacaoAtual = eAtividadeSituacao.EmAndamento;

                    if (lstTituloAtividades != null && lstTituloAtividades.Count > 0)
                    {
                        foreach (Atividade atividade in lstTituloAtividades)
                        {
                            situacaoAtual = (eAtividadeSituacao)atividadeBus.ObterAtividadeSituacao(atividade, bancoDeDados).SituacaoId;

                            if (situacaoAtual == eAtividadeSituacao.Indeferida || situacaoAtual == eAtividadeSituacao.ComPendencia)
                            {
                                atividade.SituacaoId = (int)eAtividadeSituacao.EmAndamento;
                                atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                            }
                            else
                            {
                                if (titulo.MotivoEncerramentoId == 1 || titulo.MotivoEncerramentoId == 4)
                                {
                                    atividade.SituacaoId = (int)eAtividadeSituacao.EmAndamento;
                                    atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                                }
                                else if (atividadeBus.VerificarEncerrar(atividade, bancoDeDados))
                                {
                                    atividade.SituacaoId = (int)eAtividadeSituacao.Encerrada;
                                    atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                                }
                            }
                        }
                    }
                }

                #endregion

                #region Título Prorrogado

                if (titulo.Situacao.Id == (int)eTituloSituacao.Prorrogado)                //6 - Prorrogar
                {
                    lstTituloAtividades = tituloBus.ObterAtividades(titulo.Id);

                    if (lstTituloAtividades != null && lstTituloAtividades.Count > 0)
                    {
                        if (LstModeloCodigoPendencia.Any(x => x == titulo.Modelo.Codigo) ||
                            LstModeloCodigoIndeferido.Any(x => x == titulo.Modelo.Codigo))
                        {
                            eAtividadeSituacao atividadeSituacao =
                                (LstModeloCodigoPendencia.Any(x => x == titulo.Modelo.Codigo)) ? eAtividadeSituacao.ComPendencia : eAtividadeSituacao.Indeferida;

                            atividadeBus.AlterarSituacao(lstTituloAtividades, atividadeSituacao, bancoDeDados);
                        }
                        else
                        {
                            int finalidade = _da.VerificarEhTituloAnterior(titulo);
                            if (finalidade > 0)
                            {
                                eAtividadeSituacao atividadeSituacao = (finalidade == 1) ? eAtividadeSituacao.NovaFase : eAtividadeSituacao.EmRenovacao;
                                atividadeBus.AlterarSituacao(lstTituloAtividades, atividadeSituacao, bancoDeDados);
                            }
                            else
                            {
                                foreach (Atividade atividade in lstTituloAtividades)
                                {
                                    if (atividadeBus.VerificarDeferir(atividade, bancoDeDados))
                                    {
                                        atividade.SituacaoId = (int)eAtividadeSituacao.Deferida;
                                        atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                                        continue;
                                    }

                                    //Voltar a situação default de andamento
                                    atividade.SituacaoId = (int)eAtividadeSituacao.EmAndamento;
                                    atividadeBus.AlterarSituacao(atividade, bancoDeDados);
                                }
                            }
                        }
                    }
                }

                #endregion

                #endregion

                #region Gerar Pdf de Titulo

                ArquivoBus arqBus = new ArquivoBus(eExecutorTipo.Interno);

                if (isGerarPdf && titulo.Modelo.Regra(eRegra.PdfGeradoSistema))
                {
                    TituloBus bus = new TituloBus();

                    titulo.ArquivoPdf.Nome        = "Titulo.pdf";
                    titulo.ArquivoPdf.Extensao    = ".pdf";
                    titulo.ArquivoPdf.ContentType = "application/pdf";
                    titulo.ArquivoPdf.Buffer      = bus.GerarPdf(titulo, bancoDeDados);

                    if (titulo.ArquivoPdf.Buffer != null)
                    {
                        arqBus.Salvar(titulo.ArquivoPdf);

                        ArquivoDa _arquivoDa = new ArquivoDa();
                        _arquivoDa.Salvar(titulo.ArquivoPdf, User.EtramiteIdentity.FuncionarioId, User.EtramiteIdentity.Name,
                                          User.EtramiteIdentity.Login, (int)eExecutorTipo.Interno, User.EtramiteIdentity.FuncionarioTid, bancoDeDados);

                        _da.SalvarPdfTitulo(titulo, bancoDeDados);
                    }
                }

                #endregion

                #region Análise de Item

                //Trava a Análise de item de processo/documento caso o titulo que está sendo alterado seja um de pendência
                if (titulo.Atividades != null && titulo.Atividades.Count > 0)
                {
                    Protocolo   protocolo = titulo.Atividades.First().Protocolo;
                    AnaliseItem analise   = _busAnalise.Obter(protocolo);

                    if (analise != null && analise.Id > 0)
                    {
                        if (_busTitulo.ExisteTituloPendencia(protocolo, bancoDeDados))
                        {
                            if (analise.Situacao == 1)                            // 1 - Em andamento
                            {
                                analise.Situacao = 2;                             // 2 - Com Pendência
                                _busAnalise.AlterarSituacao(analise, bancoDeDados);
                            }
                        }
                        else if (analise.Situacao == 2)
                        {
                            analise.Situacao = 1;
                            _busAnalise.AlterarSituacao(analise, bancoDeDados);
                        }
                    }
                }

                #endregion

                #region Gerar/Enviar Email

                #region Gerar Email

                Email email = null;
                if (titulo.Situacao.Id == (int)eTituloSituacao.Concluido && titulo.Modelo.Regra(eRegra.EnviarEmail))                //3 - Concluido
                {
                    if (titulo.Modelo.Resposta(eRegra.EnviarEmail, eResposta.TextoEmail).Valor != null)
                    {
                        string textoEmail = titulo.Modelo.Resposta(eRegra.EnviarEmail, eResposta.TextoEmail).Valor.ToString();

                        if (!String.IsNullOrWhiteSpace(textoEmail))
                        {
                            Dictionary <String, String> emailKeys = new Dictionary <string, string>();

                            emailKeys.Add("[orgão sigla]", _configSys.Obter <String>(ConfiguracaoSistema.KeyOrgaoSigla));
                            emailKeys.Add("[data da conclusão]", titulo.Modelo.Regra(eRegra.Prazo) ? titulo.DataInicioPrazo.DataTexto : titulo.DataEmissao.DataTexto);
                            emailKeys.Add("[nome do modelo]", titulo.Modelo.Nome);
                            emailKeys.Add("[nome do subtipo]", titulo.Modelo.SubTipo);
                            emailKeys.Add("[nº do título]", titulo.Numero.Texto);
                            emailKeys.Add("[nº processo/documento do título]", titulo.Protocolo.Numero);
                            emailKeys.Add("[nome do empreendimento]", titulo.EmpreendimentoTexto);

                            foreach (string key in emailKeys.Keys)
                            {
                                textoEmail = textoEmail.Replace(key, emailKeys[key]);
                            }

                            email         = new Email();
                            email.Assunto = _configSys.Obter <String>(ConfiguracaoSistema.KeyOrgaoSigla);
                            email.Texto   = textoEmail;
                            email.Tipo    = eEmailTipo.TituloConcluir;
                            email.Codigo  = titulo.Id;
                        }
                    }
                }

                #endregion

                if (email != null)
                {
                    List <String> lstEmail = _da.ObterEmails(titulo.Id, bancoDeDados);

                    if (lstEmail != null && lstEmail.Count > 0)
                    {
                        email.Destinatario = String.Join(", ", lstEmail.ToArray());

                        if (titulo.Modelo.Regra(eRegra.AnexarPDFTitulo))
                        {
                            email.Anexos.Add(titulo.ArquivoPdf);
                        }

                        EmailBus emailBus = new EmailBus();
                        emailBus.Enviar(email, bancoDeDados);
                    }
                }

                #endregion

                #region [ Solicitação CAR ]

                if (LstCadastroAmbientalRuralTituloCodigo.Any(x => x == titulo.Modelo.Codigo))
                {
                    if (titulo.Situacao.Id == (int)eTituloSituacao.Concluido)
                    {
                        //Interno
                        List <int> situacoes = new List <int>()
                        {
                            (int)eCARSolicitacaoSituacao.EmCadastro, (int)eCARSolicitacaoSituacao.Pendente, (int)eCARSolicitacaoSituacao.Valido, (int)eCARSolicitacaoSituacao.Suspenso
                        };
                        CARSolicitacao solicitacao = _busCARSolicitacao.ObterPorEmpreendimento(titulo.EmpreendimentoId.GetValueOrDefault(0), situacoes, false, bancoDeDados) ?? new CARSolicitacao();

                        if (solicitacao != null && solicitacao.Id > 0)
                        {
                            solicitacao.SituacaoId        = (int)eCARSolicitacaoSituacao.SubstituidoPeloTituloCAR;
                            solicitacao.DataSituacao.Data = DateTime.Now;

                            _busCARSolicitacao.AlterarSituacao(solicitacao, bancoDeDados, mostrarMsg: false);
                        }
                        else
                        {
                            //Credenciado
                            _busCARSolicitacao.SubstituirPorTituloCARCredenciado(titulo.EmpreendimentoId.GetValueOrDefault(0), bancoDeDados);
                        }
                    }

                    if (titulo.Situacao.Id == (int)eTituloSituacao.Encerrado)
                    {
                        List <int> situacoes = new List <int>()
                        {
                            (int)eCARSolicitacaoSituacao.SubstituidoPeloTituloCAR
                        };
                        CARSolicitacao solicitacao = _busCARSolicitacao.ObterPorEmpreendimento(titulo.EmpreendimentoId.GetValueOrDefault(0), situacoes, false, bancoDeDados) ?? new CARSolicitacao();

                        if (solicitacao != null && solicitacao.Id > 0)
                        {
                            solicitacao.SituacaoAnteriorId   = solicitacao.SituacaoId;
                            solicitacao.DataSituacaoAnterior = solicitacao.DataSituacao;

                            solicitacao.SituacaoId        = (int)eCARSolicitacaoSituacao.Valido;
                            solicitacao.DataSituacao.Data = DateTime.Now;

                            _busCARSolicitacao.AlterarSituacao(solicitacao, bancoDeDados, mostrarMsg: false);
                        }
                        else
                        {
                            //Credenciado
                            Empreendimento empreendimento = new EmpreendimentoBus().ObterSimplificado(titulo.EmpreendimentoId.GetValueOrDefault(0));

                            CARSolicitacaoCredenciadoBus carSolicitacaoCredBus = new CARSolicitacaoCredenciadoBus();
                            CARSolicitacao carSolicitacaoCred = new CARSolicitacao();
                            carSolicitacaoCred.Empreendimento.Codigo = empreendimento.Codigo;
                            carSolicitacaoCredBus.AlterarSituacao(carSolicitacaoCred, new CARSolicitacao()
                            {
                                SituacaoId = (int)eCARSolicitacaoSituacao.Valido
                            });
                        }
                    }

                    //SE situacao == Encerrado
                    //TODO:Mudar Situação para Válido
                }

                #endregion

                if (!Validacao.EhValido)
                {
                    bancoDeDados.Rollback();
                    return;
                }

                #region Salvar A especificidade

                if (EspecificiadadeBusFactory.Possui(titulo.Modelo.Codigo.GetValueOrDefault()))
                {
                    IEspecificidadeBus busEsp = EspecificiadadeBusFactory.Criar(titulo.Modelo.Codigo.GetValueOrDefault());
                    titulo.Especificidade = busEsp.Obter(titulo.Id) as Especificidade;
                    titulo.Especificidade = titulo.ToEspecificidade();
                    busEsp.Salvar(titulo.Especificidade, bancoDeDados);

                    List <DependenciaLst> lstDependencias = busEsp.ObterDependencias(titulo.Especificidade);
                    if (isGerarPdf && lstDependencias != null && lstDependencias.Count > 0)
                    {
                        if (!lstDependencias.Exists(x => x.TipoId == (int)eTituloDependenciaTipo.Caracterizacao && x.DependenciaTipo == (int)eCaracterizacao.Dominialidade))
                        {
                            lstDependencias.Add(new DependenciaLst()
                            {
                                TipoId = (int)eTituloDependenciaTipo.Caracterizacao, DependenciaTipo = (int)eCaracterizacao.Dominialidade
                            });
                        }
                        _da.Dependencias(titulo.Id, titulo.Modelo.Id, titulo.EmpreendimentoId.GetValueOrDefault(), lstDependencias);
                    }
                }

                #endregion

                #region Histórico

                eHistoricoAcao eAcao;

                switch ((eAlterarSituacaoAcao)acao)
                {
                case eAlterarSituacaoAcao.EmitirParaAssinatura:
                    eAcao = eHistoricoAcao.emitir;
                    break;

                case eAlterarSituacaoAcao.CancelarEmissao:
                    eAcao = eHistoricoAcao.cancelaremissao;
                    break;

                case eAlterarSituacaoAcao.Assinar:
                    eAcao = eHistoricoAcao.assinar;
                    break;

                case eAlterarSituacaoAcao.Prorrogar:
                    eAcao = eHistoricoAcao.prorrogar;
                    break;

                case eAlterarSituacaoAcao.Encerrar:
                    eAcao = eHistoricoAcao.encerrar;
                    break;

                case eAlterarSituacaoAcao.Entregar:
                    eAcao = eHistoricoAcao.entregar;
                    break;

                default:
                    eAcao = eHistoricoAcao.emitir;
                    break;
                }

                _da.Historico.Gerar(titulo.Id, eHistoricoArtefato.titulo, eAcao, bancoDeDados);
                _da.Consulta.Gerar(titulo.Id, eHistoricoArtefato.titulo, bancoDeDados);

                #region Solicitacao CAR

                if (LstCadastroAmbientalRuralTituloCodigo.Any(x => x == titulo.Modelo.Codigo.GetValueOrDefault()))
                {
                    if (titulo.Situacao.Id != (int)eTituloSituacao.Concluido)
                    {
                        _da.Consulta.Deletar(titulo.Id, eHistoricoArtefato.carsolicitacaotitulo, bancoDeDados);
                    }
                    else
                    {
                        _da.Consulta.Gerar(titulo.Id, eHistoricoArtefato.carsolicitacaotitulo, bancoDeDados);
                    }
                }

                #endregion

                #endregion

                bancoDeDados.Commit();

                Validacao.Add(Mensagem.TituloAlterarSituacao.TituloAltSituacaoSucesso);
            }
        }
        public bool Salvar(Documento documento)
        {
            try
            {
                documento.Emposse.Id = User.FuncionarioId;

                if (documento.Arquivo == null)
                {
                    documento.Arquivo = new Arquivo();
                }

                bool isEdicao = (documento.Id > 0);

                if (_validar.Salvar(documento))
                {
                    #region Arquivos/Diretorio

                    if (documento.Arquivo.Id != null && documento.Arquivo.Id == 0)
                    {
                        ArquivoBus _busArquivo = new ArquivoBus(eExecutorTipo.Interno);
                        documento.Arquivo = _busArquivo.Copiar(documento.Arquivo);
                    }

                    #endregion

                    #region Setar Valores

                    ListaBus      listaBus     = new ListaBus();
                    ProtocoloTipo configuracao = listaBus.TiposDocumento.FirstOrDefault(x => x.Id == documento.Tipo.Id);

                    documento.ProtocoloAssociado = (configuracao.PossuiProcesso || configuracao.ProcessoObrigatorio) ? documento.ProtocoloAssociado : new Protocolo();
                    documento.ChecagemPendencia  = (configuracao.PossuiChecagemPendencia || configuracao.ChecagemPendenciaObrigatorio) ? documento.ChecagemPendencia : new ChecagemPendencia();
                    documento.ChecagemRoteiro    = (configuracao.PossuiChecagemRoteiro || configuracao.ChecagemRoteiroObrigatorio) ? documento.ChecagemRoteiro : new ChecagemRoteiro();
                    documento.Requerimento       = (configuracao.PossuiRequerimento || configuracao.RequerimentoObrigatorio) ? documento.Requerimento : new Requerimento();

                    #endregion

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        #region Arquivos/Banco

                        if (documento.Arquivo.Id == 0)
                        {
                            ArquivoDa _arquivoDa = new ArquivoDa();
                            _arquivoDa.Salvar(documento.Arquivo, User.FuncionarioId, User.Name, User.Login, (int)eExecutorTipo.Interno, User.FuncionarioTid, bancoDeDados);
                        }

                        #endregion

                        ChecagemPendenciaBus _checagemPendenciaBus = new ChecagemPendenciaBus();

                        using (BancoDeDados bancoDeDadosCredenciado = BancoDeDados.ObterInstancia(UsuarioCredenciado))
                        {
                            bancoDeDadosCredenciado.IniciarTransacao();

                            #region Alterar Situacao Requerimento

                            if (documento.Id.HasValue)
                            {
                                Documento docOriginal = _da.ObterSimplificado(documento.Id.Value) as Documento;
                                docOriginal.Requerimento = _busRequerimento.ObterSimplificado(docOriginal.Requerimento.Id);

                                if (docOriginal.Requerimento.Id != documento.Requerimento.Id)
                                {
                                    AlterarRequerimentoSituacao(docOriginal, banco: bancoDeDados);

                                    if (docOriginal.Requerimento.IsRequerimentoDigital)
                                    {
                                        CARSolicitacaoBus carSolicitacaoCredenciadoBus = new CARSolicitacaoBus();
                                        carSolicitacaoCredenciadoBus.DesassociarProtocolo(new CARSolicitacao()
                                        {
                                            Requerimento = docOriginal.Requerimento
                                        }, bancoDeDadosCredenciado);

                                        if (!_busProjetoDigital.AlterarSituacao(docOriginal.Requerimento.Id, eProjetoDigitalSituacao.AguardandoProtocolo, bancoDeDadosCredenciado))
                                        {
                                            bancoDeDados.Rollback();
                                            return(false);
                                        }
                                    }
                                }
                            }

                            #endregion

                            Documento documentoOriginal = new Documento();
                            if (documento.Id != null && documento.Id.GetValueOrDefault() > 0)
                            {
                                documentoOriginal = ObterSimplificado(documento.Id.Value);
                            }

                            #region Titulo

                            if (documento.ChecagemPendencia.Id > 0 && documento.Id.GetValueOrDefault() == 0)
                            {
                                documento.ChecagemPendencia = _checagemPendenciaBus.Obter(documento.ChecagemPendencia.Id);

                                TituloBus tituloBus = new TituloBus();
                                Titulo    titulo    = tituloBus.Obter(documento.ChecagemPendencia.TituloId);

                                if (titulo.Situacao.Id != 5)                                //5 - Encerrado
                                {
                                    titulo.DataEncerramento.Data = DateTime.Now;
                                    titulo.MotivoEncerramentoId  = 7;                                   //Encerrado
                                    TituloSituacaoBus tituloSituacaoBus = new TituloSituacaoBus();
                                    tituloSituacaoBus.AlterarSituacao(titulo, (int)eAlterarSituacaoAcao.Encerrar, bancoDeDados);

                                    if (Validacao.EhValido)
                                    {
                                        Validacao.Erros.Clear();
                                    }
                                }

                                #region Itens da Analise

                                AnaliseItensBus busAnalise = new AnaliseItensBus(new AnaliseItensValidar());

                                AnaliseItem analiseItem = busAnalise.ObterAnaliseTitulo(documento.ChecagemPendencia.TituloId);
                                analiseItem = busAnalise.Obter(analiseItem.Id, bancoDeDados);
                                //int setorId = _busProc.ObterSetor(analiseItem.Protocolo.Id);

                                foreach (Item item in analiseItem.Itens)
                                {
                                    if (documento.ChecagemPendencia.Itens.Exists(x => x.Id == item.Id))
                                    {
                                        item.Analista = User.Name;
                                        item.Situacao = (int)eAnaliseItemSituacao.Recebido;
                                        item.Motivo   = String.Empty;
                                        item.Recebido = true;
                                        item.Editado  = true;
                                        //item.SetorId = setorId;
                                        item.DataAnalise = DateTime.Now.ToString();
                                    }
                                }

                                AnaliseItensDa _daAnalise = new AnaliseItensDa();
                                _daAnalise.Salvar(analiseItem, bancoDeDados);

                                #endregion
                            }

                            #endregion

                            #region Atividade

                            List <Atividade> lstAtividadesAtual = null;
                            if ((documento.Id ?? 0) > 0)
                            {
                                lstAtividadesAtual = _da.ObterAtividades(documento.Id.GetValueOrDefault(), bancoDeDados).Atividades;
                            }

                            if (documento.Atividades != null && documento.Atividades.Count > 0)
                            {
                                documento.Atividades.ForEach(x =>
                                {
                                    x.Protocolo.Id         = documento.Id.GetValueOrDefault();
                                    x.Protocolo.IsProcesso = false;
                                });

                                AtividadeBus atividadeBus = new AtividadeBus();
                                atividadeBus.AlterarSituacaoProcDoc(documento.Atividades, lstAtividadesAtual, bancoDeDados);
                                atividadeBus.TituloAnteriores(documento.Atividades, lstAtividadesAtual, bancoDeDados);
                            }

                            #endregion

                            _da.Salvar(documento, bancoDeDados);

                            #region Checagens

                            // cadastrando, seta situação da checagem de itens de roteiro/pendencia como protocolada
                            if (documentoOriginal.Id.GetValueOrDefault() <= 0)
                            {
                                _busCheckList.AlterarSituacao(documento.ChecagemRoteiro.Id, 2, bancoDeDados); //protocolada

                                documento.ChecagemPendencia.SituacaoId = 2;                                   //protocolada
                                _checagemPendenciaBus.AlterarSituacao(documento.ChecagemPendencia, bancoDeDados);
                            }
                            else                             // editando documento
                            {                                // se checagem de itens de roteiro foi alterada, setar o status da antiga como finalizada e setar o status da nova como protocolada
                                if (documento.ChecagemRoteiro.Id != documentoOriginal.ChecagemRoteiro.Id)
                                {
                                    _busCheckList.AlterarSituacao(documentoOriginal.ChecagemRoteiro.Id, 1, bancoDeDados);                            //finalizada
                                    _busCheckList.AlterarSituacao(documento.ChecagemRoteiro.Id, 2, bancoDeDados);                                    //protocolada
                                }
                            }

                            #endregion

                            documento.Requerimento = _busRequerimento.ObterSimplificado(documento.Requerimento.Id);

                            if (documento.Requerimento.IsRequerimentoDigital)
                            {
                                CARSolicitacaoBus carSolicitacaoCredenciadoBus = new CARSolicitacaoBus();
                                carSolicitacaoCredenciadoBus.AssociarProtocolo(new CARSolicitacao()
                                {
                                    Requerimento = documento.Requerimento
                                }, bancoDeDadosCredenciado);

                                if (documentoOriginal.Requerimento.Id != documento.Requerimento.Id)
                                {
                                    if (!_busProjetoDigital.AlterarSituacao(documento.Requerimento.Id, eProjetoDigitalSituacao.AguardandoAnalise, bancoDeDadosCredenciado))
                                    {
                                        bancoDeDados.Rollback();
                                        return(false);
                                    }
                                }
                            }

                            AlterarRequerimentoSituacao(documento, 3, bancoDeDados);                            // Protocolado

                            #region Fiscalizacao

                            if (isEdicao && documento.Fiscalizacao.Id != documentoOriginal.Fiscalizacao.Id && documentoOriginal.Fiscalizacao.Id > 0)
                            {
                                documentoOriginal.Fiscalizacao.SituacaoNovaTipo      = (int)eFiscalizacaoSituacao.CadastroConcluido;
                                documentoOriginal.Fiscalizacao.SituacaoNovaData.Data = DateTime.Now;
                                documentoOriginal.Fiscalizacao.SituacaoAtualTipo     = documento.Fiscalizacao.SituacaoId;

                                _busFiscalizacao.AlterarSituacaoProcDoc(documentoOriginal.Fiscalizacao, bancoDeDados);
                            }

                            if (documento.Fiscalizacao.Id != documentoOriginal.Fiscalizacao.Id)
                            {
                                documento.Fiscalizacao.SituacaoNovaTipo      = (int)eFiscalizacaoSituacao.Protocolado;
                                documento.Fiscalizacao.SituacaoNovaData.Data = DateTime.Now;
                                documento.Fiscalizacao.SituacaoAtualTipo     = documento.Fiscalizacao.SituacaoId;

                                _busFiscalizacao.AlterarSituacaoProcDoc(documento.Fiscalizacao, bancoDeDados);
                            }

                            #endregion

                            //sempre no final esse if
                            if (!Validacao.EhValido)
                            {
                                bancoDeDadosCredenciado.Rollback();
                                bancoDeDados.Rollback();
                                return(false);
                            }

                            bancoDeDadosCredenciado.Commit();
                        }

                        bancoDeDados.Commit();
                    }

                    Mensagem msgSucesso = Mensagem.Documento.Salvar(documento.Numero);
                    if (isEdicao)
                    {
                        msgSucesso = Mensagem.Documento.Editar;
                    }

                    Validacao.Add(msgSucesso);
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(Validacao.EhValido);
        }
Exemple #29
0
        public virtual void AdicionarEspecificacaoItem(int especificacaoItemId, string descricao, AnaliseItem analiseItem,
                                                       AnaliseTipo analiseTipo, bool teorAtivo, bool teorNaCl, decimal analiseInicialIhara, decimal analiseFinalIhara,
                                                       decimal analiseInicialAbnt, decimal analiseFinalAbnt, Especificacao especificacao)
        {
            if (PossuiEspecificacaoItem(especificacaoItemId))
            {
                throw new InvalidOperationException("O item de especificação informado já encontra-se na lista de Itens de Especificação");
            }

            var especificacaoItem = new EspecificacaoItem(descricao, analiseItem, analiseTipo, teorAtivo, teorNaCl,
                                                          analiseInicialIhara, analiseFinalIhara, analiseInicialAbnt, analiseFinalAbnt, especificacao);

            EspecificacaoItens.Add(especificacaoItem);
        }
        public bool Salvar(AnaliseItem analise, bool atualizarRoteiro = false)
        {
            bool finalizar = true;

            //Validação proposta pela analista
            if (atualizarRoteiro)
            {
                foreach (var item in analise.Itens)
                {
                    if (item.Situacao == (int)eAnaliseItemSituacao.Recebido ||
                        item.Situacao == (int)eAnaliseItemSituacao.Pendente ||
                        item.Situacao == (int)eAnaliseItemSituacao.Reprovado)
                    {
                        finalizar = false;
                        break;
                    }
                }

                analise.Situacao = finalizar ? (int)eAnaliseSituacao.Finalizado : (int)eAnaliseSituacao.EmAndamento;

                return(true);
            }

            bool isAnalisado = false;

            AnaliseItem analiseBanco = _daAnalise.ObterSimplificado(analise.Id);

            if (analiseBanco.Situacao == (int)eAnaliseItemSituacao.Pendente)
            {
                Validacao.Add(Mensagem.AnaliseItem.ExistePendencia(analise.Protocolo.Id.HasValue));
            }

            if (!ValidarSituacaoAtividadeProtocolo(analise))
            {
                return(Validacao.EhValido);
            }

            if (!_busProtocolo.EmPosse(analise.Protocolo.Id.GetValueOrDefault()))
            {
                Validacao.Add(Mensagem.AnaliseItem.ProtocoloSemPosse);
                return(false);
            }


            foreach (var item in analise.Itens)
            {
                if (item.Tipo <= 0)
                {
                    Validacao.Add(Mensagem.AnaliseItem.AnaliseItemTipoObrigatorio);
                }

                if (string.IsNullOrWhiteSpace(item.Nome))
                {
                    Validacao.Add(Mensagem.AnaliseItem.AnaliseItemNomeObrigatorio);
                }

                if (item.Situacao <= (int)eAnaliseItemSituacao.Nulo)
                {
                    Validacao.Add(Mensagem.AnaliseItem.AnaliseItemSituacaoObrigatorio(item.Nome));
                }

                switch (item.Situacao)
                {
                case (int)eAnaliseItemSituacao.Reprovado:
                case (int)eAnaliseItemSituacao.Dispensado:
                    MotivoItem(item);
                    break;
                }

                if (item.Situacao != (int)eAnaliseItemSituacao.Recebido)
                {
                    isAnalisado = true;
                }

                if (item.Situacao == (int)eAnaliseItemSituacao.Recebido ||
                    item.Situacao == (int)eAnaliseItemSituacao.Pendente ||
                    item.Situacao == (int)eAnaliseItemSituacao.Reprovado)
                {
                    finalizar = false;
                }
            }

            analise.Situacao = finalizar ? (int)eAnaliseSituacao.Finalizado : (int)eAnaliseSituacao.EmAndamento;

            if (!isAnalisado)
            {
                Validacao.Add(Mensagem.AnaliseItem.ItemAnalisadoObrigatorio);
            }

            return(Validacao.EhValido);
        }