mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-30 13:58:49 +01:00
adds chart to see all actions in all past months
This one is a bit hidden. You need to click on a bar in the chart with the actions from the last 12 months. Need to change this so people can find it easier
This commit is contained in:
parent
909519293b
commit
44f8646881
5 changed files with 161 additions and 28 deletions
|
|
@ -105,7 +105,107 @@ class StatsController < ApplicationController
|
|||
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
def actions_done_last_years
|
||||
@chart_width = 900
|
||||
@chart_height = 400
|
||||
end
|
||||
|
||||
def actions_done_lastyears_data
|
||||
@actions = @user.todos
|
||||
|
||||
# get actions created and completed in the past 12+3 months. +3 for running
|
||||
# average
|
||||
@actions_done_last_months = @actions.find(:all, {
|
||||
:select => "completed_at",
|
||||
:conditions => ["completed_at IS NOT NULL"]
|
||||
})
|
||||
@actions_created_last_months = @actions.find(:all, {
|
||||
:select => "created_at",
|
||||
})
|
||||
|
||||
@month_count = 0
|
||||
|
||||
# convert to hash to be able to fill in non-existing days in
|
||||
# @actions_done_last12months and count the total actions done in the past
|
||||
# 12 months to be able to calculate percentage
|
||||
|
||||
# use 0 to initialise action count to zero
|
||||
@actions_done_last_months_hash = Hash.new(0)
|
||||
@actions_done_last_months.each do |r|
|
||||
months = (@today.year - r.completed_at.year)*12 + (@today.month - r.completed_at.month)
|
||||
@month_count = months if months > @month_count
|
||||
@actions_done_last_months_hash[months] += 1
|
||||
end
|
||||
|
||||
# convert to hash to be able to fill in non-existing days in
|
||||
# @actions_created_last12months and count the total actions done in the
|
||||
# past 12 months to be able to calculate percentage
|
||||
|
||||
# use 0 to initialise action count to zero
|
||||
@actions_created_last_months_hash = Hash.new(0)
|
||||
@actions_created_last_months.each do |r|
|
||||
months = (@today.year - r.created_at.year)*12 + (@today.month - r.created_at.month)
|
||||
@month_count = months if months > @month_count
|
||||
@actions_created_last_months_hash[months] += 1
|
||||
end
|
||||
|
||||
@sum_actions_done_last_months=0
|
||||
@sum_actions_created_last_months=0
|
||||
|
||||
# find max for graph in both hashes
|
||||
@max=0
|
||||
0.upto @month_count do |i|
|
||||
@sum_actions_done_last_months += @actions_done_last_months_hash[i]
|
||||
@max = @actions_done_last_months_hash[i] if @actions_done_last_months_hash[i] > @max
|
||||
end
|
||||
0.upto @month_count do |i|
|
||||
@sum_actions_created_last_months += @actions_created_last_months_hash[i]
|
||||
@max = @actions_created_last_months_hash[i] if @actions_created_last_months_hash[i] > @max
|
||||
end
|
||||
|
||||
# find running avg for month i by calculating avg of month i and the two
|
||||
# after them. Ignore current month because you do not have full data for
|
||||
# it
|
||||
@actions_done_avg_last_months_hash = Hash.new("null")
|
||||
1.upto(@month_count) { |i|
|
||||
@actions_done_avg_last_months_hash[i] = (@actions_done_last_months_hash[i] +
|
||||
@actions_done_last_months_hash[i+1] +
|
||||
@actions_done_last_months_hash[i+2])/3.0
|
||||
}
|
||||
# correct last two months
|
||||
@actions_done_avg_last_months_hash[@month_count] = @actions_done_avg_last_months_hash[@month_count] * 3
|
||||
@actions_done_avg_last_months_hash[@month_count-1] = @actions_done_avg_last_months_hash[@month_count-1] * 3 / 2 if @month_count > 1
|
||||
|
||||
# find running avg for month i by calculating avg of month i and the two
|
||||
# after them. Ignore current month because you do not have full data for
|
||||
# it
|
||||
@actions_created_avg_last_months_hash = Hash.new("null")
|
||||
1.upto(@month_count) { |i|
|
||||
@actions_created_avg_last_months_hash[i] = (@actions_created_last_months_hash[i] +
|
||||
@actions_created_last_months_hash[i+1] +
|
||||
@actions_created_last_months_hash[i+2])/3.0
|
||||
}
|
||||
# correct last two months
|
||||
@actions_created_avg_last_months_hash[@month_count] = @actions_created_avg_last_months_hash[@month_count] * 3
|
||||
@actions_created_avg_last_months_hash[@month_count-1] = @actions_created_avg_last_months_hash[@month_count-1] * 3 / 2 if @month_count > 1
|
||||
|
||||
# interpolate avg for this month. Assume 31 days in this month
|
||||
days_passed_this_month = Time.new.day/1.0
|
||||
@interpolated_actions_created_this_month = (
|
||||
@actions_created_last_months_hash[0]/days_passed_this_month*31.0+
|
||||
@actions_created_last_months_hash[1]+
|
||||
@actions_created_last_months_hash[2]) / 3.0
|
||||
|
||||
@interpolated_actions_done_this_month = (
|
||||
@actions_done_last_months_hash[0]/days_passed_this_month*31.0 +
|
||||
@actions_done_last_months_hash[1]+
|
||||
@actions_done_last_months_hash[2]) / 3.0
|
||||
|
||||
render :layout => false
|
||||
end
|
||||
|
||||
|
||||
def actions_done_last30days_data
|
||||
# get actions created and completed in the past 30 days.
|
||||
@actions_done_last30days = @actions.find(:all, {
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
&line_7=1,0xAA0000&
|
||||
&line_8=1,0x007700&
|
||||
&values=<% 0.upto 11 do |i| -%><%= @actions_created_last12months_hash[i]%>,<% end -%><%= @actions_created_last12months_hash[12]%>&
|
||||
&links=<% 0.upto 11 do |i| -%><%= url_for :controller => 'stats', :action => 'actions_done_last_years' %>,<% end -%><%= url_for :controller => 'stats', :action => 'actions_done_last_years' %>&
|
||||
&links_2=<% 0.upto 11 do |i| -%><%= url_for :controller => 'stats', :action => 'actions_done_last_years' %>,<% end -%><%= url_for :controller => 'stats', :action => 'actions_done_last_years' %>&
|
||||
&values_2=<% 0.upto 11 do |i| -%><%= @actions_done_last12months_hash[i]%>,<% end -%><%= @actions_done_last12months_hash[12]%>&
|
||||
&values_3=<%0.upto 11 do |i| -%><%=@sum_actions_created_last12months/12-%>,<%end-%><%=@sum_actions_created_last12months/12-%>&
|
||||
&values_4=<%0.upto 11 do |i| -%><%=@sum_actions_done_last12months/12-%>,<%end-%><%=@sum_actions_done_last12months/12-%>&
|
||||
|
|
|
|||
2
app/views/stats/actions_done_last_years.html.erb
Normal file
2
app/views/stats/actions_done_last_years.html.erb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<%= render :partial => 'chart', :locals => {:width => @chart_width, :height => @chart_height, :data => url_for(:action => :actions_done_lastyears_data)} -%>
|
||||
Click <%=link_to "here", {:controller => "stats", :action => "index"} %> to return to the statistics page.
|
||||
29
app/views/stats/actions_done_lastyears_data.html.erb
Normal file
29
app/views/stats/actions_done_lastyears_data.html.erb
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
&title=Actions in the last years,{font-size:16},&
|
||||
&y_legend=Number of actions,12,0x736AFF&
|
||||
&x_legend=Months ago,12,0x736AFF&
|
||||
&y_ticks=5,10,5&
|
||||
&filled_bar=50,0x9933CC,0x8010A0,Created,9&
|
||||
&filled_bar_2=50,0x0066CC,0x0066CC,Completed,9&
|
||||
&line_3=2,0x00FF00, Avg Created, 9&
|
||||
&line_4=2,0xFF0000, Avg Completed, 9&
|
||||
&line_5=2,0x007700, 3 Month Avg Created, 9&
|
||||
&line_6=2,0xAA0000, 3 Month Avg Completed, 9&
|
||||
&line_7=1,0xAA0000&
|
||||
&line_8=1,0x007700&
|
||||
&values=<% 0.upto @month_count-1 do |i| -%><%= @actions_created_last_months_hash[i]%>,<% end -%><%= @actions_created_last_months_hash[@month_count]%>&
|
||||
&values_2=<% 0.upto @month_count-1 do |i| -%><%= @actions_done_last_months_hash[i]%>,<% end -%><%= @actions_done_last_months_hash[@month_count]%>&
|
||||
&values_3=<%0.upto @month_count-1 do |i| -%><%=@sum_actions_created_last_months/@month_count-%>,<%end-%><%=@sum_actions_created_last_months/@month_count-%>&
|
||||
&values_4=<%0.upto @month_count-1 do |i| -%><%=@sum_actions_done_last_months/@month_count-%>,<%end-%><%=@sum_actions_done_last_months/@month_count-%>&
|
||||
&values_5=<%0.upto @month_count-1 do |i| -%><%=@actions_created_avg_last_months_hash[i]-%>,<%end-%><%=@actions_created_avg_last_months_hash[@month_count]-%>&
|
||||
&values_6=<%0.upto @month_count-1 do |i| -%><%=@actions_done_avg_last_months_hash[i]-%>,<%end-%><%=@actions_done_avg_last_months_hash[@month_count]-%>&
|
||||
&values_7=<%=@interpolated_actions_created_this_month%>,<%=@actions_done_avg_last_months_hash[1]%>&
|
||||
&values_8=<%=@interpolated_actions_done_this_month%>,<%=@actions_created_avg_last_months_hash[1]%>&
|
||||
&x_labels=<%0.upto @month_count-1 do |i| -%>
|
||||
<%= Date::MONTHNAMES[ (Time.now.mon - i -1 ) % 12 + 1 ] + " " + (Time.now - i.months).year.to_s -%>,
|
||||
<% end -%>
|
||||
<%= Date::MONTHNAMES[(Time.now.mon - @month_count -1 ) % 12 + 1] + " " + (Time.now - @month_count.months).year.to_s -%>&
|
||||
&y_min=0&
|
||||
<% # add one to @max for people who have no actions completed yet.
|
||||
# OpenFlashChart cannot handle y_max=0 -%>
|
||||
&y_max=<%=@max+@max/10+1-%>&
|
||||
&x_label_style=9,,2,&
|
||||
|
|
@ -1,30 +1,30 @@
|
|||
<div class="stats_content">
|
||||
<h2>Totals</h2>
|
||||
|
||||
<%= render :partial => 'totals' -%>
|
||||
|
||||
<% unless @actions.empty? -%>
|
||||
|
||||
<h2>Actions</h2>
|
||||
|
||||
<%= render :partial => 'actions' -%>
|
||||
|
||||
<h2>Contexts</h2>
|
||||
|
||||
<%= render :partial => 'contexts' -%>
|
||||
|
||||
<h2>Projects</h2>
|
||||
|
||||
<%= render :partial => 'projects' -%>
|
||||
|
||||
<h2>Tags</h2>
|
||||
|
||||
<%= render :partial => 'tags' -%>
|
||||
|
||||
<% else -%>
|
||||
|
||||
<p>More statistics will appear here once you have added some actions.</p>
|
||||
|
||||
<% end -%>
|
||||
|
||||
<h2>Totals</h2>
|
||||
|
||||
<%= render :partial => 'totals' -%>
|
||||
|
||||
<% unless @actions.empty? -%>
|
||||
|
||||
<h2>Actions</h2>
|
||||
|
||||
<%= render :partial => 'actions' -%>
|
||||
|
||||
<h2>Contexts</h2>
|
||||
|
||||
<%= render :partial => 'contexts' -%>
|
||||
|
||||
<h2>Projects</h2>
|
||||
|
||||
<%= render :partial => 'projects' -%>
|
||||
|
||||
<h2>Tags</h2>
|
||||
|
||||
<%= render :partial => 'tags' -%>
|
||||
|
||||
<% else -%>
|
||||
|
||||
<p>More statistics will appear here once you have added some actions.</p>
|
||||
|
||||
<% end -%>
|
||||
|
||||
</div>
|
||||
Loading…
Add table
Add a link
Reference in a new issue