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