private void GetRecurrenceByType(List <long> lstClientId, DateTime dtEnd, RecurrenceResponseModel recurrenceResponse,
                                         IEnumerable <KeyValuePair <string, RecurrenceType> > lstRecurrenceType, Func <long, long, decimal?> funcGetRecurrenceValue)
        {
            foreach (var typeTime in lstRecurrenceType)
            {
                var dtStart = dtEnd.RecurrenceType(typeTime.Value.Value).ToDateShort();
                foreach (var clientId in lstClientId)
                {
                    var bIsNew           = false;
                    var recurrenceClient = recurrenceResponse.LstRecurrence.FirstOrDefault(e => e.ClientId == clientId);

                    if (recurrenceClient == null)
                    {
                        bIsNew           = true;
                        recurrenceClient = new RecurrenceClientModel();
                    }

                    var value = funcGetRecurrenceValue(dtStart, clientId);

                    if (value.HasValue == false)
                    {
                        value = 0;
                    }

                    recurrenceClient.LstName.Add(typeTime.Value.Name);
                    recurrenceClient.LstValue.Add(value.Value);

                    if (!bIsNew)
                    {
                        continue;
                    }

                    recurrenceClient.ClientId = clientId;
                    recurrenceResponse.LstRecurrence.Add(recurrenceClient);
                }
            }
        }
        public ResponseMessageData <RecurrenceResponseModel> CalculateRecurrence(List <long> lstClientId)
        {
            var dtEnd      = DateTime.Today;
            var dtEndShort = dtEnd.ToDateShort();

            var recurrenceResponse = new RecurrenceResponseModel();

            using (_repository)
            {
                //Calcular recurrencia en tiempo
                GetRecurrenceByType(lstClientId, dtEnd, recurrenceResponse, SettingsData.Recurrence.LstRecurrenceTypeTime,
                                    (dtStart, clientId) => _repository.CountRecurrenceByTime(dtStart, dtEndShort, clientId));

                //Calcular recurrencia en total
                GetRecurrenceByType(lstClientId, dtEnd, recurrenceResponse, SettingsData.Recurrence.LstRecurrenceTypeTotal,
                                    (dtStart, clientId) => _repository.TotalRecurrenceByTotal(dtStart, dtEndShort, clientId));
            }

            return(new ResponseMessageData <RecurrenceResponseModel>
            {
                IsSuccess = true,
                Data = recurrenceResponse
            });
        }