123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- from __future__ import unicode_literals
- from django.db import models
- from django.core.exceptions import ObjectDoesNotExist
- from django.contrib.auth.models import User
- from encuesta.models import Puntaje_Encuesta
- # utilidades para estadisticas en general
- def ObtenerEvaluaciones(user_id, dimension=1):
- ''' Retorna una lista con evaluaciones hechas por el
- usuario y la dimension dada'''
- puntajes = []
- try:
- P = Puntaje_Encuesta.objects.filter(user=user_id)
- for p in P:
- if p.getDimension() == dimension:
- puntajes.append(p)
- return puntajes
- except ObjectDoesNotExist:
- return []
- def ObtenerEvaluacion(user_id, punto, puntuacion=None):
- ''' Retorna el primer Puntaje_Encuesta encontrado
- '''
- try:
- if puntuacion is None:
- P = Puntaje_Encuesta.objects.get(user=user_id,\
- punto=punto)
- return P
-
- #return list(P.objects.all()[0])[0]
- else:
- P = Puntaje_Encuesta.objects.get(user=user_id,\
- punto=punto,\
- puntuacion=puntuacion)
- # nota: Los query sets en django no son evaluados en la base de datos
- # a menos que se requiera hacer uso de ellos.
- # por eso con list() se fuerza la evaluacion
- # ref: https://docs.djangoproject.com/en/1.11/ref/models/querysets/
- #return list(P.objects.all()[0])[0]
- return P
- except ObjectDoesNotExist:
- return None
- def ExisteEvaluacion(user_id, punto=""):
- ''' Retorna si exsite o no la evaluacion especificada
- '''
- try:
- P = Puntaje_Encuesta.objects.get(user=user_id,\
- punto=punto)
- return True
- except ObjectDoesNotExist:
- return False
- def IdUsuarioRequest(request):
- ''' Retorna el id del usuario del request dado
- '''
- id_usuario = -1
- try:
- if request.user.id is None:
- return 0
- return request.user.id
- except ObjectDoesNotExist:
- return -1
- def PuntuacionTotal(punto=None):
- ''' Retorna la sumatoria de la puntuacion dado el punto '''
- if punto is None:
- return 0
- suma = 0
- try:
- P = Puntaje_Encuesta.objects.filter(punto=punto)
- for p in P:
- suma += p.puntuacion
- return suma
- except ObjectDoesNotExist:
- return 0
- def NumEvaluaciones(punto=None):
- if punto is None:
- return 0
- n = 0
- try:
- P = Puntaje_Encuesta.objects.filter(punto=punto)
- for p in P:
- if p.puntuacion > 0:
- n += 1
- return n
- except ObjectDoesNotExist:
- return 0
-
- def UsuarioRequest(request):
- ''' Retorna el objeto User del request dado '''
- try:
- user = User.objects.get(id=request.user.id)
- return user
- except ObjectDoesNotExist:
- return None
- def OrdenarPuntos(puntajes):
- ''' Obtiene una lista de puntajes (evaluacion de encuesta) y los
- ordena segun el nombre de los puntos, por ejemplo:
- puntos = [1.1.4, 1.1.1.4, 1.2.1, 1.2.3.1, 1.1.6]
- Retorna: [1.1.1.4, 1.1.4, 1.1.6, 1.2.1, 1.2.3.1]
- '''
- lista_puntos = []
- for puntaje in puntajes:
- lista_puntos.append(puntaje["punto"])
- lista_puntos.sort()
- # reordenando
- puntajes_ordenados = []
- for punto in lista_puntos:
- for puntaje in puntajes:
- if punto == puntaje["punto"]:
- puntajes_ordenados.append(puntaje)
-
- return puntajes_ordenados
- def PorcentajeLlenadoEncuesta(user_id, dimension=None):
- ''' Consulta en la base de datos por el porcentaje de lleando
- de respuestas de la encuesta en la dimension dada para el usuario.
- '''
- # ejemplo de query dado:
- # SELECT COUNT(punto) FROM encuesta_puntaje_encuesta WHERE user_id = 1 AND puntuacion > 0;
- # SELECT COUNT(punto) FROM encuesta_puntaje_encuesta WHERE user_id = 1 AND puntuacion > 0 AND .---;
- c = 0
- try:
- P = Puntaje_Encuesta.objects.filter(user=user_id)
- for p in P:
- if p.getDimension() == int(dimension) and p.puntuacion > 0:
- c += 1
- except ObjectDoesNotExist:
- c = 0
- # calculando porcentaje de cumplimiento
- if int(dimension) == 1:
- return c*100/22
- elif int(dimension) == 2:
- return c*100/81
- elif int(dimension) == 3:
- return c*100/49
- elif int(dimension) == 4:
- return c*100/49
- return 0
|