public bool Salvar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null)
        {
            try
            {
                if (_validarDUA.Salvar(cobrancaDUA))
                {
                    if (!string.IsNullOrWhiteSpace(cobrancaDUA.NumeroDUA) && cobrancaDUA.NumeroDUA != "0")
                    {
                        var idDua = _daDUA.GetIdDUAByNumero(cobrancaDUA.NumeroDUA, cobrancaDUA.Id);
                        if (idDua > 0)
                        {
                            var dua = _daDUA.ObterDUA(idDua, banco);
                            Validacao.Add(Mensagem.CobrancaMsg.DuaDuplicado(dua.NumeroDUA, dua.Parcela, _da.GetIdFiscalizacaoByParcelamento(dua.ParcelamentoId, banco)));
                            return(Validacao.EhValido);
                        }
                    }

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
                    {
                        bancoDeDados.IniciarTransacao();
                        _daDUA.Salvar(cobrancaDUA, bancoDeDados);
                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(Validacao.EhValido);
        }
        public List <CobrancaDUA> GerarParcelas(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            var list = new List <CobrancaDUA>();

            if (!_validar.Calcular(cobranca, parcelamento))
            {
                return(list);
            }

            var parametrizacao  = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);
            var parcelaAnterior = new CobrancaDUA();

            if (parametrizacao != null)
            {
                for (int i = 1; i <= parcelamento.QuantidadeParcelas; i++)
                {
                    var parcela = new CobrancaDUA()
                    {
                        DataEmissao    = parcelamento.DataEmissao,
                        Parcela        = string.Concat(i, '/', parcelamento.QuantidadeParcelas),
                        ParcelamentoId = parcelamento.Id
                    };

                    if (i == 1)
                    {
                        parcela.DataVencimento = new DateTecno()
                        {
                            Data = parcelamento.Data1Vencimento.Data
                        }
                    }
                    ;
                    else if (parcelaAnterior.DataVencimento.IsValido)
                    {
                        var dataVencimento = parcelaAnterior.DataVencimento.Data.Value.AddMonths(1);
                        if (dataVencimento.DayOfWeek == DayOfWeek.Saturday)
                        {
                            dataVencimento.AddDays(2);
                        }
                        else if (dataVencimento.DayOfWeek == DayOfWeek.Monday)
                        {
                            dataVencimento.AddDays(1);
                        }

                        parcela.DataVencimento = new DateTecno()
                        {
                            Data = dataVencimento
                        };
                    }
                    parcela.Situacao = "Em Aberto";

                    parcelaAnterior = parcela;
                    list.Add(parcela);
                }
            }

            return(list);
        }
        public bool Salvar(CobrancaDUA cobrancaDUA)
        {
            if (cobrancaDUA.VRTE == 0)
            {
                Validacao.Add(Mensagem.CobrancaDUAMsg.VrteObrigatorio);
            }

            return(Validacao.EhValido);
        }
Exemple #4
0
        public CobrancaDUA Editar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"
                                    update {0}tab_fisc_cob_dua t
                                    set 
										t.vencimento_data = :vencimento_data,
										t.dataemissao = :dataemissao,
										t.parcela = :parcela,
										t.numero_dua = :numero_dua,
										t.valor_dua = :valor_dua,
										t.valor_pago = :valor_pago,
										t.vrte = :vrte,
										t.pagamento_data = :pagamento_data,
										t.complemento = :complemento,
										t.pai_dua = :pai_dua,
										t.cob_parc = :cob_parc,
										t.cancelamento_data = :cancelamento_data,
                                        t.tid = :tid
                                    where t.id = :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("id", cobrancaDUA.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("vencimento_data", cobrancaDUA.DataVencimento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("dataemissao", cobrancaDUA.DataEmissao.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("parcela", cobrancaDUA.Parcela, DbType.String);
                comando.AdicionarParametroEntrada("numero_dua", cobrancaDUA.NumeroDUA, DbType.String);
                comando.AdicionarParametroEntrada("valor_dua", cobrancaDUA.ValorDUA, DbType.Decimal);
                comando.AdicionarParametroEntrada("valor_pago", cobrancaDUA.ValorPago, DbType.Decimal);
                comando.AdicionarParametroEntrada("vrte", cobrancaDUA.VRTE, DbType.Decimal);
                comando.AdicionarParametroEntrada("pagamento_data", cobrancaDUA.DataPagamento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("complemento", cobrancaDUA.InformacoesComplementares, DbType.String);
                comando.AdicionarParametroEntrada("pai_dua", cobrancaDUA.ParcelaPaiId, DbType.Int32);
                comando.AdicionarParametroEntrada("cob_parc", cobrancaDUA.ParcelamentoId, DbType.Int32);
                comando.AdicionarParametroEntrada("cancelamento_data", cobrancaDUA.DataCancelamento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());

                bancoDeDados.ExecutarNonQuery(comando);

                Historico.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados);

                //Consulta.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(cobrancaDUA);
        }
Exemple #5
0
        public CobrancaDUA Salvar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null)
        {
            if (cobrancaDUA == null)
            {
                throw new Exception("Cobranca é nulo.");
            }

            if (cobrancaDUA.ParcelaPaiId == 0)
            {
                cobrancaDUA.ParcelaPaiId = null;
            }

            if (cobrancaDUA.Id <= 0)
            {
                cobrancaDUA = Criar(cobrancaDUA, banco);
            }
            else
            {
                cobrancaDUA = Editar(cobrancaDUA, banco);
            }

            return(cobrancaDUA);
        }
        public bool CalcularParcelas(Cobranca cobranca, CobrancaParcelamento parcelamento)
        {
            var retorno = false;

            if (!_validar.Calcular(cobranca, parcelamento))
            {
                return(retorno);
            }

            var vrte            = _busConfiguracao.ObterVrte(cobranca.DataIUF.Data.Value.Year) ?? new Vrte();
            var parametrizacao  = _busConfiguracao.ObterParametrizacao(cobranca.CodigoReceitaId, cobranca.DataEmissaoIUF.Data.Value);
            var vrte1Vencimento = _busConfiguracao.ObterVrte(parcelamento.Data1Vencimento.Data.Value.Year) ?? new Vrte();

            if (!_validar.CalcularParametrizacao(parametrizacao, vrte, vrte1Vencimento))
            {
                return(retorno);
            }

            var valorMultaAtualizadoEmReais = GetValorTotalAtualizadoEmReais(cobranca, parcelamento, parametrizacao);

            parcelamento.ValorMultaAtualizado = (valorMultaAtualizadoEmReais / vrte.VrteEmReais) * vrte1Vencimento.VrteEmReais;
            var valorAtualizadoVRTE = parcelamento.ValorMultaAtualizado / vrte1Vencimento.VrteEmReais;

            if ((parcelamento.DUAS?.Count ?? 0) == 0)
            {
                if (parcelamento.QuantidadeParcelas == 0)
                {
                    parcelamento.QuantidadeParcelas = this.GetMaximoParcelas(cobranca, parcelamento);
                }
                parcelamento.DUAS = this.GerarParcelas(cobranca, parcelamento);
            }
            var parcelas = parcelamento.DUAS.OrderBy(x => Convert.ToInt32(x.Parcela.Split('/')[0])).ToList();

            if (parcelas.Count == 1 && cobranca.Parcelamentos?.Count <= 1)
            {
                var parcela = parcelas[0];
                if (parcela.ValorDUA == 0)
                {
                    var prazoDesconto = parametrizacao.PrazoDescontoUnidade * GetPrazoDesconto(parametrizacao.PrazoDescontoDecorrencia);
                    var vrteParcela   = _busConfiguracao.ObterVrte(parcela.DataVencimento.Data.Value.Year);

                    if (parcela.DataVencimento.Data < cobranca.DataIUF.Data.Value.AddDays(prazoDesconto + 1).Date)
                    {
                        parcelamento.ValorMultaAtualizado = parcelamento.ValorMulta;
                        valorAtualizadoVRTE = parcelamento.ValorMulta / vrte.VrteEmReais;
                        parcela.VRTE        = valorAtualizadoVRTE * (1 - (Convert.ToDecimal(parametrizacao.DescontoPercentual) / 100));
                        if (vrteParcela.Id > 0)
                        {
                            parcela.ValorDUA = Math.Round(parcela.VRTE * vrteParcela.VrteEmReais, 2);
                            parcelamento.ValorMultaAtualizado = parcela.ValorDUA;
                        }
                    }
                    else
                    {
                        parcela.VRTE = valorAtualizadoVRTE;
                        if (vrteParcela.Id > 0)
                        {
                            parcela.ValorDUA = Math.Round(valorAtualizadoVRTE * vrteParcela.VrteEmReais, 2);
                        }
                    }
                }

                retorno = true;
            }
            else
            {
                var parcelaAnterior = new CobrancaDUA();
                var valorJuros      = 1 + (Convert.ToDecimal(parametrizacao.JurosPercentual) / 100);

                foreach (var parcela in parcelas)
                {
                    if (parcela.ValorDUA == 0)
                    {
                        if (parcela.VRTE == 0)
                        {
                            if ((parcela.Parcela.Split('/')[0]).Equals("1"))
                            {
                                parcela.VRTE = Math.Round(valorAtualizadoVRTE / parcelamento.QuantidadeParcelas, 4);
                            }
                            else
                            {
                                parcela.VRTE = Math.Round(parcelaAnterior.VRTE * valorJuros, 4);
                            }
                        }

                        if (parcela.DataVencimento.IsValido)
                        {
                            var vrteParcela = _busConfiguracao.ObterVrte(parcela.DataVencimento.Data.Value.Year);
                            if (vrteParcela.Id > 0)
                            {
                                parcela.ValorDUA = Math.Round(parcela.VRTE * vrteParcela.VrteEmReais, 2);
                            }
                        }
                    }
                    parcelaAnterior = parcela;
                    retorno         = true;
                }
            }

            return(retorno);
        }
Exemple #7
0
        public CobrancaDUA Criar(CobrancaDUA cobrancaDUA, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@"
                                    insert into {0}tab_fisc_cob_dua (id,
																vencimento_data,
																dataemissao,
																parcela,				  
																numero_dua,
																valor_dua, 
																valor_pago,
																vrte,
																pagamento_data, 
																complemento,
																pai_dua, 
																cob_parc,
																cancelamento_data,
                                                                tid)
                                    values ({0}seq_fisc_cob_dua.nextval,
											:vencimento_data,
											:dataemissao,
											:parcela,				  
											:numero_dua,
											:valor_dua, 
											:valor_pago,
											:vrte,
											:pagamento_data, 
											:complemento,
											:pai_dua, 
											:cob_parc,
											:cancelamento_data,
                                            :tid)
                                    returning id into :id", EsquemaBanco);

                comando.AdicionarParametroEntrada("vencimento_data", cobrancaDUA.DataVencimento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("dataemissao", cobrancaDUA.DataEmissao.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("parcela", cobrancaDUA.Parcela, DbType.String);
                comando.AdicionarParametroEntrada("numero_dua", cobrancaDUA.NumeroDUA, DbType.String);
                comando.AdicionarParametroEntrada("valor_dua", cobrancaDUA.ValorDUA, DbType.Decimal);
                comando.AdicionarParametroEntrada("valor_pago", cobrancaDUA.ValorPago, DbType.Decimal);
                comando.AdicionarParametroEntrada("vrte", cobrancaDUA.VRTE, DbType.Decimal);
                comando.AdicionarParametroEntrada("pagamento_data", cobrancaDUA.DataPagamento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("complemento", cobrancaDUA.InformacoesComplementares, DbType.String);
                comando.AdicionarParametroEntrada("pai_dua", cobrancaDUA.ParcelaPaiId, DbType.Int32);
                comando.AdicionarParametroEntrada("cob_parc", cobrancaDUA.ParcelamentoId, DbType.Int32);
                comando.AdicionarParametroEntrada("cancelamento_data", cobrancaDUA.DataCancelamento.Data, DbType.DateTime);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroSaida("id", DbType.Int32);

                bancoDeDados.ExecutarNonQuery(comando);

                cobrancaDUA.Id = Convert.ToInt32(comando.ObterValorParametro("id"));

                Historico.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, eHistoricoAcao.atualizar, bancoDeDados);

                //Consulta.Gerar(cobrancaDUA.Id, eHistoricoArtefato.cobranca, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(cobrancaDUA);
        }
Exemple #8
0
        public List <CobrancaDUA> Obter(int parcelamentoId, BancoDeDados banco = null)
        {
            var lista = new List <CobrancaDUA>();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"select d.id,
											d.vencimento_data,
											d.dataemissao,
											d.parcela,
											d.numero_dua,
											d.valor_dua,
											d.valor_pago,
											d.vrte,
											d.pagamento_data,
											d.complemento,
											d.pai_dua,
											d.cob_parc,
											d.cancelamento_data,
											d.tid,
											case
											when d.cancelamento_data is not null
												then 'Cancelado'
											when d.pagamento_data is null 
												and d.vencimento_data >= sysdate
												or d.valor_dua is null
												or d.valor_dua = 0
												then 'Em Aberto'
											when d.pagamento_data is not null
												and d.valor_pago >= d.valor_dua
												or exists (select 1 from tab_fisc_cob_dua dc where dc.pai_dua = d.id)
												then 'Pago'
											when d.pagamento_data is not null
												and d.valor_pago < d.valor_dua
												then 'Pago Parcial'
											when d.pagamento_data is null and d.vencimento_data < sysdate
												then 'Atrasado'
											end as situacao
										from {0}tab_fisc_cob_dua d
										where d.cob_parc = :parcelamentoId
										order by cast(replace(substr(d.parcela, 0, instr(d.parcela, '/')), '/') as number)"                                        , EsquemaBanco);

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

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    while (reader.Read())
                    {
                        var cobrancaDUA = new CobrancaDUA
                        {
                            Id        = reader.GetValue <int>("id"),
                            Parcela   = reader.GetValue <string>("parcela"),
                            NumeroDUA = reader.GetValue <string>("numero_dua"),
                            ValorDUA  = reader.GetValue <decimal>("valor_dua"),
                            ValorPago = reader.GetValue <decimal>("valor_pago"),
                            VRTE      = reader.GetValue <decimal>("vrte"),
                            InformacoesComplementares = reader.GetValue <string>("complemento"),
                            ParcelaPaiId   = reader.GetValue <int>("pai_dua"),
                            ParcelamentoId = reader.GetValue <int>("cob_parc"),
                            Tid            = reader.GetValue <string>("tid"),
                            Situacao       = reader.GetValue <string>("situacao")
                        };

                        cobrancaDUA.DataVencimento.Data   = reader.GetValue <DateTime>("vencimento_data");
                        cobrancaDUA.DataEmissao.Data      = reader.GetValue <DateTime>("dataemissao");
                        cobrancaDUA.DataPagamento.Data    = reader.GetValue <DateTime>("pagamento_data");
                        cobrancaDUA.DataCancelamento.Data = reader.GetValue <DateTime>("cancelamento_data");
                        if (cobrancaDUA.DataVencimento.Data.HasValue && cobrancaDUA.DataVencimento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataVencimento = new DateTecno();
                        }
                        if (cobrancaDUA.DataEmissao.Data.HasValue && cobrancaDUA.DataEmissao.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataEmissao = new DateTecno();
                        }
                        if (cobrancaDUA.DataPagamento.Data.HasValue && cobrancaDUA.DataPagamento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataPagamento = new DateTecno();
                        }
                        if (cobrancaDUA.DataCancelamento.Data.HasValue && cobrancaDUA.DataCancelamento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataCancelamento = new DateTecno();
                        }
                        if (cobrancaDUA.ParcelaPaiId > 0)
                        {
                            cobrancaDUA.ParcelaPai = this.ObterDUA(cobrancaDUA.ParcelaPaiId.Value);
                        }

                        lista.Add(cobrancaDUA);
                    }

                    reader.Close();
                }
            }

            return(lista);
        }
Exemple #9
0
        public CobrancaDUA ObterDUA(int cobrancaDUAId, BancoDeDados banco = null)
        {
            var cobrancaDUA = new CobrancaDUA();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = bancoDeDados.CriarComando(@"
                                    select d.id,
											d.vencimento_data,
											d.dataemissao,
											d.parcela,
											d.numero_dua,
											d.valor_dua,
											d.valor_pago,
											d.vrte,
											d.pagamento_data,
											d.complemento,
											d.pai_dua,
											d.cob_parc,
											d.cancelamento_data,
											d.tid
										from {0}tab_fisc_cob_dua d
										where d.id = :id"                                        , EsquemaBanco);

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

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        cobrancaDUA = new CobrancaDUA
                        {
                            Id        = reader.GetValue <int>("id"),
                            Parcela   = reader.GetValue <string>("parcela"),
                            NumeroDUA = reader.GetValue <string>("numero_dua"),
                            ValorDUA  = reader.GetValue <decimal>("valor_dua"),
                            ValorPago = reader.GetValue <decimal>("valor_pago"),
                            VRTE      = reader.GetValue <decimal>("vrte"),
                            InformacoesComplementares = reader.GetValue <string>("complemento"),
                            ParcelaPaiId   = reader.GetValue <int>("pai_dua"),
                            ParcelamentoId = reader.GetValue <int>("cob_parc"),
                            Tid            = reader.GetValue <string>("tid")
                        };

                        cobrancaDUA.DataVencimento.Data   = reader.GetValue <DateTime>("vencimento_data");
                        cobrancaDUA.DataEmissao.Data      = reader.GetValue <DateTime>("dataemissao");
                        cobrancaDUA.DataPagamento.Data    = reader.GetValue <DateTime>("pagamento_data");
                        cobrancaDUA.DataCancelamento.Data = reader.GetValue <DateTime>("cancelamento_data");
                        if (cobrancaDUA.DataVencimento.Data.HasValue && cobrancaDUA.DataVencimento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataVencimento = new DateTecno();
                        }
                        if (cobrancaDUA.DataEmissao.Data.HasValue && cobrancaDUA.DataEmissao.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataEmissao = new DateTecno();
                        }
                        if (cobrancaDUA.DataPagamento.Data.HasValue && cobrancaDUA.DataPagamento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataPagamento = new DateTecno();
                        }
                        if (cobrancaDUA.DataCancelamento.Data.HasValue && cobrancaDUA.DataCancelamento.Data.Value.Year == 1)
                        {
                            cobrancaDUA.DataCancelamento = new DateTecno();
                        }
                    }
                    else
                    {
                        cobrancaDUA = null;
                    }
                    reader.Close();
                }
            }

            return(cobrancaDUA);
        }