Commit 608ef46c2970f91079dc64cbd293b59261f099d1

Authored by Gustavo
1 parent a57788e9

Modified bulletin views.py to get indicators data

Showing 1 changed file with 102 additions and 2 deletions   Show diff stats
bulletin/views.py
... ... @@ -14,6 +14,7 @@ import xlwt
14 14 import xlrd
15 15 import time
16 16 import datetime
  17 +from statistics import median
17 18 from log.mixins import LogMixin
18 19  
19 20 from topics.models import Topic
... ... @@ -136,14 +137,33 @@ class NewWindowView(LoginRequiredMixin, LogMixin, generic.DetailView):
136 137 else:
137 138 lista_metas[x]['estabelecida'] = metas_pessoais[x].value
138 139  
139   - context['metas'] = lista_metas
140   -
141 140 alcancadas, medias = read_excel_file(self.request.user,meta_geral,len(itens_da_meta),bulletin)
  141 + maximos, medianas, resultados,titulos = read_excel_file_indicators(self.request.user,bulletin)
142 142  
143 143 for x in range(len(lista_metas)):
144 144 lista_metas[x]['alcancada'] = alcancadas[x]
145 145 lista_metas[x]['media'] = medias[x]
146 146  
  147 + qtd_atendida = 0
  148 + qtd_metas = len(itens_da_meta)
  149 + for x in range(len(lista_metas)):
  150 + #Caso 1: Meta alcançada foi maior que a meta desejada
  151 + caso1 = lista_metas[x]['alcancada'] > lista_metas[x]['desejada']
  152 +
  153 + #Caso 2: Meta alcançada foi maior que a meta estabelecida
  154 + caso2 = lista_metas[x]['alcancada'] > lista_metas[x]['estabelecida']
  155 + if caso1 or caso2:
  156 + qtd_atendida += 1
  157 +
  158 + porcentagem = calcula_porcentagem(qtd_atendida,qtd_metas)
  159 +
  160 + #Adicionando ao contexto
  161 + context['metas'] = lista_metas
  162 + context['percent'] = porcentagem
  163 + context['maximos'] = maximos
  164 + context['medianas'] = medianas
  165 + context['resultados'] = resultados
  166 + context['titulos'] = titulos
147 167  
148 168 return context
149 169  
... ... @@ -240,12 +260,33 @@ class InsideView(LoginRequiredMixin, LogMixin, generic.DetailView):
240 260 lista_metas[x]['estabelecida'] = metas_pessoais[x].value
241 261  
242 262 alcancadas, medias = read_excel_file(self.request.user,meta_geral,len(itens_da_meta),bulletin)
  263 + maximos, medianas, resultados,titulos = read_excel_file_indicators(self.request.user,bulletin)
243 264  
244 265 for x in range(len(lista_metas)):
245 266 lista_metas[x]['alcancada'] = alcancadas[x]
246 267 lista_metas[x]['media'] = medias[x]
247 268  
  269 +
  270 + qtd_atendida = 0
  271 + qtd_metas = len(itens_da_meta)
  272 + for x in range(len(lista_metas)):
  273 + #Caso 1: Meta alcançada foi maior que a meta desejada
  274 + caso1 = lista_metas[x]['alcancada'] > lista_metas[x]['desejada']
  275 +
  276 + #Caso 2: Meta alcançada foi maior que a meta estabelecida
  277 + caso2 = lista_metas[x]['alcancada'] > lista_metas[x]['estabelecida']
  278 + if caso1 or caso2:
  279 + qtd_atendida += 1
  280 +
  281 + porcentagem = calcula_porcentagem(qtd_atendida,qtd_metas)
  282 +
  283 + #Adicionando ao contexto
248 284 context['metas'] = lista_metas
  285 + context['percent'] = porcentagem
  286 + context['maximos'] = maximos
  287 + context['medianas'] = medianas
  288 + context['resultados'] = resultados
  289 + context['titulos'] = titulos
249 290  
250 291 return context
251 292  
... ... @@ -489,6 +530,65 @@ def read_excel_file(estudante,meta,qtd,boletim):
489 530  
490 531 return alcance, medias
491 532  
  533 +def read_excel_file_indicators(estudante,boletim):
  534 + name = boletim.indicators.path
  535 + arq = xlrd.open_workbook(name)
  536 + sheet = arq.sheet_by_index(0)
  537 + maximos = []
  538 + medianas = []
  539 + resultados = []
  540 + ind1 = []
  541 + ind2 = []
  542 + ind3 = []
  543 + ind4 = []
  544 + ind5 = []
  545 + ind6 = []
  546 +
  547 + #Adicionando na lista de cada indicador o resultado de cada estudante
  548 + for n in range(0,sheet.nrows):
  549 + if n == 0:
  550 + linha = sheet.row_values(n,2,8)
  551 + titulos = list(linha)
  552 +
  553 + else:
  554 + linha = sheet.row_values(n)
  555 + if int(linha[8]) == 1:
  556 + ind1.append(int(linha[2]))
  557 + ind2.append(int(linha[3]))
  558 + ind3.append(int(linha[4]))
  559 + ind4.append(int(linha[5]))
  560 + ind5.append(int(linha[6]))
  561 + ind6.append(int(linha[7]))
  562 + if int(linha[0]) == int(estudante.id):
  563 + for x in range(2,8):
  564 + resultados.append(int(linha[x]))
  565 +
  566 + #Adicionando na lista de maximos o valor máximo para cada indicador
  567 + maximos.append(max(ind1))
  568 + maximos.append(max(ind2))
  569 + maximos.append(max(ind3))
  570 + maximos.append(max(ind4))
  571 + maximos.append(max(ind5))
  572 + maximos.append(max(ind6))
  573 +
  574 + #Adicionando na lista de medianas o valor da mediana para cada indicador
  575 + mediana1, mediana2, mediana3, mediana4, mediana5, mediana6 = round(median(ind1), 1), round(median(ind2), 1), round(median(ind3), 1), round(median(ind4), 1), round(median(ind5), 1), round(median(ind6), 1)
  576 +
  577 + medianas.append(mediana1)
  578 + medianas.append(mediana2)
  579 + medianas.append(mediana3)
  580 + medianas.append(mediana4)
  581 + medianas.append(mediana5)
  582 + medianas.append(mediana6)
  583 +
  584 + #Checando caso quem está visualizando não seja um estudante, dai preenche com 0
  585 + if len(resultados) == 0:
  586 + resultados = [0] * 6
  587 +
  588 + return maximos, medianas, resultados, titulos
  589 +
  590 +def calcula_porcentagem(parte, todo):
  591 + return int(100 * int(parte)/int(todo))
492 592  
493 593 class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView):
494 594 log_component = 'resources'
... ...