private static void GenerarRespuestasPredeterminadasEnInteraccion( InteraccionModel <InteraccionBusiness> interaccion, RespuestaInteraccionFormularioModelCollection respuestas, PreguntaFormularioModelCollection preguntas) { if (respuestas.Count != preguntas.Count) { if (respuestas.Count == 0) { // Agrega todas las preguntas como respuestas predeterminadas respuestas = new RespuestaInteraccionFormularioModelCollection(); foreach (var preg in preguntas) { respuestas.Add(new RespuestaInteraccionFormularioModel() { Interaccion = (InteraccionModel)interaccion, Pregunta_CodigoSAP = preg.Pregunta_CodigoSAP }); } } else // Merge { // Eliminar respuestas para las cuales no haya pregunta for (int i = respuestas.Count - 1; i >= 0; i--) { RespuestaInteraccionFormularioModel rta = respuestas[i] as RespuestaInteraccionFormularioModel; if (preguntas.Where((preg) => preg.Pregunta_CodigoSAP == rta.Pregunta_CodigoSAP).FirstOrDefault() == null) { respuestas.Remove(rta); } } // Agregar respuestas que falten para cada pregunta foreach (var preg in preguntas) { if (respuestas.Where((rta) => rta.Pregunta_CodigoSAP == preg.Pregunta_CodigoSAP).FirstOrDefault() == null) { respuestas.Add(new RespuestaInteraccionFormularioModel() { Interaccion = (InteraccionModel)interaccion, Pregunta_CodigoSAP = preg.Pregunta_CodigoSAP }); } } } } else { // Puede que la cuenta sea igual pero el contenido no. // Se asume que nunca va a suceder. } interaccion.RespuestasInteraccionFormulario = respuestas; }
/// <summary> /// Crea una lista de Pregunta/Respuesta dependiendo de la categoria seleccionada /// </summary> /// <param name="values"> /// <Binding Path="Categoria" Mode="OneWay"/> /// <Binding Path="Preguntas" Mode="OneWay" /> /// <Binding Path="InteraccionActual" Mode="OneWay" /> // /// <Binding Path="RespuestasPosibles" Mode="OneWay" /> /// </param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns>ObservableCollection<PreguntaRespuestaListItem></returns> public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (!targetType.Name.Contains("ObservableCollection")) { throw new ArgumentOutOfRangeException("targetType", "PreguntasRespuestasXCategoriaConverter can only convert to ObservableCollection<PreguntaRespuestaListItem>"); } if (values[0] == null || !(values[0] is CategoriaPregunta) || values[1] == null || values[1].ToString() == "{DependencyProperty.UnsetValue}" || values[2] == null || values[2].ToString() == "{DependencyProperty.UnsetValue}" || values[3] == null || values[3].ToString() == "{DependencyProperty.UnsetValue}") { return(new ObservableCollection <PreguntaRespuestaListItem>()); } var categoria = values[0] as CategoriaPreguntaModel; var preguntasTodas = values[1] as PreguntaFormularioModelCollection; var interaccion = values[2] as InteraccionModel <InteraccionBusiness>; var respuestasTodas = interaccion.RespuestasInteraccionFormulario; var respuestasPosibles = values[3] as OpcionRespuestaModelCollection; if (categoria == null || preguntasTodas == null || respuestasTodas == null || respuestasPosibles == null) { return(new ObservableCollection <PreguntaRespuestaListItem>()); } // Reiniciamos los contadores de la categoria para recalcularlos. interaccion.Puntaje = 0; interaccion.PuntajeReal = 0; interaccion.PuntajeTotal = 0; var preguntasCategoria = preguntasTodas.Where((p) => p.Pregunta.IdCategoriaPregunta == categoria.IdCategoriaPregunta); var preguntasRespuestas = new ObservableCollection <PreguntaRespuestaListItem>(); foreach (var preg in preguntasCategoria) { var respuesta = respuestasTodas.Where((rta) => rta.Pregunta_CodigoSAP == preg.Pregunta_CodigoSAP).FirstOrDefault(); List <OpcionRespuesta> opcRta = respuestasPosibles.InternalList.Where((rta) => rta.IdPregunta == preg.IdPregunta).ToList(); preguntasRespuestas.Add(new PreguntaRespuestaListItem() { Interaccion = interaccion, Pregunta = preg, Respuesta = RespuestaInteraccionFormularioModel.Create(respuesta == null? null: respuesta.SUPEntity), RespuestasPosibles = new OpcionRespuestaModelCollection(opcRta) }); } return(preguntasRespuestas); }