// GET: Home public ActionResult Index() { //Obter lista com lançamentos mensais #region Lançamentos var lista = new List <ItemExtrato>(); var despesas = db.Despesas.ToList(); foreach (var obj in despesas) { for (int i = 1; i <= obj.NumeroParcelas; i++) { ItemExtrato item = new ItemExtrato(); item.Valor = obj.Valor / obj.NumeroParcelas * -1; item.DataVencimento = obj.VencimentoPrimeiraParcela.AddMonths(i - 1); lista.Add(item); } } var receitas = db.Receitas.ToList(); foreach (var obj in receitas) { for (int i = 1; i <= obj.NumeroParcelas; i++) { ItemExtrato item = new ItemExtrato(); item.Valor = obj.Valor / obj.NumeroParcelas; item.DataVencimento = obj.PrimeiraDataVencimento.AddMonths(i - 1); lista.Add(item); } } lista.Sort(); #endregion //Obter Total de lançamentos (receitas - despesas) #region Total por mês var query = from item in lista group item by new { item.DataVencimento.Year, item.DataVencimento.Month } into grp select new { ano = grp.Key.Year, mes = grp.Key.Month, valor = grp.Sum(x => x.Valor) }; #endregion //Cálculo do saldo parcial por mês List <DataPoint> dataPoints = new List <DataPoint>(); double parcial = 0; int count = 0; foreach (var item in query) { DateTime pastDate = new DateTime(DateTime.Today.AddMonths(-6).Year, DateTime.Today.AddMonths(-6).Month, 01); DateTime itemDate = new DateTime(item.ano, item.mes, DateTime.DaysInMonth(item.ano, item.mes)); //Será exibido somente os saldos dos últimos 6 meses até os próximos 6 meses if (itemDate.CompareTo(pastDate) >= 0 && itemDate.CompareTo(DateTime.Today.AddMonths(6)) <= 0) { dataPoints.Add(new DataPoint(itemDate.ToString("MMM-yyyy").ToUpper(), item.valor + parcial)); } parcial += item.valor; count++; } ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints); float totalDespesas = despesas.Sum(x => x.Valor); var porTiposDespesas = from item in despesas join tipos in db.TipoDespesas on item.IdTipoDespesa equals tipos.Id group item by new { tipos.Nome } into grp select new { tipo = grp.Key.Nome, valor = grp.Sum(x => x.Valor) }; float totalReceitas = receitas.Sum(x => x.Valor); var porTiposReceitas = from item in receitas group item by new { item.TipoReceita } into grp select new { tipo = grp.Key.TipoReceita, valor = grp.Sum(x => x.Valor) }; dataPoints = new List <DataPoint>(); foreach (var item in porTiposDespesas) { dataPoints.Add(new DataPoint(item.tipo, Math.Round(item.valor / totalDespesas * 100, 2))); } ViewBag.DataPointsDespesas = JsonConvert.SerializeObject(dataPoints); dataPoints = new List <DataPoint>(); foreach (var item in porTiposReceitas) { dataPoints.Add(new DataPoint(item.tipo.ToString(), Math.Round(item.valor / totalReceitas * 100, 2))); } ViewBag.DataPointsReceitas = JsonConvert.SerializeObject(dataPoints); return(View()); }
// GET: Extrato public ActionResult Index(String buscarIni, String buscarFim, String Tipo, String banco) { if (buscarIni != null) { TempData["buscarIni"] = buscarIni; } if (buscarFim != null) { TempData["buscarFim"] = buscarFim; } if (Tipo != null) { TempData["Tipo"] = Tipo; } if (banco != null) { TempData["Banco"] = banco; } this.buscarIni = (string)TempData.Peek("buscarIni"); this.buscarFim = (string)TempData.Peek("buscarFim"); this.Tipo = (string)TempData.Peek("Tipo"); this.banco = (string)TempData.Peek("Banco"); ItemExtrato item; var lista = new List <ItemExtrato>(); var despesas = db.Despesas.Include(desp => desp.conta).Include(conta => conta.conta.banco).ToList(); foreach (var obj in despesas) { for (int i = 1; i <= obj.NumeroParcelas; i++) { item = new ItemExtrato(); item.Valor = obj.Valor / obj.NumeroParcelas; item.Tipo = 1; item.Definicao = obj.CaractDespesa + "/" + obj.NomeDespesa; item.DataRealizacao = obj.DataRealizacao; item.DataVencimento = obj.VencimentoPrimeiraParcela.AddMonths(i - 1); item.Pagamento = i + "/" + obj.NumeroParcelas; item.NomeBanco = obj.conta.banco.Nome; lista.Add(item); } } var receitas = db.Receitas.Include(desp => desp.conta).Include(conta => conta.conta.banco).ToList(); foreach (var obj in receitas) { for (int i = 1; i <= obj.NumeroParcelas; i++) { item = new ItemExtrato(); item.Valor = obj.Valor / obj.NumeroParcelas; item.Tipo = 2; item.DataRealizacao = obj.DataRecebimento; item.DataVencimento = obj.PrimeiraDataVencimento.AddMonths(i - 1); item.Definicao = obj.TipoReceita.ToString() + "/" + obj.Descricao; item.Pagamento = i + "/" + obj.NumeroParcelas; item.NomeBanco = obj.conta.banco.Nome; lista.Add(item); } } lista.Sort(); item = lista.First(); float saldoParcial = 0; foreach (var obj in lista) { if (obj.Tipo == 1) { saldoParcial -= obj.Valor; obj.Saldo = saldoParcial; } else { saldoParcial += obj.Valor; obj.Saldo = saldoParcial; } } if (!String.IsNullOrEmpty(this.buscarIni) && !String.IsNullOrEmpty(this.buscarFim)) { DateTime date1 = DateTime.Parse(this.buscarIni); DateTime date2 = DateTime.Parse(this.buscarFim); if (Tipo.Equals("credito")) { lista = lista.Where(x => x.DataVencimento.CompareTo(date1) >= 0 && x.DataVencimento.CompareTo(date2) <= 0 && x.Tipo == 2).ToList(); } else if (Tipo.Equals("debito")) { lista = lista.Where(x => x.DataVencimento.CompareTo(date1) >= 0 && x.DataVencimento.CompareTo(date2) <= 0 && x.Tipo == 1).ToList(); } else { lista = lista.Where(x => x.DataVencimento.CompareTo(date1) >= 0 && x.DataVencimento.CompareTo(date2) <= 0).ToList(); } } else if (!String.IsNullOrEmpty(this.Tipo) && this.Tipo.Equals("debito")) { lista = lista.Where(x => x.Tipo == 1 && x.DataVencimento.Month == DateTime.Today.Month).ToList(); } else if (!String.IsNullOrEmpty(this.Tipo) && this.Tipo.Equals("credito")) { lista = (from obj in lista where obj.Tipo == 2 && obj.DataVencimento.Month == DateTime.Today.Month select obj).ToList(); //ViewBag.Lista = lista.Where(x => x.Tipo == 2 && x.DataVencimento.Month == DateTime.Today.Month); } else { lista = (from obj in lista where obj.DataVencimento.Month == DateTime.Today.Month select obj).ToList(); //ViewBag.Lista = lista.Where(x => x.DataVencimento.Month == DateTime.Today.Month); } if (!String.IsNullOrEmpty(this.banco)) { lista = lista.Where(x => x.NomeBanco.ToUpper().Equals(this.banco.ToUpper())).ToList(); } TempData["lista"] = lista; return(View("Index", lista)); }