Commit bee029e003d2bd0cb4165ddef438882a08444d3d

Authored by Victor Costa
1 parent 2e1af6c9

Add ranking in dashboard

lib/gamification_plugin/dashboard_helper.rb
... ... @@ -15,4 +15,14 @@ module GamificationPlugin::DashboardHelper
15 15 HashWithIndifferentAccess.new(Merit::PointRules::AVAILABLE_RULES)[point.score.category][:description]
16 16 end
17 17  
  18 + def ranking(from_date=nil, limit=10)
  19 + # FIXME move these queries to profile model
  20 + ranking = Profile.select('profiles.*, sum(num_points) as gamification_points, ROW_NUMBER() OVER(order by sum(num_points) DESC) as gamification_position').joins(:sash => {:scores => :score_points}).where(:type => 'Person').order('sum(num_points) DESC').group('profiles.id')
  21 + ranking = ranking.where("merit_score_points.created_at >= ?", from_date) if from_date.present?
  22 + current_person_ranking = Profile.from("(#{ranking.to_sql}) profiles").where('profiles.id' => current_person.id).first
  23 + ranking = ranking.limit(limit)
  24 +
  25 + render :partial => 'gamification/ranking', :locals => {:ranking => ranking, :current_person_ranking => current_person_ranking}
  26 + end
  27 +
18 28 end
... ...
views/gamification/_ranking.html.erb 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +<ul class="ranking">
  2 + <% if current_person_ranking.present? %>
  3 + <span><%= _('Your position: ') %></span>
  4 + <span><%= current_person_ranking.gamification_position %></span>
  5 + <% else %>
  6 + <%= _('Not scored yet') %>
  7 + <% end %>
  8 + <% ranking.each_with_index do |person, i| %>
  9 + <li class="ranking-item">
  10 + <span class="position">
  11 + <%= i+1 %>
  12 + </span>
  13 + <span class="name">
  14 + <%= person.name %>
  15 + </span>
  16 + <span class="score">
  17 + <%= person.gamification_points %>
  18 + </span>
  19 + </li>
  20 + <% end %>
  21 +</ul>
... ...
views/gamification/dashboard.html.erb
... ... @@ -50,6 +50,22 @@
50 50 <% end %>
51 51 </div>
52 52  
  53 +<div class="rankings">
  54 + <h3><%= _('Ranking') %></h3>
  55 + <div class="ranking week">
  56 + <h4><%= _('Week') %></h4>
  57 + <%= ranking(Time.zone.now.at_beginning_of_week) %>
  58 + </div>
  59 + <div class="ranking month">
  60 + <h4><%= _('Month') %></h4>
  61 + <%= ranking(Time.zone.now.at_beginning_of_month) %>
  62 + </div>
  63 + <div class="ranking all-time">
  64 + <h4><%= _('All Time') %></h4>
  65 + <%= ranking %>
  66 + </div>
  67 +</div>
  68 +
53 69 <script>
54 70 $('.gamification .badge-list').slick({
55 71 dots: true,
... ...