private async Task FillRecurringExpenses(List <PaymentProjectionModel> list, List <DateTime> dates, IEnumerable <PaymentType> types, IEnumerable <CreditCard> cards, BaseFilter filter) { var currentRecurringExpenses = await _recurringExpenseRepository.GetSome(new BaseFilter() { UserId = filter.UserId, StartDate = CurrentDate.FixFirstDayInMonth(), EndDate = CurrentDate.FixLastDayInMonth() }); var projectionRecurringExpenses = await _recurringExpenseRepository.GetSome(new BaseFilter() { UserId = filter.UserId, Active = true }); foreach (var date in dates) { if (date.SameMonthYear(CurrentDate)) { var expenses = currentRecurringExpenses.Where(p => p.HasHistory() && p.History.Any(x => date.SameMonthYear(x.Date))); foreach (var item in expenses) { list.Add(new PaymentProjectionModel() { Description = $"{item.Description} (Recorrente)", CreditCard = cards.FirstOrDefault(p => p.Id == item.CreditCardId), MonthYear = date.ToString("MM/yyyy"), Type = types.First(p => p.Id == (int)PaymentTypeEnum.Expense), Value = item.History.First(p => date.SameMonthYear(p.Date)).PaidValue }); } foreach (var item in projectionRecurringExpenses.Where(p => !expenses.Select(x => x.Id).Contains(p.Id))) { list.Add(new PaymentProjectionModel() { Description = $"{item.Description} (Recorrente)", CreditCard = cards.FirstOrDefault(p => p.Id == item.CreditCardId), MonthYear = date.ToString("MM/yyyy"), Type = types.First(p => p.Id == (int)PaymentTypeEnum.Expense), Value = item.Value }); } } else { foreach (var item in projectionRecurringExpenses) { list.Add(new PaymentProjectionModel() { Description = $"{item.Description} (Recorrente)", CreditCard = cards.FirstOrDefault(p => p.Id == item.CreditCardId), MonthYear = date.ToString("MM/yyyy"), Type = types.First(p => p.Id == (int)PaymentTypeEnum.Expense), Value = item.Value }); } } } }