private List <PrevisaoMesModel> ListaPrevisao(int iMes, int iAno)
        {
            DateTime dInicioMes           = new DateTime(iAno, iMes, 1);
            DateTime dFimMes              = dInicioMes.AddMonths(1).AddSeconds(-1);
            List <PrevisaoMesModel> lista = new List <PrevisaoMesModel>();

            #region ----------------------------------------------------------------------- Notificações -----------------------------------------------------------------------
            List <Notification> lstNotification = notificationBusiness.Get.Where(n => n.sUserID == AuthProvider.UserAntenticated.sID && n.StatusType == StatusType.Ativo).ToList();
            foreach (Notification not in lstNotification)
            {
                if (categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID).CategoryType == CategoryType.Despesa)
                {
                    DateTime dataBaseNot    = new DateTime(not.dData.Year, not.dData.Month, 1);
                    DateTime dataFimBaseNot = new DateTime(not.dDataFim.Year, not.dDataFim.Month, 1);

                    if (dataBaseNot <= dInicioMes && dataFimBaseNot >= dInicioMes)
                    {
                        PrevisaoMesModel previsao = new PrevisaoMesModel();
                        previsao.dData  = OperacaoData.retornoDataTimeValido(iAno, iMes, not.dData.Day);
                        previsao.dValor = not.dValor;
                        Category catTemp = categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID);
                        if (catTemp.CategoryType == CategoryType.Receita)
                        {
                            previsao.dValor *= (-1);
                        }
                        previsao.sAccountID   = string.Empty;
                        previsao.sCategoryID  = not.sCategoryID;
                        previsao.sDescricao   = not.sDescricao;
                        previsao.sAgrupadorID = string.Empty;
                        previsao.bPago        = false;
                        DateTime dDataCalculo = OperacaoData.retornoDataTimeValido(iAno, iMes, not.dData.Day);
                        if (expenseIncomeBusiness.Get.Any(e => e.sNotificationID == not.sID && e.dDataBase.Month == dDataCalculo.Month && e.dDataBase.Year == dDataCalculo.Year))
                        {
                            ExpenseIncome expInc = expenseIncomeBusiness.Get.FirstOrDefault(e => e.sNotificationID == not.sID && e.dDataBase.Month == dDataCalculo.Month && e.dDataBase.Year == dDataCalculo.Year);
                            previsao.sDescricao = expInc.sDescricao;
                            previsao.dData      = expInc.dDataBase;
                            previsao.dValor     = expInc.dValor;
                            if (expInc.CategoryType == CategoryType.Receita)
                            {
                                previsao.dValor *= (-1);
                            }
                            previsao.bPago        = true;
                            previsao.sAccountID   = expInc.sAccountID;
                            previsao.sCategoryID  = expInc.sCategoryID;
                            previsao.sAgrupadorID = expInc.sAgrupadorOcorrencia;
                        }
                        previsao.sDescCategoria = categoryBusiness.Get.FirstOrDefault(c => c.sID == previsao.sCategoryID).descricao;
                        if (!string.IsNullOrEmpty(previsao.sAccountID))
                        {
                            previsao.sDescConta = accountBusiness.Get.FirstOrDefault(a => a.sID == previsao.sAccountID).sNome;
                        }
                        else
                        {
                            previsao.sDescConta = string.Empty;
                        }
                        lista.Add(previsao);
                    }
                }
            }
            #endregion
            #region ----------------------------------------------------------------------- Cartão de Crédito ------------------------------------------------------------------
            List <Account> lstCartoes = accountBusiness.Get.Where(a => a.sUserID == AuthProvider.UserAntenticated.sID && a.AccountType == AccountType.CartaoDeCredito && a.StatusType == StatusType.Ativo).ToList();
            foreach (Account conta in lstCartoes)
            {
                string sExpenseIncomePagCartaoID = string.Empty;
                // Verifica se o Cartão já foi pago este mês
                List <ExpenseIncome> lstPagCartao = expenseIncomeBusiness.Get.Where(e => e.sUserID == AuthProvider.UserAntenticated.sID && e.CategoryType == CategoryType.PagamentoCartaoCredito && e.dData >= dInicioMes && e.dData <= dFimMes).ToList();
                foreach (ExpenseIncome pagCartao in lstPagCartao)
                {
                    ExpenseIncomeReference expRef = expenseIncomeReferenceBusiness.Get.FirstOrDefault(e => e.sExpenseIncomeDestinyID == pagCartao.sID);
                    if (expRef != null)
                    {
                        if (expenseIncomeBusiness.Get.FirstOrDefault(e => e.sID == expRef.sExpenseIncomeOriginID).sAccountID.Equals(conta.sID))
                        {
                            sExpenseIncomePagCartaoID = pagCartao.sID;
                            break;
                        }
                    }
                }
                // se já tem um registro de pagamento só catabiliza oque foi pago, senão pega os possíveis itens para o mês
                if (string.IsNullOrEmpty(sExpenseIncomePagCartaoID))
                {
                    DateTime dataFechamento = CadeODinheiro.Web.Infrastructure.Utils.OperacaoData.retornoDataTimeValido(iAno, iMes, conta.iDiaFechamentoCC);
                    //adiciona os dias de prazo para pagamento e ver se fica no mesmo mês se não um mês é reduzido
                    if (dataFechamento.AddDays(15).Month != iMes)
                    {
                        dataFechamento = dataFechamento.AddMonths(-1);
                    }
                    DateTime dataInicioVigencia = dataFechamento.AddMonths(-1).AddDays(1);
                    // pega os itens avulsos
                    List <ExpenseIncome> lstGastos = expenseIncomeBusiness.Get.Where(e => e.sAccountID == conta.sID && e.dData >= dataInicioVigencia && e.dData <= dataFechamento && e.iTotalOcorrencia == 1).ToList();
                    foreach (ExpenseIncome gasto in lstGastos)
                    {
                        PrevisaoMesModel previsao = new PrevisaoMesModel();
                        previsao.dData  = gasto.dData;
                        previsao.dValor = gasto.dValor;
                        if (gasto.CategoryType == CategoryType.Receita)
                        {
                            previsao.dValor *= (-1);
                        }
                        previsao.sAccountID     = gasto.sAccountID;
                        previsao.sCategoryID    = gasto.sCategoryID;
                        previsao.sDescricao     = gasto.sDescricao;
                        previsao.sAgrupadorID   = gasto.sAgrupadorOcorrencia;
                        previsao.bPago          = false;
                        previsao.sDescCategoria = categoryBusiness.Get.FirstOrDefault(c => c.sID == previsao.sCategoryID).descricao;
                        previsao.sDescConta     = accountBusiness.Get.FirstOrDefault(a => a.sID == previsao.sAccountID).sNome;
                        lista.Add(previsao);
                    }
                    // calcula os parcelados
                    lstGastos = expenseIncomeBusiness.Get.Where(e => e.sAccountID == conta.sID && e.iTotalOcorrencia > 1).ToList();
                    foreach (ExpenseIncome gasto in lstGastos)
                    {
                        DateTime dataCalculada = gasto.dData.AddMonths((gasto.iNumeroOcorrencia - 1));
                        if (dataCalculada >= dataInicioVigencia && dataCalculada <= dataFechamento)
                        {
                            PrevisaoMesModel previsao = new PrevisaoMesModel();
                            previsao.dData  = gasto.dData;
                            previsao.dValor = gasto.dValor;
                            if (gasto.CategoryType == CategoryType.Receita)
                            {
                                previsao.dValor *= (-1);
                            }
                            previsao.sAccountID     = gasto.sAccountID;
                            previsao.sCategoryID    = gasto.sCategoryID;
                            previsao.sDescricao     = gasto.sDescricao + " - " + gasto.iNumeroOcorrencia + "/" + gasto.iTotalOcorrencia;
                            previsao.sAgrupadorID   = gasto.sAgrupadorOcorrencia;
                            previsao.bPago          = false;
                            previsao.sDescCategoria = categoryBusiness.Get.FirstOrDefault(c => c.sID == previsao.sCategoryID).descricao;
                            previsao.sDescConta     = accountBusiness.Get.FirstOrDefault(a => a.sID == previsao.sAccountID).sNome;
                            lista.Add(previsao);
                        }
                    }
                }
                else
                {
                    List <ExpenseIncomeReference> lstGastos = expenseIncomeReferenceBusiness.Get.Where(e => e.sExpenseIncomeDestinyID == sExpenseIncomePagCartaoID).ToList();
                    foreach (ExpenseIncomeReference gasto in lstGastos)
                    {
                        ExpenseIncome expInc = expenseIncomeBusiness.Get.FirstOrDefault(e => e.sID == gasto.sExpenseIncomeOriginID);

                        PrevisaoMesModel previsao = new PrevisaoMesModel();
                        previsao.dData  = expInc.dData;
                        previsao.dValor = expInc.dValor;
                        if (expInc.CategoryType == CategoryType.Receita)
                        {
                            previsao.dValor *= (-1);
                        }
                        previsao.sAccountID  = expInc.sAccountID;
                        previsao.sCategoryID = expInc.sCategoryID;
                        previsao.sDescricao  = expInc.sDescricao;
                        if (expInc.iTotalOcorrencia > 1)
                        {
                            previsao.sDescricao += " - " + expInc.iNumeroOcorrencia + "/" + expInc.iTotalOcorrencia;
                        }
                        previsao.sAgrupadorID   = expInc.sAgrupadorOcorrencia;
                        previsao.bPago          = true;
                        previsao.sDescCategoria = categoryBusiness.Get.FirstOrDefault(c => c.sID == previsao.sCategoryID).descricao;
                        previsao.sDescConta     = accountBusiness.Get.FirstOrDefault(a => a.sID == previsao.sAccountID).sNome;
                        lista.Add(previsao);
                    }
                }
            }
            #endregion
            return(lista);
        }
예제 #2
0
        private HomeModel gerarConteudoHome()
        {
            HomeModel home = new HomeModel();

            home.listaContas = accountBusiness.Get.Where(a => a.sUserID == AuthProvider.UserAntenticated.sID && a.StatusType == StatusType.Ativo).ToList();
            #region ----- Notification ---------------------------------------------------------------------------------------------
            List <Notification> lstNotification = notificationBusiness.Get.Where(n => n.sUserID == AuthProvider.UserAntenticated.sID && n.StatusType == StatusType.Ativo).ToList();
            foreach (Notification not in lstNotification)
            {
                if (not.NotificationType == NotificationType.OcorrenciaUnica)
                {
                    if (!expenseIncomeBusiness.Get.Any(e => e.sNotificationID == not.sID) && not.dData < (DateTime.Now.AddDays(10)))
                    {
                        home.listaNotificacoes.Add(new HomeNotificacaoModel()
                        {
                            sID = not.sID, dData = not.dData, dValorPrevisto = not.dValor, sDescricao = not.sDescricao, sCategoriaDescricao = categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID).descricao
                        });
                    }
                }
                else
                {
                    List <HomeNotificacaoModel> lstNotTemp = new List <HomeNotificacaoModel>();
                    // mês anterior
                    DateTime dDataCalculo = OperacaoData.retornoDataTimeValido(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month, not.dData.Day);
                    if (dDataCalculo < (DateTime.Now.AddDays(10)) && !expenseIncomeBusiness.Get.Any(e => e.sNotificationID == not.sID && e.dDataBase.Month == dDataCalculo.Month))
                    {
                        lstNotTemp.Add(new HomeNotificacaoModel()
                        {
                            sID = not.sID, dData = dDataCalculo, dValorPrevisto = not.dValor, sDescricao = not.sDescricao, sCategoriaDescricao = categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID).descricao
                        });
                    }
                    // mês atual
                    dDataCalculo = OperacaoData.retornoDataTimeValido(DateTime.Now.Year, DateTime.Now.Month, not.dData.Day);
                    if (dDataCalculo < (DateTime.Now.AddDays(10)) && !expenseIncomeBusiness.Get.Any(e => e.sNotificationID == not.sID && e.dDataBase.Month == dDataCalculo.Month))
                    {
                        lstNotTemp.Add(new HomeNotificacaoModel()
                        {
                            sID = not.sID, dData = dDataCalculo, dValorPrevisto = not.dValor, sDescricao = not.sDescricao, sCategoriaDescricao = categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID).descricao
                        });
                    }
                    // verifica próximo mês
                    dDataCalculo = OperacaoData.retornoDataTimeValido(DateTime.Now.AddMonths(1).Year, DateTime.Now.AddMonths(1).Month, not.dData.Day);
                    if (dDataCalculo < (DateTime.Now.AddDays(10)) && !expenseIncomeBusiness.Get.Any(e => e.sNotificationID == not.sID && e.dDataBase.Month == dDataCalculo.Month))
                    {
                        lstNotTemp.Add(new HomeNotificacaoModel()
                        {
                            sID = not.sID, dData = dDataCalculo, dValorPrevisto = not.dValor, sDescricao = not.sDescricao, sCategoriaDescricao = categoryBusiness.Get.FirstOrDefault(c => c.sID == not.sCategoryID).descricao
                        });
                    }

                    foreach (HomeNotificacaoModel hNot in lstNotTemp)
                    {
                        if (hNot.dData >= not.dData && ((not.NotificationType == NotificationType.OcorrenciaUnica) || (not.NotificationType == NotificationType.Mensal && hNot.dData <= not.dDataFim)))
                        {
                            home.listaNotificacoes.Add(hNot);
                        }
                    }
                }
            }
            #endregion
            #region ----- Resumo Categorias Mês Atual ------------------------------------------------------------------------------
            DateTime             dDataInicio = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            DateTime             dDataFim    = dDataInicio.AddMonths(1) - (new TimeSpan(0, 0, 0, 1));
            List <ExpenseIncome> lstMesAtual = expenseIncomeBusiness.Get.Where(e => e.sUserID == AuthProvider.UserAntenticated.sID && e.dData >= dDataInicio && e.dData <= dDataFim && e.CategoryType == CategoryType.Despesa).OrderBy(e => e.sCategoryID).ToList();

            double dTotal = 0;
            Dictionary <string, double> dcExpense = new Dictionary <string, double>();
            foreach (ExpenseIncome exp in lstMesAtual)
            {
                if (!dcExpense.ContainsKey(exp.sCategoryID))
                {
                    dcExpense.Add(exp.sCategoryID, 0);
                }
                dcExpense[exp.sCategoryID] += exp.dValor;
                dTotal += exp.dValor;
            }

            dcExpense = dcExpense.OrderByDescending(d => d.Value).ToDictionary(x => x.Key, x => x.Value);
            double dPercOutros = 0;
            int    iTotElementos = dcExpense.Count, iOcorrencia = 0;
            foreach (var hr in dcExpense)
            {
                HomeResumoCategoriaModel homeResumo = new HomeResumoCategoriaModel();
                homeResumo.sMesAno      = dDataInicio.ToString("MMyyyy");
                homeResumo.dValor       = hr.Value;
                homeResumo.sCategoriaID = hr.Key;
                homeResumo.sDescricao   = categoryBusiness.Get.FirstOrDefault(c => c.sID == hr.Key).descricao;
                homeResumo.dPercentual  = (hr.Value * 100) / dTotal;
                home.listaResumoMesAtual.Add(homeResumo);

                if (string.IsNullOrEmpty(home.sListaResumoMesAtual))
                {
                    home.sListaResumoMesAtual = homeResumo.sDescricao + "|&" + Math.Round(homeResumo.dPercentual, 2);
                }
                else
                {
                    home.sListaResumoMesAtual += "|&" + homeResumo.sDescricao + "|&" + Math.Round(homeResumo.dPercentual, 2);
                }
            }
            #endregion
            #region ----- Resumo Categorias Mês Anterior ---------------------------------------------------------------------------
            DateTime dtTemp = DateTime.Now;
            dtTemp      = dtTemp.AddMonths(-1);
            dDataInicio = new DateTime(dtTemp.Year, dtTemp.Month, 1);
            dDataFim    = dDataInicio.AddMonths(1) - (new TimeSpan(0, 0, 0, 1));
            List <ExpenseIncome> lstMesAnterior = expenseIncomeBusiness.Get.Where(e => e.sUserID == AuthProvider.UserAntenticated.sID && e.dData >= dDataInicio && e.dData <= dDataFim && e.CategoryType == CategoryType.Despesa).OrderBy(e => e.sCategoryID).ToList();

            dTotal    = 0;
            dcExpense = new Dictionary <string, double>();
            foreach (ExpenseIncome exp in lstMesAnterior)
            {
                if (!dcExpense.ContainsKey(exp.sCategoryID))
                {
                    dcExpense.Add(exp.sCategoryID, 0);
                }
                dcExpense[exp.sCategoryID] += exp.dValor;
                dTotal += exp.dValor;
            }

            dcExpense     = dcExpense.OrderByDescending(d => d.Value).ToDictionary(x => x.Key, x => x.Value);;
            dPercOutros   = 0;
            iTotElementos = dcExpense.Count;
            iOcorrencia   = 0;
            foreach (var hr in dcExpense)
            {
                HomeResumoCategoriaModel homeResumo = new HomeResumoCategoriaModel();
                homeResumo.sMesAno      = dDataInicio.ToString("MMyyyy");
                homeResumo.dValor       = hr.Value;
                homeResumo.sCategoriaID = hr.Key;
                homeResumo.sDescricao   = categoryBusiness.Get.FirstOrDefault(c => c.sID == hr.Key).descricao;
                homeResumo.dPercentual  = (hr.Value * 100) / dTotal;
                home.listaResumoMesAnterior.Add(homeResumo);

                if (string.IsNullOrEmpty(home.sListaResumoMesAnterior))
                {
                    home.sListaResumoMesAnterior = homeResumo.sDescricao + "|&" + Math.Round(homeResumo.dPercentual, 2);
                }
                else
                {
                    home.sListaResumoMesAnterior += "|&" + homeResumo.sDescricao + "|&" + Math.Round(homeResumo.dPercentual, 2);
                }
            }

            #endregion
            return(home);
        }