diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb
index 338f72cc4..a13bfd33d 100644
--- a/app/controllers/polls_controller.rb
+++ b/app/controllers/polls_controller.rb
@@ -25,6 +25,8 @@ class PollsController < ApplicationController
@commentable = @poll
@comment_tree = CommentTree.new(@commentable, params[:page], @current_order)
+
+ @stats = Poll::Stats.new(@poll).generate
end
end
diff --git a/app/models/abilities/everyone.rb b/app/models/abilities/everyone.rb
index 3004ca8ad..73f3220ab 100644
--- a/app/models/abilities/everyone.rb
+++ b/app/models/abilities/everyone.rb
@@ -23,6 +23,7 @@ module Abilities
can [:read], Legislation::Question
can [:create], Legislation::Answer
can [:search, :comments, :read, :create, :new_comment], Legislation::Annotation
+ can :read_stats, Poll
end
end
end
diff --git a/app/models/poll/stats.rb b/app/models/poll/stats.rb
new file mode 100644
index 000000000..1df281434
--- /dev/null
+++ b/app/models/poll/stats.rb
@@ -0,0 +1,125 @@
+class Poll
+ class Stats
+
+ def initialize(poll)
+ @poll = poll
+ end
+
+ def generate
+ stats = %w[total_participants total_participants_web total_web_valid total_web_white total_web_null
+ total_participants_booth total_booth_valid total_booth_white total_booth_null
+ total_valid_votes total_white_votes total_null_votes valid_percentage_web valid_percentage_booth
+ total_valid_percentage white_percentage_web white_percentage_booth total_white_percentage
+ null_percentage_web null_percentage_booth total_null_percentage total_participants_web_percentage
+ total_participants_booth_percentage]
+ stats.map { |stat_name| [stat_name.to_sym, send(stat_name)] }.to_h
+ end
+
+ private
+
+ def total_participants
+ total_participants_web + total_participants_booth
+ end
+
+ def total_participants_web
+ total_web_valid + total_web_white + total_web_null
+ end
+
+ def total_participants_web_percentage
+ (total_participants) == 0 ? 0 : total_participants_web * 100 / total_participants
+ end
+
+ def total_participants_booth
+ voters.where(origin: 'booth').count
+ end
+
+ def total_participants_booth_percentage
+ (total_participants) == 0 ? 0 : total_participants_booth * 100 / total_participants.to_f
+ end
+
+ def total_web_valid
+ voters.where(origin: 'web').count
+ end
+
+ def valid_percentage_web
+ (total_valid_votes) == 0 ? 0 : total_web_valid * 100 / total_valid_votes.to_f
+ end
+
+ def total_web_white
+ 0
+ end
+
+ def white_percentage_web
+ 0
+ end
+
+ def total_web_null
+ 0
+ end
+
+ def null_percentage_web
+ 0
+ end
+
+ def total_booth_valid
+ recounts.sum(:total_amount)
+ end
+
+ def valid_percentage_booth
+ (total_valid_votes) == 0 ? 0 : total_booth_valid * 100 / total_valid_votes.to_f
+ end
+
+ def total_booth_white
+ recounts.sum(:white_amount)
+ end
+
+ def white_percentage_booth
+ (total_white_votes) == 0 ? 0 : total_booth_white * 100 / total_white_votes.to_f
+ end
+
+ def total_booth_null
+ recounts.sum(:null_amount)
+ end
+
+ def null_percentage_booth
+ (total_null_votes == 0) ? 0 : total_booth_null * 100 / total_null_votes.to_f
+ end
+
+ def total_valid_votes
+ total_web_valid + total_booth_valid
+ end
+
+ def total_valid_percentage
+ (total_participants) == 0 ? 0 : total_valid_votes * 100 / total_participants.to_f
+ end
+
+ def total_white_votes
+ total_web_white + total_booth_white
+ end
+
+ def total_white_percentage
+ (total_participants) == 0 ? 0 : total_white_votes * 100 / total_participants.to_f
+ end
+
+ def total_null_votes
+ total_web_null + total_booth_null
+ end
+
+ def total_null_percentage
+ (total_participants) == 0 ? 0 : total_null_votes * 100 / total_participants.to_f
+ end
+
+ def voters
+ @poll.voters
+ end
+
+ def recounts
+ @poll.recounts
+ end
+
+ def stats_cache(key, &block)
+ Rails.cache.fetch("polls_stats/#{@poll.id}/#{key}/v7", &block)
+ end
+
+ end
+end
\ No newline at end of file
diff --git a/app/views/polls/_results_subnavigation.html.erb b/app/views/polls/_results_subnavigation.html.erb
new file mode 100644
index 000000000..9c2a7e8b0
--- /dev/null
+++ b/app/views/polls/_results_subnavigation.html.erb
@@ -0,0 +1,20 @@
+
+
+
+
+ <%= link_to "#tab-stats" do %>
+
+ <%= t("polls.show.stats_menu") %>
+
+ <% end %>
+
+
+ <%= link_to "#tab-information" do %>
+
+ <%= t("polls.show.info_menu") %>
+
+ <% end %>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/polls/_show.html.erb b/app/views/polls/_show.html.erb
new file mode 100644
index 000000000..ee75ea5e3
--- /dev/null
+++ b/app/views/polls/_show.html.erb
@@ -0,0 +1,126 @@
+
\ No newline at end of file
diff --git a/app/views/polls/show.html.erb b/app/views/polls/show.html.erb
index f2ad579d4..880d0d421 100644
--- a/app/views/polls/show.html.erb
+++ b/app/views/polls/show.html.erb
@@ -28,131 +28,17 @@
+
+