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; } }