Exemplo n.º 1
0
        //Validacoes de Cadastro/Edição
        public bool Salvar(Titulo titulo)
        {
            JuntarApensarBus _juntarApensarBus = new JuntarApensarBus();

            Titulo(titulo);

            if (titulo.Id <= 0 && titulo.Protocolo.Id > 0)
            {
                ProtocoloSetorModelo(titulo, titulo.Setor.Id);
            }

            if (titulo.Id > 0 && titulo.Situacao.Id != 1)
            {
                if (String.IsNullOrEmpty(titulo.Situacao.Texto) && titulo.Situacao.Id > 0)
                {
                    titulo.Situacao = _configTitulo.Obter <List <Situacao> >(ConfiguracaoTitulo.KeySituacoes).Single(x => x.Id == titulo.Situacao.Id);
                }
                Validacao.Add(Mensagem.Titulo.SituacaoEditar(titulo.Situacao.Texto));
            }

            //Esta validação deve ser feita para cadastrar/Editar pois na edição do titulo deve existir a
            //possibilidade de alterar o protocolo para o processo pai
            //Esta validação não pode ser feita no botao editar do listar
            #region Validacao de Juntado/Apensado

            if (titulo.Protocolo != null && titulo.Protocolo.Id > 0)
            {
                string numero = _protocoloValidar.ObterNumeroProcessoPai(titulo.Protocolo.Id.Value);
                if (!String.IsNullOrEmpty(numero))
                {
                    Validacao.Add(titulo.Protocolo.IsProcesso ? Mensagem.Titulo.ProcessoJuntado(numero) : Mensagem.Titulo.DocumentoApensado(numero));
                }
            }

            #endregion


            #region [ Cadastro Ambiental Rural ]
            if (LstCadastroAmbientalRuralTituloCodigo.Any(x => x == titulo.Modelo.Codigo))
            {
                var busCARSolicitacao = new CARSolicitacaoBus();
                if (!busCARSolicitacao.VerificarSeEmpreendimentoPossuiSolicitacaoValidaEEnviada(titulo.EmpreendimentoId.GetValueOrDefault()))
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.TituloNaoPossuiSolicitacaoDeInscricao);
                }
            }
            #endregion

            return(Validacao.EhValido);
        }
        public bool AlterarSituacao(Titulo titulo, int acao, bool gerouPdf = true)
        {
            Titulo tituloAux = _da.ObterSimplificado(titulo.Id);

            if (tituloAux == null)
            {
                return(false);
            }

            #region ValidarPermissao

            List <ePermissao> acaoPermissao = new List <ePermissao>();
            switch (titulo.Situacao.Id)
            {
                #region Cadastrado

            case 1:
                acaoPermissao.Add(ePermissao.TituloCriar);
                acaoPermissao.Add(ePermissao.TituloCancelarEmissao);
                break;

                #endregion

                #region Emitido para assinatura

            case 2:
                acaoPermissao.Add(ePermissao.TituloEmitir);
                break;

                #endregion

                #region Concluído

            case 3:
                acaoPermissao.Add(ePermissao.TituloEmitir);
                acaoPermissao.Add(ePermissao.TituloAssinar);
                break;

                #endregion

                #region Assinado

            case 4:
                acaoPermissao.Add(ePermissao.TituloAssinar);
                break;

                #endregion

                #region Cancelado

            case 5:
                acaoPermissao.Add(ePermissao.TituloEncerrar);
                acaoPermissao.Add(ePermissao.DocumentoEncerrarOficioPendencia);
                break;

                #endregion

                #region Suspenso

            case 11:
                acaoPermissao.Add(ePermissao.TituloEncerrar);
                acaoPermissao.Add(ePermissao.DocumentoEncerrarOficioPendencia);
                break;

                #endregion

                #region Prorrogado

            case 6:
                acaoPermissao.Add(ePermissao.TituloProrrogar);
                break;

                #endregion
            }

            if (!_permissaoValdiar.ValidarAny(acaoPermissao.ToArray()))
            {
                return(false);
            }

            #endregion

            //Validar Titulo
            if ((eAlterarSituacaoAcao)acao == eAlterarSituacaoAcao.EmitirParaAssinatura)
            {
                _validarTitulo.Titulo(titulo);

                if (EspecificiadadeBusFactory.Possui(titulo.Modelo.Codigo.Value))
                {
                    IEspecificidadeBus busEsp = EspecificiadadeBusFactory.Criar(titulo.Modelo.Codigo.Value);
                    titulo.Especificidade = busEsp.Obter(titulo.Id) as Especificidade;
                    titulo.Especificidade = titulo.ToEspecificidade();
                    busEsp.Validar.Emitir(titulo.Especificidade);
                }
            }
            else if (
                (eAlterarSituacaoAcao)acao == eAlterarSituacaoAcao.Assinar ||
                (eAlterarSituacaoAcao)acao == eAlterarSituacaoAcao.Entregar ||
                (eAlterarSituacaoAcao)acao == eAlterarSituacaoAcao.Prorrogar ||
                (eAlterarSituacaoAcao)acao == eAlterarSituacaoAcao.Concluir)
            {
                if (titulo.Atividades != null)
                {
                    foreach (var item in titulo.Atividades)
                    {
                        if (!item.Ativada)
                        {
                            Validacao.Add(Mensagem.AtividadeEspecificidade.AtividadeDesativada(item.NomeAtividade));
                        }
                    }
                }
            }

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

            switch (titulo.Situacao.Id)
            {
                #region Cadastrado

            case 1:
                if (tituloAux.Situacao.Id != 2)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Cadastrado", "Emitido para assinatura"));
                }
                break;

                #endregion

                #region Emitido para assinatura

            case 2:
                if (!gerouPdf)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.GerarPdfObrigatorio);
                }

                if (tituloAux.Situacao.Id != 1)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Emitido para assinatura", "Cadastrado"));
                }

                if (ValidarDatas(titulo.DataEmissao, "DataEmissao", "emissão"))
                {
                    if (!titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                    {
                        if (titulo.Numero.Ano != titulo.DataEmissao.Data.Value.Year)
                        {
                            Validacao.Add(Mensagem.TituloAlterarSituacao.NumeroAnoEmissaoAno);
                        }
                    }
                }

                if (titulo.Modelo.Regra(eRegra.Prazo) && titulo.Prazo.GetValueOrDefault() <= 0)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.PrazoObrigatorio);
                }

                if (titulo.Modelo.Regra(eRegra.Prazo) && (titulo.Prazo.GetValueOrDefault() + DateTime.Now.Year) > DateTime.MaxValue.Year)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.PrazoInvalido);
                }

                break;

                #endregion

                #region Concluído

            case 3:
                if (tituloAux.Situacao.Id == 1 && !gerouPdf)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.GerarPdfObrigatorio);
                }

                if (tituloAux.Situacao.Id != 1 && tituloAux.Situacao.Id != 2 && tituloAux.Situacao.Id != 4 && tituloAux.Situacao.Id != 11)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Concluído", "Cadastrado, Suspenso, Emitido para assinatura ou Assinado"));
                }

                if (tituloAux.Situacao.Id == 1 || tituloAux.Situacao.Id == 11)
                {
                    if (ValidarDatas(titulo.DataEmissao, "DataEmissao", "emissão"))
                    {
                        if (Validacao.EhValido && !titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                        {
                            if (titulo.Numero.Ano != titulo.DataEmissao.Data.Value.Year)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.NumeroAnoEmissaoAno);
                            }
                        }
                    }
                }

                if (titulo.Modelo.Regra(eRegra.Prazo) && titulo.Prazo.GetValueOrDefault() <= 0)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.PrazoObrigatorio);
                }

                if (titulo.Modelo.Regra(eRegra.Prazo) && (titulo.Prazo.GetValueOrDefault() + DateTime.Now.Year) > DateTime.MaxValue.Year)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.PrazoInvalido);
                }

                if (titulo.Modelo.Codigo == (int)eTituloModeloCodigo.AutorizacaoExploracaoFlorestal)
                {
                    var associados = _da.ObterAssociados(titulo.Id);
                    if (associados.Exists(x => x.DataVencimento.Data < titulo.DataEmissao.Data.Value.AddDays(titulo.Prazo.Value)))
                    {
                        Validacao.Add(Mensagem.TituloAlterarSituacao.PrazoSuperiorAoLaudo);
                    }
                }

                #region [ Cadastro Ambiental Rural ]
                if (LstCadastroAmbientalRuralTituloCodigo.Any(x => x == titulo.Modelo.Codigo))
                {
                    var busCARSolicitacao = new CARSolicitacaoBus();
                    if (!busCARSolicitacao.VerificarSeEmpreendimentoPossuiSolicitacaoValidaEEnviada(titulo.EmpreendimentoId.GetValueOrDefault()))
                    {
                        Validacao.Add(Mensagem.TituloAlterarSituacao.TituloNaoPossuiSolicitacaoDeInscricao);
                    }
                }
                #endregion

                break;

                #endregion

                #region Assinado

            case 4:
                if (tituloAux.Situacao.Id != 2)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Assinado", "Emitido para assinatura"));
                }

                if (ValidarDatas(titulo.DataAssinatura, "DataAssinatura", "assinatura"))
                {
                    if (titulo.DataAssinatura.Data < tituloAux.DataEmissao.Data)
                    {
                        Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataAssinatura", "assinatura", "emissão"));
                    }
                }
                break;

                #endregion

                #region Encerrado

            case 5:
                if (tituloAux.Situacao.Id != 3 && tituloAux.Situacao.Id != 6)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Encerrado", "Concluído ou Prorrogado"));
                }

                if (ValidarDatas(titulo.DataEncerramento, "DataEncerramento", "encerramento"))
                {
                    if (titulo.Modelo.Regra(eRegra.Prazo))
                    {
                        switch (Convert.ToInt32(titulo.Modelo.Resposta(eRegra.Prazo, eResposta.InicioPrazo).Valor))
                        {
                        case 1:
                            if (titulo.DataEncerramento.Data < tituloAux.DataEmissao.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "encerramento", "emissão"));
                            }
                            break;

                        case 2:
                            if (titulo.DataEncerramento.Data < tituloAux.DataAssinatura.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "encerramento", "assinatura"));
                            }
                            break;

                        case 3:
                            if (titulo.DataEncerramento.Data < tituloAux.DataEntrega.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "encerramento", "entrega"));
                            }
                            break;
                        }
                    }
                }

                if (titulo.MotivoEncerramentoId.GetValueOrDefault() <= 0)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.MotivoEncerramentoObrigatorio);
                }

                if (titulo.Modelo.Codigo == (int)eTituloModeloCodigo.LaudoVistoriaFlorestal)
                {
                    if (_da.ExistsTituloAssociadoNaoEncerrado(titulo.Id))
                    {
                        Validacao.Add(Mensagem.TituloAlterarSituacao.TituloPossuiAssociadoNaoEncerrado("encerrado"));
                    }
                }

                break;

                #endregion

                #region Suspenso

            case 11:
                if (tituloAux.Situacao.Id != 3 && tituloAux.Situacao.Id != 6)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Suspenso", "Concluído ou Prorrogado"));
                }

                if (ValidarDatas(titulo.DataEncerramento, "DataEncerramento", "suspensão"))
                {
                    if (titulo.Modelo.Regra(eRegra.Prazo))
                    {
                        switch (Convert.ToInt32(titulo.Modelo.Resposta(eRegra.Prazo, eResposta.InicioPrazo).Valor))
                        {
                        case 1:
                            if (titulo.DataEncerramento.Data < tituloAux.DataEmissao.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "suspensão", "emissão"));
                            }
                            break;

                        case 2:
                            if (titulo.DataEncerramento.Data < tituloAux.DataAssinatura.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "suspensão", "assinatura"));
                            }
                            break;

                        case 3:
                            if (titulo.DataEncerramento.Data < tituloAux.DataEntrega.Data)
                            {
                                Validacao.Add(Mensagem.TituloAlterarSituacao.DataDeveSerSuperior("DataEncerramento", "suspensão", "entrega"));
                            }
                            break;
                        }
                    }
                }

                if (titulo.Modelo.Codigo == (int)eTituloModeloCodigo.LaudoVistoriaFlorestal)
                {
                    if (_da.ExistsTituloAssociadoNaoEncerrado(titulo.Id))
                    {
                        Validacao.Add(Mensagem.TituloAlterarSituacao.TituloPossuiAssociadoNaoEncerrado("suspenso"));
                    }
                }

                break;

                #endregion

                #region Prorrogado

            case 6:
                if (tituloAux.Situacao.Id != 3 && tituloAux.Situacao.Id != 6)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.SituacaoInvalida("Prorrogado", "Concluído ou Prorrogado"));
                }

                if (titulo.DiasProrrogados.GetValueOrDefault() <= 0)
                {
                    Validacao.Add(Mensagem.TituloAlterarSituacao.DiasProrrogadosObrigatorio);
                }
                break;

                #endregion
            }

            AtivarCondicionantes(titulo);

            return(Validacao.EhValido);
        }