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