コード例 #1
0
        internal bool Salvar(LiberaracaoNumeroCFOCFOC liberacao)
        {
            ValidarCPF(liberacao.CPF);

            if (!(liberacao.LiberarBlocoCFO) && !(liberacao.LiberarBlocoCFOC) && !(liberacao.LiberarDigitalCFO) && !(liberacao.LiberarDigitalCFOC))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.MarqueUmTipoNumero);
                return(false);
            }

            if (liberacao.LiberarBlocoCFO)
            {
                ValidarBlocoCFO(liberacao);
            }

            if (liberacao.LiberarBlocoCFOC)
            {
                ValidarBlocoCFOC(liberacao);
            }

            if (liberacao.LiberarDigitalCFO)
            {
                ValidarNumeroDigitalCFO(liberacao);
            }

            if (liberacao.LiberarDigitalCFOC)
            {
                ValidarNumeroDigitalCFOC(liberacao);
            }

            return(Validacao.EhValido);
        }
コード例 #2
0
        public ActionResult SalvarLiberacao(LiberaracaoNumeroCFOCFOC liberacao)
        {
            _bus.Salvar(liberacao);

            string url = Url.Action("Index", "LiberacaoCFOCFOC") + "?Msg=" + Validacao.QueryParam() + "&acaoId=" + liberacao.Id;

            return(Json(new { @Msg = Validacao.Erros, @EhValido = Validacao.EhValido, @Url = url }));
        }
コード例 #3
0
 public void Salvar(LiberaracaoNumeroCFOCFOC liberacao, BancoDeDados banco = null)
 {
     if (liberacao.Id > 0)
     {
     }
     else
     {
         Criar(liberacao, banco);
     }
 }
コード例 #4
0
        private void ValidarBlocoCFO(LiberaracaoNumeroCFOCFOC liberacao)
        {
            if (liberacao.NumeroInicialCFO <= 0)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroInicialCFOObrigatorio);
            }
            else if (liberacao.NumeroInicialCFO.ToString().Length != 10)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.InicialQuantidadeInvalida(eDocumentoFitossanitarioTipo.CFO.ToString()));
            }

            if (liberacao.NumeroFinalCFO <= 0)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroFinalCFOObrigatorio);
            }
            else if (liberacao.NumeroFinalCFO.ToString().Length != 10)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.FinalQuantidadeInvalida(eDocumentoFitossanitarioTipo.CFO.ToString()));
            }

            if (liberacao.NumeroFinalCFO < liberacao.NumeroInicialCFO)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroFinalNaoPodeSerMaiorInicialCFO);
            }

            if (!Validacao.EhValido)
            {
                return;
            }

            if (_da.BlocoPossuiNumeroCFONaoConfigurado(liberacao.NumeroInicialCFO, liberacao.NumeroFinalCFO))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.IntervaloCFONaoConfigurado);
                return;
            }

            if (!_da.VerificarNumeroCFOJaAtribuido(liberacao.NumeroInicialCFO, liberacao.NumeroFinalCFO))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.IntervaloCFOJaExiste);
                return;
            }

            if (((liberacao.NumeroFinalCFO - liberacao.NumeroInicialCFO) + 1) < 25)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeCFODeveSerIgual25);
                return;
            }

            if (!_da.ValidarBlocoQuantidadeCadastradaCFO(liberacao))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeCFOCadastradaNaoPodeUltrapassar25);
            }
        }
コード例 #5
0
        internal bool ValidarBlocoQuantidadeCadastradaCFOC(LiberaracaoNumeroCFOCFOC liberacao)
        {
            using (BancoDeDados banco = BancoDeDados.ObterInstancia())
            {
                Comando comando = banco.CriarComando(@"select count(*) from tab_numero_cfo_cfoc n, tab_liberacao_cfo_cfoc l, tab_credenciado c where l.id = n.liberacao and 
				c.id = l.responsavel_tecnico and n.tipo_documento = 2 and n.tipo_numero = 1 and n.situacao = 1 and n.utilizado = 0 and c.id = :credenciado_id"                );

                comando.AdicionarParametroEntrada("credenciado_id", liberacao.CredenciadoId, DbType.Int32);

                return((banco.ExecutarScalar <int>(comando) + ((liberacao.NumeroFinalCFOC - liberacao.NumeroInicialCFOC)) + 1) <= 25);
            }
        }
コード例 #6
0
        public void Salvar(LiberaracaoNumeroCFOCFOC liberacao)
        {
            try
            {
                if (!_validar.Salvar(liberacao))
                {
                    return;
                }

                #region Configurando Objeto

                if (liberacao.LiberarBlocoCFO)
                {
                    liberacao.SituacaoBlocoCFO = 1;
                }

                if (liberacao.LiberarBlocoCFOC)
                {
                    liberacao.SituacaoBlocoCFOC = 1;
                }

                if (liberacao.LiberarDigitalCFO)
                {
                    liberacao.SituacaoNumeroDigitalCFO = 1;
                }

                if (liberacao.LiberarDigitalCFOC)
                {
                    liberacao.SituacaoNumeroDigitalCFOC = 1;
                }

                #endregion

                GerenciadorTransacao.ObterIDAtual();

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

                    _da.Salvar(liberacao, banco);

                    Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.SalvoSucesso);

                    banco.Commit();
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
コード例 #7
0
        internal bool VerificarQuantidadeMaximaNumDigitalCadastradoCFOC(LiberaracaoNumeroCFOCFOC liberacao)
        {
            using (BancoDeDados banco = BancoDeDados.ObterInstancia())
            {
                Comando comando = banco.CriarComando(@"select count(t.id) from tab_numero_cfo_cfoc t, tab_liberacao_cfo_cfoc l, tab_credenciado c where l.id = t.liberacao and c.id = l.responsavel_tecnico
				and t.tipo_documento = 2 and t.tipo_numero = 2 and t.situacao = 1 and t.utilizado = 0 and c.id = :credenciado_id"                );

                comando.AdicionarParametroEntrada("credenciado_id", liberacao.CredenciadoId, DbType.Int32);

                int qtdCadastrada = banco.ExecutarScalar <int>(comando);

                return((qtdCadastrada + liberacao.QuantidadeDigitalCFOC) <= 50);
            }
        }
コード例 #8
0
        private void ValidarNumeroDigitalCFOC(LiberaracaoNumeroCFOCFOC liberacao)
        {
            if (liberacao.QuantidadeDigitalCFOC <= 0)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeNumeroDigitalCFOCNaoPodeSerMenorIgualZero);
            }

            if (_da.DigitalPossuiNumeroCFOCNaoConfigurado(liberacao.QuantidadeDigitalCFOC))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeNumerosDigitaisCFOCNaoPodeExcederAConfiguradaNoSistema);
            }

            if (!_da.VerificarQuantidadeMaximaNumDigitalCadastradoCFOC(liberacao))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeMaximaNumeroDigitalCFOCCadastradosUltrapassa50);
            }
        }
コード例 #9
0
        public void VerificarDUA(string numero, string cpfCnpj, LiberaracaoNumeroCFOCFOC liberacao = null)
        {
            try
            {
                var wSDUA = new WSDUA();
                var dua   = wSDUA.ObterDUA(numero, cpfCnpj);
                cpfCnpj = cpfCnpj.Replace(".", "").Replace("-", "").Replace("/", "");

                if (Validacao.EhValido)
                {
                    _validar.ValidarDadosWebServiceDuaCFO(dua, numero, cpfCnpj, liberacao);
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }
コード例 #10
0
        internal bool Salvar(LiberaracaoNumeroCFOCFOC liberacao)
        {
            ValidarCPF(liberacao.CPF);

            if (!(liberacao.LiberarBlocoCFO) && !(liberacao.LiberarBlocoCFOC) && !(liberacao.LiberarDigitalCFO) && !(liberacao.LiberarDigitalCFOC))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.MarqueUmTipoNumero);
                return(false);
            }

            try
            {
                var wSDUA = new WSDUA();
                var dua   = wSDUA.ObterDUA(liberacao.NumeroDua, liberacao.CPF);

                ValidarDadosWebServiceDuaCFO(dua, liberacao.NumeroDua, liberacao.CPF, liberacao);
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            if (liberacao.LiberarBlocoCFO)
            {
                ValidarBlocoCFO(liberacao);
            }

            if (liberacao.LiberarBlocoCFOC)
            {
                ValidarBlocoCFOC(liberacao);
            }

            if (liberacao.LiberarDigitalCFO)
            {
                ValidarNumeroDigitalCFO(liberacao);
            }

            if (liberacao.LiberarDigitalCFOC)
            {
                ValidarNumeroDigitalCFOC(liberacao);
            }

            return(Validacao.EhValido);
        }
コード例 #11
0
        public LiberarNumeroCFOCFOCVM()
        {
            Liberacao = new LiberaracaoNumeroCFOCFOC();

            List <Lista> valores = new List <Lista>();

            valores.Add(new Lista()
            {
                Id = "0", Texto = "0"
            });
            valores.Add(new Lista()
            {
                Id = "25", Texto = "25"
            });
            valores.Add(new Lista()
            {
                Id = "50", Texto = "50"
            });

            LstQuantidadeNumeroDigitalCFO  = ViewModelHelper.CriarSelectList(valores);
            LstQuantidadeNumeroDigitalCFOC = ViewModelHelper.CriarSelectList(valores);
        }
コード例 #12
0
        internal LiberaracaoNumeroCFOCFOC Obter(int id, BancoDeDados banco = null)
        {
            LiberaracaoNumeroCFOCFOC retorno = new LiberaracaoNumeroCFOCFOC();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"select l.id, l.tid, l.responsavel_tecnico, p.nome, p.cpf, l.liberar_bloco_cfo, l.numero_inicial_cfo, l.numero_final_cfo,
				l.liberar_bloco_cfoc, l.numero_inicial_cfoc, l.numero_final_cfoc, l.liberar_num_digital_cfo, l.qtd_num_cfo,
				 l.liberar_num_digital_cfoc, l.qtd_num_cfoc from tab_liberacao_cfo_cfoc l, tab_credenciado c, 
				{1}tab_pessoa p where l.responsavel_tecnico = c.id and c.pessoa = p.id and l.id = :id"                , UsuarioInterno, UsuarioCredenciado);

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

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        retorno.Id = id;
                        retorno.LiberarBlocoCFO       = reader.GetValue <bool>("liberar_bloco_cfo");
                        retorno.NumeroInicialCFO      = reader.GetValue <long>("numero_inicial_cfo");
                        retorno.NumeroFinalCFO        = reader.GetValue <long>("numero_final_cfo");
                        retorno.LiberarBlocoCFOC      = reader.GetValue <bool>("liberar_bloco_cfoc");
                        retorno.NumeroInicialCFOC     = reader.GetValue <long>("numero_inicial_cfoc");
                        retorno.NumeroFinalCFOC       = reader.GetValue <long>("numero_final_cfoc");
                        retorno.LiberarDigitalCFO     = reader.GetValue <bool>("liberar_num_digital_cfo");
                        retorno.QuantidadeDigitalCFO  = reader.GetValue <int>("qtd_num_cfo");
                        retorno.LiberarDigitalCFOC    = reader.GetValue <bool>("liberar_num_digital_cfo");
                        retorno.QuantidadeDigitalCFOC = reader.GetValue <int>("qtd_num_cfoc");
                        retorno.Nome = reader.GetValue <string>("nome");
                        retorno.CPF  = reader.GetValue <string>("cpf");
                    }

                    reader.Close();
                }
            }
            return(retorno);
        }
コード例 #13
0
        internal bool ValidarDadosWebServiceDuaCFO(DUA dua, string numero, string cpfCnpj, LiberaracaoNumeroCFOCFOC liberacao = null)
        {
            if (dua == null)
            {
                Validacao.Add(Mensagem.PTV.DuaNaoEncontrado);
                return(Validacao.EhValido);
            }

            if (dua.PagamentoCodigo != "2" /*Pago e Consolidado*/ && dua.PagamentoCodigo != "1" /*Pago e não Consolidado*/)
            {
                Validacao.Add(Mensagem.PTV.DuaInvalido(numero));
            }

            if (dua.CodigoServicoRef != "21213")
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.CodigoDuaInvalido);
            }

            if (liberacao != null)
            {
                int quantidadeDuaEmitido = _da.ObterQuantidadeDuaEmitidos(numero, cpfCnpj);

                float ValorUnitario = _da.ObterValorUnitarioDua(dua.ReferenciaData);

                int totalPagos = (int)(Math.Round(dua.ValorTotal, 2) / Math.Round(ValorUnitario, 2));

                long totalCfo  = liberacao.NumeroFinalCFO - liberacao.NumeroInicialCFO;
                long totalCfoc = liberacao.NumeroFinalCFOC - liberacao.NumeroInicialCFOC;

                totalCfo += liberacao.QuantidadeDigitalCFO + liberacao.QuantidadeDigitalCFOC;

                if ((totalPagos * 25) < (quantidadeDuaEmitido + totalCfo + totalCfoc))
                {
                    Validacao.Add(Mensagem.PTV.DuaSemSaldo(numero));
                }
            }

            return(Validacao.EhValido);
        }
コード例 #14
0
        private void ValidarBlocoCFOC(LiberaracaoNumeroCFOCFOC liberacao)
        {
            if (liberacao.NumeroInicialCFOC <= 0)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroInicialCFOCObrigatorio);
            }
            else if (liberacao.NumeroInicialCFOC.ToString().Length != 8)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.InicialQuantidadeInvalida(eDocumentoFitossanitarioTipo.CFOC.ToString()));
            }

            if (liberacao.NumeroInicialCFOC.ToString().Substring(2, 2) != DateTime.Now.Year.ToString().Substring(2))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.AnoCFOCInvalido);
            }

            if (liberacao.NumeroFinalCFOC <= 0)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroInicialCFOCObrigatorio);
            }
            else if (liberacao.NumeroFinalCFOC.ToString().Length != 8)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.FinalQuantidadeInvalida(eDocumentoFitossanitarioTipo.CFOC.ToString()));
            }

            if (liberacao.NumeroFinalCFOC.ToString().Substring(2, 2) != DateTime.Now.Year.ToString().Substring(2))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.AnoCFOCInvalido);
            }

            if (liberacao.NumeroFinalCFOC < liberacao.NumeroInicialCFOC)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.NumeroFinalNaoPodeSerMaiorInicialCFOC);
            }

            if (!Validacao.EhValido)
            {
                return;
            }

            if (_da.BlocoPossuiNumeroCFOCNaoConfigurado(liberacao.NumeroInicialCFOC, liberacao.NumeroFinalCFOC))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.IntervaloCFOCNaoConfigurado);
                return;
            }

            if (!_da.VerificarNumeroCFOCJaAtribuido(liberacao.NumeroInicialCFO, liberacao.NumeroFinalCFO))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.IntervaloCFOCJaExiste);
                return;
            }

            if (((liberacao.NumeroFinalCFOC - liberacao.NumeroInicialCFOC) + 1) < 25)
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeCFOCDeveSerIgual25);
                return;
            }

            if (!_da.ValidarBlocoQuantidadeCadastradaCFOC(liberacao))
            {
                Validacao.Add(Mensagem.LiberacaoNumeroCFOCFOC.QuantidadeCFOCCadastradaNaoPodeUltrapassar25);
            }
        }
コード例 #15
0
        private void Criar(LiberaracaoNumeroCFOCFOC liberacao, BancoDeDados banco = null)
        {
            IDataReader reader = null;

            try
            {
                using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                {
                    Comando comando = bancoDeDados.CriarComando(@"
					insert into tab_liberacao_cfo_cfoc (id, tid, responsavel_tecnico, liberar_bloco_cfo, numero_inicial_cfo, numero_final_cfo, 
					liberar_bloco_cfoc, numero_inicial_cfoc, numero_final_cfoc, liberar_num_digital_cfo, qtd_num_cfo, liberar_num_digital_cfoc, qtd_num_cfoc)
					values (seq_tab_liberacao_cfo_cfoc.nextval, :tid, :responsavel_tecnico, :liberar_bloco_cfo, :numero_inicial_cfo, :numero_final_cfo, 
					:liberar_bloco_cfoc, :numero_inicial_cfoc, :numero_final_cfoc, :liberar_num_digital_cfo, :qtd_num_cfo, :liberar_num_digital_cfoc, 
					:qtd_num_cfoc) returning id into :liberacao_id"                    , EsquemaBanco);

                    comando.AdicionarParametroEntrada("responsavel_tecnico", liberacao.CredenciadoId, DbType.Int32);
                    comando.AdicionarParametroEntrada("liberar_bloco_cfo", liberacao.LiberarBlocoCFO, DbType.Int32);
                    comando.AdicionarParametroEntrada("numero_inicial_cfo", liberacao.NumeroInicialCFO > 0 ? liberacao.NumeroInicialCFO : (object)DBNull.Value, DbType.Int64);
                    comando.AdicionarParametroEntrada("numero_final_cfo", liberacao.NumeroFinalCFO > 0 ? liberacao.NumeroFinalCFO : (object)DBNull.Value, DbType.Int64);
                    comando.AdicionarParametroEntrada("liberar_bloco_cfoc", liberacao.LiberarBlocoCFOC, DbType.Int32);
                    comando.AdicionarParametroEntrada("numero_inicial_cfoc", liberacao.NumeroInicialCFOC > 0 ? liberacao.NumeroInicialCFOC : (object)DBNull.Value, DbType.Int64);
                    comando.AdicionarParametroEntrada("numero_final_cfoc", liberacao.NumeroFinalCFOC > 0 ? liberacao.NumeroFinalCFOC : (object)DBNull.Value, DbType.Int64);
                    comando.AdicionarParametroEntrada("liberar_num_digital_cfo", liberacao.LiberarDigitalCFO, DbType.Int32);
                    comando.AdicionarParametroEntrada("qtd_num_cfo", liberacao.QuantidadeDigitalCFO, DbType.Int32);
                    comando.AdicionarParametroEntrada("liberar_num_digital_cfoc", liberacao.LiberarDigitalCFOC, DbType.Int32);
                    comando.AdicionarParametroEntrada("qtd_num_cfoc", liberacao.QuantidadeDigitalCFOC, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                    comando.AdicionarParametroSaida("liberacao_id", DbType.Int32);

                    bancoDeDados.ExecutarNonQuery(comando);

                    liberacao.Id = comando.ObterValorParametro <int>("liberacao_id");

                    //Alocar a tabela
                    comando = bancoDeDados.CriarComando(@"select * from {0}tab_numero_cfo_cfoc for update", EsquemaBanco);
                    reader  = bancoDeDados.ExecutarReader(comando);

                    #region CFO

                    if (liberacao.NumeroInicialCFO > 0)
                    {
                        comando = bancoDeDados.CriarComando(@"insert into {0}tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid)
													values (seq_tab_numero_cfo_cfoc.nextval, :numero, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid)"                                                    , EsquemaBanco);

                        comando.AdicionarParametroEntrada("liberacao", liberacao.Id, DbType.Int32);
                        comando.AdicionarParametroEntrada("tipo_documento", eCFOCFOCTipo.CFO, DbType.Int32);
                        comando.AdicionarParametroEntrada("tipo_numero", eCFOCFOCTipoNumero.Bloco, DbType.Int32);
                        comando.AdicionarParametroEntrada("tid", GerenciadorTransacao.ObterIDAtual(), DbType.String);
                        comando.AdicionarParametroEntrada("numero", DbType.Int64);

                        for (var i = liberacao.NumeroInicialCFO; i <= liberacao.NumeroFinalCFO; i++)
                        {
                            comando.SetarValorParametro("numero", i);

                            bancoDeDados.ExecutarNonQuery(comando);
                        }
                    }

                    comando = bancoDeDados.CriarComandoPlSql(@"
					declare
						v_aux            number := 0;
						v_maior          number := 0;
						v_quantidade_lib number := :quantidade_lib;
					begin
						select nvl((select max(d.numero) from tab_numero_cfo_cfoc d where d.tipo_documento = :tipo_documento and d.tipo_numero = :tipo_numero),
							(select min(c.numero_inicial) - 1 from cnf_doc_fito_intervalo c where c.tipo_documento = :tipo_documento and c.tipo = :tipo_numero))
						into v_maior from dual;

						for j in 1..v_quantidade_lib loop 
							v_maior := v_maior + 1;

							select count(1) into v_aux from cnf_doc_fito_intervalo c where c.tipo_documento = :tipo_documento 
							and c.tipo = :tipo_numero and (v_maior between c.numero_inicial and c.numero_final);

							if (v_aux > 0) then
								insert into tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid) 
								values (seq_tab_numero_cfo_cfoc.nextval, v_maior, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid);
							else 
								v_aux := v_maior;

								select min(t.numero_inicial) into v_maior from cnf_doc_fito_intervalo t 
								where t.tipo_documento = :tipo_documento and t.tipo = :tipo_numero and t.numero_inicial > v_maior;

								if(v_maior is null or v_aux = v_maior) then 
									--Tratamento de exceção
									Raise_application_error(-20023, 'Número não configurado');
								else 
									insert into tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid) 
									values (seq_tab_numero_cfo_cfoc.nextval, v_maior, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid);
								end if;
							end if;
						end loop;
					end;"                    , EsquemaBanco);

                    comando.AdicionarParametroEntrada("quantidade_lib", liberacao.QuantidadeDigitalCFO, DbType.Int32);
                    comando.AdicionarParametroEntrada("liberacao", liberacao.Id, DbType.Int32);
                    comando.AdicionarParametroEntrada("tipo_documento", eCFOCFOCTipo.CFO, DbType.Int32);
                    comando.AdicionarParametroEntrada("tipo_numero", eCFOCFOCTipoNumero.Digital, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", GerenciadorTransacao.ObterIDAtual(), DbType.String);

                    bancoDeDados.ExecutarNonQuery(comando);

                    #endregion

                    #region CFOC

                    if (liberacao.NumeroInicialCFOC > 0)
                    {
                        comando = bancoDeDados.CriarComando(@"insert into {0}tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid) 
													values (seq_tab_numero_cfo_cfoc.nextval, :numero, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid)"                                                    , EsquemaBanco);

                        comando.AdicionarParametroEntrada("liberacao", liberacao.Id, DbType.Int32);
                        comando.AdicionarParametroEntrada("tipo_documento", eCFOCFOCTipo.CFOC, DbType.Int32);
                        comando.AdicionarParametroEntrada("tipo_numero", eCFOCFOCTipoNumero.Bloco, DbType.Int32);
                        comando.AdicionarParametroEntrada("tid", GerenciadorTransacao.ObterIDAtual(), DbType.String);
                        comando.AdicionarParametroEntrada("numero", DbType.Int64);

                        for (var i = liberacao.NumeroInicialCFOC; i <= liberacao.NumeroFinalCFOC; i++)
                        {
                            comando.SetarValorParametro("numero", i);

                            bancoDeDados.ExecutarNonQuery(comando);
                        }
                    }

                    comando = bancoDeDados.CriarComandoPlSql(@"
					declare
						v_aux            number := 0;
						v_maior          number := 0;
						v_quantidade_lib number := :quantidade_lib;
					begin
						select nvl((select max(d.numero) from tab_numero_cfo_cfoc d where d.tipo_documento = :tipo_documento and d.tipo_numero = :tipo_numero),
							(select min(c.numero_inicial) - 1 from cnf_doc_fito_intervalo c where c.tipo_documento = :tipo_documento and c.tipo = :tipo_numero))
						into v_maior from dual;

						for j in 1..v_quantidade_lib loop 
							v_maior := v_maior + 1;

							select count(1) into v_aux from cnf_doc_fito_intervalo c where c.tipo_documento = :tipo_documento 
							and c.tipo = :tipo_numero and (v_maior between c.numero_inicial and c.numero_final);

							if (v_aux > 0) then
								insert into tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid) 
								values (seq_tab_numero_cfo_cfoc.nextval, v_maior, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid);
							else 
								v_aux := v_maior;

								select min(t.numero_inicial) into v_maior from cnf_doc_fito_intervalo t 
								where t.tipo_documento = :tipo_documento and t.tipo = :tipo_numero and t.numero_inicial > v_maior;

								if(v_maior is null or v_aux = v_maior) then 
									--Tratamento de exceção
									Raise_application_error(-20023, 'Número não configurado');
								else 
									insert into tab_numero_cfo_cfoc (id, numero, tipo_documento, tipo_numero, liberacao, situacao, utilizado, tid) 
									values (seq_tab_numero_cfo_cfoc.nextval, v_maior, :tipo_documento, :tipo_numero, :liberacao, 1, 0, :tid);
								end if;
							end if;
						end loop;
					end;"                    , EsquemaBanco);

                    comando.AdicionarParametroEntrada("quantidade_lib", liberacao.QuantidadeDigitalCFOC, DbType.Int32);
                    comando.AdicionarParametroEntrada("liberacao", liberacao.Id, DbType.Int32);
                    comando.AdicionarParametroEntrada("tipo_documento", eCFOCFOCTipo.CFOC, DbType.Int32);
                    comando.AdicionarParametroEntrada("tipo_numero", eCFOCFOCTipoNumero.Digital, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", GerenciadorTransacao.ObterIDAtual(), DbType.String);

                    bancoDeDados.ExecutarNonQuery(comando);

                    #endregion

                    Historico.Gerar(liberacao.Id, eHistoricoArtefato.liberacaocfocfoc, eHistoricoAcao.criar, bancoDeDados);

                    bancoDeDados.Commit();
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                    reader.Dispose();
                }
            }
        }