Пример #1
0
 public SaldoEstoqueService(DataContext db, IConfiguration configuration)
 {
     this.db                = db;
     this.configuration     = configuration;
     this.parametrosService = new ParametrosService(db, configuration);
     this.connString        = configuration.GetConnectionString("sage_db");
 }
        public List <ContaReceberDTO> getContasReceberPorCliente(string codigo, DateTime database)
        {
            var parametrosService = new ParametrosService(this.db, this.configuration);
            var taxaJurosDiaria   = decimal.Parse(parametrosService.getParametro("TAXA_JUROS_CREDIARIO"));

            List <ContaReceberDTO> titulos = new List <ContaReceberDTO>();

            try
            {
                using (var conn = new MySqlConnection(connString))
                {
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }

                    var sql = @"SELECT NUM_DUP
                                  FROM con_rec WHERE COD_CLI = @COD_CLI AND FLA_PAG <> '1' AND  sql_deleted <> 'T' 
                              ORDER BY DAT_VEN, NUM_DUP";

                    var cmd = new MySqlCommand(sql, conn);
                    cmd.Parameters.Add(new MySqlParameter("@COD_CLI", codigo));

                    var rs = cmd.ExecuteReader();

                    while (rs.Read())
                    {
                        var numeroDuplicata = SQLUtils.GetValue <string>(rs, "NUM_DUP");

                        var titulo = getTituloCalculado(numeroDuplicata, database);
                        if (titulo != null)
                        {
                            titulos.Add(titulo);
                        }
                    }

                    return(titulos);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private ContaReceberDTO getTituloCalculado(string Numero, DateTime Database)
        {
            try
            {
                ContaReceberDTO receber = null;

                var titulo = db.ContaReceber.Where(e => e.NumeroDuplicata == Numero && e.FlagPgto != 1 && e.RowDeleted != "T").SingleOrDefault();
                if (titulo == null)
                {
                    return(null);
                }

                var parametrosService = new ParametrosService(this.db, this.configuration);
                var taxaJurosDiaria   = double.Parse(parametrosService.getParametro("TAXA_JUROS_CREDIARIO"));

                var venc = (DateTime)titulo.DataVencimento;

                var valorRecebido = this.getTotalRecebidoPorDuplicata(Numero);
                var dataPagamento = this.getDataPagamentoDuplicata(Numero);

                var valorReceber = Math.Round(((double)titulo.ValorDuplicata + (titulo.Juros ?? 0) - (titulo.Desconto ?? 0)) - valorRecebido, 2);

                if (dataPagamento != default(DateTime))
                {
                    if (dataPagamento.CompareTo(titulo.DataVencimento) > 0)
                    {
                        venc = dataPagamento;
                    }
                }

                double juros    = 0;
                double juros2   = 0;
                double desconto = 0;

                var hoje   = Database;
                var atraso = hoje.Subtract(venc).Days;
                if (atraso <= 3)
                {
                    atraso = 0;
                }
                else
                {
                    // CALCULO LEGADO DE ARREDONDAMENTO
                    var taxaJurosTotal = atraso * taxaJurosDiaria;
                    juros  = Math.Truncate((double)((valorReceber / 100) * taxaJurosTotal * 10)) / 10;
                    juros2 = Math.Truncate((double)((valorReceber / 100) * taxaJurosTotal * 100)) / 100;

                    if ((juros2 - juros) >= 0.05)
                    {
                        juros += 0.10;
                    }
                }

                var total = valorReceber + juros - desconto;

                if (total > 0)
                {
                    receber = new ContaReceberDTO {
                        RowId           = titulo.RowId,
                        NumeroDuplicata = titulo.NumeroDuplicata,
                        Loja            = titulo.Loja,
                        NumeroDocumento = titulo.NumeroDocumento,
                        TipoVenda       = titulo.TipoVenda,
                        DataEmissao     = titulo.DataEmissao,
                        DataVencimento  = (DateTime)titulo.DataVencimento,
                        ValorDuplicata  = Math.Round((double)titulo.ValorDuplicata, 2),
                        Juros           = Math.Round(juros, 2),
                        Desconto        = Math.Round(desconto, 2),
                        Saldo           = Math.Round(valorReceber, 2),
                        ValorReceber    = Math.Round(total, 2),
                        Atraso          = atraso
                    };
                }

                return(receber);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }