Files
grecia/app/controllers/concerns/dashboard/group_supports.rb
Juan Salvador Pérez García 0bd381aa5e Enhancements and bugfixing
FIxed issue in last commit: supports controller were not correctly
filling the holes without data.

Fixed duplication in supports and successful supports controller using a
concer.

Successfull supports controller will fill the holes without data in the
same way that supports controller does.
2018-09-14 11:30:59 +02:00

57 lines
1.5 KiB
Ruby

module Dashboard::GroupSupports
extend ActiveSupport::Concern
included do
def grouped_supports(attribute)
supports.group_by { |v| grouping_key_for(v[attribute].to_date) }
end
def grouping_key_for(date)
return "#{date.cweek}/#{date.year}" if params[:group_by] == 'week'
return "#{date.year}-#{date.month}" if params[:group_by] == 'month'
date
end
def accumulate_supports(grouped_votes)
grouped_votes.each do |group, votes|
grouped_votes[group] = votes.inject(0) { |sum, vote| sum + vote.vote_weight }
end
accumulated = 0
grouped_votes.each do |k, v|
accumulated += v
grouped_votes[k] = accumulated
end
end
def fill_holes(grouped_votes)
(start_date(proposal.published_at.to_date)..end_date).each do |date|
missing_key = grouping_key_for(date)
next if grouped_votes.key? missing_key
previous_key = previous_key_for(date)
previous_value = if grouped_votes.key? previous_key
grouped_votes[previous_key]
else
0
end
grouped_votes[missing_key] = previous_value
end
grouped_votes
end
def previous_key_for(date)
grouping_key_for(date - interval)
end
def interval
return 1.week if params[:group_by] == 'week'
return 1.month if params[:group_by] == 'month'
1.day
end
end
end