public List <ExtratoCategoriaView> ExtratoCategoria(DateTime dataBase, bool efetivados = true)
        {
            var DataInicial = new DateTime(dataBase.Year, dataBase.Month, 1);
            var DataFinal   = DataInicial.AddMonths(1).AddDays(-1);

            var registros = DBCore.InstanciaDoBanco().Movimentos
                            .Where
                            (
                w =>
                (w.Data >= DataInicial && w.Data <= DataFinal) &&
                (w.Efetivado.Equals("S") || !efetivados)
                            )
                            .GroupBy
                            (
                g =>
                g.Categoria
                            )
                            .Select
                            (
                s => new
            {
                Categoria = s.Key,
                Credito   = s.Sum(i => (i.TipoMovimento.CreditoDebito.Equals("C") ? i.Valor : 0)),
                Debito    = s.Sum(i => (i.TipoMovimento.CreditoDebito.Equals("D") ? i.Valor : 0)),
            }
                            )
                            .ToList();

            var categorianegocio = new CategoriaNegocio();
            var resposta         = new List <ExtratoCategoriaView>();

            foreach (var extrato in registros)
            {
                resposta.Add(new ExtratoCategoriaView
                {
                    Categoria = categorianegocio.ConverteParaView(extrato.Categoria),
                    Debito    = extrato.Debito,
                    Credito   = extrato.Credito
                });
            }

            return(resposta);
        }
        public DashBoardResumoView ObtemResumoDashBoard(int Mes, int Ano)
        {
            var DataInicial = new DateTime(Ano, Mes, 1);
            var DataFinal   = DataInicial.AddMonths(1).AddDays(-1);

            #region Resumo por Categoria
            var registros = DBCore.InstanciaDoBanco().Movimentos
                            .Where
                            (
                w =>
                (w.Data >= DataInicial && w.Data <= DataFinal) &&
                (w.Efetivado.Equals("S")) &&
                w.TipoMovimento.CreditoDebito.Equals("D")
                            )
                            .GroupBy
                            (
                g =>
                g.Categoria
                            )
                            .Select
                            (
                s => new
            {
                Categoria = s.Key,
                Debito    = s.Sum(i => i.Valor),
                Credito   = decimal.Zero
            }
                            )
                            .ToList();

            var categorianegocio = new CategoriaNegocio();
            var resposta         = new List <ExtratoCategoriaView>();
            var indice           = 1;

            foreach (var extrato in registros)
            {
                resposta.Add(new ExtratoCategoriaView
                {
                    Ordem     = indice++,
                    Categoria = categorianegocio.ConverteParaView(extrato.Categoria),
                    Debito    = extrato.Debito,
                    Credito   = extrato.Credito
                });
            }
            #endregion

            #region Saldo Anterior
            decimal?SaldoAnterior = DBCore.InstanciaDoBanco().Movimentos
                                    .Where
                                    (
                w =>
                w.Efetivado.Equals("S")
                                    )
                                    .GroupBy(g => 1)
                                    .Select(
                s => new
            {
                Valor = s.Sum(su => su.TipoMovimento.CreditoDebito.Equals("C") ? su.Valor : -su.Valor)
            }
                ).SingleOrDefault()?.Valor;
            #endregion

            #region Resumo Tiles
            var dash = DBCore.InstanciaDoBanco().Movimentos
                       .Where
                       (
                w =>
                (w.Data <= DataFinal) &&
                !w.Efetivado.Equals("S")
                       )
                       .GroupBy(g => 1)
                       .Select
                       (
                s => new
            {
                Credito = s.Sum(i => (i.TipoMovimento.CreditoDebito.Equals("C") ? i.Valor : 0)),
                Debito  = s.Sum(i => (i.TipoMovimento.CreditoDebito.Equals("D") ? i.Valor : 0)),
            }
                       )
                       .SingleOrDefault();
            #endregion

            var retorno = new DashBoardResumoView
            {
                Categorias      = resposta,
                DashBoardResumo = new DashBoardResumo
                {
                    DespesasAberto = dash?.Debito ?? 0,
                    ReceitasAberto = dash?.Credito ?? 0,
                    SaldoContas    = ((SaldoAnterior ?? 0) + (dash?.Credito ?? 0) - (dash?.Debito ?? 0))
                }
            };

            return(retorno);
        }