Commit feaf5b504f5ffdfbb6cc70260d6c58a640e155ea

Authored by Felipe Bormann
1 parent caa3f758

finished weekly chart backend, still has event handler to fix

analytics/static/.sass-cache/01cecb7b42e56765f6ed49ed3c70281ebdc742c7/general.sassc
No preview for this file type
analytics/static/analytics/general.css
@@ -57,10 +57,10 @@ @@ -57,10 +57,10 @@
57 57
58 .chart { 58 .chart {
59 width: 30%; 59 width: 30%;
60 - float: left;  
61 - text-align: center; } 60 + float: left; }
62 .chart h4 { 61 .chart h4 {
63 - color: #009688; } 62 + color: #009688;
  63 + text-align: center; }
64 64
65 .selector { 65 .selector {
66 width: 90%; 66 width: 90%;
analytics/static/analytics/general.css.map
1 { 1 {
2 "version": 3, 2 "version": 3,
3 -"mappings": "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", 3 +"mappings": "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",
4 "sources": ["general.sass"], 4 "sources": ["general.sass"],
5 "names": [], 5 "names": [],
6 "file": "general.css" 6 "file": "general.css"
analytics/static/analytics/general.sass
@@ -74,9 +74,10 @@ $title-color: #009688 @@ -74,9 +74,10 @@ $title-color: #009688
74 .chart 74 .chart
75 width: 30% 75 width: 30%
76 float: left 76 float: left
77 - text-align: center 77 +
78 h4 78 h4
79 color: $title-color 79 color: $title-color
  80 + text-align: center
80 81
81 .selector 82 .selector
82 width: 90% 83 width: 90%
analytics/static/analytics/js/behavior.js
@@ -8,7 +8,7 @@ $(document).ready(function(){ @@ -8,7 +8,7 @@ $(document).ready(function(){
8 8
9 $('#month_selector').change(function(){ 9 $('#month_selector').change(function(){
10 $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){ 10 $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){
11 - charts.month_heatmap(data); 11 + charts.month_heatmap(data, '#right-chart-body');
12 12
13 }); 13 });
14 }); 14 });
@@ -17,7 +17,10 @@ $(document).ready(function(){ @@ -17,7 +17,10 @@ $(document).ready(function(){
17 format: 'L', 17 format: 'L',
18 defaultDate: new Date(), 18 defaultDate: new Date(),
19 }).on('dp.change', function(ev){ 19 }).on('dp.change', function(ev){
20 - console.log(ev.date._i); 20 + $.get('/analytics/get_days_of_the_week_log', {date: ev.date._i}).done(function(data){
  21 + charts.month_heatmap(data, '#bottom-right-chart-body');
  22 + });
  23 +
21 }); 24 });
22 25
23 26
analytics/static/analytics/js/charts.js
@@ -436,16 +436,30 @@ var charts = { @@ -436,16 +436,30 @@ var charts = {
436 436
437 }); 437 });
438 }, 438 },
439 - month_heatmap: function(data){ 439 + month_heatmap: function(data, target){
440 440
441 - if($('#month-chart').length != 0){ 441 +
  442 + if(target == '#right-chart-body' && $('#month-chart').length != 0){
442 $('#month-chart').fadeOut(); 443 $('#month-chart').fadeOut();
443 $('#month-chart').remove(); 444 $('#month-chart').remove();
444 } 445 }
445 - var svg = d3.select('#right-chart-body').append('svg') 446 +
  447 + if(target == "#bottom-right-chart-body" && $('#weekly-chart').length != 0){
  448 + $('#weekly-chart').fadeOut();
  449 + $('#weekly-chart').remove();
  450 + }
  451 +
  452 + var svg = d3.select(target).append('svg')
446 .attr('width', 300) 453 .attr('width', 300)
447 - .attr('height', 200)  
448 - .attr('id', 'month-chart'); 454 + .attr('height', 200);
  455 +
  456 + if (target == "#right-chart-body"){
  457 + svg.attr('id', 'month-chart');
  458 + }
  459 +
  460 + if (target == "#bottom-right-chart-body"){
  461 + svg.attr('id', 'weekly-chart');
  462 + }
449 463
450 //color range 464 //color range
451 var color = d3.scaleLinear().range(["#29c8b8", '#149e91']).domain([0, d3.max(data, function(d){ return d.count; })]); 465 var color = d3.scaleLinear().range(["#29c8b8", '#149e91']).domain([0, d3.max(data, function(d){ return d.count; })]);
@@ -460,12 +474,12 @@ var charts = { @@ -460,12 +474,12 @@ var charts = {
460 .attr("width", rect_width) 474 .attr("width", rect_width)
461 .attr("height", rect_height) 475 .attr("height", rect_height)
462 .attr("class", "day_rect") 476 .attr("class", "day_rect")
463 - .attr("x", function(d){ 477 + .attr("x", function(d, i){
464 478
465 - return rect_width* (d.day % 7);  
466 - }).attr("y", function(d){  
467 - return rect_height*(Math.floor(d.day / 7));  
468 - }).attr("fill", function(d){ 479 + return rect_width* (i % 7);
  480 + }).attr("y", function(d, i){
  481 + return rect_height*(Math.floor(i / 7));
  482 + }).attr("fill", function(d, i ){
469 return color(d.count); 483 return color(d.count);
470 }); 484 });
471 485
@@ -474,10 +488,10 @@ var charts = { @@ -474,10 +488,10 @@ var charts = {
474 return d.day; 488 return d.day;
475 }).attr("fill", "white") 489 }).attr("fill", "white")
476 .attr("text-anchor", "middle") 490 .attr("text-anchor", "middle")
477 - .attr("x", function(d){  
478 - return rect_width* (d.day % 7) + rect_width/2;  
479 - }).attr("y", function(d){  
480 - return rect_height*(Math.floor(d.day / 7)) + rect_height/2; 491 + .attr("x", function(d, i){
  492 + return rect_width* ( i % 7) + rect_width/2;
  493 + }).attr("y", function(d, i){
  494 + return rect_height*(Math.floor( i / 7)) + rect_height/2;
481 }); 495 });
482 496
483 } 497 }
analytics/templates/analytics/general.html
@@ -117,7 +117,9 @@ @@ -117,7 +117,9 @@
117 <span class="glyphicon glyphicon-calendar"></span> 117 <span class="glyphicon glyphicon-calendar"></span>
118 </span> 118 </span>
119 </div> 119 </div>
120 - 120 + <div id="bottom-right-chart-body">
  121 +
  122 + </div>
121 </div> 123 </div>
122 </section> 124 </section>
123 125
analytics/urls.py
@@ -11,5 +11,6 @@ urlpatterns = [ @@ -11,5 +11,6 @@ urlpatterns = [
11 url(r'^most_accessed_categories/$', views.most_accessed_categories, name = "most_accessed_categories"), 11 url(r'^most_accessed_categories/$', views.most_accessed_categories, name = "most_accessed_categories"),
12 url(r'^most_accessed_resources/$', views.most_accessed_resource_kind, name= "most_accessed_resources"), 12 url(r'^most_accessed_resources/$', views.most_accessed_resource_kind, name= "most_accessed_resources"),
13 url(r'^most_active_users/$', views.most_active_users, name= "most_active_users"), 13 url(r'^most_active_users/$', views.most_active_users, name= "most_active_users"),
14 - url(r'^amount_active_users_per_day/$', views.most_active_users_in_a_month, name="most_active_users_in_a_month") 14 + url(r'^amount_active_users_per_day/$', views.most_active_users_in_a_month, name="most_active_users_in_a_month"),
  15 + url(r'^get_days_of_the_week_log/$', views.get_days_of_the_week_log, name="get_days_of_the_week_log"),
15 ] 16 ]
16 \ No newline at end of file 17 \ No newline at end of file
analytics/views.py
@@ -13,8 +13,9 @@ import operator @@ -13,8 +13,9 @@ import operator
13 from django.utils.translation import ugettext_lazy as _ 13 from django.utils.translation import ugettext_lazy as _
14 from django.shortcuts import render, get_object_or_404, redirect 14 from django.shortcuts import render, get_object_or_404, redirect
15 15
16 -from datetime import date 16 +from datetime import date, timedelta, datetime
17 import calendar 17 import calendar
  18 +from collections import OrderedDict
18 19
19 20
20 class GeneralView(generic.TemplateView): 21 class GeneralView(generic.TemplateView):
@@ -71,7 +72,6 @@ def most_active_users_in_a_month(request): @@ -71,7 +72,6 @@ def most_active_users_in_a_month(request):
71 72
72 for day in days: 73 for day in days:
73 built_date = date(date.today().year, mappings[params['month']], day) 74 built_date = date(date.today().year, mappings[params['month']], day)
74 - print(built_date)  
75 day_count = Log.objects.filter(datetime__date = built_date).count() 75 day_count = Log.objects.filter(datetime__date = built_date).count()
76 data[day] = day_count 76 data[day] = day_count
77 77
@@ -159,6 +159,8 @@ def most_active_users(request): @@ -159,6 +159,8 @@ def most_active_users(request):
159 return JsonResponse(fifty_users, safe=False) 159 return JsonResponse(fifty_users, safe=False)
160 160
161 161
  162 +
  163 +
162 def get_days_of_the_month(month): 164 def get_days_of_the_month(month):
163 165
164 #get current year 166 #get current year
@@ -176,7 +178,24 @@ def get_days_of_the_month(month): @@ -176,7 +178,24 @@ def get_days_of_the_month(month):
176 return days_set 178 return days_set
177 179
178 180
  181 +
  182 +def get_days_of_the_week_log(request):
  183 + date = request.GET['date']
  184 + date = datetime.strptime( date, '%m/%d/%Y',)
  185 + days = get_days_of_the_week(date)
  186 + data = {}
  187 +
  188 + for day in days:
  189 + day_count = Log.objects.filter(datetime__date = day).count()
  190 + data[day] = day_count
  191 + data = [{"day": day.day, "count": day_count} for day, day_count in data.items()]
  192 +
  193 + return JsonResponse(data, safe= False)
  194 +
179 def get_days_of_the_week(date): 195 def get_days_of_the_week(date):
180 196
181 - days_set = set() 197 + days_set = []
  198 + days_set.append(date)
  199 + for j in range(1, 7):
  200 + days_set.append(date + timedelta(days=j))
182 return days_set 201 return days_set
183 \ No newline at end of file 202 \ No newline at end of file