Commit 35a9a0b8e03e4123ee51e527542d39c1074b1f71

Authored by Jailson Dias
1 parent dd516893

atualizando grafico e tabelas de relatórios da webpage

webpage/templates/webpages/estatisticas.html
@@ -1,104 +0,0 @@ @@ -1,104 +0,0 @@
1 -{% extends "webpages/view.html" %}  
2 -  
3 -{% load static i18n pagination permissions_tags subject_counter %}  
4 -{% load django_bootstrap_breadcrumbs %}  
5 -  
6 -{% block javascript%}  
7 - {{ block.super }}  
8 - <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>  
9 - <script type="text/javascript">  
10 - google.charts.load('current', {'packages':['corechart',"table"]});  
11 - google.charts.setOnLoadCallback(drawChart);  
12 - google.charts.setOnLoadCallback(drawTable);  
13 -  
14 - function drawChart() {  
15 - var data = google.visualization.arrayToDataTable({{db_data|safe}});  
16 -  
17 - var options = {  
18 - title: '{{title_chart}}',  
19 - vAxis: {  
20 - title: '{{title_vAxis}}',  
21 - ticks: [0, .20, .40, .60, .80, 1],  
22 - viewWindow: {  
23 - min: 0,  
24 - max: 1  
25 - }  
26 - },  
27 - isStacked: "percent",  
28 - };  
29 -  
30 - function selectHandler() {  
31 - var selectedItem = chart.getSelection()[0];  
32 - if (selectedItem) {  
33 - var col = data.getColumnLabel(selectedItem.column);  
34 - window.location.href = '{% url "webpages:get_chart" webpage.slug %}?col='+col + ''  
35 - }  
36 - }  
37 -  
38 - var chart = new google.visualization.SteppedAreaChart(document.getElementById('chart_div'));  
39 - google.visualization.events.addListener(chart, 'select', selectHandler);  
40 - chart.draw(data, options);  
41 - }  
42 -  
43 - function drawTable() {  
44 - var data = new google.visualization.DataTable();  
45 - data.addColumn('string', 'Student');  
46 - data.addColumn('string', 'Email');  
47 - data.addColumn('string', 'Action');  
48 - data.addColumn('date', 'Date/Hour');  
49 - data.addRows(getData());  
50 -  
51 - function getData(){  
52 - var array = [];  
53 - {%for a in history%}  
54 - array.push(['{{a.0}}','{{a.1}}',{% if a.2 is not None %}'{{a.2}}'{% else%}null{% endif %},{% if a.3 is not None %}new Date('{{a.3|date:"D, d M Y H:i:s"}}'){% else%}null{% endif %}]);  
55 - {% endfor%}  
56 - return array;  
57 - }  
58 - var formate_date = new google.visualization.DateFormat({pattern: 'dd/MM/yyyy HH:mm'});  
59 - formate_date.format(data, 3);  
60 -  
61 -  
62 - var table = new google.visualization.Table(document.getElementById('table_div'));  
63 -  
64 - table.draw(data, {showRowNumber: true, width: '100%', height: '100%'});  
65 - }  
66 - </script>  
67 -{% endblock%}  
68 -  
69 -{% block breadcrumbs %}  
70 - {{ block.super }}  
71 - {% trans 'Estatisticas' as bread %}  
72 - {% breadcrumb bread webpage%}  
73 -{% endblock %}  
74 -  
75 -{% block content %}  
76 - {% if messages %}  
77 - {% for message in messages %}  
78 - <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">  
79 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
80 - <span aria-hidden="true">&times;</span>  
81 - </button>  
82 - <p>{{ message }}</p>  
83 - </div>  
84 - {% endfor %}  
85 - {% endif %}  
86 - <div class="row">  
87 - <div class="col-md-10">  
88 - <div id="chart_div" style="height: 500px"></div>  
89 - </div>  
90 - </div>  
91 -  
92 - <div class="row">  
93 - <div class="col-md-10">  
94 - <div class="text-center">  
95 -  
96 - <h3>{{title_table}}</h3>  
97 - </div>  
98 - <div id="table_div"></div>  
99 - </div>  
100 - </div>  
101 - <div class="row">  
102 - <br><br>  
103 - </div>  
104 -{% endblock %}  
webpage/templates/webpages/relatorios.html 0 → 100644
@@ -0,0 +1,129 @@ @@ -0,0 +1,129 @@
  1 +{% extends "webpages/view.html" %}
  2 +
  3 +{% load static i18n pagination permissions_tags subject_counter %}
  4 +{% load django_bootstrap_breadcrumbs %}
  5 +
  6 +{% block javascript%}
  7 + {{ block.super }}
  8 + <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  9 + <script type="text/javascript">
  10 + google.charts.load('current', {'packages':['corechart',"table"]});
  11 + google.charts.setOnLoadCallback(drawChart);
  12 + google.charts.setOnLoadCallback(drawTable);
  13 +
  14 + function drawChart() {
  15 + var data = google.visualization.arrayToDataTable({{db_data|safe}});
  16 +
  17 + var options = {
  18 + title: '{{title_chart}}',
  19 + vAxis: {
  20 + title: '{{title_vAxis}}',
  21 + ticks: [0, .20, .40, .60, .80, 1],
  22 + viewWindow: {
  23 + min: 0,
  24 + max: 1
  25 + }
  26 + },
  27 + isStacked: "percent",
  28 + };
  29 +
  30 + function selectHandler() {
  31 + var selectedItem = chart.getSelection()[0];
  32 + if (selectedItem) {
  33 + var col = data.getColumnLabel(selectedItem.column);
  34 + window.location.href = '{% url "webpages:get_chart" webpage.slug %}?col='+col + ''
  35 + }
  36 + }
  37 +
  38 + var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
  39 + google.visualization.events.addListener(chart, 'select', selectHandler);
  40 + chart.draw(data, options);
  41 + }
  42 +
  43 + function drawTable() {
  44 + var data = new google.visualization.DataTable();
  45 + {%for a in column%}
  46 + data.addColumn('{{a.1}}', '{{a.0}}');
  47 + {% endfor%}
  48 + data.addRows(getData());
  49 + function getData(){
  50 + var array = [];
  51 + {%for a in history%}
  52 + {% if title_table == n_did_table %}
  53 + array.push(['{{a.0}}','{{a.1}}']);
  54 + {% else %}
  55 + array.push(['{{a.0}}','{{a.1}}','{{a.2}}',{% if a.3 is not None %}new Date('{{a.3.isoformat}}'){% else%}null{% endif %}]);
  56 + // console.log(new Date('{{a.3.isoformat}}'));
  57 + {% endif %}
  58 + {% endfor%}
  59 + return array;
  60 + }
  61 + var formate_date = new google.visualization.DateFormat({pattern: 'dd/MM/yyyy HH:mm'});
  62 + {% if not title_table == n_did_table %}
  63 + formate_date.format(data, 3);
  64 + console.log(data);
  65 + {% endif %}
  66 +
  67 + var table = new google.visualization.Table(document.getElementById('table_div'));
  68 +
  69 + table.draw(data, {showRowNumber: true, width: '100%', height: '100%'});
  70 + }
  71 + </script>
  72 +{% endblock%}
  73 +
  74 +{% block breadcrumbs %}
  75 + {{ block.super }}
  76 + {% trans 'Reports' as bread %}
  77 + {% breadcrumb bread webpage%}
  78 +{% endblock %}
  79 +
  80 +{% block content %}
  81 + {% if messages %}
  82 + {% for message in messages %}
  83 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
  84 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  85 + <span aria-hidden="true">&times;</span>
  86 + </button>
  87 + <p>{{ message }}</p>
  88 + </div>
  89 + {% endfor %}
  90 + {% endif %}
  91 + <div class="row">
  92 + <div class="col-md-10">
  93 + <div id="chart_div" style="height: 500px"></div>
  94 + </div>
  95 + </div>
  96 +
  97 + <div class="row">
  98 + <div class="col-md-10">
  99 + <div class="text-center">
  100 +
  101 + <ul class="list-inline">
  102 + <li>
  103 + {% if out_history %}
  104 + <a href="{% url 'webpages:get_chart' webpage.slug %}"> <i class="fa fa-arrow-left ta-fw"> </i> {% trans "History" %}</a>
  105 + {% endif %}
  106 + </li>
  107 + <li><h3>{{title_table}}</h3></li>
  108 + </ul>
  109 + <div class="row">
  110 + <div class="col-md-7">
  111 + <ul id="report-info">
  112 + {# <li> {{data.values|length}} {% trans "register(s)" %} </li>#}
  113 + <li>
  114 + <a href=""><i class="fa fa-download" aria-hidden="true"></i> {% trans "Interactions Data (.csv)" %}</a>
  115 + </li>
  116 + <li><a href=""><i class="fa fa-download" aria-hidden="true"></i> {% trans "Interactions Data (.xls)" %}</a></li>
  117 + </ul>
  118 + </div>
  119 + <div class="col-md-3">
  120 + </div>
  121 + </div>
  122 + </div>
  123 + <div id="table_div"></div>
  124 + </div>
  125 + </div>
  126 + <div class="row">
  127 + <br><br>
  128 + </div>
  129 +{% endblock %}
webpage/templates/webpages/view.html
@@ -54,11 +54,5 @@ @@ -54,11 +54,5 @@
54 {{ webpage.content }} 54 {{ webpage.content }}
55 {% endautoescape %} 55 {% endautoescape %}
56 </div> 56 </div>
57 -  
58 - <div class="row">  
59 - <div class="text-center">  
60 - <a href="{% url 'webpages:get_chart' webpage.slug %}" class="btn btn-raised btn-success">{% trans "Statistics" %}</a>  
61 - </div>  
62 - </div>  
63 </div> 57 </div>
64 {% endblock %} 58 {% endblock %}
webpage/views.py
@@ -426,7 +426,7 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView): @@ -426,7 +426,7 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView):
426 login_url = reverse_lazy("users:login") 426 login_url = reverse_lazy("users:login")
427 redirect_field_name = 'next' 427 redirect_field_name = 'next'
428 model = Webpage 428 model = Webpage
429 - template_name = 'webpages/estatisticas.html' 429 + template_name = 'webpages/relatorios.html'
430 430
431 def dispatch(self, request, *args, **kwargs): 431 def dispatch(self, request, *args, **kwargs):
432 slug = self.kwargs.get('slug', '') 432 slug = self.kwargs.get('slug', '')
@@ -456,7 +456,7 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView): @@ -456,7 +456,7 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView):
456 super(StatisticsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 456 super(StatisticsView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
457 457
458 458
459 - context['title'] = _('Webpage Statistics') 459 + context['title'] = _('Webpage Reports')
460 460
461 slug = self.kwargs.get('slug') 461 slug = self.kwargs.get('slug')
462 webpage = get_object_or_404(Webpage, slug = slug) 462 webpage = get_object_or_404(Webpage, slug = slug)
@@ -464,31 +464,66 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView): @@ -464,31 +464,66 @@ class StatisticsView(LoginRequiredMixin, LogMixin, generic.DetailView):
464 parameter = self.request.GET.get('col','') 464 parameter = self.request.GET.get('col','')
465 465
466 alunos = webpage.students.all() 466 alunos = webpage.students.all()
467 - visualizou = Log.objects.filter(context__contains={'webpage_id':webpage.id},resource="webpage",action="view",user_email__in=(aluno.email for aluno in alunos)).distinct("user_email") 467 + vis_ou = Log.objects.filter(context__contains={'webpage_id':webpage.id},resource="webpage",action="view",user_email__in=(aluno.email for aluno in alunos))
  468 + did,n_did,history = str(_("Users who viewed")),str(_("Users who did not viewed")),str(_("History"))
468 re = [] 469 re = []
469 - c_visualizou = visualizou.count()  
470 - did,n_did = str(_("Did")),str(_("Did not"))  
471 - re.append(['Webpage',did,n_did])  
472 - re.append(['View',c_visualizou, alunos.count() - c_visualizou]) 470 + data = []
  471 + column = []
  472 + column.append([str(_("User")),"string"])
  473 + column.append([str(_("Group")),"string"])
  474 +
  475 + if parameter == did:
  476 + from django.db.models import Count, Max
  477 + views_user = vis_ou.values("user_email").annotate(views=Count("user_email"))
  478 + date_last = vis_ou.values("user_email").annotate(last=Max("datetime"))
  479 + column.append([str(_("Number of views")),"string"])
  480 + column.append([str(_("Date of last view")),"date"])
  481 + for i in range(0,len(views_user)):
  482 + data.append([str(alunos.get(email=views_user[i].get("user_email"))),
  483 + ", ".join([str(x) for x in webpage.topic.subject.group_subject.filter(participants__email=views_user[i].get("user_email"))]),
  484 + views_user[i].get("views"),date_last.get(user_email=views_user[i].get("user_email")).get("last")])
  485 + elif parameter == n_did:
  486 + not_view = alunos.exclude(email__in=[log.user_email for log in vis_ou.distinct("user_email")])
  487 + for alun in not_view:
  488 + data.append([str(alun),", ".join([str(x) for x in webpage.topic.subject.group_subject.filter(participants__email=alun.email)])])
  489 +
  490 + else:
  491 + column.append([str(_("Action")),"string"])
  492 + column.append([str(_("Date of action")),"date"])
  493 + for log_al in vis_ou.order_by("datetime"):
  494 + data.append([str(alunos.get(email=log_al.user_email)),
  495 + ", ".join([str(x) for x in webpage.topic.subject.group_subject.filter(participants__email=log_al.user_email)]),
  496 + log_al.action,log_al.datetime])
  497 +
  498 +
  499 + c_visualizou = vis_ou.distinct("user_email").count()
  500 + re.append([str(_('Webpage')),did,n_did])
  501 + re.append([str(_('View')),c_visualizou, alunos.count() - c_visualizou])
473 context['topic'] = webpage.topic 502 context['topic'] = webpage.topic
474 context['subject'] = webpage.topic.subject 503 context['subject'] = webpage.topic.subject
475 context['db_data'] = re 504 context['db_data'] = re
476 context['title_chart'] = _('Students viewing the web conference') 505 context['title_chart'] = _('Students viewing the web conference')
477 context['title_vAxis'] = _('Quantity') 506 context['title_vAxis'] = _('Quantity')
478 - data = []  
479 - if not parameter == n_did:  
480 - for a in visualizou:  
481 - data.append([str(alunos.get(email=a.user_email)),a.user_email,a.action,a.datetime])  
482 -  
483 - if not parameter == did:  
484 - alunos = alunos.exclude(email__in=(log.user_email for log in visualizou))  
485 - for a in alunos:  
486 - data.append([str(a),a.email,None,None])  
487 - 507 + # data = []
  508 + # if not parameter == n_did:
  509 + # for a in vis_ou.distinct("user_email"):
  510 + # data.append([str(alunos.get(email=a.user_email)),a.user_email,a.action,a.datetime])
  511 + #
  512 + # if not parameter == did:
  513 + # alunos = alunos.exclude(email__in=(log.user_email for log in vis_ou.distinct("user_email")))
  514 + # for a in alunos:
  515 + # data.append([str(a),a.email,None,None])
  516 + print (column, "column\n\n")
  517 + context["column"] = column
  518 + print (data, "data\n\n")
488 context["history"] = data 519 context["history"] = data
489 - context["title_table"] = _("History") 520 + context["title_table"] = history
  521 + context["n_did_table"] = n_did
  522 + context["out_history"] = False
490 if parameter == did: 523 if parameter == did:
491 context["title_table"] = did 524 context["title_table"] = did
  525 + context["out_history"] = True
492 elif parameter == n_did: 526 elif parameter == n_did:
493 context["title_table"] = n_did 527 context["title_table"] = n_did
  528 + context["out_history"] = True
494 return context 529 return context