Commit 608ef46c2970f91079dc64cbd293b59261f099d1
1 parent
a57788e9
Exists in
master
and in
2 other branches
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' | ... | ... |