Пример #1
0
 /**
  * Funcion para registrar y calificar las respuestas de usuario en base de datos 
  * 
  * @param integer $formId id de formulario principal
  * @param integer $usuarioId id de usuario que participa
  * @param array $preguntas arreglo de preguntas con id y tipo de pregunta
  * @param array $respuestas arreglo de respuestas recibido del formulario enviado
  * @param integer $usuarioEvaluadoId id de usuario evaluado en el caso de evaluacion 360
  * @param array $adicionales arreglo con respuestas a preguntas no registradas
  * @param integer $carreraId id de carrera se usa unicamente para formulario de ponderacion
  * @return integer puntuacion de las respuestas
  */
 private function registrarRespuestas($formId, $usuarioId, $preguntas, $respuestas, $usuarioEvaluadoId = false, $adicionales = false, $carreraId = false)
 {
     // Registrar participacion
     if ($formId == $this->getFormId('evaluacion360')) {
         // Actualizar registro de invitacion
         $usuarioEmail = $this->security->getSessionValue("usuarioEmail");
         $participacion = $this->em->getRepository("vocationetBundle:Participaciones")->findOneBy(array("formulario" => $formId, "correoInvitacion" => $usuarioEmail, "usuarioEvaluado" => $usuarioEvaluadoId));
         if ($participacion) {
             $participacion->setFecha(new \DateTime());
             $participacion->setUsuarioParticipa($usuarioId);
             $participacion->setEstado(1);
             $this->em->persist($participacion);
         }
     } else {
         // Única prueba que no aprueba el mentor de orientación vocacional
         $estado_part = 1;
         if ($formId == $this->getFormId('diagnostico')) {
             $estado_part = 2;
         }
         $participacion = new \AT\vocationetBundle\Entity\Participaciones();
         $participacion->setFormulario($formId);
         $participacion->setFecha(new \DateTime());
         $participacion->setUsuarioParticipa($usuarioId);
         $participacion->setUsuarioEvaluado($usuarioId);
         $participacion->setEstado($estado_part);
         if ($carreraId) {
             $participacion->setCarrera($carreraId);
         }
         $this->em->persist($participacion);
     }
     $puntaje = 0;
     // Registrar respuestas segun tipo de pregunta
     foreach ($preguntas as $preg) {
         $respuesta = new \AT\vocationetBundle\Entity\Respuestas();
         $respuesta->setParticipacion($participacion);
         $respuesta->setPregunta($preg['id']);
         $res = $respuestas[$preg['id']];
         // Asignar respuesta numerica o texto y calcular puntaje segun el tipo de pregunta
         switch ($preg['preguntaTipoId']) {
             case 1:
                 $respuesta->setRespuestaNumerica($res);
                 $valor = 0;
                 if (isset($preg['opciones'][$res]['peso'])) {
                     $valor = $preg['opciones'][$res]['peso'];
                 }
                 $respuesta->setValor($valor);
                 break;
             case 2:
                 $valor = 0;
                 foreach ($res as $r) {
                     if (isset($preg['opciones'][$r]['peso'])) {
                         $valor += $preg['opciones'][$r]['peso'];
                     }
                 }
                 $res = implode(",", $res);
                 $respuesta->setRespuestaTexto($res);
                 $respuesta->setValor($valor);
                 break;
             case 3:
                 $respuesta->setRespuestaTexto($res);
                 $valor = 0;
                 $res = explode(",", $res);
                 $pos = count($res);
                 foreach ($res as $r) {
                     if (isset($preg['opciones'][$r]['peso'])) {
                         $peso = $preg['opciones'][$r]['peso'];
                         $valor += $peso * $pos;
                     }
                     $pos--;
                 }
                 $respuesta->setValor($valor);
                 break;
             case 4:
                 $respuesta->setRespuestaNumerica($res);
                 $valor = $res;
                 $respuesta->setValor($valor);
                 break;
             case 5:
                 $respuesta->setRespuestaNumerica($res);
                 $valor = $res;
                 $respuesta->setValor($valor);
                 break;
             case 6:
                 $respuesta->setRespuestaNumerica($res);
                 $valor = $res / 100;
                 $respuesta->setValor($valor);
                 break;
             case 7:
                 $respuesta->setRespuestaNumerica($res);
                 $valor = $res;
                 $respuesta->setValor($valor);
                 break;
             case 8:
                 $respuesta->setRespuestaTexto($res);
                 $valor = 0;
                 $respuesta->setValor($valor);
                 break;
         }
         $puntaje += $valor;
         $this->em->persist($respuesta);
     }
     if ($adicionales) {
         foreach ($adicionales as $key => $a) {
             $json = json_encode($a);
             $adicional = new \AT\vocationetBundle\Entity\RespuestasAdicionales();
             $adicional->setParticipacion($participacion);
             $adicional->setRespuestaKey($key);
             $adicional->setRespuestaJson($json);
             $this->em->persist($adicional);
         }
     }
     $this->em->flush();
     return $puntaje;
 }