Ejemplo n.º 1
0
        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
                        });
                    }
                }
            }
        }