utils.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. from __future__ import unicode_literals
  2. from django.db import models
  3. from django.core.exceptions import ObjectDoesNotExist
  4. from django.contrib.auth.models import User
  5. from encuesta.models import Puntaje_Encuesta
  6. # utilidades para estadisticas en general
  7. def ObtenerEvaluaciones(user_id, dimension=1):
  8. ''' Retorna una lista con evaluaciones hechas por el
  9. usuario y la dimension dada'''
  10. puntajes = []
  11. try:
  12. P = Puntaje_Encuesta.objects.filter(user=user_id)
  13. for p in P:
  14. if p.getDimension() == dimension:
  15. puntajes.append(p)
  16. return puntajes
  17. except ObjectDoesNotExist:
  18. return []
  19. def ObtenerEvaluacion(user_id, punto, puntuacion=None):
  20. ''' Retorna el primer Puntaje_Encuesta encontrado
  21. '''
  22. try:
  23. if puntuacion is None:
  24. P = Puntaje_Encuesta.objects.get(user=user_id,\
  25. punto=punto)
  26. return P
  27. #return list(P.objects.all()[0])[0]
  28. else:
  29. P = Puntaje_Encuesta.objects.get(user=user_id,\
  30. punto=punto,\
  31. puntuacion=puntuacion)
  32. # nota: Los query sets en django no son evaluados en la base de datos
  33. # a menos que se requiera hacer uso de ellos.
  34. # por eso con list() se fuerza la evaluacion
  35. # ref: https://docs.djangoproject.com/en/1.11/ref/models/querysets/
  36. #return list(P.objects.all()[0])[0]
  37. return P
  38. except ObjectDoesNotExist:
  39. return None
  40. def ExisteEvaluacion(user_id, punto=""):
  41. ''' Retorna si exsite o no la evaluacion especificada
  42. '''
  43. try:
  44. P = Puntaje_Encuesta.objects.get(user=user_id,\
  45. punto=punto)
  46. return True
  47. except ObjectDoesNotExist:
  48. return False
  49. def IdUsuarioRequest(request):
  50. ''' Retorna el id del usuario del request dado
  51. '''
  52. id_usuario = -1
  53. try:
  54. if request.user.id is None:
  55. return 0
  56. return request.user.id
  57. except ObjectDoesNotExist:
  58. return -1
  59. def PuntuacionTotal(punto=None):
  60. ''' Retorna la sumatoria de la puntuacion dado el punto '''
  61. if punto is None:
  62. return 0
  63. suma = 0
  64. try:
  65. P = Puntaje_Encuesta.objects.filter(punto=punto)
  66. for p in P:
  67. suma += p.puntuacion
  68. return suma
  69. except ObjectDoesNotExist:
  70. return 0
  71. def NumEvaluaciones(punto=None):
  72. if punto is None:
  73. return 0
  74. n = 0
  75. try:
  76. P = Puntaje_Encuesta.objects.filter(punto=punto)
  77. for p in P:
  78. if p.puntuacion > 0:
  79. n += 1
  80. return n
  81. except ObjectDoesNotExist:
  82. return 0
  83. def UsuarioRequest(request):
  84. ''' Retorna el objeto User del request dado '''
  85. try:
  86. user = User.objects.get(id=request.user.id)
  87. return user
  88. except ObjectDoesNotExist:
  89. return None
  90. def OrdenarPuntos(puntajes):
  91. ''' Obtiene una lista de puntajes (evaluacion de encuesta) y los
  92. ordena segun el nombre de los puntos, por ejemplo:
  93. puntos = [1.1.4, 1.1.1.4, 1.2.1, 1.2.3.1, 1.1.6]
  94. Retorna: [1.1.1.4, 1.1.4, 1.1.6, 1.2.1, 1.2.3.1]
  95. '''
  96. lista_puntos = []
  97. for puntaje in puntajes:
  98. lista_puntos.append(puntaje["punto"])
  99. lista_puntos.sort()
  100. # reordenando
  101. puntajes_ordenados = []
  102. for punto in lista_puntos:
  103. for puntaje in puntajes:
  104. if punto == puntaje["punto"]:
  105. puntajes_ordenados.append(puntaje)
  106. return puntajes_ordenados
  107. def PorcentajeLlenadoEncuesta(user_id, dimension=None):
  108. ''' Consulta en la base de datos por el porcentaje de lleando
  109. de respuestas de la encuesta en la dimension dada para el usuario.
  110. '''
  111. # ejemplo de query dado:
  112. # SELECT COUNT(punto) FROM encuesta_puntaje_encuesta WHERE user_id = 1 AND puntuacion > 0;
  113. # SELECT COUNT(punto) FROM encuesta_puntaje_encuesta WHERE user_id = 1 AND puntuacion > 0 AND .---;
  114. c = 0
  115. try:
  116. P = Puntaje_Encuesta.objects.filter(user=user_id)
  117. for p in P:
  118. if p.getDimension() == int(dimension) and p.puntuacion > 0:
  119. c += 1
  120. except ObjectDoesNotExist:
  121. c = 0
  122. # calculando porcentaje de cumplimiento
  123. if int(dimension) == 1:
  124. return c*100/22
  125. elif int(dimension) == 2:
  126. return c*100/81
  127. elif int(dimension) == 3:
  128. return c*100/49
  129. elif int(dimension) == 4:
  130. return c*100/49
  131. return 0