/** * Funcion que actualiza el campo de reporte de una participacion de estudiante * * Ingresa la ruta del archivo cargado en el campo de archivo_reporte de la participacion * del estudiante en una prueba. si la prueba es test vocacional hace un insert ya que esta prueba * no registra participacion por parte del estudiante. Para los demas casos realiza un update * a traves de la funcion updateParticipacion * * @author Diego Malagon <*****@*****.**> * @param integer $estudiante_id id de usuario estudiante * @param integer $form_id id de formulario o prueba * @param string $path ruta del archivo */ private function updateArchivoReporte($estudiante_id, $form_id, $path) { $FormServ = $this->get('formularios'); $em = $this->getDoctrine()->getManager(); // Si es para la prueba de test vocacional if ($FormServ->getFormId('test_vocacional') == $form_id) { // Verificar si ya existe un registro $dql = "SELECT COUNT(p.id) AS c \n FROM vocationetBundle:Participaciones p\n WHERE \n p.usuarioEvaluado = :usuario_id\n AND p.formulario = :formulario_id"; $query = $em->createQuery($dql); $query->setParameter('usuario_id', $estudiante_id); $query->setParameter('formulario_id', $form_id); $result = $query->getResult(); $count = $result[0]['c']; // Si no existe crearlo if ($count == 0) { // Insertar nueva participacion para test vocacional $participacion = new \AT\vocationetBundle\Entity\Participaciones(); $participacion->setFormulario($form_id); $participacion->setFecha(new \DateTime()); $participacion->setUsuarioParticipa($estudiante_id); $participacion->setUsuarioEvaluado($estudiante_id); $participacion->setArchivoReporte($path); $participacion->setEstado(1); $em->persist($participacion); $em->flush(); } else { // Actualizar registro de participacion $this->updateParticipacion($estudiante_id, $form_id, $path); } } else { // Actualizar registro de participacion $this->updateParticipacion($estudiante_id, $form_id, $path); } }
/** * 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; }