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