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,6 +14,7 @@ import xlwt | ||
14 | import xlrd | 14 | import xlrd |
15 | import time | 15 | import time |
16 | import datetime | 16 | import datetime |
17 | +from statistics import median | ||
17 | from log.mixins import LogMixin | 18 | from log.mixins import LogMixin |
18 | 19 | ||
19 | from topics.models import Topic | 20 | from topics.models import Topic |
@@ -136,14 +137,33 @@ class NewWindowView(LoginRequiredMixin, LogMixin, generic.DetailView): | @@ -136,14 +137,33 @@ class NewWindowView(LoginRequiredMixin, LogMixin, generic.DetailView): | ||
136 | else: | 137 | else: |
137 | lista_metas[x]['estabelecida'] = metas_pessoais[x].value | 138 | lista_metas[x]['estabelecida'] = metas_pessoais[x].value |
138 | 139 | ||
139 | - context['metas'] = lista_metas | ||
140 | - | ||
141 | alcancadas, medias = read_excel_file(self.request.user,meta_geral,len(itens_da_meta),bulletin) | 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 | for x in range(len(lista_metas)): | 143 | for x in range(len(lista_metas)): |
144 | lista_metas[x]['alcancada'] = alcancadas[x] | 144 | lista_metas[x]['alcancada'] = alcancadas[x] |
145 | lista_metas[x]['media'] = medias[x] | 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 | return context | 168 | return context |
149 | 169 | ||
@@ -240,12 +260,33 @@ class InsideView(LoginRequiredMixin, LogMixin, generic.DetailView): | @@ -240,12 +260,33 @@ class InsideView(LoginRequiredMixin, LogMixin, generic.DetailView): | ||
240 | lista_metas[x]['estabelecida'] = metas_pessoais[x].value | 260 | lista_metas[x]['estabelecida'] = metas_pessoais[x].value |
241 | 261 | ||
242 | alcancadas, medias = read_excel_file(self.request.user,meta_geral,len(itens_da_meta),bulletin) | 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 | for x in range(len(lista_metas)): | 265 | for x in range(len(lista_metas)): |
245 | lista_metas[x]['alcancada'] = alcancadas[x] | 266 | lista_metas[x]['alcancada'] = alcancadas[x] |
246 | lista_metas[x]['media'] = medias[x] | 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 | context['metas'] = lista_metas | 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 | return context | 291 | return context |
251 | 292 | ||
@@ -489,6 +530,65 @@ def read_excel_file(estudante,meta,qtd,boletim): | @@ -489,6 +530,65 @@ def read_excel_file(estudante,meta,qtd,boletim): | ||
489 | 530 | ||
490 | return alcance, medias | 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 | class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView): | 593 | class UpdateView(LoginRequiredMixin, LogMixin, generic.UpdateView): |
494 | log_component = 'resources' | 594 | log_component = 'resources' |